共用方式為


將 Kubernetes 服務公開至外部裝置

如果您使用 Kubernetes 應用程式,您可能需要讓外部裝置能夠存取 Kubernetes 服務,以便它們與您部署的工作負載互動。 本文說明如何將 AKS Edge Essentials 叢集上執行的 Kubernetes 服務公開給外部裝置。 根據您用來設定 Kubernetes 叢集的網路設定,有兩種不同的方式可公開服務:

  1. 具有埠轉送的單一計算機叢集。
  2. 具有外部虛擬交換器的可調整叢集。

注意

如果您使用 Kubernetes 服務,請務必在部署期間設定 Init.ServiceIPRangeSizeInit.ServiceIPRangeStart 參數。 如需詳細資訊,請參閱 部署設定 JSON 參數

選項 1:具有埠轉送的單一電腦叢集

AKS Edge Essentials 單一電腦叢集組態會使用內部虛擬交換器來管理網路功能。 此參數可確保 Windows 主機 OS 與 Linux/Windows 節點之間的所有通訊都是使用外部裝置無法存取的內部網路來完成。 如需 AKS 邊緣程式集網路的詳細資訊,請參閱 AKS 邊緣程式集網路 (部分機器翻譯)。

如果您需要從外部裝置存取 Kubernetes 服務,請設定從 Windows 主機 OS 轉送至 Linux 或 Windows 節點的埠。 如果您使用 LoadBalancer 類型的 Kubernetes 服務,請務必使用 kubectl get services 命令取得正確的 ServiceIp 如果您使用 ClusterIpNodePort 類型的 Kubernetes 服務,請使用 Linux/Windows Kubernetes 節點的 IP 位址。

若要設定埠轉送,您可以使用 netsh Cmdlet。 如需命令語法、內容和格式的詳細資訊 netsh ,請參閱 Netsh 命令語法、內容和格式設定。 請遵循下列步驟來設定埠轉送:

  1. 開啟提升權限的 PowerShell 工作階段。

  2. 啟用 Windows 主機 OS 外部埠的防火牆規則埠。 如需詳細資訊,請參閱 New-NetFirewallRule

    New-NetFirewallRule -DisplayName "<name-for-rule>" -Direction Inbound -LocalPort <Windows-host-OS-external-port> -Action Allow
    
  3. 取得命名空間中目標服務的 IP 位址:

    kubectl get service -n <namespace>
    
  4. 設定從 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 如果您使用 ClusterIpNodePort 類型的 Kubernetes 服務,請使用 Linux/Windows Kubernetes 節點的 IP 位址。

注意

可以將可調整的叢集保留至一部裝置,並使用外部虛擬交換器組態,將 Kubernetes 服務直接公開至外部網路上的外部裝置,而不需要埠轉送。

下一步