hostPort를 사용하여 Autopilot 포드에 직접 연결 허용


이 페이지에서는 Google Kubernetes Engine(GKE) Autopilot 클러스터에서 실행되는 포드에서 임의의 포트를 노출하는 방법을 보여줍니다.

포드에 포트를 노출하면 포드가 부하 분산기 없이 직접 수신 연결을 수락합니다. GKE는 포드 사양에서 지정한 범위에서 열도록 임의의 포트를 선택합니다. 이러한 유형의 무작위 포트 노출은 워크로드에 직접 수신 연결이 필요하지만 영구 포트 번호에 의존하지 않을 때 유용합니다. 이 유형의 워크로드 예시에 기본 Dynamic 포트 정책이 포함된 Agones GameServer 리소스가 있습니다.

임의의 포트를 요청하면 GKE는 컨테이너 사양의 hostPort 필드 값을 GKE가 선택한 포트로 재정의합니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.
  • 버전 1.24.7-gke.1200 이상 또는 1.25.3-gke.1100 이상을 실행하는 GKE Autopilot 클러스터가 있는지 확인합니다.

제한사항

정적 포드 또는 Agones와 같은 커스텀 컨트롤러에서 관리하는 포드에만 임의의 hostPort를 할당할 수 있습니다. 이 기능은 배포와 같은 Kubernetes 관리형 컨트롤러에서 지원되지 않습니다.

무작위 포트 요청

  1. 다음 매니페스트를 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: 유효한 포트 번호. 포드가 예약되면 GKE는 무작위로 할당된 포트로 이 필드를 업데이트합니다. 컨테이너가 여러 개인 경우 컨테이너마다 다른 포트 번호를 사용하세요.

    포트 범위(MAX_PORTMIN_PORT의 차이)는 1,000개 이상의 포트여야 합니다.

  2. 매니페스트 적용

    kubectl apply -f host-port-pod.yaml
    

매니페스트를 적용할 때 GKE는 범위에서 임의의 포트를 선택하고 포트를 컨테이너에 할당합니다. GKE가 동일한 포드 값을 두 포드에 할당하는 경우 GKE는 포트 충돌을 방지하기 위해 포드를 별도의 노드에 자동으로 배치합니다.

할당된 포트 확인

GKE가 컨테이너에 할당한 포트 번호를 찾으려면 포드를 검사합니다.

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의 업데이트된 값을 표시하는 포트 할당. 이 필드는 포드 사양에서 여러 포트를 요청한 경우에 유용합니다.
  • spec.containers.ports.hostPort: GKE가 각 컨테이너에 할당한 열린 포트

다음 단계

GitHub의 Autopilot에서 Agones 지원 추적하기