搭建Kubernetes網路基石:CNI的安裝與比較

更新於 2024/12/13閱讀時間約 17 分鐘

本文將說明在安裝完Kubernetes Cluster之後,接下來必須要進行的CNI Plugin安裝建置方式,同時也透過這篇文章進行基本的CNI說明與比較。

raw-image

1. Container Network Interface (CNI)

首先我們要先知道什麼是CNI (Container Network Interface),CNI是CNCF的專案項目,包含了一些規範與相關的函式庫,專注在容器的網路連結,並在容器被刪除之後的資源分配,而Kubernetes會使用CNI來做為網路提供商與Kubernetes Pod網路之前的溝通窗口。

raw-image

CNI的解決方案很多,各種CNI都有各自的特色與最佳應用場景,同時也是有各自的缺點,在規劃的時候記得針對要選用的CNI的相關內容要花點時間了解。但一座K8S並不是只能使用一個CNI,有時候因為環境的高度複雜還可以同時搭配多種CNI 聯合使用,只是對於維運來說難度就會大大提高。



2. Calico 部署

本文選擇使用Calico來進行CNI的解決方案,原因是Calico基本上在性能、彈性有很多好評,並且除了提供主機與Pod之間的網路連接,還加入了網路安全與管理。此外Calico還可以與Istio整合,使用者可以透過規則的設定,描述Pod應該如何發送與接受流量來提高安全性與控制網路環境。

以下就是基本的部署Calico的流程:

※ 確認Firewall port requirements:

https://docs.tigera.io/calico/latest/getting-started/kubernetes/requirements#network-requirements

※ Method 1 : Operator based

#---------------------------------------------------------------
# Install the Tigera Calico operator
#---------------------------------------------------------------
[master01]# curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml -o tigera-operator.yaml
[master01]# kubectl create -f tigera-operator.yaml
#---------------------------------------------------------------
# Configuring custom resource
#---------------------------------------------------------------
[master01]# curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml -o custom-resources.yaml
[master01]# vim custom-resources.yaml
=> change the default IP pool CIDR (if needed)
[master01]# kubectl create -f custom-resources.yaml
[master01]# kubectl get pods -n calico-system
raw-image

※ Method 2 : Manifest based

#------------------------------------------------------
# S1. 使用manifest安裝 (master01)
#------------------------------------------------------
[master]# wget https://docs.projectcalico.org/manifests/calico.yaml
[master]# vim calico.yaml (確認podnetwork)
# no effect. This should fall within `--cluster-cidr`.
- name: CALICO_IPV4POOL_CIDR
value: "192.168.0.0/16"

[master]# kubectl create -f calico.yaml
[master]# watch kubectl get pods -n kube-systems
raw-image

以下是安裝時,碰到的問題與分析解決方式:

※ 問題 : calico-node pod not ready

※分析:

(1) 執行 “kubectl describe pod calico-node-ngznh -n kube-system” 出現:以下是安裝時,碰到的問題與分析解決方式:

kubelet  (combined from similar events): Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/calico/bird.ctl: connect: connection refused

(2) 經搜尋文章發現可能是預設網卡的問題,透過以下方式確認:

[master]# kubectl get ds -A
[master]# kubectl get ds -n kube-system calico-node -oyaml | grep -i ip_auto -C 3
[master]# kubectl exec -ti <pod_name> -n calico-system -- bash
#/ cat /etc/calico/confd/config/bird.cfg
=> 確認router id是誰
=> 對應實體的interface
(Calico的BGP會使用實體網卡來做virtual router)

※解法:

(1) 確認節點的Firewall port是否有打開 (別懷疑,我真的找到沒開好的節點)

(2) 強迫指定網卡


[master]# kubectl delete -f calico.yaml
[master]# vim calico.yaml
>> search
- name: IP
value: "autodetect"
>> add
- name: IP_AUTODETECTION_METHOD
value: "interface=ens192" (多網卡用","分隔)

[master]# kubectl create -f calico.yaml
[master]# kubectl get pods -n kube-system

※ first-found會去找主機的第一張網卡,但預設是找"eth*",所以VM的網卡為ens就會失敗
raw-image
raw-image

※ 測試驗證

[master]# kubectl create -f nginx-quic.yaml 
[master]# kubectl get deployment -o wide -n nginx-quic
[master]# kubectl get service -o wide -n nginx-quic
[master]# kubectl get pods -o wide -n nginx-quic
raw-image
[master]# kubectl exec -it <pod> -- bash
# ping 192.168.50.66
64 bytes from 192.168.165.2: icmp_seq=1 ttl=62 time=0.652 ms
64 bytes from 192.168.165.2: icmp_seq=2 ttl=62 time=0.475 ms
64 bytes from 192.168.165.2: icmp_seq=3 ttl=62 time=0.465 ms
# curl 192.168.50.66:80
192.168.35.4:51610

[master]# curl worker02.test.example.poc:30088
[master]# curl worker03.test.example.poc:30088
[master]# curl worker01.test.example.poc:30088
raw-image

3. Calicoctl基本操作

Calico 也有自已的CLI 工具叫作Calicoctl,類似etcdctl,可以透過這個工具直接操作Calico的設定與相關功能。為什麼說與etcdctl類似呢,因為其原理也是透過讀寫Calico key/value datastore來進行檢視與操作。

calicoctl | Calico Documentation (tigera.io)

安裝方式也很簡單,下載Binary檔案即可。

[master]# wget https://github.com/projectcalico/calico/releases/download/v3.26.3/calicoctl-linux-amd64 -o calicoctl
[master]# chmod +x calicoctl ; cp calicoctl /usr/local/bin/
[master]# calicoctl version

Client Version: v3.26.3
Git commit: bdb7878af
Cluster Version: v3.26.1
Cluster Type: k8s,bgp,kubeadm,kdd

[master]# mkdir -p /data/calico
[master]# cd /data/calico ; vim calicoctl.cfg
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
datastoreType: 'kubernetes'
kubeconfig: '/etc/kubernetes/admin.conf'

接下來就是基本操作,其他操作方式可以到官網查尋:

(1) 確認節點狀態
[master]# calicoctl node status

(2) 取得IP Pool
[master]# calicoctl get ipPool --allow-version-mismatch
raw-image
(3) 定義IP Pool
[master]# vim pool.yaml
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: pool1
spec:
cidr: 10.245.1.0/24
ipipMode: Never
natOutgoing: true
disabled: false
nodeSelector: all()

[master]# calicoctl create -f pool.yaml
[master]# calicoctl get ipPool --allow-version-mismatch
(4) 用kubectl創建
[master]# kubectl api-versions| grep calico
[master]# kubectl api-resources -o wide | grep calico | grep IPPool
[master]# vim pool.yaml
apiVersion: crd.projectcalico.org/v1 <<<
kind: IPPool
metadata:
name: pool3
spec:
cidr: 10.245.3.0/24
ipipMode: Never
natOutgoing: true
disabled: false
nodeSelector: all()

[master]# kubectl create -f pool.yaml
[master]# calicoctl get ipPool --allow-version-mismatch
raw-image
(5) NetworkPolicy (allow 6379)
[master]# vim networkpolicy-test.yaml
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: allow-tcp-6379
namespace: production
spec:
selector: role == 'database'
types:
- Ingress
- Egress
ingress:
- action: Allow
metadata:
annotations:
from: frontend
to: database
protocol: TCP
source:
selector: role == 'frontend'
destination:
ports:
- 6379
egress:
- action: Allow

[master]# calicoctl create -f networkpolicy-test.yaml
[master]# calicoctl get networkPolicy -o yaml

4. CNI 解決方案的基本比較

以下列出Calico與Flannel的一些基本比較,這二個方案似乎也是比較多人選擇的CNI,故他們之間的比較應該是比較具有參考價值。

(1) Underlay的支援:

  • Calico : BGP
  • Flannel: X

(2) Overlay的支援:

  • Calico : vxlan / ipip
  • Flannel : vxlan

(3) 動態QoS :

  • Calico : X
  • Flannel : X

(4) 網路效能耗損:

  • Calico : Overlay 20%, Underlay 3%
  • Flannel : Overlay 20%

(5) 網路安全策略:

  • Calico : NetworkPolicy
  • Flannel : X

(6) 固定IP/MAC :

  • Calico : 只支援固定IP
  • Flannel : X

5. 結論

看不完的知識

看不完的知識

以上就是針對Calico的基本說明,容器網路的世界是很複雜的,以系統的背景要去了解網路相關知識雖然會比較辛苦,但以平台的管理來說,這些知識是絕對有幫助的。

一般來說要選擇那種CNI開始,就要了解你的環境會需要到那些功能,所以對網路相關名詞的理解是必要的,以下列出幾個也許你應該了解的名詞:



  • Overlay模式
  • Underlay模式
  • Host-gw模式
  • VXLAN
  • NetworkPolicy
  • Ingress/Egress

本文就先介紹到這邊為止,謝謝您的耐心,你的支持鼓勵是我繼續分享的最大動力。

那我們就下期再見。


Reference:



avatar-img
15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
超健忘閒人的沙龍 的其他內容
從官網可以知道,我們在建立一組高可用的Kubernetes Cluster時,針對ETCD有二種做法,一種是與Master節點共用,另一種則是將ETCD再獨立出來三個節點成為一組Cluster來進行運作。 本文將說明如何建置出外部的ETCD Cluster,並以Static Pod的方式運行與管理
最近在部署一些解決方案時,碰到了關於名稱解析上的一些問題,雖然有時候不難解決,但我發現如果清楚K8S有關於名稱解析的概念,會對除錯的時間與過程有很大的幫助。 透過本篇文章,除了幫自已留下問題查找的過程,同時也希望利用文章來整理自已對CoreDNS元件的一些觀念,同時也可以分享給大家參考。
今天來分享在建置完K8S後的基本工作之一 : 監控。 只要是任何會”運作”的物件(Object),不管平台、服務、軟體、硬體,為了要提供最高的可用性,就會需要透過大大小小的監控元件來幫助我們了解所有的狀態,以便在問題發生時能做到最快速的反應。
延續上篇的內容,在了解了MetalLB的基本概念之後,我們就進入實際上部署的動作,還沒看過的可以到以下連結先有個基本概念: 本篇針對部署一個最基本的MetalLB的做法,共分成四個部分來進行說明:
今天跟大家分享在地端資料中心內建立Kubernetes叢集之後,如何針對網路進行更進一步的優化。除了CNI(容器網路接口)的設定,實務上我還會再另行建立Loadbalancer的機制。
在現今快速發展的數據應用環境之下,Kubernetes已經成為部署和管理容器化應用的首選平台。但是隨著應用服務愈來愈複雜、被攻擊的風險也愈來愈高。為了保護Kubernetes環境的安全性,跟大家介紹一個針對Kubernetes安全合規掃描的工具,幫助確保您的 Kubernetes 叢集設置和應用程序
從官網可以知道,我們在建立一組高可用的Kubernetes Cluster時,針對ETCD有二種做法,一種是與Master節點共用,另一種則是將ETCD再獨立出來三個節點成為一組Cluster來進行運作。 本文將說明如何建置出外部的ETCD Cluster,並以Static Pod的方式運行與管理
最近在部署一些解決方案時,碰到了關於名稱解析上的一些問題,雖然有時候不難解決,但我發現如果清楚K8S有關於名稱解析的概念,會對除錯的時間與過程有很大的幫助。 透過本篇文章,除了幫自已留下問題查找的過程,同時也希望利用文章來整理自已對CoreDNS元件的一些觀念,同時也可以分享給大家參考。
今天來分享在建置完K8S後的基本工作之一 : 監控。 只要是任何會”運作”的物件(Object),不管平台、服務、軟體、硬體,為了要提供最高的可用性,就會需要透過大大小小的監控元件來幫助我們了解所有的狀態,以便在問題發生時能做到最快速的反應。
延續上篇的內容,在了解了MetalLB的基本概念之後,我們就進入實際上部署的動作,還沒看過的可以到以下連結先有個基本概念: 本篇針對部署一個最基本的MetalLB的做法,共分成四個部分來進行說明:
今天跟大家分享在地端資料中心內建立Kubernetes叢集之後,如何針對網路進行更進一步的優化。除了CNI(容器網路接口)的設定,實務上我還會再另行建立Loadbalancer的機制。
在現今快速發展的數據應用環境之下,Kubernetes已經成為部署和管理容器化應用的首選平台。但是隨著應用服務愈來愈複雜、被攻擊的風險也愈來愈高。為了保護Kubernetes環境的安全性,跟大家介紹一個針對Kubernetes安全合規掃描的工具,幫助確保您的 Kubernetes 叢集設置和應用程序
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
這篇文章描述了作者和父親決定改善雞舍的故事。父親為了挖深土堆以防止野狗入侵雞舍,不辭勞苦。作者感受到父親的用心與努力,並對他表達了感謝之情。
Thumbnail
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
在當今競爭激烈的市場中,企業必須採用多元化的行銷策略,以吸引目標受眾的注意力並建立品牌形象。其中,拍攝形象影片已經成為吸引消費者的有效途徑之一。本文將探討如何結合拍攝形象影片與整合行銷,提升品牌的知名度和影響力。
Thumbnail
本文將說明在安裝完Kubernetes Cluster之後,接下來必須要進行的CNI Plugin安裝建置方式,同時也透過這篇文章進行基本的CNI說明與比較。 1. Container Network Interface (CNI)
Thumbnail
HomeAssistant是一套開源的智慧家庭平台,整合多種智慧家庭設備,並提供豐富的自動化功能 輕鬆控制家中智慧家庭設備,例如燈光、音響等 根據自己需求設定自動化場景,例如出門時自動關燈、回家時自動開燈等 安裝軟體: 添加智慧家庭設備 設定自動化、使用擴充功能 官方文件非常豐富,適合初學者入門
Thumbnail
你想要搭建一個既經濟實惠、高性能、可擴展且安全的網站,而又無需管理繁瑣後台的工作和懂編碼技術嗎? 今天,我將分享一個高性價比的解決方案,幫助你在微軟 Azure Static App靜態應用的服務上,使用 Hugo 構建一個高性能且安全的網站。 最棒的是什麼? 你甚至不需要了解任何編程知識
更衣室可能只是你家中的一個小角落,但它可以是一個充滿可能性的空間,一個你可以展現自我,追求夢想的地方。透過更衣室裝潢,我們可以將你的夢想轉化為現實,讓你每天都能生活在夢想之中。
Thumbnail
“白狗小吃”自1983年在費城賓州大學一帶開設外賣輕食店,到成為一家“從農園到餐桌運動”運動、採用在地食材的餐廳,還投入到諸多公益活動;像是:支持在地農友/採用在地食材,推動可持續農業,維護區域的自然生態系,帶動社區關係的重建與快樂、幸福的社區生活,引發活絡的區域經濟,重新連結城鄉良性的共生關係等。
Thumbnail
倒也不是悔悟些什麼,人生都已經走到這了,只是老張也不禁感嘆,為什麼記憶是拆不掉的?他敲了敲自己的腦袋,他很想忘記那一天、甚至曾經發生的所有事;明明現在生活一切都是臨時的,但為什麼回憶不能是?
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
這篇文章描述了作者和父親決定改善雞舍的故事。父親為了挖深土堆以防止野狗入侵雞舍,不辭勞苦。作者感受到父親的用心與努力,並對他表達了感謝之情。
Thumbnail
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
在當今競爭激烈的市場中,企業必須採用多元化的行銷策略,以吸引目標受眾的注意力並建立品牌形象。其中,拍攝形象影片已經成為吸引消費者的有效途徑之一。本文將探討如何結合拍攝形象影片與整合行銷,提升品牌的知名度和影響力。
Thumbnail
本文將說明在安裝完Kubernetes Cluster之後,接下來必須要進行的CNI Plugin安裝建置方式,同時也透過這篇文章進行基本的CNI說明與比較。 1. Container Network Interface (CNI)
Thumbnail
HomeAssistant是一套開源的智慧家庭平台,整合多種智慧家庭設備,並提供豐富的自動化功能 輕鬆控制家中智慧家庭設備,例如燈光、音響等 根據自己需求設定自動化場景,例如出門時自動關燈、回家時自動開燈等 安裝軟體: 添加智慧家庭設備 設定自動化、使用擴充功能 官方文件非常豐富,適合初學者入門
Thumbnail
你想要搭建一個既經濟實惠、高性能、可擴展且安全的網站,而又無需管理繁瑣後台的工作和懂編碼技術嗎? 今天,我將分享一個高性價比的解決方案,幫助你在微軟 Azure Static App靜態應用的服務上,使用 Hugo 構建一個高性能且安全的網站。 最棒的是什麼? 你甚至不需要了解任何編程知識
更衣室可能只是你家中的一個小角落,但它可以是一個充滿可能性的空間,一個你可以展現自我,追求夢想的地方。透過更衣室裝潢,我們可以將你的夢想轉化為現實,讓你每天都能生活在夢想之中。
Thumbnail
“白狗小吃”自1983年在費城賓州大學一帶開設外賣輕食店,到成為一家“從農園到餐桌運動”運動、採用在地食材的餐廳,還投入到諸多公益活動;像是:支持在地農友/採用在地食材,推動可持續農業,維護區域的自然生態系,帶動社區關係的重建與快樂、幸福的社區生活,引發活絡的區域經濟,重新連結城鄉良性的共生關係等。
Thumbnail
倒也不是悔悟些什麼,人生都已經走到這了,只是老張也不禁感嘆,為什麼記憶是拆不掉的?他敲了敲自己的腦袋,他很想忘記那一天、甚至曾經發生的所有事;明明現在生活一切都是臨時的,但為什麼回憶不能是?