RM新时代网站-首页

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

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

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

Kubernetes Pod多網(wǎng)卡方案MULTUS

馬哥Linux運(yùn)維 ? 來源:馬哥Linux運(yùn)維 ? 作者:馬哥Linux運(yùn)維 ? 2022-06-22 10:08 ? 次閱讀

在 Kubernetes中,網(wǎng)絡(luò)是非常重要的一個(gè)領(lǐng)域。Kubernetes 本身不提供網(wǎng)絡(luò)解決方案,但是提供了 CN I規(guī)范。這些規(guī)范被許多 CNI 插件(例如 WeaveNet,F(xiàn)lannel,Calico 等)遵守。這些插件中任何一個(gè)都可以在集群上使用和部署以提供網(wǎng)絡(luò)解決方案。該網(wǎng)絡(luò)稱為集群的默認(rèn)網(wǎng)絡(luò)。此默認(rèn)網(wǎng)絡(luò)使 Pods 不僅可以在同一節(jié)點(diǎn)上而且可以在群集中的各個(gè)節(jié)點(diǎn)之間相互通信。

隨著發(fā)展,Kubernetes 缺乏支持 VNF 中多個(gè)網(wǎng)絡(luò)接口的所需功能。傳統(tǒng)上,網(wǎng)絡(luò)功能使用多個(gè)網(wǎng)絡(luò)接口分離控制,管理和控制用戶/數(shù)據(jù)的網(wǎng)絡(luò)平面。他們還用于支持不同的協(xié)議,滿足不同的調(diào)整和配置要求。

為了解決這個(gè)需求,英特爾實(shí)現(xiàn)了 MULTUS 的 CNI 插件,其中提供了將多個(gè)接口添加到 Pod 的功能。這允許 POD 通過不同的接口連接到多個(gè)網(wǎng)絡(luò),并且每個(gè)接口都將使用其自己的 CNI 插件。

下面是 Multus CNI 提供的連接到 Pod 的網(wǎng)絡(luò)接口的圖示。該圖顯示了具有三個(gè)接口的容器:eth0,net0net1eth0連接 Kubernetes 集群網(wǎng)絡(luò)以連接kubernetes服務(wù)器/服務(wù)(例如 Kubernetes api-server,kubelet 等)。net0net1是其他網(wǎng)絡(luò)附件,并通過使用其他 CNI 插件(例如vlan / vxlan / ptp)連接到其他網(wǎng)絡(luò)。

2f234896-f167-11ec-ba43-dac502259ad0.jpg

MULTUS 工作原理

Kubernetes 當(dāng)前沒有提供為POD添加額外的接口選項(xiàng)的規(guī)定,或支持多個(gè) CNI 插件同時(shí)工作的規(guī)定,但是它確實(shí)提供了一種由 API 服務(wù)器擴(kuò)展受支持的API的機(jī)制。使用 "自定義資源定義" 可以做到這一點(diǎn)。MULTUS依賴于 "自定義資源定義" 來存儲(chǔ)其他接口和CNI插件所需的信息

2f33682a-f167-11ec-ba43-dac502259ad0.jpg

我們首先需要確保將 MULTUS 二進(jìn)制文件放置在 /opt/cni/bin 位置的所有節(jié)點(diǎn)上,并在/etc/cni/net.d位置創(chuàng)建一個(gè)新的配置文件。與 MULTUS 使用的 kubeconfig 文件一起使用。

/etc/cni/net.d中創(chuàng)建的新配置文件基于集群中已經(jīng)存在的默認(rèn)網(wǎng)絡(luò)配置。

在此之后,CRD 用于定義新的種類名稱 "NetworkAttachmentDefinition",以及服務(wù)帳戶和 MULTUS 的集群角色以及相應(yīng)的綁定。這個(gè)新的集群角色將提供對(duì)隨 CRD 添加的新 API 組以及默認(rèn) API 組中 Pod 資源的訪問權(quán)限。

然后創(chuàng)建類型為 "NetworkAttachmentDefinition" 的客戶資源實(shí)例,該實(shí)例稍后將在創(chuàng)建具有多個(gè)接口的 Pod 時(shí)使用。

部署示例

在本文中,我們將多次提及兩件事:

  • "默認(rèn)網(wǎng)絡(luò)" - 這是您的Pod到Pod網(wǎng)絡(luò)。這就是集群中 Pod 之間相互通信的方式,以及它們之間的連通性。一般而言,這被稱為名為 eth0 的接口。此接口始終連接到您的 Pod,以便它們之間可以相互連接。除此之外,我們還將添加接口。
  • “ CRD” - 自定義資源定義。自定義資源是擴(kuò)展 Kubernetes API 的一種方式。我們?cè)谶@里使用這些存儲(chǔ) Multus 可以讀取的一些信息。首先,我們使用它們來存儲(chǔ)附加到您的 Pod 的每個(gè)其他接口的配置。

目前支持 Kubernetes 1.16+ 版本。

安裝

我們建議的用于部署 Multus 的快速入門方法是使用 Daemonset(在群集中的每個(gè)節(jié)點(diǎn)上運(yùn)行 Pod 的方法)進(jìn)行部署,該 Pod 會(huì)安裝 Multus 二進(jìn)制文件并配置 Multus 以供使用。

首先,克隆此 GitHub 存儲(chǔ)庫。

$gitclonehttps://github.com/intel/multus-cni.git&&cdmultus-cni

我們將在此存儲(chǔ)庫中使用帶有kubectl的YAML文件。

$cat./images/multus-daemonset.yml|kubectlapply-f-

Multus daemonset 完成了那些工作?

  • 啟動(dòng) Multus 守護(hù)程序集,這會(huì)在每個(gè)節(jié)點(diǎn)上運(yùn)行一個(gè)pod,從而在/opt/cni/bin中的每個(gè)節(jié)點(diǎn)上放置一個(gè) Multus 二進(jìn)制文件
  • 按照字母順序讀取/etc/cni/net.d中的第一個(gè)配置文件,并為 Multus 創(chuàng)建一個(gè)新的配置文件,即/etc/cni/net.d/00-multus.conf,此配置是自動(dòng)生成并基于默認(rèn)網(wǎng)絡(luò)配置(假定是按字母順序排列的第一個(gè)配置)
  • 在每個(gè)節(jié)點(diǎn)上創(chuàng)建一個(gè)/etc/cni/net.d/multus.d目錄,其中包含用于 Multus 訪問 Kubernetes API 的身份驗(yàn)證信息。

創(chuàng)建其他接口

我們要做的第一件事是為我們附加到Pod的每個(gè)其他接口創(chuàng)建配置。我們將通過創(chuàng)建自定義資源來做到這一點(diǎn)??焖偃腴T安裝的一部分會(huì)創(chuàng)建一個(gè) "CRD" (自定義資源定義,它是我們保留這些自定義資源的位置),我們將在其中存儲(chǔ)每個(gè)接口的配置。

CNI 配置

我們將添加的每個(gè)配置都是CNI配置。如果您不熟悉它們,讓我們快速分解它們。這是一個(gè)示例CNI配置:

{
"cniVersion":"0.3.0",
"type":"loopback",
"additional":"information"
}

CNI配置是 JSON,我們這里有一個(gè)結(jié)構(gòu),其中包含一些我們感興趣的東西:

  • cniVersion:告訴每個(gè) CNI 插件正在使用哪個(gè)版本,如果使用的版本太晚(或太早),則可以提供插件信息。
  • type:告訴 CNI 在磁盤上調(diào)用哪個(gè)二進(jìn)制文件。每個(gè) CNI 插件都是一個(gè)二進(jìn)制文件。通常,這些二進(jìn)制文件存儲(chǔ)在每個(gè)節(jié)點(diǎn)上的/opt/cni/bin中,并且 CNI 執(zhí)行此二進(jìn)制文件。在這種情況下,我們指定了loopback二進(jìn)制文件(它將創(chuàng)建一個(gè)loopback類型的網(wǎng)絡(luò)接口)。如果這是您首次安裝 Multus,則可能需要驗(yàn)證 "type" 字段中的插件是否確實(shí)在/opt/cni/bin目錄中。
  • additional:此字段以此處為例,每個(gè) CNI 插件都可以在JSON中指定所需的任何配置參數(shù)。這些特定于您在 "type" 字段中調(diào)用的二進(jìn)制文件。

當(dāng) CNI 配置更改時(shí),您不需要重新加載或刷新 Kubelets。每次創(chuàng)建和刪除 Pod 時(shí)都會(huì)讀取這些內(nèi)容。因此,如果您更改配置,它將在下一次創(chuàng)建 Pod 時(shí)應(yīng)用。如果現(xiàn)有 Pod 需要新配置,則可能需要重新啟動(dòng)。

將配置存儲(chǔ)為自定義資源

因此,我們要?jiǎng)?chuàng)建一個(gè)附加接口。讓我們創(chuàng)建一個(gè) macvlan 接口供 Pod 使用。我們將創(chuàng)建一個(gè)自定義資源,該資源定義接口的 CNI 配置。

請(qǐng)注意,在以下命令中有一種:NetworkAttachmentDefinition。這是我們配置的名字-它是 Kubernetes 的自定義擴(kuò)展,定義了我們?nèi)绾螌⒕W(wǎng)絡(luò)連接到 Pod。

其次,注意配置字段。您將看到這是一個(gè) CNI 配置,就像我們前面解釋的那樣。

最后但非常重要的一點(diǎn)是,在元數(shù)據(jù)下注意 name 字段-在這里我們?yōu)樵撆渲弥付Q,這是我們告訴 pod 使用此配置的方式。這里的名稱是macvlan-conf-我們正在為 macvlan 創(chuàng)建配置。

這是創(chuàng)建此示例配置的命令:

apiVersion:"k8s.cni.cncf.io/v1"
kind:NetworkAttachmentDefinition
metadata:
name:macvlan-conf
spec:
config:'{
"cniVersion":"0.3.0",
"type":"macvlan",
"master":"eth0",
"mode":"bridge",
"ipam":{
"type":"host-local",
"subnet":"192.168.1.0/24",
"rangeStart":"192.168.1.200",
"rangeEnd":"192.168.1.216",
"routes":[
{"dst":"0.0.0.0/0"}
],
"gateway":"192.168.1.1"
}
}'

本示例使用 eth0 作為主參數(shù),此主參數(shù)應(yīng)與集群中主機(jī)上的接口名稱匹配。

您可以查看使用 kubectl 創(chuàng)建的配置,方法如下:

$kubectlgetnetwork-attachment-definitions

您可以通過描述它們來獲得更多詳細(xì)信息:

$kubectldescribenetwork-attachment-definitionsmacvlan-conf

創(chuàng)建一個(gè)附加附加接口的Pod

我們將創(chuàng)建一個(gè) pod。就像您之前可能創(chuàng)建的任何pod一樣,它看起來都很熟悉,但是,我們將有一個(gè)特殊的注釋字段-在這種情況下,我們將有一個(gè)名為k8s.v1.cni.cncf.io/networks的注釋。如上創(chuàng)建的,該字段以逗號(hào)分隔的列表列出了 NetworkAttachmentDefinitions 的名稱。請(qǐng)注意,在下面的命令中,我們具有 k8s.v1.cni.cncf.io/networks 的注釋:macvlan-conf其中macvlan-conf是我們?cè)趧?chuàng)建配置時(shí)使用的名稱。

讓我們繼續(xù)使用以下命令創(chuàng)建一個(gè) pod:

apiVersion:v1
kind:Pod
metadata:
name:samplepod
annotations:
k8s.v1.cni.cncf.io/networks:macvlan-conf
spec:
containers:
-name:samplepod
command:["/bin/ash","-c","trap:TERMINT;sleepinfinity&wait"]
image:alpine

您現(xiàn)在可以檢查Pod并查看連接了哪些接口,如下所示:

$kubectlexec-itsamplepod--ipa

您應(yīng)該看到,有 3 個(gè)接口:

  • lo環(huán)回接口
  • eth0我們的默認(rèn)網(wǎng)絡(luò)
  • net1是我們使用macvlan配置創(chuàng)建的新接口

網(wǎng)絡(luò)狀態(tài) Annotations

為了確認(rèn),請(qǐng)使用kubectl describe pod pod samplepod,然后會(huì)有一個(gè)注釋部分,類似于以下內(nèi)容:

Annotations:k8s.v1.cni.cncf.io/networks:macvlan-conf
k8s.v1.cni.cncf.io/networks-status:
[{
"name":"cbr0",
"ips":[
"10.244.1.73"
],
"default":true,
"dns":{}
},{
"name":"macvlan-conf",
"interface":"net1",
"ips":[
"192.168.1.205"
],
"mac":"869655:0d",
"dns":{}
}]

該元數(shù)據(jù)告訴我們,我們有兩個(gè)成功運(yùn)行的 CNI 插件。

如果我想要更多接口怎么辦?

您可以通過創(chuàng)建更多的自定義資源,然后在pod的注釋中引用它們,來向pod添加更多接口。您還可以重復(fù)使用配置,例如,要將兩個(gè) macvlan 接口附加到 Pod,可以創(chuàng)建如下 Pod:

apiVersion:v1
kind:Pod
metadata:
name:samplepod
annotations:
k8s.v1.cni.cncf.io/networks:macvlan-conf,macvlan-conf
spec:
containers:
-name:samplepod
command:["/bin/ash","-c","trap:TERMINT;sleepinfinity&wait"]
image:alpine

請(qǐng)注意,注釋現(xiàn)在讀取為k8s.v1.cni.cncf.io/networks:macvlan-conf,macvlan-conf。如果我們有兩次使用相同的配置,并用逗號(hào)分隔。


審核編輯 :李倩


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

    關(guān)注

    4

    文章

    307

    瀏覽量

    27374
  • 網(wǎng)絡(luò)接口
    +關(guān)注

    關(guān)注

    0

    文章

    85

    瀏覽量

    17207

原文標(biāo)題:Kubernetes Pod 多網(wǎng)卡方案 Multus

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    艾體寶與Kubernetes原生數(shù)據(jù)平臺(tái)AppsCode達(dá)成合作

    虹科姐妹公司艾體寶宣布與Kubernetes 原生數(shù)據(jù)平臺(tái) AppsCode達(dá)成正式合作,致力于將其核心產(chǎn)品KubeDB引入中國市場,為企業(yè)提供專業(yè)、高效的云原生數(shù)據(jù)庫管理解決方案。
    的頭像 發(fā)表于 12-16 15:07 ?198次閱讀

    網(wǎng)卡的演進(jìn)和應(yīng)用

    隨著云計(jì)算和虛擬化技術(shù)的發(fā)展,網(wǎng)卡在功能和硬件結(jié)構(gòu)方面也經(jīng)歷了四個(gè)階段,即網(wǎng)卡、智能網(wǎng)卡、基于FPGA的DPU和DPU SoC網(wǎng)卡。本文將重點(diǎn)介紹這些不同類型的網(wǎng)絡(luò)適配器和處理器,在硬
    的頭像 發(fā)表于 10-24 16:45 ?313次閱讀
    <b class='flag-5'>網(wǎng)卡</b>的演進(jìn)和應(yīng)用

    服務(wù)器網(wǎng)卡和普通網(wǎng)卡區(qū)別

    服務(wù)器網(wǎng)卡和普通網(wǎng)卡的區(qū)別主要體現(xiàn)在以下幾個(gè)方面: 1. 性能差異 1.1 帶寬 服務(wù)器網(wǎng)卡通常具有更高的帶寬,以滿足大量數(shù)據(jù)傳輸?shù)男枨?。普?b class='flag-5'>網(wǎng)卡的帶寬通常較低,適用于家庭或小型辦公室
    的頭像 發(fā)表于 10-10 16:37 ?413次閱讀

    使用Velero備份Kubernetes集群

    Velero 是 heptio 團(tuán)隊(duì)(被 VMWare 收購)開源的 Kubernetes 集群備份、遷移工具。
    的頭像 發(fā)表于 08-05 15:43 ?348次閱讀
    使用Velero備份<b class='flag-5'>Kubernetes</b>集群

    如何使用Kubeadm命令在PetaExpress Ubuntu系統(tǒng)上安裝Kubernetes集群

    Kubernetes,通??s寫為K8s,是一個(gè)開源的容器編排平臺(tái),旨在自動(dòng)化容器化應(yīng)用的部署、擴(kuò)展和管理。有了Kubernetes,您可以輕松地部署、更新和擴(kuò)展應(yīng)用,而無需擔(dān)心底層基礎(chǔ)設(shè)施。
    的頭像 發(fā)表于 07-15 13:31 ?857次閱讀
    如何使用Kubeadm命令在PetaExpress Ubuntu系統(tǒng)上安裝<b class='flag-5'>Kubernetes</b>集群

    有線網(wǎng)卡和無線網(wǎng)卡分別指的是什么

    有線網(wǎng)卡和無線網(wǎng)卡是計(jì)算機(jī)或網(wǎng)絡(luò)設(shè)備中用于連接網(wǎng)絡(luò)的兩種不同類型的網(wǎng)絡(luò)接口卡。它們的主要區(qū)別在于傳輸媒介和連接方式。
    的頭像 發(fā)表于 05-28 15:28 ?3563次閱讀

    門禁物聯(lián)網(wǎng)卡的使用與管理

    門禁物聯(lián)網(wǎng)卡,作為現(xiàn)代門禁系統(tǒng)的重要組件,它使得門禁系統(tǒng)能夠與網(wǎng)絡(luò)相連,從而實(shí)現(xiàn)遠(yuǎn)程監(jiān)控、數(shù)據(jù)記錄、智能控制等多種功能。那么,門禁物聯(lián)網(wǎng)卡究竟如何使用呢?本文將詳細(xì)解析門禁物聯(lián)網(wǎng)卡的使用步驟
    的頭像 發(fā)表于 04-11 16:51 ?577次閱讀
    門禁物聯(lián)<b class='flag-5'>網(wǎng)卡</b>的使用與管理

    網(wǎng)卡揭秘:如何選擇適合您需求的網(wǎng)卡

    網(wǎng)卡(Network Interface Card,NIC),也稱網(wǎng)絡(luò)適配器,是連接計(jì)算機(jī)與網(wǎng)絡(luò)的硬件設(shè)備。在光通信系統(tǒng)中,網(wǎng)卡特指光纖網(wǎng)卡,它通過光纖接口與外部網(wǎng)絡(luò)通信,傳輸數(shù)據(jù)。早期的網(wǎng)卡
    的頭像 發(fā)表于 04-10 10:04 ?698次閱讀
    光<b class='flag-5'>網(wǎng)卡</b>揭秘:如何選擇適合您需求的<b class='flag-5'>網(wǎng)卡</b>

    linux怎么查看網(wǎng)卡的收光功率?

    linux怎么查看網(wǎng)卡的收光功率? 在Linux系統(tǒng)中,可以使用一些命令和工具來查看網(wǎng)卡的收光功率。本文將介紹如何使用這些命令和工具來查看和監(jiān)測網(wǎng)卡的收光功率。 1. 使用ifconfig命令查看
    的頭像 發(fā)表于 01-31 14:24 ?3584次閱讀

    無線網(wǎng)卡驅(qū)動(dòng)怎么安裝 無線網(wǎng)卡怎么連接臺(tái)式電腦

    如今,隨著科技的不斷發(fā)展,無線網(wǎng)絡(luò)已經(jīng)成為了我們生活中不可或缺的一部分。對(duì)于臺(tái)式電腦用戶而言,如果沒有內(nèi)置無線網(wǎng)卡,就需要通過安裝外置無線網(wǎng)卡來連接無線網(wǎng)絡(luò)。本文將詳細(xì)介紹如何安裝無線網(wǎng)卡驅(qū)動(dòng)并對(duì)臺(tái)
    的頭像 發(fā)表于 01-19 09:54 ?3285次閱讀

    請(qǐng)問如何使用Helm在K8s上集成Prometheus呢?

    ArtifactHub 為 Helm Chart 提供了公共和私有資源庫。我們將使用這些 Helm Chart 來設(shè)置 Kubernetes 集群中的 pod 和服務(wù)。
    的頭像 發(fā)表于 01-10 17:24 ?667次閱讀
    請(qǐng)問如何使用Helm在K8s上集成Prometheus呢?

    配置KubernetesPod使用代理的兩種常見方式

    的需要。本文將介紹配置KubernetesPod使用代理的兩種常見方式:通過ConfigMap和直接在應(yīng)用程序環(huán)境變量中設(shè)置。
    的頭像 發(fā)表于 01-05 11:22 ?1126次閱讀
    配置<b class='flag-5'>Kubernetes</b>中<b class='flag-5'>Pod</b>使用代理的兩種常見方式

    使用Jenkins和單個(gè)模板部署多個(gè)Kubernetes組件

    在持續(xù)集成和部署中,我們通常需要部署多個(gè)實(shí)例或組件到Kubernetes集群中。通過Jenkins的管道腳本,我們可以自動(dòng)化這個(gè)過程。在本文中,我將演示如何使用Jenkins Pipeline及單個(gè)
    的頭像 發(fā)表于 01-02 11:40 ?759次閱讀
    使用Jenkins和單個(gè)模板部署多個(gè)<b class='flag-5'>Kubernetes</b>組件

    網(wǎng)卡硬件故障及解決方法

    網(wǎng)卡硬件故障及解決方法 網(wǎng)卡是計(jì)算機(jī)與網(wǎng)絡(luò)之間進(jìn)行通信的重要組件之一。然而,由于各種原因,網(wǎng)卡硬件故障可能會(huì)導(dǎo)致計(jì)算機(jī)無法連接到網(wǎng)絡(luò)或者網(wǎng)絡(luò)連接緩慢不穩(wěn)定。本文將介紹常見的網(wǎng)卡硬件故障
    的頭像 發(fā)表于 12-27 15:17 ?3489次閱讀

    Kubernetes RBAC:掌握權(quán)限管理的精髓

    Kubernetes RBAC(Role-Based Access Control)是 Kubernetes 中一項(xiàng)關(guān)鍵的安全功能,它通過細(xì)粒度的權(quán)限控制機(jī)制,確保集群資源僅被授權(quán)的用戶或服務(wù)賬號(hào)訪問。
    的頭像 發(fā)表于 12-25 09:43 ?471次閱讀
    RM新时代网站-首页