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

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

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

如何配置Cilium和BGP協(xié)同工作呢?

dyquk4xk2p3d ? 來源:Yoaz 的博客 ? 2023-08-15 09:15 ? 次閱讀

載自:「Yoaz 的博客」

原文:https://url.hi-linux.com/12Rw2

背景

官方提供了多篇文檔說明如何配置 Cilium 和 BGP 協(xié)同工作,本文主要對以下部分功能進(jìn)行驗(yàn)證:

Using BIRD to run BGP[1]

Using kube-router to run BGP[2]

BGP[3]

Cilium BGP Control Plane[4]

為了模擬支持 BGP 的網(wǎng)絡(luò)環(huán)境,文中所有節(jié)點(diǎn)均是通過 vagrant 創(chuàng)建的 VM, 網(wǎng)絡(luò)拓?fù)淙缦聢D。

注意:實(shí)際配置時(shí)使用 vagrant 創(chuàng)建的 VM 模擬網(wǎng)絡(luò)環(huán)境并不便利。可以參考以下文章,使用 ContainerLab 和 Kind 進(jìn)行驗(yàn)證。

7528308e-3afb-11ee-9e74-dac502259ad0.png

上圖中,Router 節(jié)點(diǎn)包含多張網(wǎng)卡并將作為其他兩臺主機(jī)的網(wǎng)關(guān),對應(yīng)的系統(tǒng)配置如下:

net.ipv4.ip_forward=1
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
net.ipv6.conf.all.forwarding=1

node1、node2 節(jié)點(diǎn)均只包含一張網(wǎng)卡,其默認(rèn)路由均指向 router 節(jié)點(diǎn)(node1 指向 10.0.1.2,node2 指向 10.0.2.2)。

node1、node2 上將部署 Kubernetes 和 Cilium。

基于 Bird 部署容器網(wǎng)絡(luò)

Cilium 為 PodCIDR 提供了 Encapsulation 和 Native-Routing 兩種組網(wǎng)方式。

Native-Routing 方案中,Cilium 會將 PodCIDR 中的跨節(jié)點(diǎn)流量委托給 Linux 內(nèi)核的路由子系統(tǒng),此時(shí) Linux 內(nèi)核需要知道如何路由 PodCIDR 中的特定地址。

當(dāng)用戶的所有 Node 處于同一個(gè) L2 網(wǎng)絡(luò)時(shí),我們可以設(shè)置參數(shù) autoDirectNodeRoutes=true ,此時(shí)整個(gè) PodCIDR 路由信息被插入到每個(gè)節(jié)點(diǎn)的內(nèi)核路由表中,用戶無需其他額外工作即部署完成。

上述測試環(huán)境中,Node1 和 Node2 分別處于 10.0.1.0/24 和 10.0.2.0/24 ,并不滿足設(shè)置 autoDirectNodeRoutes 的條件,因此我們需要借助設(shè)置 BGP 服務(wù)完成 PodCIDR 組網(wǎng)。

參考Using BIRD to run BGP[5]文檔中的描述,并結(jié)合測試環(huán)境的網(wǎng)絡(luò)拓?fù)?,我們設(shè)定測試節(jié)點(diǎn)的 ASN 如下圖:

754fd724-3afb-11ee-9e74-dac502259ad0.png

1. FRR 設(shè)置

在 router 上部署軟件路由器 FRR , 如下:

FRRVER="frr-stable"
curl-Ohttps://rpm.frrouting.org/repo/$FRRVER-repo-1-0.el7.noarch.rpm
sudoyuminstall./$FRRVER*
sudoyuminstallfrrfrr-pythontools

修改 /etc/frr/daemons 文件,打開 bgpd 功能(設(shè)置配置文件中 bgpd=yes)。編輯 /etc/frr/frr.conf 文件,寫入以下 BGP 相關(guān)的配置:

frrversion8.4.1
frrdefaultstraditional
hostnamerouter#主機(jī)名
logsysloginformational
!
routerbgp65100#router節(jié)點(diǎn)的本地ASN
bgprouter-id192.168.121.16#router-id
nobgpebgp-requires-policy
neighbor10.0.1.10remote-as65010#配置Node1作為router的鄰居,ASN為65010
neighbor10.0.2.10remote-as65020#配置Node2作為router的鄰居,ASN為65020
exit
!

完成上述配置后,啟動(dòng) frr 服務(wù)systemctl restart frr!

2. 部署 Cilium

登錄 Node1 或 Node2 部署 Cilium,配置如下:

k8sServiceHost:"10.0.1.10"
k8sServicePort:6443
kubeProxyReplacement:strict
devices:eth1
ipam:
operator:
clusterPoolIPv4PodCIDR:"172.31.254.0/23"
clusterPoolIPv4PodCIDRList:[]
clusterPoolIPv4MaskSize:26
loadBalancer:
mode:dsr
tunnel:disabled
autoDirectNodeRoutes:false
bpf:
masquerade:true
ipv4NativeRoutingCIDR:"172.31.254.0/23"
socketLB:
enabled:true
nodePort:
enabled:true
externalIPs:
enabled:true
hostPort:
enabled:true

Cilium 容器就緒后,Kubernetes 集群中可以正常創(chuàng)建容器并分配容器IP,但是跨節(jié)點(diǎn)容器無法正常通信。

3. 部署 Bird

Cilium 官方文檔中,給出了 Bird2 的配置示例。我們可以直接通過yum -y install bird2安裝。

查看各個(gè)節(jié)點(diǎn)分配的 PodCIDR 網(wǎng)段,執(zhí)行kubectl -n kube-system exec -it ds/cilium -- cilium node list:

75767528-3afb-11ee-9e74-dac502259ad0.png

參考以下配置 bird2 服務(wù),配置文件 /etc/bird.conf

routerid10.0.1.10;
protocoldevice{
scantime10;#Scaninterfacesevery10seconds
}
#Disableautomaticallygeneratingdirectroutestoallnetworkinterfaces.
protocoldirect{
disabled;#Disablebydefault
}
#ForbidsynchronizingBIRDroutingtableswiththeOSkernel.
protocolkernel{
ipv4{#ConnectprotocoltoIPv4tablebychannel
importnone;#Importtotable,defaultisimportall
exportnone;#Exporttoprotocol.defaultisexportnone
};
}
#StaticIPv4routes.
protocolstatic{
ipv4;
route172.31.254.0/26via"cilium_host";#將 PodCICR 通告到上游,PS:這里是 Node1 分配到的 PodCIDR
}
#BGPpeers
protocolbgpuplink0{
description"BGPuplink0";
local10.0.1.10as65010;#設(shè)置當(dāng)前節(jié)點(diǎn)的 ASN ,PS:這里示例的是 Node1
neighbor10.0.1.2as65100;#設(shè)置節(jié)點(diǎn)的Neighbor,這里是router節(jié)點(diǎn)
ipv4{
importfilter{reject;};
exportfilter{accept;};
};
}

在 Node1、Node2 按照上述方式配置完成 Bird2 后啟動(dòng)服務(wù)。執(zhí)行以下命令檢查 BGP 連接是否正常:

#在router執(zhí)行以下命令

#查看bgppeer連接
vtysh-c"showbgpsummary"
#查看注冊到router的路由信息
vtysh-c"showbgpipv4all"

完成上述流程后,使得 Node1 和 Node2 上的容器網(wǎng)絡(luò)打通,并且任意以 router 節(jié)點(diǎn)作為默認(rèn)網(wǎng)關(guān)的服務(wù)器都可以直連 PodIP。

查看 router 接地的路由信息如下:

758e3b5e-3afb-11ee-9e74-dac502259ad0.png

上圖中,我們發(fā)現(xiàn) router 節(jié)點(diǎn)被注入了 PodCIDR 。

本文測試環(huán)境的網(wǎng)絡(luò)拓?fù)浞浅:唵?,?shí)際上直接通過命令行直接在 router 節(jié)點(diǎn)上插入路由信息可以達(dá)到同樣效果。在實(shí)際生產(chǎn)中,我們可以通過 BGP 動(dòng)態(tài)發(fā)現(xiàn)簡化配置流程。

內(nèi)置 BGP

Cilium 1.10 之后的版本內(nèi)置了 BGP Speaker 的功能,用戶無需在節(jié)點(diǎn)上部署 Bird2 也可以向外廣播節(jié)點(diǎn)的 PodCIDR 信息,并且 1.12 版本中 Cilium 參考 Metallb 實(shí)現(xiàn)支持基于 BGP + ECMP 的 LoadBalancer 功能。

參考文檔[6]中的描述,啟用內(nèi)置的 BGP 能力需要額外創(chuàng)建以下 ConfigMap,Cilium-Agent 和 Cilium-Operator 啟動(dòng)時(shí)均會掛載該配置。

apiVersion:v1
kind:ConfigMap
metadata:
name:bgp-config
namespace:kube-system
data:
config.yaml:|
peers:
-peer-address:192.168.121.16
peer-asn:65100
my-asn:65000
address-pools:
-name:default
protocol:bgp
addresses:
-192.0.2.0/24

上述配置中,Cilium 將使用 192.168.121.16 連接 router 節(jié)點(diǎn)的 bgpd 服務(wù)(PS:BGP 建立連接是基于 TCP 的),并且 Node1 和 Node2 將使用相同的 ASN 65000。

address-pools 指定的是 LoadBalanacer 的 IP 地址池,當(dāng)用戶創(chuàng)建 LoadBalancer 類型的 Service 時(shí),Cilium 將自動(dòng)從該地址池中分配 ip 地址,并自動(dòng)進(jìn)行 BGP 宣告。

安裝上述 Configmap 后,我們需要為 Cilium 為添加如下配置:

bgp:
enabled:true
announce:
loadbalancerIP:true
podCIDR:true
loadBalancer:
mode:snat#此處使用dsr模式時(shí),存在問題

創(chuàng)建 service 如下:

apiVersion:v1
kind:Service
metadata:
name:whoami-lb
spec:
type:LoadBalancer
ports:
-port:80
targetPort:80
protocol:TCP
name:http
selector:
app:whoami

cilium 自動(dòng)分配 192.0.2.0 作為 service 的 EXTERNAL-IP:

75ccd990-3afb-11ee-9e74-dac502259ad0.png

我們登錄 router 節(jié)點(diǎn)通過 vtysh 查看 Cilium 是否 bgpd 服務(wù)建立了連接,并且查看其通告的路由信息如下:

75f1d376-3afb-11ee-9e74-dac502259ad0.png

需要注意,router 節(jié)點(diǎn)上我們需要添加 ECMP 的相關(guān)配置,并且依然靜態(tài)指定 Node1 和 Node2 作為 neighbor 如下:

frrversion8.4.1
frrdefaultstraditional
hostnamerouter
logsysloginformational
!
routerbgp65100
bgpbestpathas-pathmultipath-relax
bgpbestpathbandwidthskip-missing
bgprouter-id192.168.121.16
nobgpebgp-requires-policy
neighbor10.0.1.10remote-as65000
neighbor10.0.2.10remote-as65000
exit
!

執(zhí)行vtysh -c "show bgp ipv4 unicast 192.0.2.0/32"我們可以查看當(dāng)前,F(xiàn)RR 執(zhí)行 ECMP 時(shí)的路徑選擇:

76172266-3afb-11ee-9e74-dac502259ad0.png

Cilium BGP Control Plane

BGP Controller 控制器是 Cilium 高版本推出的針對內(nèi)置 BGP Speaker 更加細(xì)粒度的控制功能,其功能是上述 ConfigMap 的擴(kuò)展。





審核編輯:劉清

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

    關(guān)注

    112

    文章

    16361

    瀏覽量

    178050
  • 路由器
    +關(guān)注

    關(guān)注

    22

    文章

    3732

    瀏覽量

    113779
  • BGP
    BGP
    +關(guān)注

    關(guān)注

    0

    文章

    83

    瀏覽量

    15331
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    316

    瀏覽量

    21650
  • TCP通信
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    4223

原文標(biāo)題:如何快速讓 Cilium 和 BGP 協(xié)同工作

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    bgp配置實(shí)例講解 如何配置CiliumBGP協(xié)同工作

    ? 背景 官方提供了多篇文檔說明如何配置 CiliumBGP 協(xié)同工作,本文主要對以下部分功能進(jìn)行驗(yàn)證: Using BIRD to run
    的頭像 發(fā)表于 08-15 09:15 ?2084次閱讀
    <b class='flag-5'>bgp</b><b class='flag-5'>配置</b>實(shí)例講解 如何<b class='flag-5'>配置</b><b class='flag-5'>Cilium</b>和<b class='flag-5'>BGP</b><b class='flag-5'>協(xié)同工作</b>

    快速實(shí)現(xiàn)ARM和DSP的通信和協(xié)同工作

    快速實(shí)現(xiàn)ARM和DSP的通信和協(xié)同工作
    發(fā)表于 08-17 14:08

    雙核處理器ARM_DSP如何實(shí)現(xiàn)協(xié)同工作

    雙核處理器ARM_DSP如何實(shí)現(xiàn)協(xié)同工作
    發(fā)表于 08-17 14:26

    labview控制兩個(gè)儀器協(xié)同工作

    ,然后示波器采集,然后問示波器采集完了嗎,然后在運(yùn)動(dòng)。請問這樣的程序怎么寫?我處理不好他們的協(xié)同工作,所以上網(wǎng)了希望得到大家的幫助。謝謝大家!
    發(fā)表于 05-04 18:25

    MSP430 可以與多大頻率的晶振協(xié)同工作?

    除了 32.768kHz的晶振頻率,MSP430 還可以與多大頻率的晶振協(xié)同工作?
    發(fā)表于 12-29 17:06

    兩片單片機(jī)協(xié)同工作

    問一下通常的應(yīng)用中都有什么方式使兩片或多片430協(xié)同工作
    發(fā)表于 01-19 19:27

    【鋯石A4 FPGA申請】多芯片協(xié)同工作的管理

    申請理由:項(xiàng)目描述:項(xiàng)目越做越大,使用一片芯片已無法勝任,那么多芯片的方案就必不可少了。例如ARM進(jìn)行人機(jī)交互與通訊,DSP進(jìn)行計(jì)算,51進(jìn)行底層硬件控制等等,那么多個(gè)芯片的協(xié)同工作就要有一個(gè)管理
    發(fā)表于 08-29 15:38

    SG3525的3腳和4腳是怎么協(xié)同工作的????

    SG3525的3腳和4腳是怎么協(xié)同工作的????
    發(fā)表于 01-16 18:28

    處理器在讀內(nèi)存的過程中,CPU核、cache、MMU如何協(xié)同工作?

    處理器中斷處理的過程是怎樣的?處理器在讀內(nèi)存的過程中,CPU核、cache、MMU如何協(xié)同工作?
    發(fā)表于 10-18 08:57

    基于CSCW和多Agent的電網(wǎng)調(diào)度協(xié)同工作模型

    分析電網(wǎng)調(diào)度運(yùn)行管理系統(tǒng)的工作特點(diǎn),根據(jù)系統(tǒng)內(nèi)不同任務(wù)分工協(xié)作的要求,利用多Agent 技術(shù)將系統(tǒng)劃分成不同功能的模塊。提出了基于多Agent 的CSCW 環(huán)境下的一種電網(wǎng)調(diào)度協(xié)同工作
    發(fā)表于 05-28 10:57 ?0次下載
    基于CSCW和多Agent的電網(wǎng)調(diào)度<b class='flag-5'>協(xié)同工作</b>模型

    如何使用自動(dòng)BGP在數(shù)據(jù)中心構(gòu)建最佳 ASN 配置

    不需要對標(biāo)準(zhǔn) BGP 行為或配置進(jìn)行修改就可以完成工作。這樣就不必考慮為交換機(jī)分配 ASN 編號的事情,有助于在數(shù)據(jù)中心建立最佳 ASN 配置,并避免在分配錯(cuò)誤的脊網(wǎng)絡(luò) ASN 時(shí)進(jìn)
    的頭像 發(fā)表于 07-28 18:10 ?2202次閱讀

    三個(gè)傳感器協(xié)同工作的智能狗碗

    電子發(fā)燒友網(wǎng)站提供《三個(gè)傳感器協(xié)同工作的智能狗碗.zip》資料免費(fèi)下載
    發(fā)表于 11-17 10:28 ?0次下載
    三個(gè)傳感器<b class='flag-5'>協(xié)同工作</b>的智能狗碗

    Macros如何協(xié)同工作

    并使用包含文件。包含文件定義宏并且可以包含其他包含文件。 這些代碼元素如何協(xié)同工作 可以混合使用 ObjectScript 、 Python 、 SQL 、類定義、宏、例程等的原因是
    的頭像 發(fā)表于 09-20 14:06 ?492次閱讀

    華為路由器BGP基礎(chǔ)配置實(shí)驗(yàn)記錄

    配置BGP的前提是要保證各個(gè)自治區(qū)域的路由均可達(dá),所以要首先在AS 2 配置OSPF使AS 2 通暢,然后再配置BGP。由于
    發(fā)表于 01-06 10:07 ?1135次閱讀
    華為路由器<b class='flag-5'>BGP</b>基礎(chǔ)<b class='flag-5'>配置</b>實(shí)驗(yàn)記錄

    三電系統(tǒng)是如何協(xié)同工作的?

    三電系統(tǒng)是如何協(xié)同工作的? 三電系統(tǒng)是指由汽車動(dòng)力電池、動(dòng)力電機(jī)和動(dòng)力電控系統(tǒng)組成的新能源汽車動(dòng)力系統(tǒng)。它在汽車工業(yè)領(lǐng)域內(nèi)得到了廣泛的應(yīng)用,成為推動(dòng)汽車行業(yè)向新能源方向發(fā)展的關(guān)鍵技術(shù)之一。三電系統(tǒng)
    的頭像 發(fā)表于 01-18 16:37 ?892次閱讀