部署思路是:master机器能够访问公网,其它机器都在内网,所以master机器有两张网卡,其它机器与master机器的内网网卡相联。node
1、网络配置centos
master节点的网络配置api
# 机器 k8s-master, 此台机器除了做为 master 自己,还承担网关的功能 # 访问公网的网卡为centos系统中的eth1 # 内网通讯的网卡为Centos系统中的eth0 # 因为在 k8s-master 机器中, eth0为链接其它机器的内网网卡,因此这张网卡须要标为 ZONE=trusted,确保防火墙不干扰内网数据 # eth1网卡配置 TYPE=Ethernet DEVICE=eth1 IPADDR=192.168.206.30 NETMASK=255.255.255.0 GATEWAY=192.168.206.1 ONBOOT=yes BOOTPROTO=static NM_CONTROLLED=yes # eth0网卡配置 TYPE=Ethernet DEVICE=eth0 IPADDR=25.10.10.0 NETMASK=255.255.0.0 ZONE=trusted ONBOOT=yes BOOTPROTO=static NM_CONTROLLED=yes
node节点的网络配置网络
# 机器 k8s-node1,此台机器承担kubernetes节点服务,仅设置一张内网网卡eth0,GATEWAY设置为master节点的内网IP地址。 # eth0网卡配置 TYPE=Ethernet DEVICE=eth0 IPADDR=25.10.10.1 NETMASK=255.255.0.0 GATEWAY=25.10.10.0 ONBOOT=yes BOOTPROTO=static NM_CONTROLLED=yes
注意:在配置node节点的网卡时,必定要把网关配置为master节点的内网IP地址,如上标红的部分,不然在calico组件构建kubernetes网络时会报错。spa
2、设置kubeadm init配置文件(kubeadm.yaml)的参数code
kubeadm init操做会自动发现master节点的网卡设备,而且将其设置成默认网关。若是想使用另外的网卡设备,那么须要在执行kubeadm init命令以前修改配置文件,修改api.advertiseAddress和api.bindPort两个参数。blog
api.advertiseAddress=25.10.10.0 api.bindPort=6443
这两个参数决定kubeadm join命令中的IP:port,api.advertiseAddress的ip地址必须设置为master节点的内网地址,否则node节点在执行kubeadm join命令的时候,会报错。ip
3、部署calico组件的配置部署
一、启/禁用 ip-ipkubernetes
目前官方提供的模板里,默认打开了ip-ip功能,该功能会在node上建立一个设备:tunl0,容器的网络数据会通过该设备被封装一个ip头再转发。这里,calico.yaml中经过修改calico-node的环境变量:CALICO_IPV4POOL_IPIP来实现ipip功能的开关:默认是Always,表示开启;Off表示关闭ipip; cross-subnet表示开启并支持跨子网,目前用不到这种类型。
- name: CALICO_IPV4POOL_IPIP value: "always"
二、部署:
注意:部署前,要配置一个参数,让calico-node组件可以识别node的IP,node上可能有多块网卡,官方提供的yaml文件中,ip识别策略(IPDETECTMETHOD)没有配置,即默认为first-found,这会致使一个网络异常的ip做为nodeIP被注册,从而影响node-to-node mesh。咱们能够修改为can-reach的策略,尝试链接某一个Ready的node的IP,以此选择出正确的IP。
- name: IP_AUTODETECTION_METHOD value: can-reach=25.10.10.0 - name: IP value: "autodetect"
在官方提供的yaml文件中,添加如上两个参数设置,第一个参数必定要设置为master节点的内网IP,不然会致使建立的tunl0没法连通,从而致使跨节点的POD没法通讯等问题。