问题

k8s多个node上的docker ip问题

  • 不同node上的docker容器ip互不通
  • 不同node上会存在重复的ip容器

即问题在于解决不同node上的pod之间通信 [见权威指南 333页]

解决方案

直接路由~ 未测试通过

各节点添加其它所有节点的路由

  • route add -net 172.17.0.0 netmask 255.255.255.0 gw 10.254.0.67

172.17.0.0为另一node的docker ip网段,10.254.0.67为该node节点ip

flannel

  • 安装etcd
  • node节点上安装flannel
  • 配置flannel
    • 编辑systemctl文件
    vi /usr/lib/systemd/system/flanneld.service
    
    [Unit]
    Description=flanneld overlay address etcd agent
    After=network.target
    Before=docker.service
    
    [Service]
    Type=notify
    EnvironmentFile=/etc/sysconfig/flanneld
    ExecStart=/usr/bin/flanneld -etcd-endpoints=${FLANNEL_ETCD} $FLANNEL_OPTIONS
    
    [Install]
    RequiredBy=docker.service
    WantedBy=multi-user.target
    
    
    • 修改etcd启动参数
    vi /usr/lib/systemd/system/etcd.service
    ExecStart=/usr/bin/etcd   --listen-client-urls=http://0.0.0.0:2379 --advertise-client-urls=http://0.0.0.0:2379 --listen-peer-urls=http://0.0.0.0:2380
    或:
    ExecStart=/usr/bin/etcd   --listen-client-urls http://0.0.0.0:2379   --advertise-client-urls http://0.0.0.0:2379
    
    • 编辑文件/etc/sysconfig/flannel,设置etcd的url地址
    FLANNEL_ETCD="http://10.254.0.56:2379"
    FLANNEL_ETCD_KEY="/coreos.com/network"
    
    • 在启动flanneld服务前,在etcd中添加一条网络配置记录,该配置用于flanneld分配给每个docker的虚拟ip地址段
    etcdctl set /coreos.com/network/config '{"Network":"172.17.0.0/16"}'
    

    在操作前,需关闭docker

  • 启动flanneld服务
systemctl restart flanneld
systemctl enable flanneld
  • 设置docker0网桥IP地址
* mk-docker-opts.sh -i
* source /run/flannel/subnet.env
* ifconfig docker0 ${FLANNEL_SUBNET}

完成后确认网络接口docker0的ip地址属于flannel0的子网
ip addr

  • 重启docker 服务
systemctl restart docker
  • 重启kubelet服务