在多个Node组成的Kubernetes集群内,跨主机的容器间网络互通是Kubernetes集群能够正常工作的前提条件。
kubernetes本身并不会对跨主机容器网络进行设置,而这需要额外的工具实现。除了GCE平台提供的网络设置,一些开源工具包括
flannel、Open vSwitch、Weave、Calico等能够实现跨主机的容器间网络互通。
flannel
flannel采用覆盖网络(Overlay Network)模型完成对网络构建。
flannel使用etcd作为数据库,因此首先需要安装好etcd。
然后,在每台Node安装flannel,将下载的flannel压缩包解压,并将二进制文件flanneld和mk-docker-opts.sh复制到/usr/bin
配置/usr/lib/systemd/system/flanneld.service
[Unit]
Description=flanneld overlay address etcd agent
After=network.target
Before=docker.service
[Service]
Type=notify
EnvrionmentFile=/etc/sysconfig/flanneld
ExecStart=/usr/bin/flanneld -etcd-endpoints=${FLANNEL_ETCD} $FLANNEL_OPTIONS
[Install]
RequiredBy=docker.service
WantedBy=multi-user.target
编辑配置文件/etc/sysconfig/flannel
FLANNEL_ETCD="http://192.168.18.3:2379"
FLANNEL_ETCD_KEY="/coreos.com/network"
在启动flanneld服务前,需要在etcd中添加一条网络配置记录
etcdctl set /coreos.com/network/config '{ "Network":"10.1.0.0/16" }'
由于flannel将覆盖docker0网桥,因此,如果Docker服务启动,则停止Docker服务。
启动flannel
systemctl restart flanneld
设置docker0网桥的IP地址
mk-docker-opts.sh -i
source /run/flannel/subnet.env
ifconfig docker0 ${FLANNEL_SUBNET}
确认网络接口docker0的IP地址属于flannel0的子网。
重新启动Docker服务
systemctl restart docker
使用ping命令验证各Node上docker0之间的相互访问,或者是在etcd中查看flannel设置的flannel0地址与物理机IP地址的对应规则
etcdctl ls /coreos.com/network/subnets