一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

樹莓派部署 Kubernetes:通過 UDM Pro 實現(xiàn) BGP 負載均衡!

上海晶珩電子科技有限公司 ? 2025-06-25 18:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近,我將家庭實驗室的架構(gòu)核心切換為一組樹莓派。

盡管在樹莓派上運行的 Kubernetes 發(fā)行版眾多,但在資源受限的設(shè)備上運行 Kubernetes 時,控制平面的開銷是一個常見挑戰(zhàn)。使用 Cloudfleet 等允許遠程本地節(jié)點的托管 Kubernetes 服務(wù),可以卸載這一責任。這種方法讓樹莓派能夠?qū)⑵滟Y源專門用于運行工作負載,而不是消耗 CPU 和內(nèi)存來處理控制平面任務(wù)。Cloudfleet 提供了一個免費的集群,最多支持 24 個 CPU,這可以覆蓋我的兩臺樹莓派 5,總共 16 個核心的設(shè)置。

在我之前的嘗試中,在我的環(huán)境中有效實現(xiàn) Kubernetes 負載均衡會面臨一些挑戰(zhàn)。與云平臺不同,云平臺上的負載均衡是現(xiàn)成的服務(wù),本地部署則需要更多的手動網(wǎng)絡(luò)配置。當創(chuàng)建類型為 LoadBalancer 的 Kubernetes 服務(wù)時,需要建立一個虛擬 IP(VIP)并使其在網(wǎng)絡(luò)上可訪問。雖然像 MetalLB 這樣的項目可以通過讓節(jié)點使用 L2 廣播(例如 ARP 請求)來宣布 VIP,但這種方法通常將 VIP 的可用性限制在任何給定時間只能由單個節(jié)點使用,這并不符合我的期望。

L2 廣播的一個更健壯的替代方案是 BGP(邊界網(wǎng)關(guān)協(xié)議)。使用 BGP,你的 Kubernetes 集群可以直接向路由器廣播 LoadBalancer VIP。這允許路由器將流量分配到為負載均衡服務(wù)提供服務(wù)的多個節(jié)點上,提供更好的冗余和可擴展性潛力。此外,使用 BGP,你還可以廣播 Pod IP,使你的內(nèi)部 Pod 網(wǎng)絡(luò)在局域網(wǎng)中可用。

我在網(wǎng)絡(luò)中使用的是 UniFi 堆棧,直到最近,UniFi Dream Machine Pro(UDM Pro)還缺乏原生 BGP 支持。然而,這一功能現(xiàn)在已經(jīng)可用,使得基于 BGP 的負載均衡解決方案成為可能。

在這篇文章中,我將引導(dǎo)你完成如何將樹莓派集成到 Cloudfleet 管理的 Kubernetes 集群中,并配置 UDM Pro 的 BGP 網(wǎng)絡(luò),以實現(xiàn)無縫的服務(wù)暴露。

設(shè)置 Kubernetes 集群

使用 Cloudfleet 創(chuàng)建 Kubernetes 集群非常簡單。首先,你需要通過訪問 Cloudfleet 控制臺進行注冊。

注冊并創(chuàng)建組織后,下一步是創(chuàng)建 Kubernetes 集群。有關(guān)安裝 Cloudfleet CLI 和創(chuàng)建集群的詳細說明,請參閱官方 Cloudfleet 入門指南。

該指南將引導(dǎo)你完成創(chuàng)建空集群和設(shè)置 Cloudfleet CLI 的必要步驟,你需要使用該 CLI 來添加樹莓派節(jié)點。

創(chuàng)建集群后,你將收到一個 CLUSTER_ID。請保留此 ID,因為你需要它來添加樹莓派節(jié)點。

將樹莓派節(jié)點添加到 Cloudfleet 集群

將樹莓派集成到 Cloudfleet 集群中涉及為樹莓派準備正確的操作系統(tǒng),然后使用 Cloudfleet CLI 將它們作為自管理節(jié)點添加。

1.Cloudfleet 要求自管理節(jié)點運行 Ubuntu 24.04 LTS。將 Ubuntu 24.04 安裝到樹莓派的 microSD 卡上的最簡單方法是使用官方樹莓派成像器。

2.在你的計算機上下載并安裝樹莓派成像器。

3.將 microSD 卡插入計算機。

4.打開樹莓派成像器。

5.點擊“CHOOSE DEVICE”(選擇設(shè)備)并選擇你的樹莓派型號(例如樹莓派 5)。

6.點擊“CHOOSE OS”(選擇操作系統(tǒng))。導(dǎo)航到“Other general-purpose OS”(其他通用操作系統(tǒng))->“Ubuntu”。

7.選擇“Ubuntu Server 24.04 LTS (64-bit)”(通常建議為無頭 Kubernetes 節(jié)點使用服務(wù)器版)。

8.點擊“CHOOSE STORAGE”(選擇存儲)并選擇你的 microSD 卡。

9.強烈建議點擊齒輪圖標以預(yù)配置設(shè)置,如主機名、啟用 SSH(并設(shè)置密碼或授權(quán)密鑰)以及設(shè)置用戶帳戶。這簡化了無頭設(shè)置。

10.點擊“NEXT”(下一步),然后點擊“YES”(是)以確認并開始寫入鏡像。

11.寫入完成后,將 microSD 卡插入樹莓派,通過以太網(wǎng)將其連接到網(wǎng)絡(luò),并接通電源。確保它有一個 IP 地址,并且 SSH 訪問正常。

操作系統(tǒng)準備好后,在你的機器上(已安裝 Cloudfleet CLI 并已登錄),對要添加到集群的每個樹莓派執(zhí)行以下命令:

cloudfleet clusters add-self-managed-node CLUSTER_ID--hostRPI_IP--ssh-usernameSSH_USERNAME--regionmy-home--zonemy-home

將 CLUSTER_ID 替換為你在上一節(jié)中創(chuàng)建的集群的 ID。

將 RPI_IP 替換為樹莓派在你本地網(wǎng)絡(luò)上的 IP 地址。

將 SSH_USERNAME 替換為你為樹莓派上的 SSH 訪問配置的用戶名。

--region my-home 和 --zone my-home 標志將為你的節(jié)點分配這些標簽。這些標簽是任意的,但對于組織節(jié)點很有用,并且可以在 Kubernetes 配置中使用,如我們稍后的 BGP 設(shè)置。

然后,Cloudfleet CLI 將通過 SSH 連接到你的樹莓派,安裝必要的軟件,并將其加入到你的托管 Kubernetes 集群中。一段時間后,樹莓派應(yīng)顯示為 Cloudfleet 儀表板和通過 kubectl get nodes(在配置 kubectl 指向你的 Cloudfleet 集群后,你可以通過點擊 Cloudfleet 控制臺上的“Connect to cluster”(連接到集群)按鈕了解如何操作)中的就緒節(jié)點。

部署第一個工作負載

在進行 BGP 設(shè)置并查看 LoadBalancer 服務(wù)的實際效果之前,為了測試我們的新集群,讓我們部署一個簡單的 Nginx 應(yīng)用程序。

創(chuàng)建一個名為 nginx-deployment.yaml 的文件,內(nèi)容如下:

apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: app: nginxspec: replicas: 2# Running two replicas for demonstration selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest# Using the latest Nginx image ports: - containerPort: 80---apiVersion: v1kind: Servicemetadata: name: nginx-servicespec: selector: app: nginx ports: - protocol: TCP port: 80 # Port accessible on the LoadBalancer IP targetPort: 80# Port on the Nginx pods type: LoadBalancer# This is key for BGP to pick it up

將此部署應(yīng)用到你的集群:

kubectlapply -f nginx-deployment.yaml

一段時間后,Kubernetes 將創(chuàng)建部署和服務(wù)。

你可以檢查服務(wù)的狀態(tài):

kubectlgetsvc nginx-service

查找 EXTERNAL-IP 字段。它將保持 PENDING 狀態(tài),因為沒有負載均衡功能會接收此服務(wù)并為其創(chuàng)建 VIP。這是我們將在下一節(jié)中解決的問題。

為本地負載均衡設(shè)置 BGP

Cloudfleet 使用 Cilium 作為其 CNI(容器網(wǎng)絡(luò)接口),它提供了 BGP 廣播功能。有關(guān) Cloudfleet 網(wǎng)絡(luò)架構(gòu)的更多詳細信息,請參閱此處。

https://cloudfleet.ai/docs/networking/architecture/

有關(guān)使用 BGP 進行本地負載均衡的指南,請參閱此處。

https://cloudfleet.ai/docs/networking/on-premises-load-balancing-with-bgp/

1. Cilium BGP 配置

首先,我們需要為集群配置 BGP。這涉及創(chuàng)建幾個 Kubernetes 自定義資源:

a) CiliumLoadBalancerIPPool:這定義了 Cilium 可以分配給 LoadBalancer 服務(wù)的 IP 地址池。這些 IP 應(yīng)該是 UDM Pro 可路由的子網(wǎng)的一部分,并專門用于此目的。

apiVersion: "cilium.io/v2alpha1"kind: CiliumLoadBalancerIPPoolmetadata: name:"pool"spec: blocks: - start: 172.16.199.2# Ensure this range is available on your network and reserved for K8s stop: 172.16.199.254

如果你要廣播的 CIDR 不是 UDM PRO 中任何現(xiàn)有網(wǎng)絡(luò)的一部分,你應(yīng)該創(chuàng)建一個覆蓋此 CIDR 的網(wǎng)絡(luò)。否則,UDM PRO 將不會將流量路由到這些 IP。

b) CiliumBGPAdvertisement:此資源指定 Cilium 應(yīng)通過 BGP 廣播哪些路由,例如分配給 LoadBalancer 服務(wù)的 IP 和 Pod CIDR。

apiVersion: "cilium.io/v2alpha1"kind: CiliumBGPAdvertisementmetadata: name: services labels: advertise: bgp# This label is used to select this advertisementspec: advertisements: - advertisementType: PodCIDR - advertisementType: Service service: addresses: - LoadBalancerIP selector: # This selector aims to advertise all LoadBalancer services. # It matches services having any label by checking for a key not matching 'never-used-value'. matchExpressions: - { key: somekey, operator: NotIn, values: [ 'never-used-value' ] }

通過添加 PodCIDR,我還在向內(nèi)部網(wǎng)絡(luò)廣播 Pod IP,但這完全是可選的。

c) CiliumBGPPeerConfig:這定義了常見的 BGP 對等配置。

apiVersion: cilium.io/v2alpha1kind: CiliumBGPPeerConfigmetadata: name: unifi# Named 'unifi' as it peers with the UDM Prospec: gracefulRestart:# Enabling graceful restart for smoother updates enabled: true restartTimeSeconds: 15 families: - afi: ipv4 safi: unicast advertisements: matchLabels:# Selects the 'services' CiliumBGPAdvertisement via its label advertise:"bgp"

d) CiliumBGPClusterConfig:此主要配置在 Cilium 代理(節(jié)點)上建立 BGP 實例。它定義了 Kubernetes 集群的本地 ASN 和 BGP 對等細節(jié)(你的 UDM Pro)。請注意,nodeSelector 現(xiàn)在與添加節(jié)點時指定的區(qū)域和區(qū)域匹配。

apiVersion: cilium.io/v2alpha1kind: CiliumBGPClusterConfigmetadata: name: unifispec: nodeSelector:# Ensures this BGP config applies to the specified RPi nodes matchLabels: topology.kubernetes.io/region: my-home topology.kubernetes.io/zone: my-home bgpInstances: - name:"cloudfleet-bgp"# Name of this BGP instance localASN: 65001# ASN for the K8s cluster's BGP peers: - name: unifi# Name of the peer (UDM Pro) peerASN: 65000# ASN of the UDM Pro peerAddress:"172.16.10.1"# IP address of your UDM Pro on the relevant LAN peerConfigRef: name: unifi# References the CiliumBGPPeerConfig defined above

將這些 YAML 文件應(yīng)用到你的 Kubernetes 集群(kubectl apply -f .yaml)。然后,Cilium 的 BGP 組件將嘗試與指定的對等(172.16.10.1)建立 BGP 會話。不要忘記為你的設(shè)置修改 UDM Pro 的 IP 地址!

2. UDM Pro BGP 配置

接下來,必須在你的 UDM Pro 上配置 BGP。UniFi OS 包含 FRRouting 以實現(xiàn)此類功能。他們的官方指南可以在此處找到。

我使用的 FRRouting 配置如下。你在 UDM PRO 的 Web 界面上上傳此文件。

! -*- bgp -*-!hostname $UDMP_HOSTNAMEpassword zebrafrr defaults traditionallog file stdout!router bgp65000 # UDM Pro's ASN (must match peerASN in CiliumBGPClusterConfig)bgp ebgp-requires-policy# Standard practice for eBGPbgp router-id172.16.10.1# UDM Pro's BGP router ID (its LAN IP)maximum-paths2# Optional: allow multiple paths!neighbor cilium peer-group# Using a peer-group for organizationneighbor cilium remote-as65001# ASN of the Cilium BGP (must match localASN in CiliumBGPClusterConfig)neighbor cilium activateneighbor cilium soft-reconfiguration inbound# Allows policy changes without session reset!! Define Raspberry Pi node IPsasBGP neighbors! These are the nodes running the Cilium BGP speakerneighbor172.16.10.241peer-group cilium# IP of RPi 1neighbor172.16.10.242peer-group cilium# IP of RPi 2!address-family ipv4 unicast redistribute connected# Optional: Advertise UDM Pro's connected routes neighbor cilium activate neighbor cilium route-mapALLOW-ALLin# Apply route-map to permit routes neighbor cilium route-mapALLOW-ALL out neighbor ciliumnext-hop-self# Important: UDM advertises itself as the next hopexit-address-family!route-mapALLOW-ALL permit10# A simple route-map permitting all routes!line vty!

UDM Pro BGP 關(guān)鍵設(shè)置:

router bgp 65000:設(shè)置 UDM Pro 的 ASN。這應(yīng)與 Cilium 的 localASN(65001)不同,以便進行 BGP 對等。

bgp router-id 172.16.10.1:UDM Pro 的路由器 ID,通常是其 LAN IP。

neighbor peer-group cilium:每個可能運行 Cilium BGP 發(fā)言人的樹莓派節(jié)點都被定義為對等。這些應(yīng)該是你添加到 Cloudfleet 集群的樹莓派的 IP。

neighbor cilium remote-as 65001:通知 UDM Pro 這些對等屬于 ASN 65001。

neighbor cilium next-hop-self:確保 UDM Pro 廣告自身為從 Cilium 學(xué)習到的路由的下一跳。

route-map ALLOW-ALL:一個基本的路由圖,允許來自/去往 Cilium 對等的所有路由。如果需要,可以對其進行細化以進行更具體的過濾。

在應(yīng)用 UDM Pro 和 Cilium BGP 配置后,BGP 會話應(yīng)建立。你可以通過 SSH 登錄到 UDM Pro(例如,在 vtysh 中使用 show ip bgp summary)和使用 Cilium CLI 命令(例如,cilium bgp peers)在 Kubernetes 節(jié)點上檢查 BGP 對等狀態(tài)。

一旦所有設(shè)置都正確完成,現(xiàn)在你可以再次檢查 Load Balancer 服務(wù),你會發(fā)現(xiàn)現(xiàn)在為其分配了一個 VIP。如果你在本地網(wǎng)絡(luò)上導(dǎo)航到此 IP,你將訪問到你剛剛部署的 NGINX。

如果 NGINX Pod 分布在兩個不同的節(jié)點上,UDM PRO 將在它們之間進行負載均衡。如果只有一個節(jié)點提供 Pod 服務(wù),則流量將僅流向該節(jié)點。

結(jié)果:高效的家庭實驗室設(shè)置

通過此配置:

我的樹莓派運行 Kubernetes 工作負載,控制平面管理由 Cloudfleet 外部處理。

當在 Kubernetes 中創(chuàng)建 LoadBalancer 服務(wù)時,Cilium 會從 172.16.199.x 范圍內(nèi)為其分配一個 IP。

Cilium 通過 BGP 將此 IP(以及可選的 Pod CIDR)廣播給我的 UDM Pro。

UDM Pro 學(xué)習如何將 172.16.199.x 的流量路由到適當?shù)臉漭晒?jié)點。

服務(wù)可以從我的局域網(wǎng)無縫訪問。

你還可以設(shè)置 UDM PRO 的端口轉(zhuǎn)發(fā)功能,將外部流量路由到此 VIP,以簡單地開始從你的家庭實驗室提供網(wǎng)站服務(wù)。祝實驗愉快!

原文地址:

https://itnext.io/kubernetes-on-raspberry-pi-and-bgp-load-balancing-with-unifi-dream-machine-pro-d5b94b6cfe99

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

    關(guān)注

    0

    文章

    87

    瀏覽量

    15637
  • 樹莓派
    +關(guān)注

    關(guān)注

    121

    文章

    1977

    瀏覽量

    107194
  • kubernetes
    +關(guān)注

    關(guān)注

    0

    文章

    243

    瀏覽量

    9017
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    如何通過SSH連接到樹莓

    本篇文章主要也是講解樹莓+cpolar組合的作用,可以實現(xiàn)。
    的頭像 發(fā)表于 08-23 10:33 ?1815次閱讀
    如何<b class='flag-5'>通過</b>SSH連接到<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>

    路由器負載均衡怎么配置

    。 一、負載均衡實現(xiàn)方式 基于路由協(xié)議的負載均衡:這種方式主要利用不同的路由協(xié)議,如OSPF、BGP
    的頭像 發(fā)表于 12-13 11:17 ?4376次閱讀

    動態(tài)BGP與靜態(tài)BGP的區(qū)別?

    數(shù)據(jù)中心 Leaf-Spine 架構(gòu) 3.2 特點 支持自動鄰居發(fā)現(xiàn) 適合大量對等節(jié)點自動化部署 適應(yīng)容器化/虛擬化環(huán)境(例如 Kubernetes + BGP) 需要更強的路由策略管控,防止錯誤建立
    發(fā)表于 06-24 06:57

    樹莓安裝Haproxy實現(xiàn)***負載均衡

    手上有個閑置的樹莓,以它的性能,應(yīng)付個Haproxy綽綽有余了,關(guān)鍵還低功耗,可以24小時開機。這次,我們就將它用來作為***的負載均衡。把我們科學(xué)上網(wǎng)的需求分配到各個Shadows
    發(fā)表于 05-14 15:53

    樹莓部署LabVIEW程序并開機自啟

    的把程序部署到myRIO或者***Rio,硬件上電后程序自動運行,就像普通的單片機一樣。 樹莓當然也可以,其設(shè)置方法和myRIO基本一致。 最簡單的設(shè)置方法,只需要以下幾個步驟。最后只要
    發(fā)表于 05-31 03:42

    Kubernetes Ingress 高可靠部署最佳實踐

    Kubernetes集群中,Ingress是授權(quán)入站連接到達集群服務(wù)的規(guī)則集合,為您提供七層負載均衡能力,您可以通過 Ingress 配置提供外部可訪問的 URL、
    發(fā)表于 04-17 14:35

    qt源碼庫在樹莓中的部署方法

    接安裝qt。本文介紹最普遍的部署方式,就是在pc端的ubuntu中交叉編譯庫源碼,然后上傳編譯好的庫到樹莓,最后配置qt creator交叉編譯的kit來實現(xiàn)在pc端編譯自碼程序,上
    發(fā)表于 12-24 06:44

    通過樹莓的GPIO進行串口通訊

    樹莓最大的魅力就是接口豐富,借助這些開放的接口,可以實現(xiàn)很多好玩又實用的功能,比如通過接口控制電機實現(xiàn)智能小車的動力控制、
    發(fā)表于 01-13 08:15

    講述樹莓主動模式的單計算棒部署流程

    什么是主動模式?樹莓主動模式的單計算棒是如何去部署的?
    發(fā)表于 02-16 08:07

    樹莓裝機教程

    樹莓裝機教程樹莓裝機教程樹莓裝機教程樹莓
    發(fā)表于 11-25 10:14 ?52次下載

    通過命令行訪問樹莓3系統(tǒng)_通過VNC訪問樹莓3系統(tǒng)

    本文主要說明的就是關(guān)于樹莓3i同被訪問的相關(guān)信息,分別從通過命令行訪問、通過VNC訪問來分析了解樹莓
    發(fā)表于 12-08 16:57 ?3858次閱讀

    樹莓是什么樹莓的簡單介紹

    要想玩轉(zhuǎn)樹莓,首先得知道樹莓是什么。在本節(jié)中,作者將帶領(lǐng)大家揭開樹莓的神秘面紗,了解
    發(fā)表于 05-15 18:09 ?31次下載
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b>是什么<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>的簡單介紹

    Alexa通過樹莓控制LED

    電子發(fā)燒友網(wǎng)站提供《Alexa通過樹莓控制LED.zip》資料免費下載
    發(fā)表于 12-30 10:00 ?0次下載
    Alexa<b class='flag-5'>通過</b><b class='flag-5'>樹莓</b><b class='flag-5'>派</b>控制LED

    Kubernetes負載均衡器MetalLB介紹

    Kubernetes中一個應(yīng)用服務(wù)會有一個或多個實例,每個實例(Pod)的IP地址由網(wǎng)絡(luò)插件動態(tài)隨機分配(Pod重啟后IP地址會改變)。為屏蔽這些后端實例的動態(tài)變化和對多實例的負載均衡,引入了 Service這個資源對象。
    的頭像 發(fā)表于 03-18 16:24 ?350次閱讀
    <b class='flag-5'>Kubernetes</b><b class='flag-5'>負載</b><b class='flag-5'>均衡</b>器MetalLB介紹

    樹莓小技巧:無需鍵盤或顯示器,如何通過WiFi設(shè)置樹莓?

    接入,但隨著我們逐漸遠離臺式電腦,找到鍵盤和顯示器變得越來越困難。一旦WiFi設(shè)置完成,就可以通過SSH連接到樹莓,并從筆記本電腦或其他設(shè)備遠程與樹莓
    的頭像 發(fā)表于 06-26 15:41 ?164次閱讀
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b>小技巧:無需鍵盤或顯示器,如何<b class='flag-5'>通過</b>WiFi設(shè)置<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>?