
我使用相同的 IP 段 172.26.10.XX 設定了 3 個主節點和 6 個工作節點。
對於負載平衡器服務,我使用 Kube-Vip 作為負載平衡器,其配置命名空間具體資訊如下:-
Data
====
cidr-private-app:
----
172.26.10.XX/27
range-global:
----
172.26.16.XX-172.26.16.XX
range-public-app:
----
172.26.14.XX-172.26.14.XX
BinaryData
當我嘗試公開 IP 為 172.26.10.XX 的服務 LB 時,我可以毫無問題地存取輸入/輸出叢集。但是,當我公開 LB IP 172.26.16.XX 和 172.26.14.XX 的服務時,我只能在叢集節點中存取它們,而無法在叢集外部存取它們。有事嗎?感謝所有的建議。
著名的:
K8S:v1.27.7+k3s2 KUBE-VIP:0.6.4 防火牆規則:允許/所有通訊伺服器到 Ips 網段為 172.26.10.XX、172.26.16.XX 和 172.26.14.XX 的伺服器
重新啟動所有節點並檢查設定防火牆。
我期望LB可以透過不同的IP段衝浪IP位址。
答案1
問題
172.26.16.0 是與 172.26.10.0/27 不同的子網路。由於 kube-vip 新增了正確的路由,叢集內的主機將具有 172.26.16.0 子網路的路由資訊。除非明確告知(某些東西正在更新其路由),否則叢集外部的主機將不知道在哪裡可以找到此子網路。對於缺少路由的主機,它們將使用預設路由,該路由通常是網路上的路由器。如果該路由器不知道在哪裡可以找到 172.26.16.0,它將丟棄封包或將其路由出去它是預設路由。
當您使用主機配置的子網路內的 IP 時,其他主機將看到它們正在向同一網路中的主機發送訊息,並且它們將使用 ARP 查找目標的 MAC 位址並向該目標傳送訊框主持人。
您可以在叢集內部和外部的節點上檢查這些路由表
ip route show table all
太棒了;您需要一個路由器來跨越網路。您的 Kubernetes 節點可作為路由器,因此這就是在叢集內部進行通訊的原因
解決方案
如果您希望叢集外部的主機能夠存取 IP,最簡單的方法可能是使用屬於主機子網路的 IP。例如,如果您的主機位於子網路 172.26.10.0/27 中,請使用 172.26.10.24/29 (.24 - .31) 作為您的 VIP。
另外一個選擇;在 Kubernetes 外部的主機上設定靜態路由,告訴它們可以使用 Kubernetes 節點作為網關找到 VIP 網路。如果您的節點是 172.26.10.1, .2, .3,那麼 k8s 之外的主機將具有以下路由172.26.16.0/24 via 172.26.10.1
另外一個選擇;在 k8s 使用以外的路由器主機上設定路由,並讓路由器將流量傳送到 VIP 網路(您的路由器可能需要為同一介面上設定的每個子網路提供 IP 位址)
另外一個選擇;將輔助 IP 新增至 k8s 外部與負載平衡器 VIP 位於同一子網路中的每個主機。
另外一個選擇;設定 RIP 或 OSPF 等路由協議,以便 k8s 外部的主機可以了解 k8s 叢集內部的網路(某些 CNI 會這樣做,例如 Calico w/ BGP)