部署思路是: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沒法通訊等問題。