Mengizinkan koneksi langsung ke Pod Autopilot menggunakan hostPort


Halaman ini menunjukkan cara mengekspos port acak di Pod yang berjalan di cluster Google Kubernetes Engine (GKE) Autopilot.

Dengan mengekspos port di Pod, Pod dapat menerima koneksi masuk secara langsung, tanpa load balancer. GKE memilih port acak untuk dibuka dari rentang yang Anda tentukan dalam spesifikasi Pod. Jenis eksposur port acak ini berguna saat workload Anda memerlukan koneksi masuk langsung, tetapi tidak bergantung pada jumlah port persisten. Contoh jenis workload ini adalah resource Agones GameServer dengan kebijakan port Dynamic default.

Saat Anda meminta port acak, GKE akan mengganti nilai dalam kolom hostPort di spesifikasi container ke port yang dipilih oleh GKE untuk Anda.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.
  • Pastikan Anda memiliki cluster GKE Autopilot yang menjalankan versi 1.24.7-gke.1200 dan yang lebih baru atau 1.25.3-gke.1100 dan yang lebih baru.

Batasan

Anda hanya dapat menetapkan hostPort acak untuk Pod statis atau untuk Pod yang dikelola oleh pengontrol khusus, seperti Agones. Fungsi ini tidak didukung di pengontrol terkelola Kubernetes seperti Deployment.

Meminta port acak

  1. Simpan manifes berikut sebagai 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
    

    Ganti kode berikut:

    • MIN_PORT: nomor port minimum untuk rentang tempat GKE memilih port acak.
    • MAX_PORT: nomor port maksimum untuk rentang tempat GKE memilih port acak.
    • HOST_PORT1, HOST_PORT2: semua nomor port yang valid. Saat Pod dijadwalkan, GKE akan memperbarui kolom ini dengan port yang ditetapkan secara acak. Jika Anda memiliki beberapa container, gunakan jumlah port yang berbeda untuk setiap container.

    Rentang port (perbedaan antara MAX_PORT dan MIN_PORT) minimal harus 1.000 port.

  2. Terapkan manifes:

    kubectl apply -f host-port-pod.yaml
    

Saat Anda menerapkan manifes, GKE akan memilih port acak dari rentang Anda dan menetapkan port tersebut ke container Anda. Jika GKE menetapkan nilai port yang sama ke dua Pod, GKE akan otomatis menempatkan Pod di node terpisah untuk menghindari konflik port.

Memeriksa port yang ditetapkan

Untuk menemukan jumlah port yang ditetapkan GKE untuk container Anda, periksa Pod:

kubectl get pod game-pod --output=yaml

Outputnya mirip dengan yang berikut ini:

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

Dalam output ini:

  • metadata.annotations.autopilot.gke.io/host-port-assignment: penetapan port, yang menunjukkan nilai asli untuk hostPort yang Anda tetapkan untuk setiap container dan nilai yang diperbarui untuk hostPort yang ditetapkan GKE. Kolom ini berguna jika Anda meminta beberapa port di spesifikasi Pod.
  • spec.containers.ports.hostPort: port terbuka yang ditetapkan GKE ke setiap container.

Langkah berikutnya

Lacak dukungan Agones pada Autopilot di GitHub.