簡體   English   中英

在私有網絡中使用 IP 偽裝的 Kubernetes 流量

[英]Kubernetes traffic with IP masquerading within private network

我希望 Kubernetes 中的 Pod 連接到集群外位於同一 VPC 內的其他進程(在 VM 或 BGP 傳播網絡外部)。 當我在 GCP 上運行集群時,來自 Kubernetes 集群的傳出流量可以使用 Cloud NAT 進行 NAT 處理以獲取外部流量,但同一 VPC 內的流量不會進行 NAT 處理。

我可以簡單地連接私有 IP,但是對於某些目標進程,有一些源 IP 過濾。 它們不是由我自己維護的,需要在 VM 或其他網絡上運行,我想看看是否有任何方法可以對離開 Kubernetes 集群的流量進行 IP 偽裝,即使在同一 VPC 中也是如此。 我想過可能會以某種方式將靜態 IP 分配給 Pod / Statefulset,但這似乎很困難(即使以某種方式可能,彎曲 Kubernetes 網絡似乎也不正確)。

我可以做些什么來處理來自 Kubernetes 的流量需求? 或者我應該在 Kubernetes 集群之外單獨創建一個 NAT,並通過它路由流量?

我認為更好的選擇是配置Internal TCP/UDP Load Balancing

內部 TCP/UDP 負載平衡使集群外的應用可以訪問集群的服務,這些應用使用同一 VPC 網絡並位於同一 GCP 區域。 例如,假設您在 us-west1 區域有一個集群,並且您需要讓在同一 VPC 網絡上的該區域運行的 Compute Engine 虛擬機實例可以訪問其中的一項服務。

內部負載均衡器確實是解決此問題的正確解決方案。

盡管在撰寫本文時這不是 GA 版本(在 Beta 階段),但我繼續使用 Kubernetes Service 注釋,如https://cloud.google.com/kubernetes-engine/docs/how-to/internal-load-平衡

上面文檔的確切摘錄[ref]

apiVersion: v1
kind: Service
metadata:
  name: ilb-service
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
  labels:
    app: hello
spec:
  type: LoadBalancer
  selector:
    app: hello
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

這意味着配置之間沒有雜耍,我可以簡單地依靠 Kubernetes 配置來啟動 ILB。

只是為了記錄,我還在spec下直接添加了loadBalancerIP: 10.0.0.55屬性,它允許定義 ILB 使用的 IP(提供相關的 IP 范圍匹配) [ref]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM