0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Kubernetes網(wǎng)絡(luò)的Antrea插件應(yīng)用

馬哥Linux運(yùn)維 ? 來源:csdn ? 2023-10-31 17:48 ? 次閱讀

在現(xiàn)代容器化應(yīng)用程序的世界中,容器編排平臺(tái)Kubernetes已經(jīng)成為標(biāo)準(zhǔn)。Kubernetes是一個(gè)分布式系統(tǒng),為了支持復(fù)雜的應(yīng)用和微服務(wù)架構(gòu),網(wǎng)絡(luò)是Kubernetes集群中不可或缺的一部分。能夠管理和編排容器化應(yīng)用程序,其中,監(jiān)控是一個(gè)非常重要的方面,可以幫助用戶了解集群的健康狀態(tài)、性能和可用性。

在本文中,將詳細(xì)介紹Kubernetes網(wǎng)絡(luò)插件中的【Antrea】插件。

1 基礎(chǔ)介紹

在Kubernetes中,網(wǎng)絡(luò)插件也稱為容器網(wǎng)絡(luò)接口(Container Network Interface,CNI)插件,用于實(shí)現(xiàn)容器之間的通信和網(wǎng)絡(luò)連接。以下是一些常見的Kubernetes網(wǎng)絡(luò)插件:

Flannel:Flannel是一個(gè)流行的CNI插件,它使用虛擬網(wǎng)絡(luò)覆蓋技術(shù)(overlay network)來連接不同節(jié)點(diǎn)上的容器。Flannel支持多種后端驅(qū)動(dòng),如VXLAN、UDP、Host-GW等。

Calico:Calico是一個(gè)開源的網(wǎng)絡(luò)和安全解決方案,它使用BGP協(xié)議來實(shí)現(xiàn)容器之間的路由。Calico支持靈活的網(wǎng)絡(luò)策略和安全規(guī)則,可用于大規(guī)模部署。

Weave Net:Weave Net是一個(gè)輕量級的CNI插件,通過創(chuàng)建虛擬網(wǎng)絡(luò)設(shè)備和網(wǎng)絡(luò)代理來連接不同節(jié)點(diǎn)上的容器。Weave Net支持overlay模式和直連模式,具有靈活性。

Cilium:Cilium是面向Kubernetes的高性能網(wǎng)絡(luò)和安全解決方案,利用eBPF(Extended Berkeley Packet Filter)技術(shù)來提供快速的容器間通信和網(wǎng)絡(luò)策略實(shí)施。

Canal:Canal是一個(gè)綜合性的CNI插件,結(jié)合了Calico和Flannel的功能。它可以使用Flannel提供overlay網(wǎng)絡(luò),同時(shí)使用Calico的網(wǎng)絡(luò)策略和安全性功能。

Antrea:Antrea是一個(gè)基于Open vSwitch的CNI插件,專為Kubernetes網(wǎng)絡(luò)和安全性而設(shè)計(jì)。它提供了高性能的網(wǎng)絡(luò)連接和網(wǎng)絡(luò)策略功能。

kube-router:kube-router是一個(gè)開源的CNI插件,它結(jié)合了網(wǎng)絡(luò)和服務(wù)代理功能。它支持BGP和IPIP協(xié)議,并具有負(fù)載均衡的特性。

這些是Kubernetes網(wǎng)絡(luò)插件中的一些常見選項(xiàng),每個(gè)插件都有其特定的優(yōu)勢和適用場景。選擇合適的網(wǎng)絡(luò)插件取決于你的需求、網(wǎng)絡(luò)拓?fù)浜托阅芤蟮纫蛩亍M瑫r(shí),Kubernetes社區(qū)也在不斷發(fā)展和推出新的網(wǎng)絡(luò)插件,以滿足不斷變化的需求。

2 Antrea 介紹

Antrea是一個(gè)功能強(qiáng)大的K8s網(wǎng)絡(luò)插件,具有高性能、網(wǎng)絡(luò)策略和可觀察性等優(yōu)勢,適用于各種規(guī)模和需求的K8s集群。通過深入了解Antrea的核心概念、優(yōu)缺點(diǎn)、使用場景和安裝步驟,可以更好地利用它來管理和保護(hù)您的容器化應(yīng)用。

2.1 概念介紹

Antrea是一個(gè)開源K8s網(wǎng)絡(luò)插件,它旨在提供高性能、安全和可擴(kuò)展的網(wǎng)絡(luò)連接和網(wǎng)絡(luò)策略。以下是Antrea的核心概念:

CNI插件:Antrea是一個(gè)CNI(Container Network Interface)插件,它負(fù)責(zé)管理K8s集群中容器的網(wǎng)絡(luò)接口和通信。它實(shí)現(xiàn)了K8s網(wǎng)絡(luò)模型,使容器能夠透明地互相通信。

Open vSwitch(OVS):Antrea使用OVS作為數(shù)據(jù)平面,它是一個(gè)高性能的虛擬交換機(jī),用于處理網(wǎng)絡(luò)數(shù)據(jù)包的轉(zhuǎn)發(fā)。OVS提供了可編程的數(shù)據(jù)平面,使Antrea能夠?qū)崿F(xiàn)高級網(wǎng)絡(luò)功能。

網(wǎng)絡(luò)策略:Antrea支持K8s的網(wǎng)絡(luò)策略,允許管理員定義哪些容器可以與哪些其他容器通信,以及如何實(shí)現(xiàn)安全性。這有助于確保集群內(nèi)的網(wǎng)絡(luò)安全性和隔離性。

服務(wù)代理:Antrea還提供了服務(wù)代理功能,使K8s服務(wù)能夠透明地與后端Pod通信,無需公開Pod的IP地址。

2.2 優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

輕量級:Antrea的設(shè)計(jì)非常輕量級,占用資源少,對系統(tǒng)性能影響小。

易于配置:Antrea提供了簡單易用的配置文件,方便用戶快速上手。

高性能:Antrea采用了高效的數(shù)據(jù)結(jié)構(gòu)和算法,確保了良好的性能表現(xiàn)。

支持多種協(xié)議:Antrea支持TCP、UDP等多種協(xié)議,滿足不同場景的需求。

可擴(kuò)展性:Antrea提供了豐富的API,方便用戶進(jìn)行二次開發(fā)和定制。

可觀察性: 基于 Calico,Antrea 可以提供豐富的網(wǎng)絡(luò)可觀察性,有助于管理員更好地了解網(wǎng)絡(luò)狀況。

缺點(diǎn):

功能有限:與其他成熟的k8s網(wǎng)絡(luò)插件相比,Antrea的功能相對較少,可能不滿足部分復(fù)雜場景的需求。

社區(qū)支持有限:由于Antrea相對較新,其社區(qū)支持和文檔可能不如其他成熟插件豐富。

復(fù)雜性:對于初學(xué)者來說,Antrea的設(shè)置和配置可能有些復(fù)雜,特別是在需要高級網(wǎng)絡(luò)策略的情況下。

OVS依賴:Antrea依賴于OVS作為數(shù)據(jù)平面,這可能在某些環(huán)境中引入了額外的復(fù)雜性。

2.3 使用場景

Antrea適用于以下場景:

微服務(wù)架構(gòu):在微服務(wù)架構(gòu)中,服務(wù)之間的通信和負(fù)載均衡非常重要。Antrea可以幫助實(shí)現(xiàn)服務(wù)的自動(dòng)發(fā)現(xiàn)和負(fù)載均衡,提高系統(tǒng)的可擴(kuò)展性和可用性。

容器化部署:在容器化部署的場景中,網(wǎng)絡(luò)插件是必不可少的組件。Antrea可以幫助容器之間進(jìn)行通信,同時(shí)實(shí)現(xiàn)與外部網(wǎng)絡(luò)的連接。

邊緣計(jì)算:在邊緣計(jì)算場景中,服務(wù)分布廣泛,需要實(shí)現(xiàn)高效的通信和負(fù)載均衡。Antrea可以滿足這些需求,提高邊緣節(jié)點(diǎn)的利用率。

大規(guī)模集群:當(dāng)您需要在大規(guī)模K8s集群中實(shí)現(xiàn)高性能容器通信時(shí),Antrea是一個(gè)不錯(cuò)的選擇。

網(wǎng)絡(luò)策略需求:在需要精確的網(wǎng)絡(luò)策略控制、安全性和隔離性的多租戶環(huán)境中,Antrea的網(wǎng)絡(luò)策略功能非常有用。

可觀察性要求:如果需要詳細(xì)的網(wǎng)絡(luò)監(jiān)控和日志記錄以便進(jìn)行故障排除和性能優(yōu)化,Antrea提供了這些功能。

3 安裝使用

要安裝Antrea插件,可以按照以下步驟進(jìn)行操作:

1、下載Antrea YAML文件

2、編輯YAML文件

3、應(yīng)用YAML文件

4、等待安裝完成

5、配置網(wǎng)絡(luò)策略

6、測試

3.1: 下載Antrea YAML文件

在K8s集群中的一臺(tái)機(jī)器上執(zhí)行以下命令來下載Antrea的YAML文件??梢詮腁ntrea的GitHub倉庫獲取最新版本的YAML文件。

curl -O https://raw.githubusercontent.com/vmware-tanzu/antrea/main/build/yamls/antrea.yml

3.2: 編輯YAML文件

打開下載的Antrea YAML文件(通常名為antrea.yml),根據(jù)集群需求進(jìn)行編輯??梢允褂梦谋揪庉嬈鞔蜷_文件,并根據(jù)需要進(jìn)行配置。以下是一個(gè)示例:

apiVersion: operator.antrea.io/v1alpha1


kind: AntreaCluster
metadata:
  name: antrea-cluster
spec:
  defaultAntreaAgent: {}
  controller:
    # Antrea控制器的配置選項(xiàng)
    service:
      type: LoadBalancer  # 選擇適合您集群的Service類型
    networkPolicy:
      enable: true  # 啟用網(wǎng)絡(luò)策略
  agent:
    # Antrea代理的配置選項(xiàng)
    logLevel: info  # 設(shè)置日志級別
    ovs:
      bridgeName: br-int  # 指定OVS的網(wǎng)橋名稱
    podCIDR: 192.168.0.0/16  # 指定Pod的CIDR范圍

確保文件中的配置與K8s集群拓?fù)浜途W(wǎng)絡(luò)策略需求一致。保存并關(guān)閉文件。

3.3:應(yīng)用YAML文件

使用kubectl或其他K8s集群管理工具,將編輯后的YAML文件應(yīng)用到您的K8s集群中。執(zhí)行以下命令:

kubectl apply -f antrea.yml

這將開始Antrea插件的安裝和配置過程。

3.4:等待安裝完成

等待一段時(shí)間,直到Antrea插件在K8s集群中自動(dòng)安裝和配置完成??梢允褂靡韵旅顏頇z查Antrea相關(guān)的Pod是否處于運(yùn)行狀態(tài):

kubectl get pods -n kube-system | grep antrea

當(dāng)所有相關(guān)的Antrea Pod都處于"Running"狀態(tài)時(shí),表示安裝完成。

antrea-agent-74d2s               1/1     Running     4m
antrea-controller-9x6z2          1/1     Running     4m

3.5:配置網(wǎng)絡(luò)策略

根據(jù)具體需求,使用K8s網(wǎng)絡(luò)策略來定義容器之間的通信規(guī)則??梢詣?chuàng)建和應(yīng)用網(wǎng)絡(luò)策略對象,以控制容器之間的流量。

3.6:測試

最后,確保K8s集群中的容器能夠按照您的網(wǎng)絡(luò)策略進(jìn)行通信,同時(shí)滿足安全性和隔離性要求??梢圆渴鹨恍y試應(yīng)用程序,并確保它們遵循所定義的網(wǎng)絡(luò)策略。這個(gè)示例將使用Nginx容器作為測試應(yīng)用程序,并限制它們之間的通信。

步驟 1:創(chuàng)建命名空間

首先,創(chuàng)建一個(gè)新的命名空間,以隔離我們的測試應(yīng)用程序:

kubectl create namespace test-namespace

步驟 2:部署兩個(gè)Nginx Pod

創(chuàng)建兩個(gè)Nginx Pod,并將它們部署到剛剛創(chuàng)建的命名空間中:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-1
  namespace: test-namespace
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest


---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-2
  namespace: test-namespace
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest

將上述YAML文件保存為nginx-deployment.yaml,然后使用以下命令部署它們:

kubectl apply -f nginx-deployment.yaml

步驟 3:定義網(wǎng)絡(luò)策略

創(chuàng)建一個(gè)網(wǎng)絡(luò)策略,限制來自另一個(gè)Pod的流量。

在這個(gè)示例中,我們將阻止nginx-deployment-1中的Pod與nginx-deployment-2中的Pod進(jìn)行通信:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-nginx-communication
  namespace: test-namespace
spec:
  podSelector:
    matchLabels:
      app: nginx
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: nginx

將上述YAML文件保存為network-policy.yaml,然后使用以下命令創(chuàng)建網(wǎng)絡(luò)策略:

kubectl apply -f network-policy.yaml

步驟 4:測試網(wǎng)絡(luò)策略

現(xiàn)在,我們已經(jīng)定義了一個(gè)網(wǎng)絡(luò)策略,它應(yīng)該阻止nginx-deployment-1中的Pod與nginx-deployment-2中的Pod進(jìn)行通信。我們可以通過在nginx-deployment-1中的Pod上執(zhí)行以下命令來進(jìn)行測試:

# 創(chuàng)建一個(gè)臨時(shí)Pod,用于測試通信
kubectl run -i --tty --rm debug --image=nginx --namespace=test-namespace
# 在臨時(shí)Pod中嘗試訪問另一個(gè)Pod的IP地址
curl 

如果網(wǎng)絡(luò)策略生效,將看到連接超時(shí)或其他錯(cuò)誤,表示nginx-deployment-1中的Pod無法與nginx-deployment-2中的Pod進(jìn)行通信。

curl: (7) Failed to connect to port 80: Connection timed out

通過這個(gè)示例,可以看到如何使用Kubernetes網(wǎng)絡(luò)策略來確保容器之間的通信滿足安全性和隔離性要求。根據(jù)具體的實(shí)際需求,可以定義更復(fù)雜的網(wǎng)絡(luò)策略來滿足特定的應(yīng)用程序和安全需求。

編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1324

    瀏覽量

    78757
  • UDP
    UDP
    +關(guān)注

    關(guān)注

    0

    文章

    317

    瀏覽量

    33801
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    490

    瀏覽量

    21986
  • kubernetes
    +關(guān)注

    關(guān)注

    0

    文章

    222

    瀏覽量

    8657

原文標(biāo)題:深入解析k8s 網(wǎng)絡(luò)插件—Antrea

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Kubernetes 網(wǎng)絡(luò)模型如何實(shí)現(xiàn)常見網(wǎng)絡(luò)任務(wù)

    Kubernetes 是為運(yùn)行分布式集群而建立的,分布式系統(tǒng)的本質(zhì)使得網(wǎng)絡(luò)成為 Kubernetes 的核心和必要組成部分,了解 Kubernetes
    的頭像 發(fā)表于 10-08 11:32 ?987次閱讀

    Kubernetes的Device Plugin設(shè)計(jì)解讀

    摘要: Kubernetes的生態(tài)地位已經(jīng)確立,可擴(kuò)展性將是其發(fā)力的主戰(zhàn)場。異構(gòu)計(jì)算作為非常重要的新戰(zhàn)場,Kubernetes非常重視。而異構(gòu)計(jì)算需要強(qiáng)大的計(jì)算力和高性能網(wǎng)絡(luò),需要提供一種統(tǒng)一的方式
    發(fā)表于 03-12 16:23

    淺析Kubernetes

    【k8s】Kubernetes基礎(chǔ)概念
    發(fā)表于 09-27 09:11

    不吹不黑,今天我們來聊一聊 Kubernetes 落地的三種方式

    。那對于這些用戶而言,肯定不能看著別人吃肉自己啃窩窩頭。On Kubernetes 的落地形態(tài)其實(shí)是一種妥協(xié)和中間過程,一方面很難一下子拋棄已有的基礎(chǔ)設(shè)施,例如服務(wù)治理、監(jiān)控、網(wǎng)絡(luò)拓?fù)涞鹊?,只能在原?/div>
    發(fā)表于 10-12 16:07

    Kubernetes上運(yùn)行Kubernetes

    開源容器編排引擎 Kubernetes 絕對有魔力。 一直以來,容器就是個(gè)很酷的概念,但事實(shí)上,廣泛部署卻十分困難。你幾乎沒法手動(dòng)管理容器之間的網(wǎng)絡(luò)、持續(xù)存儲(chǔ)和數(shù)百個(gè)容器間的自動(dòng)擴(kuò)展,而一個(gè)讓人
    發(fā)表于 09-30 13:33 ?0次下載
    在<b class='flag-5'>Kubernetes</b>上運(yùn)行<b class='flag-5'>Kubernetes</b>

    Kubernetes網(wǎng)絡(luò)隔離NetworkPolicy實(shí)驗(yàn)

    Kubernetes的一個(gè)重要特性就是要把不同node節(jié)點(diǎn)的pod(container)連接起來,無視物理節(jié)點(diǎn)的限制。但是在某些應(yīng)用環(huán)境中,比如公有云,不同租戶的pod不應(yīng)該互通,這個(gè)時(shí)候就需要網(wǎng)絡(luò)
    發(fā)表于 11-28 10:00 ?2631次閱讀

    Kubernetes網(wǎng)絡(luò)模型介紹以及如何實(shí)現(xiàn)常見網(wǎng)絡(luò)任務(wù)

    Kubernetes 是為運(yùn)行分布式集群而建立的,分布式系統(tǒng)的本質(zhì)使得網(wǎng)絡(luò)成為 Kubernetes 的核心和必要組成部分,了解 Kubernetes
    的頭像 發(fā)表于 05-05 20:22 ?1674次閱讀

    Antrea Kubernetes網(wǎng)絡(luò)解決方案

    ./oschina_soft/antrea.zip
    發(fā)表于 05-16 09:31 ?6次下載
    <b class='flag-5'>Antrea</b> <b class='flag-5'>Kubernetes</b><b class='flag-5'>網(wǎng)絡(luò)</b>解決方案

    Kubernetes網(wǎng)絡(luò)模型的基礎(chǔ)知識(shí)

    Kubernetes 是為運(yùn)行分布式集群而建立的,分布式系統(tǒng)的本質(zhì)使得網(wǎng)絡(luò)成為 Kubernetes 的核心和必要組成部分,了解 Kubernetes
    的頭像 發(fā)表于 07-20 09:46 ?1104次閱讀

    Kubernetes集群發(fā)生網(wǎng)絡(luò)異常時(shí)如何排查

    本文將引入一個(gè)思路:“在 Kubernetes 集群發(fā)生網(wǎng)絡(luò)異常時(shí)如何排查”。文章將引入 Kubernetes 集群中網(wǎng)絡(luò)排查的思路,包含網(wǎng)絡(luò)
    的頭像 發(fā)表于 09-02 09:45 ?4569次閱讀

    跟蹤Kubernetes網(wǎng)絡(luò)流量路徑

    通過本文,你將了解在 Kubernetes 內(nèi)外,數(shù)據(jù)包是如何轉(zhuǎn)發(fā)的,從原始的 Web 請求開始,到托管應(yīng)用程序的容器。 在深入了解在 Kubernetes 集群中數(shù)據(jù)包如何流轉(zhuǎn)的細(xì)節(jié)之前,先明確一下 Kubernetes
    的頭像 發(fā)表于 10-24 10:22 ?1050次閱讀

    Kubernetes中的網(wǎng)絡(luò)模型

    kubernetes 中,underlay network 中比較典型的例子是通過將宿主機(jī)作為路由器設(shè)備,Pod 的網(wǎng)絡(luò)則通過學(xué)習(xí)路由條目從而實(shí)現(xiàn)跨節(jié)點(diǎn)通訊。
    的頭像 發(fā)表于 12-14 10:07 ?765次閱讀

    Kubernetes Pod如何獨(dú)立工作

    在學(xué)習(xí) Kubernetes 網(wǎng)絡(luò)模型的過程中,了解各種網(wǎng)絡(luò)組件的作用以及如何交互非常重要。本文就介紹了各種網(wǎng)絡(luò)組件在 Kubernetes
    的頭像 發(fā)表于 05-16 14:29 ?545次閱讀
    <b class='flag-5'>Kubernetes</b> Pod如何獨(dú)立工作

    各種網(wǎng)絡(luò)組件在 Kubernetes 集群中是如何交互的

    Kubernetes 中有多種網(wǎng)絡(luò)設(shè)置方法,以及 container runtime 的各種選項(xiàng)。這篇文章將使用 Flannel 作為 network provider,并使用 Containered 作為 container runtime。
    的頭像 發(fā)表于 05-23 09:49 ?698次閱讀
    各種<b class='flag-5'>網(wǎng)絡(luò)</b>組件在 <b class='flag-5'>Kubernetes</b> 集群中是如何交互的

    探討Kubernetes中的網(wǎng)絡(luò)模型(各種網(wǎng)絡(luò)模型分析)

    kubernetes 中,underlay network 中比較典型的例子是通過將宿主機(jī)作為路由器設(shè)備,Pod 的網(wǎng)絡(luò)則通過學(xué)習(xí)路由條目從而實(shí)現(xiàn)跨節(jié)點(diǎn)通訊。
    發(fā)表于 08-24 12:44 ?286次閱讀
    探討<b class='flag-5'>Kubernetes</b>中的<b class='flag-5'>網(wǎng)絡(luò)</b>模型(各種<b class='flag-5'>網(wǎng)絡(luò)</b>模型分析)