Openvpn

Kubernetes 和 OpenVPN:來自更廣泛網路的入站路由

  • March 26, 2019

我們正在嘗試在 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 實例重定向來自集群中所有節點的所有流量,您可以指定一個標籤並在集群或節點池創建期間附加該標籤。

  1. 您可以像前面的範例一樣創建 VM 實例,而不是使用下一跳“Open VPN”實例配置預設路由,您需要在 GKE 集群的節點內配置 iptables。例如配置一個iptable,所有到目標IP地址和源IP地址10.30.50.0/24的流量都使用下一跳“OpenVPN實例的IP地址”。

請記住,對於這兩種解決方案,您必須在每個 GKE 集群中啟用Alias IP以允許從您的本地到 Pod 的通信。

引用自:https://serverfault.com/questions/960039