Questa pagina mostra come esporre una porta casuale in un pod in esecuzione in un cluster Google Kubernetes Engine (GKE) Autopilot.
L'esposizione di una porta in un pod consente al pod di accettare direttamente le connessioni in entrata,
senza un bilanciatore del carico. GKE sceglie una porta casuale da aprire
da un intervallo specificato nella specifica del pod. Questo tipo di esposizione
delle porte casuale è utile quando il tuo carico di lavoro richiede connessioni in entrata dirette
ma non si basa su un numero di porta persistente. Un esempio di questo tipo di workload è una risorsa Agones GameServer con il criterio di porta Dynamic
predefinito.
Quando richiedi una porta casuale, GKE esegue l'override del valore nel
campo hostPort
nella specifica del container con la porta che
GKE ha selezionato per te.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione
eseguendo
gcloud components update
.
- Assicurati di avere un cluster GKE Autopilot che esegue la versione 1.24.7-gke.1200 e successive o 1.25.3-gke.1100 e successive.
Limitazioni
Puoi assegnare hostPort casuali solo per i pod statici o per i pod gestiti da un controller personalizzato, come Agones. Questa funzionalità non è supportata sui controller gestiti da Kubernetes, come i deployment.
Richiedere una porta casuale
Salva il seguente manifest come
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
Sostituisci quanto segue:
MIN_PORT
: il numero di porta minimo per l'intervallo da cui GKE sceglie una porta casuale.MAX_PORT
: il numero di porta massimo per l'intervallo da cui GKE sceglie una porta casuale.HOST_PORT1, HOST_PORT2
: qualsiasi numero di porta valido. Quando il pod viene pianificato, GKE aggiorna questo campo con la porta assegnata in modo casuale. Se hai più contenitori, utilizza numeri di porta diversi per ciascun contenitore.
L'intervallo di porte (la differenza tra
MAX_PORT
eMIN_PORT
) deve essere di almeno 1000 porte.Applica il manifest:
kubectl apply -f host-port-pod.yaml
Quando applichi il manifest, GKE seleziona una porta casuale dall'intervallo e la assegna al container. Se GKE assegna lo stesso valore di porta a due pod, li posiziona automaticamente su nodi separati per evitare conflitti di porta.
Controlla la porta assegnata
Per trovare il numero di porta assegnato da GKE ai tuoi container, ispeziona il pod:
kubectl get pod game-pod --output=yaml
L'output è simile al seguente:
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 questo output:
metadata.annotations.autopilot.gke.io/host-port-assignment
: le assegnazioni di porte, che mostrano il valore originale dihostPort
che hai impostato per ogni container e il valore aggiornato dihostPort
assegnato da GKE. Questo campo è utile se hai richiesto più porte nella specifica del pod.spec.containers.ports.hostPort
: la porta aperta che GKE ha assegnato a ogni container.
Passaggi successivi
Monitora il supporto di Agones su Autopilot su GitHub.