Nesta página, mostramos como expor uma porta aleatória em um pod em execução em um cluster do Autopilot do Google Kubernetes Engine (GKE).
A exposição de uma porta em um pod permite que ele aceite conexões de entrada diretamente,
sem um balanceador de carga. O GKE escolhe uma porta aleatória para abrir
em um intervalo na especificação do pod. Esse tipo de exposição de porta aleatória é útil quando a carga de trabalho exige conexões de entrada diretas, mas não depende de um número de porta persistente. Um exemplo desse tipo de carga de trabalho é um recurso GameServer do Agones com a
política de porta padrão Dynamic
.
Quando você solicita uma porta aleatória, o GKE substitui o valor no campo hostPort
na especificação do contêiner para a porta que
o GKE selecionou para você.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a Google Cloud CLI para essa tarefa,
instale e, em seguida,
inicialize a
CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão
mais recente executando
gcloud components update
.
- Tenha um Cluster do GKE Autopilot executando a versão 1.24.7-gke.1200 e posterior ou 1.25.3-gke.1100 e posterior.
Limitações
Só é possível atribuir hostPorts aleatórios a pods estáticos ou gerenciados por um controlador personalizado, como o Agones. Essa funcionalidade não está disponível suportado em Controladores gerenciados do Kubernetes como implantações.
Solicitar uma porta aleatória
Salve o seguinte manifesto como
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
Substitua:
MIN_PORT
: o número mínimo de porta para o intervalo do qual o GKE escolhe uma porta aleatória.MAX_PORT
: o número máximo de porta para o intervalo do qual o GKE escolhe uma porta aleatória.HOST_PORT1, HOST_PORT2
: qualquer número de porta válido. Quando o Pod é agendado, o GKE atualiza este campo com a porta atribuída aleatoriamente. Se você tiver vários contêineres, use números de porta diferentes para cada um deles.
O intervalo de portas (a diferença entre
MAX_PORT
eMIN_PORT
) precisa ter pelo menos 1.000 portas.Aplique o manifesto:
kubectl apply -f host-port-pod.yaml
Quando você aplica o manifesto, o GKE seleciona uma porta aleatória do seu intervalo e a atribui ao contêiner. Se o GKE atribuir o mesmo valor de porta a dois pods, ele colocará os pods automaticamente em nós separados para evitar conflito de portas.
Verificar a porta atribuída
Para encontrar o número da porta que o GKE atribuiu aos contêineres, inspecione o pod:
kubectl get pod game-pod --output=yaml
O resultado será assim:
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
Nesta saída:
metadata.annotations.autopilot.gke.io/host-port-assignment
: as atribuições de porta, mostrando o valor original dehostPort
que você definiu para cada contêiner e o valor atualizado dohostPort
que o GKE atribuiu. Esse campo é útil se você solicitou várias portas na especificação do pod.spec.containers.ports.hostPort
: a porta aberta em que o GKE atribuiu a cada contêiner.
A seguir
Acompanhe o suporte do Agones no Autopilot no GitHub.