在多个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

results matching ""

    No results matching ""