kubernetes calico-network


要求

1.已存在的k8s集群版本大於v1.1,想要使用NetworkPolicy,需要大於v1.3.0

2.可以被所有節點訪問的etcd集群(可以和k8s共享etcd集群,但是最好建立一個獨立的集群)

 

calico組件

整合ks8/calico一共有三個組件:

1.每個節點運行一個calico/node容器;包含了calico路由必須的bgp客戶端

2.calico-cni網絡插件的二進制文件(這是兩個二進制可執行文件和配置文件的組合);直接與kubelet集成,運行在每節點從而發現被創建的容器,添加容器到calico網絡

3.如果想要使用NetworkPolicy,需要安裝Calico policy controller;實現了NetworkPolicy.

 

安裝calico組件

兩種方式安裝:

1.手動安裝

2.kubernetes-hosted安裝(1.4以上版本)

手動安裝

1.運行 calico/node 並且配置節點

master節點和每個node節點需要calico/node容器,每個節點也記錄在calico的數據存儲中(etcd)

可以使用calicoctl命令完成

[plain]  view plain  copy 
  1. # Download and install `calicoctl`  
  2. wget https://github.com/projectcalico/calico-containers/releases/download/v0.22.0/calicoctl   
  3. sudo chmod +x calicoctl  
  4.   
  5. # Run the calico/node container  
  6. sudo ETCD_ENDPOINTS=http://<ETCD_IP>:<ETCD_PORT> ./calicoctl node  

查看calicoctl_node文檔獲取更多信息 

systemd單元文件示例(calico-node.service)

如果使用systemd作為初始化系統,接下來的服務文件可以被使用:

[plain]  view plain  copy 
  1. [Unit]  
  2. Description=calicoctl node  
  3. After=docker.service  
  4. Requires=docker.service  
  5.   
  6. [Service]  
  7. User=root  
  8. Environment=ETCD_ENDPOINTS=http://<ETCD_IP>:<ETCD_PORT>  
  9. PermissionsStartOnly=true  
  10. ExecStartPre=/usr/bin/wget -N -P /opt/bin https://github.com/projectcalico/calico-containers/releases/download/v0.22.0/calicoctl  
  11. ExecStartPre=/usr/bin/chmod +x /opt/bin/calicoctl  
  12. ExecStart=/opt/bin/calicoctl node --detach=false  
  13. Restart=always  
  14. RestartSec=10  
  15.   
  16. [Install]  
  17. WantedBy=multi-user.target  

替換<ETCD_IP>:<ETCD_PORT>為你自己的配置

2.下載配置你的calico cni插件

k8s kubelet組件調用calico和calico-ipam插件

下載二進制文件,確保可被執行

 

[plain]  view plain  copy 
  1. wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico  
  2. wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico-ipam  
  3. chmod +x /opt/cni/bin/calico /opt/cni/bin/calico-ipam  


推薦作為kubelet工作過程的一部分

 

calico cni插件需要一個標准的cni配置文件,policy部分只有當你為networkpolicy部署calico/kube-policy-controller時被需要

 

[plain]  view plain  copy 
  1. mkdir -p /etc/cni/net.d  
  2. cat >/etc/cni/net.d/10-calico.conf <<EOF  
  3. {  
  4.     "name": "calico-k8s-network",  
  5.     "type": "calico",  
  6.     "etcd_endpoints": "http://<ETCD_IP>:<ETCD_PORT>",  
  7.     "log_level": "info",  
  8.     "ipam": {  
  9.         "type": "calico-ipam"  
  10.     },  
  11.     "policy": {  
  12.         "type": "k8s"  
  13.     }  
  14. }  
  15. EOF  

替換<ETCD_IP>:<ETCD_PORT>為你自己的配置 

 

查看配置指南獲取更多關於calico cni的信息

3.部署calico網絡控制器

calico/kube-policy-controller實現了k8s networkpolicy api通過k8s api監聽pod,namespace,networkpolicy事件從而做出對應的時間相應,通過rs運行為一個單獨的pod
安裝policy controller:

下載policy controlly mainifest

修改<ETCD_ENDPOINTS>配置項

安裝kubectl

 

[plain]  view plain  copy 
  1. $ kubectl create -f policy-controller.yaml  

一段時間后,你應該可以看到policy controller已經處於運行狀態 

 

 

[plain]  view plain  copy 
  1. $ kubectl get pods --namespace=kube-system  
  2. NAME                                     READY     STATUS    RESTARTS   AGE  
  3. calico-policy-controller                 2/2       Running   0          1m  


kubernetes-hosted安裝


 

使用k8s安裝calico的方式只使用於v1.4.0以上版本,目前處於試驗階段

在使用k8s安裝calico的方式之前,你必須有一個標准的使用cni網絡的k8s集群,有很多方式實現,不過在這里我們不會都覆蓋,必須滿足安裝calico需要的配置

下載calico self-hosted mainifest文件,calico.yaml

編輯configmap用於配置calico的deployment,然后通過k8s安裝mainifest

 

[plain]  view plain  copy 
  1. kubectl create -f calico.yaml  

在kube-system namespace中你可以看到calico服務啟動
查看 self-hosted文檔獲取更多信息

 

配置k8s

1.配置kubelet

需要配置kubelet 讓pod啟動時使用calico網絡插件,kubelet可以配置使用calico在啟動時配置參數:

 

[plain]  view plain  copy 
  1. --network-plugin=cni  
  2. --network-plugin-dir=/etc/cni/net.d  


查看kubelet文檔獲取更多信息

 

kubelet.service單元配置文件示例:

 

[plain]  view plain  copy 
  1. [Unit]  
  2. Description=Kubernetes Kubelet  
  3. Documentation=https://github.com/kubernetes/kubernetes  
  4. After=calico-node.service  
  5. Requires=calico-node.service  
  6.   
  7. [Service]  
  8. ExecStartPre=/usr/bin/wget -N -P /opt/bin https://storage.googleapis.com/kubernetes-release/release/v1.4.0/bin/linux/amd64/kubelet  
  9. ExecStartPre=/usr/bin/chmod +x /opt/bin/kubelet  
  10. ExecStartPre=/usr/bin/wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico  
  11. ExecStartPre=/usr/bin/chmod +x /opt/cni/bin/calico  
  12. ExecStartPre=/usr/bin/wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico-ipam  
  13. ExecStartPre=/usr/bin/chmod +x /opt/cni/bin/calico-ipam  
  14. ExecStart=/opt/bin/kubelet \  
  15. --address=0.0.0.0 \  
  16. --allow-privileged=true \  
  17. --cluster-dns=10.100.0.10 \  
  18. --cluster-domain=cluster.local \  
  19. --config=/etc/kubernetes/manifests \  
  20. --hostname-override=$private_ipv4 \  
  21. --api-servers=http://<API SERVER IP>:8080 \  
  22. --network-plugin-dir=/etc/cni/net.d \  
  23. --network-plugin=cni \  
  24. --logtostderr=true  
  25. Restart=always  
  26. RestartSec=10  
  27.   
  28. [Install]  
  29. WantedBy=multi-user.target  

確保kubelet和calico插件二進制文件存在

 

 

配置kube-proxy

為了使calico policy與k8s結合,kube-peoxy成員必須配置脫離自身綁定網卡源地址(nat轉發),在v1.1.0被支持,v1.2.0作為默認啟動模式

強烈建議使用最新文檔版本,若為舊版本有兩種方式啟用:

1.--proxy-mode=iptables

2.annotations api:net.experimental.kubernetes.io/proxy-mode啟動iptables

查看kube-proxy文檔獲取更多信息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM