1. 程式人生 > >內網環境部署kubernetes應注意的問題

內網環境部署kubernetes應注意的問題

部署思路是:master機器可以訪問公網,其它機器都在內網,因此master機器有兩張網絡卡,其它機器與master機器的內網網絡卡相聯。

 

一、網路配置

master節點的網路配置

# 機器 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網路時會報錯。

 

二、設定kubeadm init配置檔案(kubeadm.yaml)的引數

  kubeadm init操作會自動發現master節點的網絡卡裝置,並且將其設定成預設閘道器。如果想使用另外的網絡卡裝置,那麼需要在執行kubeadm init命令之前修改配置檔案,修改api.advertiseAddress和api.bindPort兩個引數。

api.advertiseAddress=25.10.10.0
api.bindPort=6443

  這兩個引數決定kubeadm join命令中的IP:port,api.advertiseAddress的ip地址必須設定為master節點的內網地址,不然node節點在執行kubeadm join命令的時候,會報錯。

 

三、部署calico元件的配置

1、啟/禁用 ip-ip

  目前官方提供的模板裡,預設打開了ip-ip功能,該功能會在node上建立一個裝置:tunl0,容器的網路資料會經過該裝置被封裝一個ip頭再轉發。這裡,calico.yaml中通過修改calico-node的環境變數:CALICO_IPV4POOL_IPIP來實現ipip功能的開關:預設是Always,表示開啟;Off表示關閉ipip; cross-subnet表示開啟並支援跨子網,目前用不到這種型別。

- name: CALICO_IPV4POOL_IPIP
  value: "always"

2、部署:

  注意:部署前,要配置一個引數,讓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無法通訊等問題。