成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Kubernetes 網絡插件 Calico 完全運維指南

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

適用范圍

本文檔測試范圍:

概述

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

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

calico 切換 BGP 模式

部署完成后默認使用 calico-ipip 的模式,通過在節點的路由即可得知,通往其他節點路由通過 tunl0 網卡出去

修改為 BGP 網絡模式,在 system 項目中修改 calico-node daemonset

修改CALICO_IPV4POOL_IPIP改為 off,添加新環境變量FELIX_IPINIPENABLED為 false

修改完成后對節點進行重啟,等待恢復后查看主機路由,與 ipip 最大區別在于去往其他節點的路由,由 Tunnel0 走向網絡網卡。

calico 切換 cross-subnet 模式

Calico-ipip 模式和 calico-bgp 模式都有對應的局限性,對于一些主機跨子網而又無法使網絡設備使用 BGP 的場景可以使用 cross-subnet 模式,實現同子網機器使用 calico-BGP 模式,跨子網機器使用 calico-ipip 模式。

部署集群網絡選擇 calico 網絡插件

默認部署出來是 calico 的 ip-in-ip 的模式 查看宿主機網卡,會發現多了個 tunl0 網卡,這個是建立 ip 隧道的網卡

去其他主機的路由都是走 tunl0 網卡出去

切換到 cross-subnet 模式

kubectl edit ipPool/default-ipv4-ippool

將 ipipMode 改為 crossSubnet

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

重啟檢查 calico 網絡

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

創建應用測試跨主機網絡,在不同主機上互相 ping 測試,看看跨主機網絡是否正常。

配置 Route reflector

安裝 calicoctl

安裝方式有以下幾種

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

實際經驗:

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

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

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

配置可執行權限

chmod +x calicoctl

復制的/usr/bin/目錄

cp calicoctl /usr/bin/

配置 calicoctl 連接 Kubernetes 集群

export CALICO_DATASTORE_TYPE=kubernetes
export CALICO_KUBECONFIG=~/.kube/config
calicoctl node status

calico node-to-node mesh

默認情況下 calico 采用 node-to-node mesh 方式 ,為了防止 BGP 路由環路,BGP 協議規定在一個 AS(自治系統)內部,IBGP 路由器之間只能傳一跳路由信息,所以在一個 AS 內部,IBGP 路由器之間為了學習路由信息需要建立全互聯的對等體關系,但是當一個 AS 規模很大的時候,這種全互聯的對等體關系維護會大量消耗網絡和 CPU 資源,所以這種情況下就需要建立路由反射器以減少 IBGP 路由器之間的對等體關系數量。

Route reflector 角色介紹

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

  • 集群內部的 node 節點
  • 集群外部節點運行 calico node
  • 其他支持 route reflector 的軟件或者設備。

這里以一個集群內部的 node 節點為例:

關閉 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

設置 Route reflector

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

配置節點充當 BGP Route Reflector

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

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

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

給節點打上對應的 label 標記該節點以表明它是 Route Reflector,從而允許 BGPPeer 資源選擇它。

kubectl label node rke-node4 route-reflector=true

創建 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

查看 BGP 節點狀態

node 上查看,peer type 由 node-to-node mesh 變為 node specific

Route Reflector 上節點查看,節點已正常建立連接

設置 veth 網卡 mtu

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

下表列舉了,常見幾種 MTU 配置下 calico 對應的網卡 mtu 的配置

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

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

將工作負載端點 MTU 和隧道 MTU 設置為相同的值

配置方法:

升級集群

配置網卡 MTU,此時通過 system 項目下 calico-config 文件可以看見對應的 mtu 設置

創建 workload 查看 POD 網卡 MTU 為 9001

設置全局 AS 號

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

cat <<EOF | calicoctl apply -f -
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
name: default
spec:
logSeverityScreen: Info
nodeToNodeMeshEnabled: false
asNumber: 64513
EOF

設置單個主機和 AS 號

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

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

修改節點地址范圍

此操作建議在部署完集群后立刻進行。

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

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

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

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

calico 允許用戶修改對應的 IP 池和集群 CIDR

創建和替換步驟

注意:刪除 Pod 時,應用程序會出現暫時不可用

  • 添加一個新的 IP 池。
  • 注意:新 IP 池必須在同一群集 CIDR 中。
  • 禁用舊的 IP 池(注意:禁用 IP 池只會阻止分配新的 IP 地址。它不會影響現有 POD 的聯網)
  • 從舊的 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

修改對應的 blockSize 號

創建新的

calicoctl apply -f pool.yaml

將舊的 ippool 禁用

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

創建 workload 測試

根據節點標簽定義對應的 ippool

Calico 能夠進行配置,為不同拓撲指定 IP 地址池。例如可能希望某些機架、地區、或者區域能夠從同一個 IP 池中獲取地址。這對于降低路由數量或者配合防火墻策略的要求會很有幫助。

給節點配置對應 label

kubectl label nodes kube-node-0 rack=0
kubectl label nodes kube-node-1 rack=1

通過標簽定義對應的節點 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

關閉 SNAT

默認情況下,calico 訪問集群外網絡是通過 SNAT 成宿主機 ip 方式,在一些金融客戶環境中為了能實現防火墻規則,需要直接針對 POD ip 進行進行規則配置,所以需要關閉 natOutgoing

kubectl edit ippool/default-ipv4-ippool

將 natOutgoing: true修改為natOutgoing: false

此時,calico 網絡訪問集群外的 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

固定多個 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

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

責任編輯:龐桂玉 來源: 奇妙的Linux世界
相關推薦

2022-09-01 06:59:56

Kubernete云原生

2022-07-27 16:23:36

Kubernetes容器

2019-07-03 10:58:22

Kubernetes網絡插件

2019-12-27 10:33:43

運維架構技術

2023-10-08 18:07:42

Kubernetes開源容器

2020-03-06 16:00:04

KubernetesSpark容器

2010-01-21 22:19:25

網絡優化運維管理摩卡軟件

2014-09-23 11:35:43

IT運維管理

2020-10-30 08:34:58

Kubernetes運維技巧

2009-12-04 19:18:04

freebsd手工配置網絡

2010-09-29 17:55:57

Cacti網絡監控

2022-05-02 18:45:33

Kubernetes網絡模型

2021-06-22 10:14:44

Kubernetes容器運維

2015-08-10 10:56:59

運維互聯網

2015-08-27 09:35:29

OpenStack運維指南VLAN

2020-05-20 13:20:45

KubernetesSpark數據

2014-07-16 09:56:20

運維運營商

2021-09-10 15:16:19

Kubernetes核心組件運維

2024-07-25 11:22:23

2016-03-31 14:33:30

DevOps數據庫運維
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 999国产精品视频免费 | 四虎影院在线观看免费视频 | 免费激情网站 | 国产精品有限公司 | 一区二区三区视频在线观看 | 国产精品久久久久久妇女6080 | 97在线观视频免费观看 | 久久久久久高清 | 成人av免费播放 | 国产小网站| 国产成人综合网 | 久久久精品国产 | 午夜天堂精品久久久久 | 日本中出视频 | 国产成人综合网 | 在线免费观看成人 | 五月婷婷丁香 | 日韩视频一区二区在线 | 伊人狠狠| 91久久精品国产91久久 | 日韩不卡在线 | 毛片免费看 | 国产成人99久久亚洲综合精品 | 久久久久久999| 久久伊人亚洲 | 华人黄网站大全 | 一级黄色片美国 | 婷婷狠狠 | 精品国产精品三级精品av网址 | 欧美亚洲国产日韩 | 欧美伊人久久久久久久久影院 | 国产精品自拍啪啪 | 色综合久 | 国产一区二区三区视频免费观看 | 国产精品免费一区二区三区四区 | 久久久精品综合 | 超碰av在线| 国产亚洲精品精品国产亚洲综合 | 国产精品海角社区在线观看 | 97精品国产一区二区三区 | 久久精品国产免费一区二区三区 |