Kubernetes 和 OpenVPN:來自更廣泛網路的入站路由
我們正在嘗試在 Kubernetes 集群中設置 OpenVPN 遠端訪問伺服器,以替換以前託管在本地防火牆上的服務。
我們更廣泛的網路部分位於 GCP/GCE 上,通過 IPsec 將動態 BGP 路由到我們的本地站點。
目前在現有的本地 OpenVPN 伺服器上,分配給已連接客戶端的 IP 地址可從網路的其餘部分路由,因此我們可以在沒有 NAT 的情況下與它們進行入站和出站通信。
我們希望將服務遷移到 Kubernetes Engine,因為我們所有其他 Linux 工作負載都遷移到了 Kubernetes Engine,我們更喜歡 DevOps 風格的工作流程,它可以管理可用性和恢復。
因此,假設我們的 OpenVPN 容器在 10.30.50.0/24 範圍內連接了客戶端,在 10.50.30.0/20 中動態分配了一個 Pod IP,我們如何告訴 GCP 將該 10.30.50.0/24 範圍路由到 OpenVPN 服務莢?甚至有可能嗎?
一種想法是在 Pod 啟動時呼叫 GCE API 以添加指向 Pod IP 的靜態路由,但我不確定流量是否會通過集群並到達 Pod 中的 OpenVPN。
無法在 GCP 中創建路由以從輔助 IP 範圍 10.30.0.0/20 路由子網 10.30.50.0/24 以使用 OpenVPN。因此,有兩種可能的解決方案可以實現您想要的:
1.- 您可以在 GCP 中創建一個 VM 實例來設置您的 OpenVPN 隧道。然後,您可以在 GCP 中使用 nexthop 這個 VM 實例添加靜態路由。與 OpenVPN 實例在同一 VPC 網路中的 GKE 集群會將其用作下一跳,因此來自節點的所有流量都將使用 OpenVPN 隧道。如果您不想通過 VPN 實例重定向來自集群中所有節點的所有流量,您可以指定一個標籤並在集群或節點池創建期間附加該標籤。
- 您可以像前面的範例一樣創建 VM 實例,而不是使用下一跳“Open VPN”實例配置預設路由,您需要在 GKE 集群的節點內配置 iptables。例如配置一個iptable,所有到目標IP地址和源IP地址10.30.50.0/24的流量都使用下一跳“OpenVPN實例的IP地址”。
請記住,對於這兩種解決方案,您必須在每個 GKE 集群中啟用Alias IP以允許從您的本地到 Pod 的通信。