Menggunakan IP publik tingkat instans di Azure Kubernetes Service (AKS)
Simpul AKS tidak memerlukan alamat IP publik mereka sendiri untuk komunikasi. Namun, skenario mungkin memerlukan simpul-simpul dalam satu kumpulan simpul untuk menerima alamat IP publik khusus mereka sendiri. Skenario umum adalah untuk beban kerja game, di mana konsol perlu membuat koneksi langsung ke komputer virtual cloud untuk meminimalkan hop. Skenario ini dapat dicapai di AKS dengan menggunakan IP Publik Simpul.
Pertama-tama, buat grup sumber daya.
az group create --name <resourceGroup> --location <region>
Buat kluster AKS dan lampirkan IP publik untuk simpul Anda. Masing-masing simpul dalam kumpulan simpul menerima IP publik yang unik. Anda dapat memverifikasi ini dengan melihat instans Set Skala Komputer Virtual.
az aks create \
--resource-group <resourceGroup> \
--name <aksClusterName> \
--location <region> \
--enable-node-public-ip \
--generate-ssh-keys
Untuk kluster AKS yang ada, Anda juga dapat menambahkan kumpulan simpul baru, dan melampirkan IP publik untuk simpul Anda.
az aks nodepool add --resource-group <resourceGroup> --cluster-name <aksClusterName> --name <newNodePool> --enable-node-public-ip
Ada sejumlah manfaat dalam penggunaan prefiks IP publik. AKS mendukung penggunaan alamat dari prefiks IP publik yang ada untuk simpul Anda dengan meneruskan ID sumber daya dengan bendera --node-public-ip-prefix-id
ketika membuat kluster baru atau menambahkan kumpulan simpul.
Pertama, buat prefiks IP publik menggunakan prefiks az network public-ip prefix create:
az network public-ip prefix create --length 28 --location <region> --name <publicIPPrefixName> --resource-group <resourceGroup>
Lihat output, dan catat id
prefiksnya:
{
...
"id": "/subscriptions/<subscription-id>/resourceGroups/<resourceGroup>/providers/Microsoft.Network/publicIPPrefixes/<publicIPPrefixName>",
...
}
Terakhir, saat membuat kluster baru atau menambahkan kumpulan simpul baru, gunakan --node-public-ip-prefix-id
bendera dan lewati ID sumber daya awalan:
az aks create \
--resource-group <resourceGroup> \
--name <aksClusterName> \
--location <region> \
--enable-node-public-ip \
--node-public-ip-prefix-id /subscriptions/<subscription-id>/resourceGroups/<resourceGroup>/providers/Microsoft.Network/publicIPPrefixes/<publicIPPrefixName> \
--generate-ssh-keys
Anda dapat mencari IP publik untuk simpul Anda dengan berbagai cara:
- Gunakan perintah Azure CLI
az vmss list-instance-public-ips
. - Gunakan perintah PowerShell or Bash.
- Anda juga dapat melihat IP publik di portal Azure dengan melihat sejumlah instans di Set Skala Komputer Virtual.
Penting
grup sumber daya simpul berisi beberapa simpul dan IP publik mereka. Gunakan grup sumber daya simpul saat menjalankan perintah untuk mencari IP publik untuk simpul Anda.
az vmss list-instance-public-ips --resource-group <MC_region_aksClusterName_region> --name <virtualMachineScaleSetName>
Tag IP publik dapat digunakan pada IP publik simpul untuk menggunakan fitur Preferensi Perutean Azure.
- Diperlukan AKS versi 1.29 atau yang lebih tinggi.
az aks create \
--name <aksClusterName> \
--location <region> \
--resource-group <resourceGroup> \
--enable-node-public-ip \
--node-public-ip-tags RoutingPreference=Internet \
--generate-ssh-keys
az aks nodepool add --cluster-name <aksClusterName> \
--name <nodePoolName> \
--location <region> \
--resource-group <resourceGroup> \
--enable-node-public-ip \
--node-public-ip-tags RoutingPreference=Internet
Simpul AKS yang menggunakan IP publik node yang menghosting layanan pada alamat host mereka harus memiliki aturan NSG yang ditambahkan untuk mengizinkan lalu lintas. Menambahkan port yang diinginkan dalam konfigurasi kumpulan simpul akan membuat aturan izin yang sesuai dalam kelompok keamanan jaringan kluster.
Jika grup keamanan jaringan diberlakukan pada subnet dengan kluster menggunakan jaringan virtual bring-your-own, aturan izinkan harus ditambahkan ke grup keamanan jaringan tersebut. Ini dapat dibatasi pada simpul dalam kumpulan simpul tertentu dengan menambahkan kumpulan simpul ke kelompok keamanan aplikasi (ASG). ASG terkelola akan dibuat secara default di grup sumber daya terkelola jika port host yang diizinkan ditentukan. Simpul juga dapat ditambahkan ke satu atau beberapa ASG kustom dengan menentukan ID sumber daya NSG dalam parameter kumpulan simpul.
Saat menentukan daftar port yang akan diizinkan, gunakan daftar terpisah koma dengan entri dalam format port/protocol
atau startPort-endPort/protocol
.
Contoh:
- 80/tcp
- 80/tcp,443/tcp
- 53/udp,80/tcp
- 50000-60000/tcp
- Diperlukan AKS versi 1.29 atau yang lebih tinggi.
az aks create \
--resource-group <resourceGroup> \
--name <aksClusterName> \
--nodepool-name <nodePoolName> \
--nodepool-allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp\
--nodepool-asg-ids "<asgId>,<asgId>" \
--generate-ssh-keys
az aks nodepool add \
--resource-group <resourceGroup> \
--cluster-name <aksClusterName> \
--name <nodePoolName> \
--allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp \
--asg-ids "<asgId>,<asgId>"
az aks nodepool update \
--resource-group <resourceGroup> \
--cluster-name <aksClusterName> \
--name <nodePoolName> \
--allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp \
--asg-ids "<asgId>,<asgId>"
Ketika IP publik dikonfigurasi pada node, port host dapat digunakan untuk memungkinkan pod menerima lalu lintas secara langsung tanpa harus mengonfigurasi layanan load balancer. Ini sangat berguna dalam skenario seperti game, di mana sifat sementara dari IP node dan port tidak menjadi masalah karena layanan matchmaker pada nama host terkenal dapat menyediakan host dan port yang benar untuk digunakan pada waktu koneksi. Namun, karena hanya satu proses pada host yang dapat mendengarkan pada port yang sama, menggunakan aplikasi dengan port host dapat menyebabkan masalah dengan penjadwalan. Untuk menghindari masalah ini, AKS menyediakan kemampuan untuk memiliki sistem secara dinamis menetapkan port yang tersedia pada waktu penjadwalan, mencegah konflik.
Peringatan
Lalu lintas port host pod akan diblokir oleh aturan NSG default yang berlaku pada kluster. Fitur ini harus dikombinasikan dengan memungkinkan port host pada kumpulan simpul untuk memungkinkan lalu lintas mengalir.
Penting
Fitur pratinjau AKS tersedia berdasarkan layanan mandiri. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan mereka dikecualikan dari perjanjian tingkat layanan dan garansi terbatas. Pratinjau AKS sebagian dicakup oleh dukungan pelanggan berdasarkan upaya terbaik. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:
- Diperlukan AKS versi 1.29 atau yang lebih tinggi.
Daftarkan PodHostPortAutoAssignPreview
bendera fitur dengan menggunakan perintah daftar fitur az, seperti yang ditunjukkan dalam contoh berikut:
az feature register --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"
Dibutuhkan beberapa menit agar status menampilkan Terdaftar. Verifikasi status pendaftaran dengan menggunakan perintah az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"
Saat status mencerminkan Terdaftar, refresh pendaftaran penyedia sumber daya Microsoft.ContainerService dengan menggunakan perintah az provider register :
az provider register --namespace Microsoft.ContainerService
Pemicu penetapan otomatis port host dilakukan dengan menyebarkan beban kerja tanpa port host dan menerapkan kubernetes.azure.com/assign-hostports-for-containerports
anotasi dengan daftar port yang memerlukan penetapan port host. Nilai anotasi harus ditentukan sebagai daftar entri yang dipisahkan koma seperti port/protocol
, di mana port adalah nomor port individual yang ditentukan dalam spesifikasi Pod dan protokolnya adalah tcp
atau udp
.
Port akan ditetapkan dari rentang 40000-59999
dan akan unik di seluruh kluster. Port yang ditetapkan juga akan ditambahkan ke variabel lingkungan di dalam pod sehingga aplikasi dapat menentukan port apa yang ditetapkan. Nama variabel lingkungan akan dalam format berikut (contoh di bawah): <deployment name>_PORT_<port number>_<protocol>_HOSTPORT
, jadi contohnya adalah mydeployment_PORT_8080_TCP_HOSTPORT: 41932
.
Berikut adalah contoh echoserver
penyebaran, yang menunjukkan pemetaan port host untuk port 8080 dan 8443:
apiVersion: apps/v1
kind: Deployment
metadata:
name: echoserver-hostport
labels:
app: echoserver-hostport
spec:
replicas: 3
selector:
matchLabels:
app: echoserver-hostport
template:
metadata:
annotations:
kubernetes.azure.com/assign-hostports-for-containerports: 8080/tcp,8443/tcp
labels:
app: echoserver-hostport
spec:
nodeSelector:
kubernetes.io/os: linux
containers:
- name: echoserver-hostport
image: k8s.gcr.io/echoserver:1.10
ports:
- name: http
containerPort: 8080
protocol: TCP
- name: https
containerPort: 8443
protocol: TCP
Ketika penyebaran diterapkan, hostPort
entri akan berada di YAML dari masing-masing pod:
$ kubectl describe pod echoserver-hostport-75dc8d8855-4gjfc
<cut for brevity>
Containers:
echoserver-hostport:
Container ID: containerd://d0b75198afe0612091f412ee7cf7473f26c80660143a96b459b3e699ebaee54c
Image: k8s.gcr.io/echoserver:1.10
Image ID: k8s.gcr.io/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229 Ports: 8080/TCP, 8443/TCP
Host Ports: 46645/TCP, 49482/TCP
State: Running
Started: Thu, 12 Jan 2023 18:02:50 +0000
Ready: True
Restart Count: 0
Environment:
echoserver-hostport_PORT_8443_TCP_HOSTPORT: 49482
echoserver-hostport_PORT_8080_TCP_HOSTPORT: 46645
Pelajari tentang menggunakan beberapa kumpulan simpul di AKS.
Pelajari tentang menggunakan load balancer standar di AKS
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: