为什么要使用flannel网络??
目前有3个node节点(master、node1、node2),当大规模使用容奇的时候容器和容器之间是需要相互通信的,那么这时候就需要实现跨docker宿主机容器之间的通信,这时需要一个网络插件来实现宿主机与容器之间的相互通信
flannel网络的配置
所有节点安装flannel网络插件
[root@k8s-master /]# yum install flannel -y
[root@k8s-node1 /]# yum install flannel -y
[root@k8s-node2 /]# yum install flannel -y
master配置flannel配置文件
[root@k8s-master /]# vim /etc/sysconfig/flanneld
配置etcd地址,下面etcd key使用默认的路径
设置etcd config key
启动flannel网络
当flannel网络开启之后会多一块网卡
地址为172.16.59.0,59.0是随机分配的,172.16是在etcd config key自定的
重启docker服务
重启完成之后docker和flannel网络是在同一个网段
node1节点配置flannel网络
编辑flannel配置文件
[root@k8s-node1 kubernetes]# vim /etc/sysconfig/flanneld
[root@k8s-node1 kubernetes]#
启动flannel服务
node1重启docker后docker网段与flannel在一个网段中
node2节点操作同node1
测试容器之间是否能正常通信
master上docker0的 IP为172.16.59.1
node2上的docker0 IP为172.16.17.1
可以正常ping通
测试跨宿主机之间容器之间的互通性
三个节点运行busybox容器进行互通测试
[root@k8s-master /]# docker run -it busybox
[root@k8s-node1 /]# docker run -it busybox
[root@k8s-node2 /]# docker run -it busybox
将iptables 的FORWARD改为ACCEPT
[root@k8s-master /]# iptables -P FORWARD ACCEPT
[root@k8s-node1 /]# iptables -P FORWARD ACCEPT
[root@k8s-node2 /]# iptables -P FORWARD ACCEPT
此时发现不同宿主机之间的容器之间可以相互ping通
但是,每次开启虚拟机都需要执行iptables -P FORWARD ACCEPT命令才能实现跨宿主机之间的容器互通,此种方法太过于繁琐
将策略加入到docker的配置文件中,实现自动启动
查看docker的自动启动文件的配置目录
如图所示docker的启动文件在/usr/lib/systemd/system/docker.service中
查看iptables命令的路径
[root@k8s-master ~]# which iptables
/usr/sbin/iptables
编辑配置文件
[root@k8s-master ~]# vim /usr/lib/systemd/system/docker.service
编写配置规则
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT