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
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
danMIN_PORT
) minimal harus 1.000 port.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 untukhostPort
yang Anda tetapkan untuk setiap container dan nilai yang diperbarui untukhostPort
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.