本頁面說明如何在 Google Kubernetes Engine (GKE) Autopilot 叢集中,公開 Pod 中執行的隨機連接埠。
在 Pod 中公開通訊埠,可讓 Pod 直接接受連入連線,無需負載平衡器。GKE 會從您在 Pod 規格中指定的範圍,隨機選擇要開啟的通訊埠。如果工作負載需要直接連入連線,但不需要使用持續性連接埠號碼,這類隨機連接埠公開就非常實用。這類工作負載的範例是具有預設 Dynamic
通訊埠政策的 Agones GameServer 資源。
要求隨機通訊埠時,GKE 會將容器規格中 hostPort
欄位的值,覆寫為 GKE 為您選取的通訊埠。
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
- 請確認您已建立 GKE Autopilot 叢集,且執行版本為 1.24.7-gke.1200 以上或 1.25.3-gke.1100 以上。
限制
您只能為靜態 Pod 或由自訂控制器 (例如 Agones) 管理的 Pod 指派隨機 hostPort。Kubernetes 代管控制器 (例如 Deployment) 不支援這項功能。
要求隨機通訊埠
將下列資訊清單儲存為
host-port-pod.yaml
:apiVersion: v1 kind: Pod metadata: name: game-pod annotations: autopilot.gke.io/host-port-assignment: '{"min":MIN_PORT,"max":MAX_PORT}' spec: containers: - name: local-chat image: ubuntu ports: - containerPort: 80 hostPort: HOST_PORT1 protocol: tcp - name: game-server image: ubuntu ports: - containerPort: 80 hostPort: HOST_PORT2 protocol: udp
更改下列內容:
MIN_PORT
:GKE 從中選擇隨機通訊埠的範圍下限。MAX_PORT
:GKE 從中選擇隨機通訊埠的範圍上限。HOST_PORT1, HOST_PORT2
:任何有效的通訊埠號碼。排定 Pod 時,GKE 會以隨機指派的通訊埠更新這個欄位。如果你有多個容器,請為每個容器使用不同的通訊埠號碼。
通訊埠範圍 (
MAX_PORT
和MIN_PORT
之間的差異) 必須至少為 1000 個通訊埠。套用資訊清單:
kubectl apply -f host-port-pod.yaml
套用資訊清單時,GKE 會從您的範圍中選取隨機通訊埠,並將該通訊埠指派給容器。如果 GKE 為兩個 Pod 指派相同的連接埠值,GKE 會自動將 Pod 放在不同的節點上,避免連接埠衝突。
檢查指派的連接埠
如要找出 GKE 指派給容器的連接埠號碼,請檢查 Pod:
kubectl get pod game-pod --output=yaml
輸出結果會與下列內容相似:
apiVersion: v1
kind: Pod
metadata:
annotations:
autopilot.gke.io/host-port-assignment: '{"min":MIN_PORT,"max":MAX_PORT,"portsAssigned":{"HOST_PORT1":7300,"HOST_PORT2":7450}}'
name: game-pod
namespace: default
spec:
containers:
- name: local-chat
image: ubuntu
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
hostPort: 7300
protocol: TCP
- name: game-server
image: ubuntu
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
hostPort: 7450
protocol: UDP
輸出內容如下:
metadata.annotations.autopilot.gke.io/host-port-assignment
:顯示您為每個容器設定的原始hostPort
值,以及 GKE 指派的更新hostPort
值。如果您在 Pod 規格中要求多個連接埠,這個欄位就非常實用。spec.containers.ports.hostPort
:GKE 為每個容器指派的已開啟通訊埠。
後續步驟
在 GitHub 上追蹤 Autopilot 的 Agones 支援。