將 Kubernetes 服務公開至外部裝置
如果您使用 Kubernetes 應用程式,您可能需要讓外部裝置能夠存取 Kubernetes 服務,以便它們與您部署的工作負載互動。 本文說明如何將 AKS Edge Essentials 叢集上執行的 Kubernetes 服務公開給外部裝置。 根據您用來設定 Kubernetes 叢集的網路設定,有兩種不同的方式可公開服務:
- 具有埠轉送的單一計算機叢集。
- 具有外部虛擬交換器的可調整叢集。
注意
如果您使用 Kubernetes 服務,請務必在部署期間設定 Init.ServiceIPRangeSize
和 Init.ServiceIPRangeStart
參數。 如需詳細資訊,請參閱 部署設定 JSON 參數。
選項 1:具有埠轉送的單一電腦叢集
AKS Edge Essentials 單一電腦叢集組態會使用內部虛擬交換器來管理網路功能。 此參數可確保 Windows 主機 OS 與 Linux/Windows 節點之間的所有通訊都是使用外部裝置無法存取的內部網路來完成。 如需 AKS 邊緣程式集網路的詳細資訊,請參閱 AKS 邊緣程式集網路 (部分機器翻譯)。
如果您需要從外部裝置存取 Kubernetes 服務,請設定從 Windows 主機 OS 轉送至 Linux 或 Windows 節點的埠。 如果您使用 LoadBalancer 類型的 Kubernetes 服務,請務必使用 kubectl get services
命令取得正確的 ServiceIp。 如果您使用 ClusterIp 或 NodePort 類型的 Kubernetes 服務,請使用 Linux/Windows Kubernetes 節點的 IP 位址。
若要設定埠轉送,您可以使用 netsh
Cmdlet。 如需命令語法、內容和格式的詳細資訊 netsh
,請參閱 Netsh 命令語法、內容和格式設定。 請遵循下列步驟來設定埠轉送:
開啟提升權限的 PowerShell 工作階段。
啟用 Windows 主機 OS 外部埠的防火牆規則埠。 如需詳細資訊,請參閱 New-NetFirewallRule:
New-NetFirewallRule -DisplayName "<name-for-rule>" -Direction Inbound -LocalPort <Windows-host-OS-external-port> -Action Allow
取得命名空間中目標服務的 IP 位址:
kubectl get service -n <namespace>
設定從 Windows 主機 OS 連接埠轉送至 Kubernetes 服務 IP 位址和埠的埠:
參數 描述 listen-port
外部裝置用來與 Kubernetes 服務通訊的 Windows 主機 OS IPv4 埠。 listen-address
指定要在 Windows 主機 OS 上接聽的 IPv4 位址。 如果未指定位址,則預設值是本機電腦。 connect-port
指定要重新導向流量的 IPv4 埠。 此埠應該是 Kubernetes 服務埠。 connect-address
指定要重新導向流量的 IPv4 位址。 此埠應該是 Kubernetes 服務 IP 位址。 netsh interface portproxy add v4tov4 listenport=<listen-port> listenaddress=<listen-address> connectport=<connect-port> connectaddress=<connect-address>
在下列範例圖中,有兩個 Kubernetes 服務在 Windows 裝置上執行,位址 為 10.0.0.2 IPv4:
- 執行 NodePort 服務的 Linux-Svc,其 IP 位址為 Linux 節點
192.168.0.2
和埠30034
。 此服務應該可透過 Windows 主機 OS 中的埠 8080 連線。 - 以 IP 位址
192.168.0.5
和埠30035
作為 LoadBalancer 服務的 Win-Svc 執行。 此服務應該可透過 Windows 主機 OS 中的埠 8081 連線。
若要啟用存取這些服務的外部裝置,請設定這兩個服務的埠轉送。 在此案例中,執行下列命令:
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=10.0.0.2 connectport=30034 connectaddress=192.168.0.2
netsh interface portproxy add v4tov4 listenport=8081 listenaddress=10.0.0.2 connectport=30035 connectaddress=192.168.0.5
警告
如果您未使用靜態網路設定,Windows 主機 OS 的 IPv4 位址可能會變更。 這可能會影響您的埠轉送設定,以及外部裝置所使用的目標 IPv4 位址。 若要將 IPv4 位址變更的影響降到最低,您可以使用更一般的 listenaddress
。
選項 2:具有外部虛擬交換器的可調整叢集
AKS Edge Essentials 可調整的叢集組態會使用外部虛擬交換器來管理網路功能。 因為節點會在不同的裝置內執行,因此所有節點都必須連線到相同的網路,才能彼此通訊。 如需 AKS 邊緣程式集網路的詳細資訊,請參閱 AKS 邊緣程式集網路 (部分機器翻譯)。
在此設定中,Kubernetes 節點會連線到外部網路,因此不需要埠轉送,即可透過外部裝置連線 Kubernetes 服務。 遵循選項 1 的指引,如果您使用 LoadBalancer 類型的 Kubernetes 服務,請務必使用 kubectl get services
命令來取得正確的 ServiceIp。 如果您使用 ClusterIp 或 NodePort 類型的 Kubernetes 服務,請使用 Linux/Windows Kubernetes 節點的 IP 位址。
注意
可以將可調整的叢集保留至一部裝置,並使用外部虛擬交換器組態,將 Kubernetes 服務直接公開至外部網路上的外部裝置,而不需要埠轉送。