Auf dieser Seite erfahren Sie, wie Sie einen zufälligen Port in einem Pod freigeben, der in einem GKE Autopilot-Cluster (Google Kubernetes Engine) ausgeführt wird.
Wenn ein Port in einem Pod verfügbar gemacht wird, akzeptiert der Pod eingehende Verbindungen direkt ohne Load-Balancer. GKE wählt einen zufälligen Port aus dem Bereich aus, den Sie in der Pod-Spezifikation angeben. Diese Art der zufälligen Portfreigabe ist nützlich, wenn Ihre Arbeitslast direkte eingehende Verbindungen erfordert, aber nicht auf einer nichtflüchtigen Portnummer basiert. Ein Beispiel für diese Art von Arbeitslast ist eine Agones GameServer-Ressource mit der standardmäßigen Portrichtlinie Dynamic
.
Wenn Sie einen zufälligen Port anfordern, überschreibt GKE den Wert im Feld hostPort
der Containerspezifikation mit dem Port, den GKE für Sie ausgewählt hat.
Hinweis
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit
gcloud components update
ab.
- Sie benötigen einen GKE Autopilot-Cluster mit Version 1.24.7-gke.1200 und höher oder 1.25.3-gke.1100 und höher.
Beschränkungen
Sie können nur zufällige hostPorts nur für statische Pods oder für Pods zuweisen, die von einem benutzerdefinierten Controller wie Agones verwaltet werden. Diese Funktion wird auf von Kubernetes verwalteten Controllern wie Deployments nicht unterstützt.
Zufälligen Port anfordern
Speichern Sie das folgende Manifest als
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
Dabei gilt:
MIN_PORT
: die minimale Portnummer für den Bereich, aus dem GKE einen zufälligen Port auswählt.MAX_PORT
: die maximale Portnummer für den Bereich, aus dem GKE einen zufälligen Port auswählt.HOST_PORT1, HOST_PORT2
: eine beliebige gültige Portnummer. Wenn der Pod geplant ist, aktualisiert GKE dieses Feld mit dem zufällig zugewiesenen Port. Wenn Sie mehrere Container haben, verwenden Sie für jeden Container unterschiedliche Portnummern.
Der Portbereich (der Unterschied zwischen
MAX_PORT
undMIN_PORT
) muss mindestens 1.000 Ports umfassen.Wenden Sie das Manifest an:
kubectl apply -f host-port-pod.yaml
Wenn Sie das Manifest anwenden, wählt GKE einen zufälligen Port aus dem Bereich aus und weist den Container Ihrem Port zu. Wenn GKE denselben Pods den gleichen Portwert zuweist, werden die Pods von GKE automatisch auf separaten Knoten platziert, um Portkonflikte zu vermeiden.
Zugewiesenen Port prüfen
Die Portnummer, die GKE Ihren Containern zugewiesen hat, können Sie anhand des Pods ermitteln:
kubectl get pod game-pod --output=yaml
Die Ausgabe sieht in etwa so aus:
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
In dieser Ausgabe gilt:
metadata.annotations.autopilot.gke.io/host-port-assignment
: die Port-Zuweisungen, wobei der ursprüngliche Wert fürhostPort
, den Sie für jeden Container festgelegt haben, und der aktualisierte Wert fürhostPort
, den GKE zugewiesen hat, angezeigt werden. Dieses Feld ist hilfreich, wenn Sie mehrere Ports in Ihrer Pod-Spezifikation angefordert haben.spec.containers.ports.hostPort
: der geöffnete Port, den GKE jedem Container zugewiesen hat.
Nächste Schritte
Agones-Unterstützung auf Autopilot auf GitHub verfolgen