Kubernetes網路外掛選型:為何選擇Calico?

0.前言
參考文件:https://github.com/containernetworking/cni

Pod網路外掛,為了實現Pod網路而需要的外掛、元件。由於Kubernetes透過開放的CNI介面來允許外掛的接入,所以它又稱之為CNI網路外掛。

為了解決跨主機容器間通訊問題,市面上存在很多解決方案,為了相容和規範這些解決方案,Kubernetes僅設計了網路模型,卻將Pod網路的實現交給了CNI網路外掛,並允許網路外掛透過標準的CNI(Container Network Interface,容器網路介面)連線到容器管理系統。

CNI網路外掛主要解決的就是容器跨主機通訊問題而存在的,並使跨主機間執行的Pod位於同一個網路平面,其大致解決步驟通常有兩步:分配設定自定義容器網路(PodIP在叢集中全域性唯一性)和實現容器網路通訊(處理方法通常有路由、覆蓋網路{Vxlan、IPIP}等等)。

每個Pod都會建立一個名叫"pause"的根容器,其他執行的業務容器都是複製該容器的網路,這個容器就是Kubernetes為了自定義網路等特殊功能而存在的。

CNI網路外掛分為以下四種:
  • MAIN,主要的,建立介面,主要網路的實現。如:bridge、ipvlan、loopback、macvlan、ptp、vlan、host-device。
  • Windows,特用於Windows的MAIN外掛。如:win-bridge、win-overlay。
  • IPAM,僅提供IP地址分配功能。如:dhcp、host-local、static。
  • META,其他外掛,透過呼叫第三方外掛來實現網路功能。如:tuning、portmap、bandwidth、sbr、firewall、flannel。
光單獨靠一種CNI網路外掛是無法實現完整的Pod網路通訊和更高階的網路策略功能的,第三方組織可以靈活的組合這些CNI外掛實現基本Pod網路功能和更高階功能,所以市面上流行出來很多解決方案。

在現今,比較常用的流行的Pod網路解決方案有Flannel和Calico(支援網路策略功能)、Canal(由Flannel實現網路通訊+Calico提供網路策略)。

1.Calico概述

參考文件:https://projectcalico.docs.tigera.io/

Calico是一款廣泛採用、久經考驗的開源網路和網路安全解決方案,適用於Kubernetes、虛擬機器和裸機工作負載。與Flannel對比,Calico除了支援基本網路功能的實現之外,它還支援全套Kubernetes網路策略功能,以及在其之上擴充套件網路策略。

1.1.Calico元件

Calico主要由以下元件組成:

1.1.1.CNI Plugin

CNI網路外掛,Calico透過CNI網路外掛與kubelet關聯,從而實現Pod網路。

1.1.2.Calico Node

Calico節點代理是執行在每個節點上的代理程式,負責管理節點路由資訊、策略規則和建立Calico虛擬網路裝置。

Calico Node主要由以下子模組程式組成:
  • Felix,Calico代理程式。執行在每個節點上的守護程序,它主要負責管理節點上網路介面、為節點建立路由資訊和ACL規則、以及報告當前節點網路的健康狀態給控制器等工作。
  • BIRD-BGP客戶端,BIRD是一個專案的簡稱,全稱為BIRD Internet Routing Daemon,BIRD是一個類UNIX系統下旨在開發一個功能齊全的IP路由守護程序,它是一個路由軟體,可以實現多種路由協議,如BGP、OSPF、RIP等。在Calico中,BIRD是一個BGP客戶端,用於使用BGP協議廣播給其他主機動態的學習路由規則。更多瞭解BIRD可參考:https://bird.network.cz/。
  • BIRD-Route Reflector(可擴充套件的元件),BGP客戶端在每個節點上執行,其隨著節點數量越來越多,一個BGP客戶端需要連線更多數量的其他BGP客戶端,其網路連線的數量非常多且網路會變得複雜。在節點之外,允許將BIRD程式配置成"Route Reflector"路由反射器工作方式,BGP客戶端可以直接連線到"Route Reflector"路由反射器,而不是很多數量的其他BGP客戶端,從而減少網路連線的數量,以提高BGP網路的效能。

1.1.3.Calico Controller

Calico網路策略控制器。允許建立"NetworkPolicy"資源物件,並根據資源物件裡面對網路策略定義,在對應節點主機上建立針對於Pod流出或流入流量的IPtables規則。

1.1.4.Calico Typha(可選的擴充套件元件)

Typha是Calico的一個擴充套件元件,用於Calico透過Typha直接與Etcd通訊,而不是透過kube-apiserver。通常當K8S的規模超過50個節點的時候推薦啟用它,以降低kube-apiserver的負載。每個Pod/calico-typha可承載100~200個Calico節點的連線請求,最多不要超過200個。

1.2.Calico網路實現

Calico支援兩種型別網路工作模式(後端機制):

如果物理主機在同一2層網路中,則建議採用使用BGP動態路由通訊方式;如果物理主機是跨子網通訊的話,可能由於到達目標主機的跳數太多導致效能下降,所以建議使用覆蓋網路模式。

1.2.1.動態路由模式(dynamic routing)

採用BGP動態路由協議自動學習來自其他AS自治系統上的路由條目,即其他節點主機上的路由條目。

類似於Flannel的Host-GW模式,不過它沒有不能跨子網的限制。

想要更多瞭解BGP動態路由技術,可以參考其他網路資料,這裡就不過多的闡述了。

1.2.2.覆蓋網路模式(overlay network)

採用IPIP或VXLAN協議封裝底層網路,然後透過上層物理覆蓋網路通訊。

將底層的Pod網路源目IP+資料封裝到上層物理網路源目IP的資料包中,由同一個網路的物理主機透過直連路由完成資料包的傳輸和解封裝,以實現底層Pod網路通訊。

Calico對於覆蓋網路的工作模式有:
  • IPIP,使用IPIP封裝協議。當IPIP啟用的時候不允許啟用VXLAN。
  • VXLAN,使用VXLAN封裝協議。當VXLAN啟用的時候不允許啟用IPIP。
  • IPIPCrossSubnet,當物理主機是跨子網的情況下才使用IPIP覆蓋網路通訊方式,正常情況下使用BGP路由模式。
  • VXLANCrossSubnet,當物理主機是跨子網的情況下才使用VXLAN覆蓋網路通訊方式,正常情況下使用BGP路由模式。
  • None,不使用IPIP或VXLAN覆蓋網路模式。
IPIP比VxLAN的資料包頭更小,但安全性較差。

虛介面:IPIP預設建立的三層虛介面通常叫"tunl0",而VXLAN預設建立的三層虛介面叫"vxlan.calico"。三層虛介面通常負責資料包的封裝和解封裝工作。

1.3.瞭解Calico對CIDR子網的劃分(blockSize)

CIDR,Classless Inter-Domain Routing,無類別域間路由,在Kubernetes中指基於CIDR的網路劃分方案,為Pod分配的子網範圍(如:10.244.0.0/12)。

通常預設情況下,PodIP地址範圍(–pod-network-cidr)為10.244.0.0/16,它擁有16^2=256*256=65536個地址(包括網路地址+廣播地址)可拆分成獨立子網。

Calico為每個節點都會建立一個獨立子網,即從CIDR大的地址池中劃分較小範圍的地址池給到每個節點。

Calico可以透過修改配置blockSize塊大小來設定每個節點分配的獨立子網的範圍池大小。這邊預設值IPV4=26,IPV6=122。

二進位制掩碼26(11111111 11111111 11111111 11000000)轉換成十進位制掩碼即=255.255.255.192,即每個節點的子網可以有64個IP地址,減去廣播地址和網路地址,可為Pod分配的有效IP地址有62個。

1.4.Calico網路策略

Calico使用IPtables實現網路策略功能,在Kubernetes中可以建立"NetworkPolicy"資源物件傳給Calico的控制器,由Calico Node根據NetworkPolicy定義的規則在相關節點上建立對應的IPtables規則,以實現對Pod出入口網路流量的安全策略限制。

2.安裝Calico

Calico有兩種安裝方式:
  • 使用calico.yaml清單檔案安裝
  • 使用Tigera Calico Operator安裝Calico(官方最新指導)

    Tigera Calico Operator,Calico操作員是一款用於管理Calico安裝、升級的管理工具,它用於管理Calico的安裝生命週期。從Calico-v3.15版本官方開始使用此工具。

    Calico安裝要求:
  • x86-64, arm64, ppc64le, or s390x processor
  • 2個CPU
  • 2GB執行記憶體
  • 10GB硬碟空間
  • RedHat Enterprise Linux 7.x+, CentOS 7.x+, Ubuntu 16.04+, or Debian 9.x+
  • 確保Calico可以管理主機上的cali和tunl介面。

2.1.使用calico.yaml清單檔案安裝Calico

參考文件:https://projectcalico.docs.tigera.io/archive/v3.14/getting-started/kubernetes/quickstart

當前主機環境:
  • 主機系統:CentOS Linux release 7.6.1810 (Core)
  • Kubernetes版本:v1.23.0

    Calico版本:v3.23.0

    其他提示:預設的calico.yaml清單檔案無需手動配置Pod子網範圍(如果需要,可透過CALICO_IPV4POOL_CIDR指定),預設使用kube-controller-manager的"–cluster-cidr"啟動項的值,即kubeadm init時指定的"–pod-network-cidr"或清單檔案中使用"podSubnet"的值。

1、配置Docker映象加速

映象加速由阿里雲"容器加速器"提供。

由於安裝清單中所使用的映象來源於國外站點,所以需要配置為國內映象源才能正常下載映象到國內主機。

建立配置檔案"/etc/docker/daemon.json",並寫入以下內容:

[root@localhost ~]

# mkdir -p /etc/docker

[root@localhost ~]

# cat /etc/docker/daemon.json <<EOF

{

"registry-mirrors"

: [

"https://7mimmp7p.mirror.aliyuncs.com"

,

"https://registry.docker-cn.com"

,

"http://hub-mirror.c.163.com"

,

"https://docker.mirrors.ustc.edu.cn"

],

"exec-opts"

: [

"native.cgroupdriver=systemd"

],

"log-driver"

:

"json-file"

,

"log-opts"

: {

"max-size"

:

"100m"

},

"storage-driver"

:

"overlay2"

,

"storage-opts"

: [

"overlay2.override_kernel_check=true"

]

}

EOF

重啟docker服務即可:

[root@localhost ~]

# sudo systemctl daemon-reload

[root@localhost ~]

# sudo systemctl restart docker

2、配置NetworkManager

如果主機系統使用NetworkManager來管理網路的話,則需要配置NetworkManager,以允許Calico管理介面。

NetworkManger操作預設網路名稱空間介面的路由表,這可能會干擾Calico代理正確路由的能力。

在所有主機上操作:

[root@k8s-master01 ~]

# cat > /etc/NetworkManager/conf.d/calico.conf <<EOF

[keyfile]

unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico;interface-name:wireguard.cali

EOF

3、下載calico.yaml

[root@k8s-master01 ~]

# wget https://docs.projectcalico.org/v3.23/manifests/calico.yaml --no-check-certificate

4、修改calico.yaml

由於預設的Calico清單檔案中所使用的映象來源於docker.io國外映象源,上面我們配置了Docker映象加速,應刪除docker.io字首以使映象從國內映象加速站點下載。

[root@k8s-master01 ~]

# cat calico.yaml |grep 'image:'

image: docker.io/calico/cni:v3.23.0

image: docker.io/calico/cni:v3.23.0

image: docker.io/calico/node:v3.23.0

image: docker.io/calico/kube-controllers:v3.23.0

[root@k8s-master01 ~]

# sed -i 's#docker.io/##g' calico.yaml

[root@k8s-master01 ~]

# cat calico.yaml |grep 'image:'

image: calico/cni:v3.23.0

image: calico/cni:v3.23.0

image: calico/node:v3.23.0

image: calico/kube-controllers:v3.23.0

5、應用calico.yaml

[root@k8s-master01 ~]

# kubectl apply -f calico.yaml

Pod-Calico在"kube-system"名稱空間下建立並執行起來:

[root@k8s-master01 ~]

# kubectl get pod -n kube-system |grep calico

calico-kube-controllers-77d9858799-c267f 1/1 Running 0 92s

calico-node-6jw5q 1/1 Running 0 92s

calico-node-krrn6 1/1 Running 0 92s

calico-node-mgk2g 1/1 Running 0 92s

calico-node-wr2pv 1/1 Running 0 92s

2.2.使用Tigera Calico Operator安裝Calico

這種是官方文件最新指導的安裝方式。

Tigera Calico Operator通常會安裝最新版本的Calico版本,並使用最新的功能。

1、配置NetworkManager

如果主機系統使用NetworkManager來管理網路的話,則需要配置NetworkManager,以允許Calico管理介面。

NetworkManger操作預設網路名稱空間介面的路由表,這可能會干擾Calico代理正確路由的能力。

在所有主機上操作:

[root@k8s-master01 ~]

# cat > /etc/NetworkManager/conf.d/calico.conf <<EOF

[keyfile]

unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico;interface-name:wireguard.cali

EOF

2、使用tigera-operator.yaml清單檔案安裝Tigera Calico operator

參考文件:https://github.com/tigera/operator

tigera-operator.yaml清單檔案用於安裝Tigera Calico operator。

operator的映象來源於quay.io。

[root@k8s-master01 ~]

# wget https://projectcalico.docs.tigera.io/manifests/tigera-operator.yaml -O calico-tigera-operator.yaml --no-check-certificate

[root@k8s-master01 ~]

# cat calico-tigera-operator.yaml |grep 'image:'

image: quay.io/tigera/operator:v1.27.0

[root@k8s-master01 ~]

# kubectl apply -f calico-tigera-operator.yaml

[root@k8s-master01 ~]

# kubectl get pod -n tigera-operator -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

tigera-operator-566769dc67-mrnhs 1/1 Running 0 5m39s 192.168.124.132 k8s-node01 <none> <none>

3、下載並配置custom-resources.yaml清單檔案

custom-resources.yaml用於自定義透過Tigera Calico operator安裝和配置Calico,它會建立由operator實現的Installation資源物件。

在自定義Calico之前可以透過"https://projectcalico.docs.tigera.io/reference/installation/api#operator.tigera.io/v1.Installation"先了解安裝配置。

注:這邊需要修改一下Pod分配子網範圍(CIDR),該地址需要與kubeadm初始化叢集時的"podSubnet"欄位或"–pod-network-cidr"引數中填寫的值相同。

[root@k8s-master01 ~]

# wget https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml -O calico-custom-resources.yaml --no-check-certificate

[root@k8s-master01 ~]

# vim calico-custom-resources.yaml

apiVersion: operator.tigera.io/v1

kind: Installation

metadata:

name: default

spec:

# Configures Calico networking.

calicoNetwork:

# Note: The ipPools section cannot be modified post-install.

ipPools:

- blockSize: 26

cidr: 10.244.0.0/16

encapsulation: VXLANCrossSubnet

natOutgoing: Enabled

nodeSelector: all()

4、應用custom-resources.yaml清單檔案

[root@k8s-master01 ~]

# kubectl apply -f calico-custom-resources.yaml

5、檢視Calico是否執行

Tigera Calico Operator會自動建立一個名叫"calico-system"的名稱空間來執行Calico。

[root@k8s-master01 ~]

# kubectl get namespace

NAME STATUS AGE

calico-system Active 3m10s

default Active 5m55s

kube-node-lease Active 5m57s

kube-public Active 5m57s

kube-system Active 5m57s

tigera-operator Active 3m20s

[root@k8s-master01 ~]

# kubectl get pod -n calico-system

NAME READY STATUS RESTARTS AGE

calico-kube-controllers-7dfc6fb85-ktww2 0/1 Pending 0 8m33s

calico-node-2t4dp 0/1 Init:ImagePullBackOff 0 8m34s

calico-node-mmflx 0/1 Init:ImagePullBackOff 0 8m34s

calico-node-r94tt 0/1 Init:ImagePullBackOff 0 8m34s

calico-node-w7plh 0/1 Init:ImagePullBackOff 0 7m36s

calico-typha-5fb57458cc-g89qp 0/1 ImagePullBackOff 0 8m34s

calico-typha-5fb57458cc-t5xcm 0/1 ImagePullBackOff 0 8m28s

[root@k8s-master01 ~]

# kubectl describe pod calico-kube-controllers-7dfc6fb85-ktww2 -n calico-system

Normal BackOff 69s (x2 over 3m41s) kubelet Back-off pulling image

"docker.io/calico/pod2daemon-flexvol:v3.23.0"

Warning Failed 69s (x2 over 3m41s) kubelet Error: ImagePullBackOff

可以看到所有Calico相關的Pod由於在國內環境下都無法正常下載由docker.io提供的映象:

[root@k8s-master01 ~]

# kubectl describe pod -n calico-system |grep 'Events' -A 10 |grep -Eo '"docker.io/calico/.*"' |sort |uniq
"docker.io/calico/cni:v3.23.0"
"docker.io/calico/kube-controllers:v3.23.0"
"docker.io/calico/node:v3.23.0"
"docker.io/calico/pod2daemon-flexvol:v3.23.0"
"docker.io/calico/typha:v3.23.0"

嘗試手動從quay.io下載映象。quay.io是一個公共映象倉庫。

所有主機上操作:

[root@k8s-master01 ~]

# docker pull quay.io/calico/cni:v3.23.0

[root@k8s-master01 ~]

# docker pull quay.io/calico/kube-controllers:v3.23.0

[root@k8s-master01 ~]

# docker pull quay.io/calico/node:v3.23.0

[root@k8s-master01 ~]

# docker pull quay.io/calico/pod2daemon-flexvol:v3.23.0

[root@k8s-master01 ~]

# docker pull quay.io/calico/typha:v3.23.0

這個時候發現Calico相關Pod都已正常運行了:

[root@k8s-master01 ~]

# kubectl get pod -n calico-system

NAME READY STATUS RESTARTS AGE

calico-kube-controllers-7dfc6fb85-vbn6q 1/1 Running 0 64m

calico-node-29h89 1/1 Running 0 64m

calico-node-9c54r 1/1 Running 1 (10m ago) 64m

calico-node-ntzvt 1/1 Running 0 64m

calico-node-s5bz9 1/1 Running 0 64m

calico-typha-5dd57768f4-79clk 1/1 Running 1 (10m ago) 27m

calico-typha-5dd57768f4-dk9ph 1/1 Running 0 64m

3.Calico清單詳解-calico.yaml(使用calico.yaml清單檔案安裝Calico安裝方式必讀)

參考文件:https://docs.projectcalico.org/archive/v3.14/getting-started/kubernetes/installation/config-options#other-configuration-options

calico.yaml清單檔案主要用於執行calico-node和calico-kube-controllers服務,其清單安裝以下Kubernetes資源:
  • 使用DaemonSet在每個主機上安裝calico/node容器;
  • 使用DaemonSet在每個主機上安裝Calico CNI二進位制檔案和網路配置;
  • 使用Deployment執行calico/kube-controller;
  • Secert/calico-etcd-secrets提供可選的Calico連線到etcd的TLS金鑰資訊;
  • ConfigMap/calico-config提供安裝Calico時的配置引數。
在calico.yaml清單檔案中,Calico預設的工作模式是IPIP。

在安裝Calico之前配置Calico通常有以下項:

3.1.配置PodIP範圍(PodCIDR)

要更改用於Pod的預設IP範圍,請修改calico.yaml清單檔案中"CALICO_IPV4POOL_CIDR"部分。

kind: DaemonSet

apiVersion: apps/v1

metadata:

name: calico-node

namespace: kube-system

labels:

k8s-app: calico-node

spec:

template:

spec:

containers:

- name: calico-node

image: calico/node:v3.14.2

env

:

...

# - name: CALICO_IPV4POOL_CIDR
# value: "192.168.0.0/16"

...

CALICO_IPV4POOL_CIDR

設定PodIP範圍。

此項用於設定安裝Calico時要建立的預設IPv4池,PodIP將從該範圍中選擇。

Calico安裝完成後修改此值將再無效。

預設情況下calico.yaml中"CALICO_IPV4POOL_CIDR"是註釋的,如果kube-controller-manager的"–cluster-cidr"不存在任何值的話,則通常取預設值"192.168.0.0/16,172.16.0.0/16,..,172.31.0.0/16"。

當使用kubeadm時,PodIP的範圍應該與kubeadm init的清單檔案中的"podSubnet"欄位或者"–pod-network-cidr"選項填寫的值相同。

3.2.配置IPIP(預設)

預設情況下,清單啟用跨子網所使用的封裝協議是IPIP。

當叢集的節點都處於同一個2層網路中時,我們期望修改Calico的工作模式為BGP或其他時,可以設定"CALICO_IPV4POOL_IPIP"的"value: Never"以停用IPIP。預設IPIP是啟用的"value: Always"。

kind: DaemonSet

apiVersion: apps/v1

metadata:

name: calico-node

namespace: kube-system

labels:

k8s-app: calico-node

spec:

template:

spec:

containers:

- name: calico-node

image: calico/node:v3.14.2

env

:

...

# Enable IPIP

- name: CALICO_IPV4POOL_IPIP

value:

"Always"

...

CALICO_IPV4POOL_IPIP

設定Calico覆蓋網路IPV4池所要使用的封裝協議為IPIP。

可設定的值:

Always,永久啟用。

CrossSubnet,當物理主機是跨子網通訊的話才啟用,如果物理主機在同一2層網路中則使用BGP動態路由通訊方式。

Never,從不啟用,即停用。

如果該項的值設定為"Never"以外的值,則不應設定"CALICO_IPV4POOL_VXLAN"。

Calico覆蓋網路支援IPIP、VXLAN兩種協議,僅能啟用其中一種。

VXLAN協議禁止啟用由"CALICO_IPV4POOL_VXLAN"項控制。

3.3.切換IPIP為VXLAN

預設情況下,Calico清單啟用IPIP封裝。如果你期望Calico使用VXLAN封裝模式,則需要在安裝時候做以下操作:

1、將"CALICO_IPV4POOL_IPIP "設定為"Never",將"CALICO_IPV4POOL_VXLAN"設定為"Always".

kind: DaemonSet

apiVersion: apps/v1

metadata:

name: calico-node

namespace: kube-system

labels:

k8s-app: calico-node

spec:

template:

spec:

containers:

- name: calico-node

image: calico/node:v3.14.2

env

:

...

# Enable IPIP

- name: CALICO_IPV4POOL_IPIP

value:

"Never"

- name: CALICO_IPV4POOL_VXLAN

value:

"Always"

...

2、如果你只想叢集僅使用基於VXLAN協議的覆蓋網路模式,用不到BGP動態路由模式的話,即為了節省一點資源,可以選擇完全停用Calico基於BGP的網路:
  • 將"calico_backend: "bird""修改為"calico_backend: "vxlan"",這將停用BIRD。
  • 從calico/node的readiness/liveness檢查中去掉"- -bird-ready"和"- -bird-live"。

livenessProbe:

exec

:

command

:

- /bin/calico-node

- -felix-live

# - -bird-live

readinessProbe:

exec

:

command

:

- /bin/calico-node

# - -bird-ready

- -felix-ready

CALICO_IPV4POOL_VXLAN

設定Calico覆蓋網路IPV4池所要使用的封裝協議為VXLAN。

可設定的值:
  • Always,永久啟用。
  • CrossSubnet,當物理主機是跨子網通訊的話才啟用,如果物理主機在同一2層網路中則使用BGP動態路由通訊方式。
  • Never,從不啟用,即停用。

    如果該項的值設定為"Never"以外的值,則不應設定"CALICO_IPV4POOL_VXLAN"。

    Calico覆蓋網路支援IPIP、VXLAN兩種協議,僅能啟用其中一種。

    VXLAN協議禁止啟用由"CALICO_IPV4POOL_VXLAN"項控制。

3.4.其他配置項

在清單檔案的開始有ConfigMap描述Calico的配置內容,其重要的配置項解讀如下:

kind: ConfigMap

apiVersion: v1

metadata:

name: calico-config

namespace: kube-system

data:

typha_service_name:

"none"

calico_backend:

"bird"

veth_mtu:

"1440"

cni_network_config: |-

{

"name"

:

"k8s-pod-network"

,

"cniVersion"

:

"0.3.1"

,

"plugins"

: [

{

"type"

:

"calico"

,

"log_level"

:

"info"

,

"datastore_type"

:

"kubernetes"

,

"nodename"

:

"__KUBERNETES_NODE_NAME__"

,

"mtu"

: __CNI_MTU__,

"ipam"

: {

"type"

:

"calico-ipam"

},

"policy"

: {

"type"

:

"k8s"

},

"kubernetes"

: {

"kubeconfig"

:

"__KUBECONFIG_FILEPATH__"

}

},

{

"type"

:

"portmap"

,

"snat"

:

true

,

"capabilities"

: {

"portMappings"

:

true

}

},

{

"type"

:

"bandwidth"

,

"capabilities"

: {

"bandwidth"

:

true

}

}

]

}

typha_service_name: "none"

Typha是Calico的一個擴充套件元件,用於Calico透過Typha直接與Etcd通訊,而不是透過kube-apiserver。通常當K8S的規模超過50個節點的時候推薦啟用它,以降低kube-apiserver的負載。

支援值:
  • none,關閉Typha功能。
  • calico_typha,啟用Typha功能。

calico_backend: "bird"

設定Calico使用的後端機制。支援值:

bird,開啟BIRD功能,根據Calico-Node的配置來決定主機的網路實現是採用BGP路由模式還是IPIP、VXLAN覆蓋網路模式。

vxlan,純VXLAN模式,僅能夠使用VXLAN協議的覆蓋網路模式。

veth_mtu: "0"

設定虛擬介面"calicoxxxxx"的MTU值,預設情況下MTU是自動檢測的,不需要顯示的設定此欄位。

可以透過提供一個非零值來設定它。

MTU,Maximum Transmission Unit,最大傳輸單元,網路裝置一次傳送資料包大小,單位為Byte,MTU值約小則傳輸速率約高,此值應由系統設定的最合理的值,通常不需要我們手動設定,最大值為1500。

cni_network_config:

在每個節點上都要安裝的CNI網路外掛配置。保持預設就好。

4.Calico清單詳解-custom-resources.yaml(使用Tigera Calico Operator安裝Calico安裝方式必讀)

custom-resources.yaml清單檔案透過Tigera Calico Operator安裝Calico的自定義清單檔案。

在安裝Calico之前,我們可以透過修改該清單的內容自定義配置Calico。

參考文件:https://projectcalico.docs.tigera.io/reference/installation/api
# This section includes base Calico installation configuration.
# For more information, see: https://projectcalico.docs.tigera.io/v3.23/reference/installation/api#operator.tigera.io/v1.Installation

apiVersion: operator.tigera.io/v1

kind: Installation

metadata:

name: default

spec:

# Configures Calico networking.

calicoNetwork:

# Note: The ipPools section cannot be modified post-install.

ipPools:

- blockSize: 26

cidr: 10.244.0.0/16

encapsulation: VXLANCrossSubnet

natOutgoing: Enabled

nodeSelector: all()
---

# This section configures the Calico API server.
# For more information, see: https://projectcalico.docs.tigera.io/v3.23/reference/installation/api#operator.tigera.io/v1.APIServer

apiVersion: operator.tigera.io/v1

kind: APIServer

metadata:

name: default

spec: {}

spec.calicoNetwork

配置Calico網路。

spec.calicoNetwork.bgp

開啟或停用BGP路由功能。支援值:Enabled, Disabled。

spec.calicoNetwork.ipPools

IPPool,為由節點篩選器指定節點上建立Pod分配的單個或多個地址池,以及要使用的Pod網路的實現方法。

spec.calicoNetwork.ipPools.blockSize(int32)

塊大小,子網劃分技術,指從CIDR(如:10.244.0.0/16)裡面為每個節點拆分一個獨立的子網塊範圍大小(如:10.244.32.128/26)。預設IPV4=26,IPV6=122。二進位制掩碼26轉換成十進位制掩碼即=255.255.255.192,即每個節點的子網可以有64個IP地址,減去廣播地址和網路地址,可為Pod分配的有效IP地址有62個。

spec.calicoNetwork.ipPools.cidr(string)

Pod網路IP範圍。

spec.calicoNetwork.ipPools.encapsulation

設定Pod網路要使用的封裝協議型別,支援:
  • IPIP,使用IPIP封裝協議。
  • VXLAN,使用VXLAN封裝協議。
  • IPIPCrossSubnet,當物理主機是跨子網的情況下才使用IPIP覆蓋網路通訊方式,正常情況下使用BGP路由模式。
  • VXLANCrossSubnet,當物理主機是跨子網的情況下才使用VXLAN覆蓋網路通訊方式,正常情況下使用BGP路由模式。
  • None,不使用IPIP或VXLAN封裝。

spec.calicoNetwork.ipPools.natOutgoing

NAT傳出,對傳出的流量啟用或停用NAT功能。支援值:Enabled, Disabled。

spec.calicoNetwork.ipPools.nodeSelector(string)

節點選擇器,使用它選擇該IPPool池會影響那些節點的Pod。預設值為"all()",保持預設就好。

5.完全解除安裝Calico網路外掛

1、刪除安裝清單中的所有資源物件

任一臺Master上操作:

[root@k8s-master01 ~]

# kubectl delete -f calico.yaml

2、刪除tunl0虛擬網絡卡

如果使用了IPIP覆蓋網路模式,則Calico會在每臺主機上建立一塊名叫tunl0的虛擬網絡卡裝置。

在所有主機上操作:

[root@k8s-master01 ~]

# modprobe -r ipip

3、刪除Calico相關CNI配置檔案

在所有主機上操作:

[root@k8s-master01 ~]

# rm -rf /var/lib/cni/ && rm -rf /etc/cni/net.d/*

4、重啟kubelet服務

在所有主機上操作:

[root@k8s-master01 ~]

# systemctl restart kubelet

樂在分享!~~
連結:https://www.cnblogs.com/RidingWind/p/16301622.html
                                                              (版權歸原作者所有,侵刪)

文末福利

即將步入2025年,不少小夥伴在考慮來年的工作方向。

僅目前來說,傳統運維衝擊年薪30W+的轉型方向就是SRE&DevOps崗位。

為了幫助大家早日擺脫繁瑣的基層運維工作,給大家整理了一套【2024最新運維資料高階運維工程師必備技能資料包(文末一鍵領取),內容有多詳實豐富看下圖!
共有 20 個模組
1.38張最全工程師技能圖譜
2.面試大禮包
3.Linux書籍
4.go書籍
······
6.自動化運維工具
18.訊息佇列合集
 以上所有資料獲取請掃碼
識別上方二維碼
備註:2024最新運維資料
100%免費領取
(是掃碼領取,不是在公眾號後臺回覆,別看錯了哦)


相關文章