那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

bgp配置實例講解 如何配置Cilium和BGP協同工作

dyquk4xk2p3d ? 來源:良許Linux ? 2023-08-15 09:15 ? 次閱讀

背景

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

Using BIRD to run BGP[1]

Using kube-router to run BGP[2]

BGP[3]

Cilium BGP Control Plane[4]

為了模擬支持 BGP 的網絡環境,文中所有節點均是通過 vagrant 創建的 VM, 網絡拓撲如下圖。

?

注意:實際配置時使用 vagrant 創建的 VM 模擬網絡環境并不便利。可以參考以下文章,使用 ContainerLab 和 Kind 進行驗證。參考:https://mp.weixin.qq.com/s/k25e7gTIIJLnL_FLlgdHUw

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

上圖中,Router 節點包含多張網卡并將作為其他兩臺主機的網關,對應的系統配置如下:

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 節點均只包含一張網卡,其默認路由均指向 router 節點(node1 指向 10.0.1.2,node2 指向 10.0.2.2)。

node1、node2 上將部署 Kubernetes 和 Cilium。

基于 Bird 部署容器網絡

Cilium 為 PodCIDR 提供了 Encapsulation 和 Native-Routing 兩種組網方式。

Native-Routing 方案中,Cilium 會將 PodCIDR 中的跨節點流量委托給 Linux 內核的路由子系統,此時 Linux 內核需要知道如何路由 PodCIDR 中的特定地址。

當用戶的所有 Node 處于同一個 L2 網絡時,我們可以設置參數 autoDirectNodeRoutes=true ,此時整個 PodCIDR 路由信息被插入到每個節點的內核路由表中,用戶無需其他額外工作即部署完成。

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

參考Using BIRD to run BGP[5]文檔中的描述,并結合測試環境的網絡拓撲,我們設定測試節點的 ASN 如下圖:

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

1. FRR 設置

在 router 上部署軟件路由器 FRR (參考:https://rpm.frrouting.org/), 如下:

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

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

frrversion8.4.1
frrdefaultstraditional
hostnamerouter#主機名
logsysloginformational
!
routerbgp65100#router節點的本地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
!

完成上述配置后,啟動 frr 服務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 集群中可以正常創建容器并分配容器IP,但是跨節點容器無法正常通信

3. 部署 Bird

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

查看各個節點分配的 PodCIDR 網段,執行kubectl -n kube-system exec -it ds/cilium -- cilium node list:

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

參考以下配置 bird2 服務,配置文件 /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;#設置當前節點的 ASN ,PS:這里示例的是 Node1
neighbor10.0.1.2as65100;#設置節點的Neighbor,這里是router節點
ipv4{
importfilter{reject;};
exportfilter{accept;};
};
}

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

#在router執行以下命令

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

完成上述流程后,使得 Node1 和 Node2 上的容器網絡打通,并且任意以 router 節點作為默認網關的服務器都可以直連 PodIP。

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

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

上圖中,我們發現 router 節點被注入了 PodCIDR 。

本文測試環境的網絡拓撲非常簡單,實際上直接通過命令行直接在 router 節點上插入路由信息可以達到同樣效果。在實際生產中,我們可以通過 BGP 動態發現簡化配置流程。

內置 BGP

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

參考文檔[6]中的描述,啟用內置的 BGP 能力需要額外創建以下 ConfigMap,Cilium-Agent 和 Cilium-Operator 啟動時均會掛載該配置。

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 節點的 bgpd 服務(PS:BGP 建立連接是基于 TCP 的),并且 Node1 和 Node2 將使用相同的 ASN 65000。

address-pools 指定的是 LoadBalanacer 的 IP 地址池,當用戶創建 LoadBalancer 類型的 Service 時,Cilium 將自動從該地址池中分配 ip 地址,并自動進行 BGP 宣告。

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

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

創建 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 自動分配 192.0.2.0 作為 service 的 EXTERNAL-IP:

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

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

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

需要注意,router 節點上我們需要添加 ECMP 的相關配置,并且依然靜態指定 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
!

執行vtysh -c "show bgp ipv4 unicast 192.0.2.0/32"我們可以查看當前,FRR 執行 ECMP 時的路徑選擇:

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

Cilium BGP Control Plane

BGP Controller 控制器是 Cilium 高版本推出的針對內置 BGP Speaker 更加細粒度的控制功能,其功能是上述 ConfigMap 的擴展。

責任編輯:彭菁

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 網絡
    +關注

    關注

    14

    文章

    7599

    瀏覽量

    89243
  • 容器
    +關注

    關注

    0

    文章

    499

    瀏覽量

    22120
  • BGP
    BGP
    +關注

    關注

    0

    文章

    84

    瀏覽量

    15363
收藏 人收藏

    評論

    相關推薦

    BGP硬核筆記分享

    BGP——邊界網關路由協議,是一種基于策略的路徑矢量路由協議(可以理解為距離矢量型協議的升級版),BGP在確定最佳路徑時考慮的不是速度,而是讓AS能夠根據多種BGP屬性來控制數據流的傳輸。
    的頭像 發表于 12-11 09:15 ?851次閱讀
    <b class='flag-5'>BGP</b>硬核筆記分享

    測量BGP傳遞時間

    測量BGP傳遞時間
    發表于 07-22 08:46

    測量BGP傳遞時間

    測量BGP傳遞時間
    發表于 07-22 10:06

    動態BGP與靜態BGP的區別

    動態BGP與靜態BGP的區別 動態BGP與靜態BGP的區別 1.靜態BGP功能簡單,其帶寬功能,可以實現多網接入,但路徑上只有通向幾大運營商
    發表于 12-01 16:55

    BGP關鍵特征及設計可擴展的IBGP網絡

    BGP 是一種在自治系統之間動態交換路由信息的路由協議,在廣域網中普遍應用。本文闡述了BGP 的鄰居、下一跳、同步、全互聯等關鍵特征,結合具體實例給出了相關配置,指出了在
    發表于 09-03 16:03 ?8次下載

    bgp路由協議的路由屬性_BGP路由協議的優勢

    BGP最新的版本是BGP第4版本(BGP4),它是在RFC4271中定義的;一個路由器只能屬于一個AS。AS的范圍從1-65535(64512-65535是私有AS號),RFC1930提供了AS號使用指南。
    發表于 08-20 15:00 ?3796次閱讀
    <b class='flag-5'>bgp</b>路由協議的路由屬性_<b class='flag-5'>BGP</b>路由協議的優勢

    什么是BGP高防,BGP高防的優勢是什么

    什么是BGP高防?BGP全稱是Border Gateway Protocol,即邊界網關協議,是用來連接Internet上的獨立系統的路由選擇協議。
    發表于 12-28 11:22 ?1106次閱讀

    如何使用自動BGP在數據中心構建最佳 ASN 配置

    不需要對標準 BGP 行為或配置進行修改就可以完成工作。這樣就不必考慮為交換機分配 ASN 編號的事情,有助于在數據中心建立最佳 ASN 配置,并避免在分配錯誤的脊網絡 ASN 時進
    的頭像 發表于 07-28 18:10 ?2235次閱讀

    動態BGP是什么,如何判定它的真假

    一、什么叫動態BGP: 中國電信 、中國聯通、中國移動和一些擁有AS自治域的大型民營IDC運營商可以通過BGP協議來實現多線互聯,這個唯一能夠妥善處理不相關路由域間的多路連接的邊界網關協議,是運行于
    發表于 04-18 09:47 ?1279次閱讀

    使用自動BGP在數據中心構建最佳ASN配置

      NVIDIA Cumulus Linux 4.2.0版本引入了一項名為自動BGP(Auto BGP)的新功能,該功能使二層葉脊網絡配置中的BGP ASN分配變得快速而簡單。
    的頭像 發表于 04-30 07:39 ?901次閱讀
    使用自動<b class='flag-5'>BGP</b>在數據中心構建最佳ASN<b class='flag-5'>配置</b>

    BGP路由優選規則的深入了解

      一臺BGP路由器有可能學習到關于同一個目的路由前綴的多條BGP路徑,當這些BGP路徑都是valid有效時,路由器將如何優選呢?BGP的眾多路徑屬性如何影響
    的頭像 發表于 11-14 09:54 ?3860次閱讀

    跟大家聊聊BGP與OSPF

    BGP和OSPF是兩種最常見的路由協議,BGP在大型網絡中具有動態路由優勢,而OSPF具有更高效的路徑選擇和收斂速度。
    的頭像 發表于 01-30 11:56 ?3873次閱讀

    BGP知識點總結

    該路由同時作為與其他BGP鄰居建立鄰居關系時的底層路由,那么這條BGP路由將不優,不能傳遞也不能加表
    的頭像 發表于 04-10 10:42 ?1548次閱讀

    如何配置CiliumBGP協同工作呢?

    官方提供了多篇文檔說明如何配置 CiliumBGP 協同工作,本文主要對以下部分功能進行驗證
    的頭像 發表于 08-15 09:15 ?1994次閱讀
    如何<b class='flag-5'>配置</b><b class='flag-5'>Cilium</b>和<b class='flag-5'>BGP</b><b class='flag-5'>協同工作</b>呢?

    華為路由器BGP基礎配置實驗記錄

    配置BGP的前提是要保證各個自治區域的路由均可達,所以要首先在AS 2 配置OSPF使AS 2 通暢,然后再配置BGP。由于
    發表于 01-06 10:07 ?1280次閱讀
    華為路由器<b class='flag-5'>BGP</b>基礎<b class='flag-5'>配置</b>實驗記錄
    澳门足球博彩网站| 基础百家乐官网博牌| 线上百家乐赢钱| 金尊国际娱乐城| 属羊的和属猪的做生意| 大富豪棋牌游戏下载| 百家乐官网网站赌钱吗| 博彩百家乐字谜总汇| 伟博百家乐官网现金网| 迪威百家乐娱乐网| 大发888官方 df888| 百家乐官网官网站| 大发888老虎机官方| 大发888 代充| A8百家乐官网的玩法技巧和规则| 大发888无数| 百家乐官网发牌规| 欢乐谷娱乐城| 网上百家乐有人赢过嘛| 百家乐官网冯耕耘打法| 段风水24宿| 大发888娱乐鸿博娱乐| 来博百家乐官网现金网| 真人百家乐是真的吗| 线上百家乐官网代理| 大发888手机| 李雷雷百家乐官网的奥妙| 足球怎么赌| 电子百家乐官网假在线哪| 大赢家娱乐城信誉| 好用百家乐分析软件| 明陞M88娱乐城| 个体老板做生意的风水| 吉安县| 墨尔本百家乐的玩法技巧和规则 | 运城百家乐的玩法技巧和规则| 百家乐官网咋个玩的| 百家乐网页游戏| 在线百家乐官网策略| 百家乐官网开户送18元| 威尼斯人娱乐城网址是|