Kubernetes實戰總結 - 部署Calico網絡


什么是Calico?

Calico是針對容器,虛擬機和基於主機的本機工作負載的開源網絡和網絡安全解決方案。

Calico支持廣泛的平台,包括Kubernetes,OpenShift,Docker EE,OpenStack和裸機服務。

Calico將靈活的網絡功能與無處不在的安全性實施相結合,以提供具有本地Linux內核性能和真正的雲原生可擴展性的解決方案。

Calico為開發人員和集群運營商提供了一致的經驗和功能集,無論是在公共雲中還是本地運行,在單個節點上還是在數千個節點集群中運行。

 


兩種網絡模式

IPIP網絡

流量:tunlo設備封裝數據,形成隧道,承載流量。

適用網絡類型:適用於互相訪問的pod不在同一個網段中,跨網段訪問的場景。外層封裝的ip能夠解決跨網段的路由問題。

效率:流量需要tunl0設備封裝,效率略低。

 

BGP網絡

流量:使用路由信息導向流量

適用網絡類型:適用於互相訪問的pod在同一個網段,適用於大型網絡。

效率:原生hostGW,效率高。

 

更多參考>>> https://www.cnblogs.com/goldsunshine/p/10701242.html

 


部署安裝

1)確保Calico可以在主機上進行管理calitunl接口,如果主機上存在NetworkManage,請配置NetworkManager。

NetworkManager會為默認網絡名稱空間中的接口操縱路由表,在該默認名稱空間中,固定了Calico veth對以連接到容器,這可能會干擾Calico代理正確路由的能力。

在以下位置創建以下配置文件,以防止NetworkManager干擾接口:

vim /etc/NetworkManager/conf.d/calico.conf
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*

 

2)首先下載calica.yaml部署文件,然后更改 CALICO_IPV4POOL_IPIP 為 Never 使用 BGP 模式,

另外增加 IP_AUTODETECTION_METHOD 為 interface 使用匹配模式,默認是first-found模式,在復雜網絡環境下還是有出錯的可能。

wget https://docs.projectcalico.org/manifests/calico.yaml

vim calico.yaml

# Cluster type to identify the deployment type
- name: CLUSTER_TYPE
  value: "k8s,bgp"
# IP automatic detection
- name: IP_AUTODETECTION_METHOD
  value: "interface=en.*"
# Auto-detect the BGP IP address.
- name: IP
  value: "autodetect"
# Enable IPIP
- name: CALICO_IPV4POOL_IPIP
  value: "Never"

 

你會看到以下輸出:

configmap "calico-config" created
customresourcedefinition.apiextensions.k8s.io "felixconfigurations.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "ipamblocks.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "blockaffinities.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "ipamhandles.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "bgppeers.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "bgpconfigurations.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "ippools.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "hostendpoints.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "clusterinformations.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "globalnetworkpolicies.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "globalnetworksets.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "networksets.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "networkpolicies.crd.projectcalico.org" created
clusterrole.rbac.authorization.k8s.io "calico-kube-controllers" created
clusterrolebinding.rbac.authorization.k8s.io "calico-kube-controllers" created
clusterrole.rbac.authorization.k8s.io "calico-node" created
clusterrolebinding.rbac.authorization.k8s.io "calico-node" created
daemonset.extensions "calico-node" created
serviceaccount "calico-node" created
deployment.extensions "calico-kube-controllers" created
serviceaccount "calico-kube-controllers" created

 

3)使用以下命令確認所有Pod正在運行。

watch kubectl get pods --all-namespaces

等到每個calico全部Running即可。

NAMESPACE    NAME                                       READY  STATUS   RESTARTS  AGE
kube-system  calico-kube-controllers-6ff88bf6d4-tgtzb   1/1    Running  0         2m45s
kube-system  calico-node-24h85                          1/1    Running  0         2m43s
kube-system  calico-node-45k48                          1/1    Running  0         2m43s
kube-system  coredns-846jhw23g9-9af73                   1/1    Running  0         4m5s
kube-system  coredns-846jhw23g9-hmswk                   1/1    Running  0         4m5s
kube-system  etcd-jbaker-1                              1/1    Running  0         6m22s
kube-system  kube-apiserver-jbaker-1                    1/1    Running  0         6m12s
kube-system  kube-controller-manager-jbaker-1           1/1    Running  0         6m16s
kube-system  kube-proxy-8fzp2                           1/1    Running  0         5m16s
kube-system  kube-scheduler-jbaker-1                    1/1    Running  0         5m41s

按CTRL + C退出watch。

 

4)如果是切換網絡插件,需要清理每個節點上之前殘留的路由表和網橋,以避免和calico沖突。

ip link
ip link delete flannel.1
ip route
ip route delete 10.244.0.0/24 via 10.4.7.21 dev eth0 

卸載其他網路插件之后,最好重啟所有節點,這樣系統會重置網卡規則,舊規則自動就會被清理了。 

 


故障排除和診斷

Errors when running sudo calicoctl

Error: calico/node is not ready: BIRD is not ready: BGP not established with 10.0.0.1

Linux conntrack table is out of space

 

 

作者:Leozhanggg

出處:https://www.cnblogs.com/leozhanggg/p/12930006.html

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

 


免責聲明!

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



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