亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關(guān)注微信公眾號

Kubernetes 網(wǎng)絡(luò)插件 Calico 完全運維指南
2022-06-01   

適用范圍

本文檔測試范圍:

概述

Calico 是一種開源網(wǎng)絡(luò)和網(wǎng)絡(luò)安全解決方案,適用于容器,虛擬機和基于主機的本機工作負(fù)載。Calico 支持廣泛的平臺,包括 Kubernetes,docker,OpenStack 和裸機服務(wù)。Calico 后端支持多種網(wǎng)絡(luò)模式。

  • BGP 模式:將節(jié)點做為虛擬路由器通過 BGP 路由協(xié)議來實現(xiàn)集群內(nèi)容器之間的網(wǎng)絡(luò)訪問。
  • IPIP 模式:在原有 IP 報文中封裝一個新的 IP 報文,新的 IP 報文中將源地址 IP 和目的地址 IP 都修改為對端宿主機 IP。
  • cross-subnet:Calico-ipip 模式和 calico-bgp 模式都有對應(yīng)的局限性,對于一些主機跨子網(wǎng)而又無法使網(wǎng)絡(luò)設(shè)備使用 BGP 的場景可以使用 cross-subnet 模式,實現(xiàn)同子網(wǎng)機器使用 calico-BGP 模式,跨子網(wǎng)機器使用 calico-ipip 模式。

calico 切換 BGP 模式

部署完成后默認(rèn)使用 calico-ipip 的模式,通過在節(jié)點的路由即可得知,通往其他節(jié)點路由通過 tunl0 網(wǎng)卡出去

修改為 BGP 網(wǎng)絡(luò)模式,在 system 項目中修改 calico-node daemonset

修改CALICO_IPV4POOL_IPIP改為 off,添加新環(huán)境變量FELIX_IPINIPENABLED為 false

修改完成后對節(jié)點進(jìn)行重啟,等待恢復(fù)后查看主機路由,與 ipip 最大區(qū)別在于去往其他節(jié)點的路由,由 Tunnel0 走向網(wǎng)絡(luò)網(wǎng)卡。

calico 切換 cross-subnet 模式

Calico-ipip 模式和 calico-bgp 模式都有對應(yīng)的局限性,對于一些主機跨子網(wǎng)而又無法使網(wǎng)絡(luò)設(shè)備使用 BGP 的場景可以使用 cross-subnet 模式,實現(xiàn)同子網(wǎng)機器使用 calico-BGP 模式,跨子網(wǎng)機器使用 calico-ipip 模式。

部署集群網(wǎng)絡(luò)選擇 calico 網(wǎng)絡(luò)插件

默認(rèn)部署出來是 calico 的 ip-in-ip 的模式 查看宿主機網(wǎng)卡,會發(fā)現(xiàn)多了個 tunl0 網(wǎng)卡,這個是建立 ip 隧道的網(wǎng)卡

去其他主機的路由都是走 tunl0 網(wǎng)卡出去

切換到 cross-subnet 模式

kubectl edit ipPool/default-ipv4-ippool
  • 1.

將 ipipMode 改為 crossSubnet

在 UI 將 calico-node 的 POD 刪了重建

重啟檢查 calico 網(wǎng)絡(luò)

可以看見同子網(wǎng)的主機出口走的是 bgp,不同子網(wǎng)主機走的是 tunl0 網(wǎng)卡走 ipip 模式

創(chuàng)建應(yīng)用測試跨主機網(wǎng)絡(luò),在不同主機上互相 ping 測試,看看跨主機網(wǎng)絡(luò)是否正常。

配置 Route reflector

安裝 calicoctl

安裝方式有以下幾種

  • Single host 上面 binary 安裝
  • Single host 上面 continer 安裝
  • 作為 k8s pod 運行

實際經(jīng)驗:

Binary 方式在集群里面的一臺 worker 節(jié)點安裝(比如 RR),calicoctl 會檢測 bird/felix 的運行狀態(tài)。在非 calico node 節(jié)點運行只能使用部分命令,不能運行 calico node 相關(guān)命令。

通過配置 calicoctl 來對 calico 進(jìn)行控制,通常情況下建議將

curl -O -L  https://github.com/projectcalico/calicoctl/releases/download/v3.13.3/calicoctl
  • 1.

配置可執(zhí)行權(quán)限

chmod +x calicoctl
  • 1.

復(fù)制的/usr/bin/目錄

cp calicoctl /usr/bin/
  • 1.

配置 calicoctl 連接 Kubernetes 集群

export CALICO_DATASTORE_TYPE=kubernetes
export CALICO_KUBECONFIG=~/.kube/config
calicoctl node status
  • 1.
  • 2.
  • 3.

calico node-to-node mesh

默認(rèn)情況下 calico 采用 node-to-node mesh 方式 ,為了防止 BGP 路由環(huán)路,BGP 協(xié)議規(guī)定在一個 AS(自治系統(tǒng))內(nèi)部,IBGP 路由器之間只能傳一跳路由信息,所以在一個 AS 內(nèi)部,IBGP 路由器之間為了學(xué)習(xí)路由信息需要建立全互聯(lián)的對等體關(guān)系,但是當(dāng)一個 AS 規(guī)模很大的時候,這種全互聯(lián)的對等體關(guān)系維護會大量消耗網(wǎng)絡(luò)和 CPU 資源,所以這種情況下就需要建立路由反射器以減少 IBGP 路由器之間的對等體關(guān)系數(shù)量。

Route reflector 角色介紹

早期 calico 版本提供專門的 route reflector 鏡像,在新版本 calico node 內(nèi)置集成 route reflector 功能。Route reflector 可以是以下角色:

  • 集群內(nèi)部的 node 節(jié)點
  • 集群外部節(jié)點運行 calico node
  • 其他支持 route reflector 的軟件或者設(shè)備。

這里以一個集群內(nèi)部的 node 節(jié)點為例:

關(guān)閉 node-to-node mesh

cat <<EOF | calicoctl apply -f -
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
name: default
spec:
 logSeverityScreen: Info
 nodeToNodeMeshEnabled: false
 asNumber: 63400
EOF
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

設(shè)置 Route reflector

配置 Route reflector 支持多種配置方式如:1、支持配置全局 BGP peer,。2、支持針對單個節(jié)點進(jìn)行配置 BGP Peer。也可以將 calico 節(jié)點充當(dāng) Route reflector 這里以配置 calico 節(jié)點充當(dāng) Router reflector 為例。

配置節(jié)點充當(dāng) BGP Route Reflector

可將 Calico 節(jié)點配置為充當(dāng)路由反射器。為此,要用作路由反射器的每個節(jié)點必須具有群集 ID-通常是未使用的 IPv4 地址。

要將節(jié)點配置為集群 ID 為 244.0.0.1 的路由反射器,請運行以下命令。這里將節(jié)點名為 rke-node4 的節(jié)點配置為 Route Reflector,若一個集群中要配置主備 rr,為了防止 rr 之間的路由環(huán)路,需要將集群 ID 配置成一樣

calicoctl patch node rke-node4 -p '{"spec": {"bgp": {"routeReflectorClusterID": "244.0.0.1"}}}'
  • 1.

給節(jié)點打上對應(yīng)的 label 標(biāo)記該節(jié)點以表明它是 Route Reflector,從而允許 BGPPeer 資源選擇它。

kubectl label node rke-node4 route-reflector=true
  • 1.

創(chuàng)建 BGPPeer

export CALICO_DATASTORE_TYPE=kubernetes
export CALICO_KUBECONFIG=~/.kube/config
cat <<EOF | calicoctl apply -f -
kind: BGPPeer
apiVersion: projectcalico.org/v3
metadata:
 name: peer-with-route-reflectors
spec:
 nodeSelector: all()
 peerSelector: route-reflector == 'true'
EOF
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

查看 BGP 節(jié)點狀態(tài)

node 上查看,peer type 由 node-to-node mesh 變?yōu)?node specific

Route Reflector 上節(jié)點查看,節(jié)點已正常建立連接

設(shè)置 veth 網(wǎng)卡 mtu

通常,通過使用最高 MTU 值(不會在路徑上引起碎片或丟包)來實現(xiàn)最高性能。對于給定的流量速率,最大帶寬增加,CPU 消耗可能下降。對于一些支持 jumbo frames 的網(wǎng)絡(luò)設(shè)備,可以配置 calico 支持使用。

下表列舉了,常見幾種 MTU 配置下 calico 對應(yīng)的網(wǎng)卡 mtu 的配置

IPIP 和 VXLAN 協(xié)議中的 IP 中使用的額外報文頭,通過頭的大小減小了最小 MTU。(IP 中的 IP 使用 20 字節(jié)的標(biāo)頭,而 VXLAN 使用 50 字節(jié)的標(biāo)頭)。

如果在 Pod 網(wǎng)絡(luò)中的任何地方使用 VXLAN,請將 MTU 大小配置為“物理網(wǎng)絡(luò) MTU 大小減去 50”。如果僅在 IP 中使用 IP,則將 MTU 大小配置為“物理網(wǎng)絡(luò) MTU 大小減去 20” 。

將工作負(fù)載端點 MTU 和隧道 MTU 設(shè)置為相同的值

配置方法:

升級集群

配置網(wǎng)卡 MTU,此時通過 system 項目下 calico-config 文件可以看見對應(yīng)的 mtu 設(shè)置

創(chuàng)建 workload 查看 POD 網(wǎng)卡 MTU 為 9001

設(shè)置全局 AS 號

默認(rèn)情況下,除非已為節(jié)點指定每個節(jié)點的 AS,否則所有 Calico 節(jié)點都使用 64512 自治系統(tǒng)。可以通過修改默認(rèn)的 BGPConfiguration 資源來更改所有節(jié)點的全局默認(rèn)值。以下示例命令將全局默認(rèn) AS 編號設(shè)置為 64513。

cat <<EOF | calicoctl apply -f -
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
 name: default
spec:
 logSeverityScreen: Info
 nodeToNodeMeshEnabled: false
 asNumber: 64513
EOF
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

設(shè)置單個主機和 AS 號

例如,以下命令將名為 node-1 的節(jié)點更改為屬于 AS 64514。

calicoctl patch node node-1 -p '{"spec": {"bgp": {“asNumber”: “64514”}}}'
  • 1.

修改節(jié)點地址范圍

此操作建議在部署完集群后立刻進(jìn)行。

默認(rèn)情況下 calico 在集群層面分配一個 10.42.0.0/16 的 CIDR 網(wǎng)段,在這基礎(chǔ)上在單獨為每個主機劃分一個單獨子網(wǎng)采用 26 位子網(wǎng)掩碼對應(yīng)的集群支持的節(jié)點數(shù)為 2^10=1024 節(jié)點,單個子網(wǎng)最大支持 64 個 POD,當(dāng)單個子網(wǎng)對應(yīng) IP 消耗后,calico 會重新在本機上劃分一個新的子網(wǎng)如下,在集群對端主機可以看見對應(yīng)的多個 CIDR 路由信息。

注意:塊大小將影響節(jié)點 POD 的 IP 地址分配和路由條目數(shù)量,如果主機在一個 CIDR 中分配所有地址,則將為其分配一個附加 CIDR。如果沒有更多可用的塊,則主機可以從分配給其他主機的 CIDR 中獲取地址。為借用的地址添加了特定的路由,這會影響路由表的大小。

將塊大小從默認(rèn)值增加(例如,使用/24 則為每個塊提供 256 個地址)意味著每個主機更少的塊,會減少路由。但是對應(yīng)的集群可容納主機數(shù)也對應(yīng)減少為 2^8。

從默認(rèn)值減小 CIDR 大小(例如,使用/28 為每個塊提供 16 個地址)意味著每個主機有更多 CIDR,因此會有更多路由。

calico 允許用戶修改對應(yīng)的 IP 池和集群 CIDR

創(chuàng)建和替換步驟

注意:刪除 Pod 時,應(yīng)用程序會出現(xiàn)暫時不可用

  • 添加一個新的 IP 池。
  • 注意:新 IP 池必須在同一群集 CIDR 中。
  • 禁用舊的 IP 池(注意:禁用 IP 池只會阻止分配新的 IP 地址。它不會影響現(xiàn)有 POD 的聯(lián)網(wǎng))
  • 從舊的 IP 池中刪除 Pod。
  • 驗證新的 Pod 是否從新的 IP 池中獲取地址。
  • 刪除舊的 IP 池。

定義 ippool 資源

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
 name: my-ippool
spec:
 blockSize: 24
 cidr: 192.0.0.0/16
 ipipMode: Always
 natOutgoing: true
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

修改對應(yīng)的 blockSize 號

創(chuàng)建新的

calicoctl apply -f pool.yaml
  • 1.

將舊的 ippool 禁用

calicoctl patch ippool default-ipv4-ippool -p '{"spec": {"disabled": “true”}}'
  • 1.

創(chuàng)建 workload 測試

根據(jù)節(jié)點標(biāo)簽定義對應(yīng)的 ippool

Calico 能夠進(jìn)行配置,為不同拓?fù)渲付?IP 地址池。例如可能希望某些機架、地區(qū)、或者區(qū)域能夠從同一個 IP 池中獲取地址。這對于降低路由數(shù)量或者配合防火墻策略的要求會很有幫助。

給節(jié)點配置對應(yīng) label

kubectl label nodes kube-node-0 rack=0
kubectl label nodes kube-node-1 rack=1
  • 1.
  • 2.

通過標(biāo)簽定義對應(yīng)的節(jié)點 IPpool

calicoctl create -f -<<EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
 name: rack-0-ippool
spec:
 cidr: 192.168.0.0/24
 ipipMode: Always
 natOutgoing: true
 nodeSelector: rack == "0"
EOF
calicoctl create -f -<<EOF
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
 name: rack-1-ippool
spec:
 cidr: 192.168.1.0/24
 ipipMode: Always
 natOutgoing: true
 nodeSelector: rack == "1"
EOF
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

關(guān)閉 SNAT

默認(rèn)情況下,calico 訪問集群外網(wǎng)絡(luò)是通過 SNAT 成宿主機 ip 方式,在一些金融客戶環(huán)境中為了能實現(xiàn)防火墻規(guī)則,需要直接針對 POD ip 進(jìn)行進(jìn)行規(guī)則配置,所以需要關(guān)閉 natOutgoing

kubectl edit ippool/default-ipv4-ippool
  • 1.

將 natOutgoing: true修改為natOutgoing: false

此時,calico 網(wǎng)絡(luò)訪問集群外的 ip 源 ip 就不會 snat 成 宿主機的 ip 地址。

固定 POD IP

固定單個 ip

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-test
spec:
 selector:
   matchLabels:
     app: nginx
 replicas: 1 # tells deployment to run 1 pods matching the template
 template:
   metadata:
     labels:
       app: nginx
     annotations:
       "cni.projectcalico.org/ipAddrs": "[\"10.42.210.135\"]"
   spec:
     containers:
     - name: nginx
       image: nginx:1.7.9
       ports:
       - containerPort: 80
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

固定多個 ip,只能通過 ippool 的方式。

cat ippool1.yaml
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
 name: pool-1
spec:
 blockSize: 31
 cidr: 10.21.0.0/31
 ipipMode: Never
 natOutgoing: true
apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-test
spec:
 selector:
   matchLabels:
     app: nginx
 replicas: 1 # tells deployment to run 1 pods matching the template
 template:
   metadata:
     labels:
       app: nginx
     annotations:
       "cni.projectcalico.org/ipv4pools": "[\"pool-1\"]"
   spec:
     containers:
     - name: nginx
       image: nginx:1.7.9
       ports:
       - containerPort: 80
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.

原文鏈接:??https://www.bladewan.com/2020/11/18/calico_ops/?

熱詞搜索:

上一篇:為什么需要帶寬監(jiān)控工具?
下一篇:與DevOps緊綁才算實現(xiàn)運維自動化嗎?接地氣的運維自動化什么樣?

分享到: 收藏