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

云原生 Spiderpool:基于跨越網絡區域的 IP 分配

云計算 云原生
不同網絡區域的 Pod 能夠通過 Pod IP、clusterIP、nodePort 等方式通信,Spiderpool 可以很好地實現基于跨越網絡區域的 IP 分配需求。

Underlay 網絡是底層基礎網絡,具有低延遲、可靠、安全等特性。這些特性能滿足一些延時敏感的應用業務需求、提供優質的用戶體驗以及有效管理和保護網絡資源,通常應用在延時敏感、防火墻安全管控中:

  • 延時敏感的應用:某些特定行業或應用(如金融交易、實時視頻傳輸等)對網絡延遲非常敏感。在這種情況下,Underlay 網絡可以提供更低的延遲,通過直接控制物理和鏈路層的連接來減少數據傳輸的時間。這種低延遲的特性使得 Underlay 網絡成為滿足這些應用需求的理想選擇。
  • 防火墻安全管控:在集群中,防火墻通常用于管理南北向通信,即集群內部和外部網絡之間的通信。為了實現安全管控,防火墻需要對通信流量進行檢查和過濾,并對出口通信進行限制。在這種情況下,通過 Underlay 網絡的 IPAM 對應用固定出口 IP 地址,可以更好地管理和控制集群與外部網絡之間的通信,提高網絡的安全性。

隨著數據中心私有云的不斷普及,Underlay 網絡作為數據中心網絡架構的重要組成部分,已經被廣泛應用于數據中心的網絡架構中,以提供更高效的網絡傳輸和更好的網絡拓撲管理能力。

01跨網絡區域的 IP 地址分配需求

筆者最近在使用 Underlay 網絡時,遇到了這樣的場景:有一個集群,但集群的節點分布在不同地區或數據中心,一些節點的區域只能使用子網 10.6.1.0/24,一些節點的區域只能使用子網 172.16.2.0/24, 在此背景下,當一個應用跨子網部署副本時,要求 IPAM 能夠在不同的節點上,為同一個應用下的不同 Pod 分配出與子網匹配的 IP 地址,且能正確運行。對此,希望能通過 IP 地址管理(IPAM)實現跨網絡區域的 IP 分配,為應用程序提供靈活的部署和擴展性。

該場景的網絡拓撲圖如下:

圖片

通過上述場景,在 Underlay 網絡下,同一應用的不同副本之間實現跨域網絡的 IP 地址分配是生產場景中常見且需要去解決的需求。開源社區中的一個 Kubernetes 的 IPAM 插件項目:Spiderpool,帶來一種全新的解決方案,它可以靈活而智能地實現跨網絡區域的 IP 分配,一起來了解一下。

02全新解決方案:Spiderpool

Spiderpool (https://github.com/spidernet-io/spiderpool) 是一個 Kubernetes 的 IPAM 插件項目,其主要針對于 Underlay 網絡的 IP 地址管理需求而設計,能夠為任何兼容第三方 IPAM 插件的 CNI 項目所使用。而基于跨越網絡區域的 IP 分配是 Spiderpool 的一個重要功能支持,同時它還包括應用 IP 地址固定、IP 地址自動彈性擴縮容、多網卡、雙棧支持等特點。更多說明參考 Spiderpool 功能 (https://github.com/spidernet-io/spiderpool/blob/main/README-zh_CN.md) 介紹。

03環境

為演示 Spiderpool 的跨網絡區域分配 IP 的能力,筆者準備了一套跨網絡區域的集群,并為節點打上可用的子網標簽,以下是所使用的集群信息:

~# kubectl get nodes -owide
NAME                STATUS   ROLES           AGE  VERSION   INTERNAL-IP   EXTERNAL-IP
controller-node-1   Ready    control-plane   1h   v1.25.3   10.6.168.71   <none>
worker-node-1       Ready    <none>          1h   v1.25.3   10.7.168.73   <none>        

~# kubectl get nodes --show-labels
NAME                STATUS   ROLES                  AGE  VERSION   LABELS
controller-node-1   Ready    control-plane,master   1h   v1.25.3   node-subnet=subnet-6, ...
worker-node-1       Ready    <none>                 1h   v1.25.3   node-subnet=subnet-7, ...

以下是筆者集群的網絡拓撲圖:

圖片

04安裝

根據 Spiderpool 的官方文檔: https://github.com/spidernet-io/spiderpool/blob/main/docs/usage/get-started-macvlan-zh_CN.md 搭建了一套 Multus 、Macvlan、Veth 、Spiderpool 的環境,以下是根據自身環境已創建的 SpiderSubnet 實例:

~# kubectl get spidersubnet
NAME       VERSION   SUBNET        ALLOCATED-IP-COUNT   TOTAL-IP-COUNT
subnet-6   4         10.6.0.0/16   0                    10
subnet-7   4         10.7.0.0/16   0                    10

以下示例中將會創建 Multus 的 network-attachment-definition 配置: macvlan-conf,其中:

  • master:在此示例用接口 ens192 作為 master 的參數,注意的是跨網絡區的不同節點的接口名稱需一致,此參數應與集群節點上的接口名稱匹配。
cat <<EOF | kubectl apply -f -
apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
  name: macvlan-conf
  namespace: kube-system
spec:
  config: |-
    {
        "cniVersion": "0.3.1",
        "name": "macvlan-conf",
        "plugins": [
            {
                "type": "macvlan",
                "master": "ens192",
                "mode": "bridge",
                "ipam": {
                    "type": "spiderpool"
                }
            },{
                  "type": "veth",
                  "service_cidr": ["10.233.0.0/18"]
              }
        ]
    }
EOF

05創建 IPPools

Spiderpool 的 CRD:SpiderIPPool 提供了 nodeAffinity 字段,當 Pod 在某個節點上啟動,嘗試從 SpiderIPPool 分配 IP 時,若 Pod 所在節點符合該 nodeAffinity 設置,則能從該 SpiderIPPool 中成功分配出 IP,否則無法從該 SpiderIPPool 中分配出IP。

依據如上所述,使用如下的 Yaml,創建 2 個 SpiderIPPool,它們將為不同節點上的 Pod 提供 IP 地址。

~# cat <<EOF | kubectl apply -f -
apiVersion: spiderpool.spidernet.io/v2beta1
kind: SpiderIPPool
metadata:
  name: test-ippool-6
spec:
  subnet: 10.6.0.0/16
  ips:
    - 10.6.168.60-10.6.168.69
  gateway: 10.6.0.1
  nodeAffinity:
    matchExpressions:
    - {key: node-subnet, operator: In, values: [subnet-6]}
---
apiVersion: spiderpool.spidernet.io/v2beta1
kind: SpiderIPPool
metadata:
  name: test-ippool-7
spec:
  subnet: 10.7.0.0/16
  ips:
    - 10.7.168.60-10.7.168.69
  gateway: 10.7.0.1
  nodeAffinity:
    matchExpressions:
    - {key: node-subnet, operator: In, values: [subnet-7]}
EOF

06創建應用

以下的示例 Yaml 中, 會創建一個 daemonSet 應用,其中:

  •  ipam.spidernet.io/ippool:用于指定 Spiderpool 的 IP 池,可以設置多個 IP 池用作備選池,Spiderpool 會按照 "IP 池數組" 中元素的順序依次嘗試分配 IP 地址,在節點跨網絡區域的場景分配 IP 時,如果應用副本被調度到的節點,符合第一個 IP 池的 _**IPPool.spec.nodeAffinity**_ 注解, Pod 會從該池中獲得 IP 分配,如果不滿足,Spiderpool 會嘗試從備選池中選擇 IP 池繼續為 Pod 分配 IP ,直到所有備選池全部篩選失敗??梢酝ㄟ^[備選池](https://github.com/spidernet-io/spiderpool/blob/main/docs/usage/ippool-multi.md) 了解更多用法。
  • v1.multus-cni.io/default-network:用于指定 Multus 的 NetworkAttachmentDefinition 配置,會為應用創建一張默認網卡。
~# cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: test-app
spec:
  selector:
    matchLabels:
      app: test-app
  template:
    metadata:
      annotations:   
        ipam.spidernet.io/ippool: |-
          {
            "ipv4": ["test-ippool-6", "test-ippool-7"]
          }
        v1.multus-cni.io/default-network: kube-system/macvlan-conf
      labels:
        app: test-app
    spec:
      containers:
      - name: test-app
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
          protocol: TCP
EOF

完成創建后,可以發現 Pod 的 IP 屬于 Pod 所在節點的子網內,所對應的 IP 池為應用的不同副本分配了 IP 地址。

~# kubectl get po -l app=test-app -o wide
NAME             READY   STATUS    RESTARTS   AGE   IP            NODE                NOMINATED NODE   READINESS GATES
test-app-j9ftl   1/1     Running   0          45s   10.6.168.65   controller-node-1   <none>           <none>
test-app-nkq5h   1/1     Running   0          45s   10.7.168.61   worker-node-1       <none>           <none>

~# kubectl get spiderippool
NAME            VERSION   SUBNET        ALLOCATED-IP-COUNT   TOTAL-IP-COUNT   DEFAULT   DISABLE
test-ippool-6   4         10.6.0.0/16   1                    10               false     false
test-ippool-7   4         10.7.0.0/16   1                    10               false     false

跨網絡區域的 Pod 與 Pod 之間的通訊情況:

~# kubectl exec -ti test-app-j9ftl -- ping 10.7.168.61 -c 2

PING 10.7.168.61 (10.7.168.61) 56(84) bytes of data.
64 bytes from 10.7.168.61: icmp_seq=1 ttl=63 time=1.06 ms
64 bytes from 10.7.168.61: icmp_seq=2 ttl=63 time=0.515 ms

--- 10.7.168.61 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.515/0.789/1.063/0.274 ms

07結論

經過測試:不同網絡區域的 Pod 能夠通過 Pod IP、clusterIP、nodePort 等方式通信,Spiderpool 可以很好地實現基于跨越網絡區域的 IP 分配需求。


責任編輯:武曉燕 來源: 道客船長
相關推薦

2023-06-29 08:16:11

Spiderpool網絡IPAM

2023-06-29 08:38:37

2013-07-23 09:47:22

2017-11-13 10:04:08

IP存儲iSCSI

2022-08-21 07:25:09

Flink云原生K8S

2010-08-23 17:35:46

DHCP協議

2021-03-23 11:09:36

云計算

2023-09-11 07:47:25

2010-08-31 22:29:54

DHCP分配

2010-08-26 21:52:55

DHCP分配

2023-09-27 23:23:09

云原生K8sGPT

2011-01-04 09:20:00

IP地址管理網絡配置

2022-07-20 15:19:17

容器Docker

2015-08-20 10:54:41

企業云計算

2015-09-24 15:19:27

2013-10-15 09:11:26

多租戶云計算Overlay

2022-02-11 09:31:23

IPV4IP地址IANA

2021-01-28 17:27:13

AWS自研處理器

2023-11-15 13:20:14

Python圖像分割

2022-04-07 10:17:18

云原生服務器優化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区av | a在线观看免费 | 黄网站色大毛片 | 亚洲啪啪一区 | 亚洲伊人a | 中文字幕伊人 | 99资源| 超黄毛片 | 凹凸日日摸日日碰夜夜 | 在线视频一区二区 | 国产成人一区 | 国产日韩视频在线 | 完全免费av在线 | 亚洲激情网站 | 欧美视频第三页 | 国产精品一区二区三区在线播放 | 久久久亚洲一区 | 午夜视频网站 | 国产成人精品久久二区二区91 | 国产成人免费视频网站视频社区 | 国产成人午夜精品影院游乐网 | 69热视频在线观看 | 欧美成人精品一区二区男人看 | 干干干操操操 | 久久久精| 一区福利视频 | 巨大荫蒂视频欧美另类大 | 在线成人av | 国产www. | 日韩免费激情视频 | 日本精品一区二区在线观看 | 国产一区二区三区在线 | 亚洲综合首页 | av中文字幕在线播放 | 日韩电影中文字幕 | 黄色片大全在线观看 | 国产1区2区在线观看 | 综合精品| 精品1区2区 | 午夜影院在线视频 | 亚洲乱码国产乱码精品精98午夜 |