Di kluster Kubernetes, alamat IP pod biasanya bersifat privat. Terway dan ack-extend-network-controller mendukung pengaitan Elastic IP Address (EIP) secara langsung ke pod sehingga pod tersebut memiliki egress publik independen tanpa berbagi lalu lintas dengan pod lain.
Prasyarat
Gunakan Kluster ACK yang dikelola atau Kluster Edisi Khusus ACK dengan plugin jaringan Terway. Untuk membuat kluster, lihat Membuat Kluster ACK yang Dikelola dan Membuat Kluster Edisi Khusus ACK (Pembuatan kluster baru tidak lagi didukung). Untuk mode jaringan Terway, lihat Menggunakan plugin jaringan Terway.
Sejak November 2023, Terway tidak lagi memelihara fitur EIP; versi v1.7.0 telah menghapusnya. Gunakan ack-extend-network-controller untuk menyambungkan EIP independen ke pod. Lihat Migrasi fitur EIP dari Terway ke ack-extend-network-controller.
Batasan
-
Sebelum menggunakan EIP, tinjau batasan-batasannya. Lihat Batasan.
-
Fitur ini hanya didukung pada node ECS.
-
Add-on mengelola siklus hidup EIP yang dibuat oleh controller. Jika Anda menguninstal komponen setelah menetapkan EIP ke pod, EIP tetap dialokasikan dan tidak dilepas secara otomatis.
Sebelum menghentikan komponen, hapus pod yang menggunakan EIP. Periksa status alokasi dan pelepasan EIP dengan memeriksa resource
podeips.alibabacloud.comyang sesuai dengan nama pod. Pastikan EIP tidak lagi digunakan sebelum menonaktifkan fitur EIP, atau penagihan EIP akan terus berjalan.
Penagihan
Terway dan ack-extend-network-controller gratis untuk diaktifkan, tetapi sumber daya cloud yang dikonsumsinya dikenai biaya. Lihat Penagihan untuk sumber daya cloud untuk detail penagihan ACK.
Latar Belakang
Dalam mode jaringan Terway, pod biasanya mengakses jaringan publik melalui host SNAT atau external SNAT melalui EIP, dengan layanan LoadBalancer yang mengarahkan lalu lintas masuk. Beberapa skenario memerlukan alamat IP publik independen. Contohnya:
-
Pod mengekspos layanan pada port acak, umum pada aplikasi berbasis UDP seperti server game dan telekonferensi. Misalnya, RTSP menggunakan port berbeda untuk setiap klien.
-
Pod memerlukan egress publik khusus untuk menghindari persaingan dengan pod lain.
Langkah 1: Konfigurasikan izin RAM untuk EIP
ack-extend-network-controller (Direkomendasikan)
-
Berikan izin RAM ke kluster ACK yang dikelola atau kluster Edisi Khusus ACK
-
Buat kebijakan izin kustom dengan konten berikut. Lihat Langkah 1: Membuat kebijakan izin kustom.
{ "Effect": "Allow", "Action": [ "vpc:DescribeVSwitches", "vpc:AllocateEipAddress", "vpc:AllocateEipAddressPro", "vpc:DescribeEipAddresses", "vpc:AssociateEipAddress", "vpc:UnassociateEipAddress", "vpc:ReleaseEipAddress", "vpc:AddCommonBandwidthPackageIp", "vpc:RemoveCommonBandwidthPackageIp", "vpc:TagResources", "ecs:DescribeNetworkInterfaces" ], "Resource": [ "*" ], "Condition": {} } -
Berikan izin ke peran RAM worker kluster. Lihat Langkah 2: Memberikan izin ke peran RAM worker kluster.
-
Terway
Terway memerlukan izin terkait EIP dan konfigurasi tambahan untuk menetapkan EIP ke pod.
-
Berikan izin RAM ke kluster ACK yang dikelola atau kluster ACK dasar yang dikelola yang dibuat pada atau setelah Juni 2020
-
Buat kebijakan izin kustom dengan konten berikut. Lihat Langkah 1: Membuat kebijakan izin kustom.
{ "Effect": "Allow", "Action": [ "vpc:DescribeVSwitches", "vpc:AllocateEipAddress", "vpc:DescribeEipAddresses", "vpc:AssociateEipAddress", "vpc:UnassociateEipAddress", "vpc:ReleaseEipAddress", "vpc:AddCommonBandwidthPackageIp", "vpc:RemoveCommonBandwidthPackageIp" ], "Resource": [ "*" ], "Condition": {} } -
Berikan izin ke peran RAM worker kluster. Lihat Langkah 2: Memberikan izin ke peran RAM worker kluster.
-
-
Berikan izin RAM ke kluster Edisi Khusus ACK atau kluster ACK yang dikelola yang dibuat sebelum Juni 2020
-
Buat kebijakan izin kustom dengan konten berikut. Lihat Langkah 1: Membuat kebijakan izin kustom.
{ "Effect": "Allow", "Action": [ "vpc:DescribeVSwitches", "vpc:AllocateEipAddress", "vpc:DescribeEipAddresses", "vpc:AssociateEipAddress", "vpc:UnassociateEipAddress", "vpc:ReleaseEipAddress", "vpc:AddCommonBandwidthPackageIp", "vpc:RemoveCommonBandwidthPackageIp" ], "Resource": [ "*" ], "Condition": {} } -
Pada tab Policies halaman peran RAM AliyunCSManagedNetworkRole, klik Grant Permission. Kemudian, klik Custom Policy, pilih kebijakan izin kustom yang telah Anda buat, lalu klik OK.
-
Langkah 2: Instal atau tingkatkan plugin kluster
Jangan aktifkan fitur EIP di kedua komponen ack-extend-network-controller dan Terway secara bersamaan. Hal ini dapat menyebabkan alokasi EIP ganda dan kegagalan pengikatan. Gunakan ack-extend-network-controller.
Perbandingan plugin
|
Item |
ack-extend-network-controller |
Terway |
|
Jenis kluster yang didukung |
|
|
|
EIP statis |
Didukung |
Tidak didukung |
|
Fase konfigurasi |
Setelah alamat IP pod ditetapkan, controller menetapkan dan mengikat EIP. |
Menetapkan dan mengikat EIP selama eksekusi CNI. |
|
Versi yang didukung |
Versi plugin v0.2.0 atau lebih baru. |
Versi plugin Terway v1.0.10.280-gdc2cb6c-aliyun atau lebih baru, tetapi sebelum v1.7.0. |
Menginstal atau meningkatkan plugin
Untuk ack-extend-network-controller, instal dari Marketplace dan aktifkan controller EIP. Untuk Terway, tingkatkan ke versi v1.0.10.280-gdc2cb6c-aliyun atau lebih baru.
ack-extend-network-controller (direkomendasikan)
-
Masuk ke Konsol ACK. Di panel navigasi kiri, klik .
-
Pada halaman Marketplace, cari
ack-extend-network-controllerlalu klik aplikasi yang dituju. -
Pada halaman detail aplikasi, klik Deploy di pojok kanan atas.
-
Pada panel Create, pilih kluster dan namespace, lalu klik Next.
-
Pada halaman OK, pilih versi, konfigurasikan parameter, lalu klik OK.
Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Tipe
Wajib
Deskripsi
clusterID
string
Ya
ID kluster.
regionID
string
Ya
Wilayah kluster.
enableControllers
[]string
Ya
Atur ke
eipuntuk mengaktifkan fitur EIP.networkController.vpcID
string
Ya
ID VPC kluster.
networkController.eipController.maxConcurrentReconciles
int
Tidak
Jumlah reconciles konkuren untuk controller EIP.
networkController.eipController.garbageCollectionPeriodInMinutes
int
Tidak
Interval, dalam menit, untuk pengumpulan sampah EIP statis.
networkController.customStatefulWorkloadKinds
[]string
Tidak
Jenis controller stateful kustom.
enableVirtualNode
bool
Tidak
Mengaktifkan dukungan node virtual ECI.
PentingJika Anda mengaktifkan fitur ini, controller akan menetapkan EIP ke pod pada instans ECI. Anotasi pod yang dikonfigurasi tidak boleh sama dengan yang digunakan untuk fitur EIP yang didukung oleh ECI. Gunakan fitur ini dengan hati-hati.
enableRRSA
bool
Tidak
Mengaktifkan RRSA untuk otentikasi.
CatatanDidukung oleh plugin ack-extend-network-controller v0.10.0 dan lebih baru.
Untuk detail konfigurasi, lihat Menggunakan RRSA untuk mengonfigurasi izin RAM untuk ServiceAccount guna mengisolasi izin pod.
rrsaRoleName
string
Tidak
Nama role.
CatatanDidukung oleh plugin ack-extend-network-controller v0.10.0 dan lebih baru.
credential.accessKey
string
Tidak
ID AccessKey akun dengan izin untuk menyambungkan EIP.
Parameter ini tidak diperlukan jika Anda telah menyelesaikan pengaturan di Langkah 1: Mengonfigurasi izin RAM yang diperlukan untuk menyambungkan EIP.
PentingTidak direkomendasikan karena metode ini menyimpan informasi sensitif dalam Secret Kubernetes.
credential.accessSecret
string
Tidak
AccessKey Secret akun dengan izin untuk menyambungkan EIP.
Parameter ini tidak diperlukan jika Anda telah menyelesaikan pengaturan di Langkah 1: Mengonfigurasi izin RAM yang diperlukan untuk menyambungkan EIP.
PentingTidak direkomendasikan karena metode ini menyimpan informasi sensitif dalam Secret Kubernetes.
kubeClientQPS
float32
Tidak
Batas QPS saat komponen mengakses API server kluster.
CatatanDidukung oleh plugin ack-extend-network-controller v0.12.2 dan lebih baru.
kubeClientBurst
int
Tidak
Jumlah maksimum permintaan burst ke API server kluster.
CatatanDidukung oleh plugin ack-extend-network-controller v0.12.2 dan lebih baru.
Contoh konfigurasi:
clusterID: "c11ba338192xxxxxxx" regionID: "cn-hangzhou" vpcID: "vpc-bp1rkq0zxxxxxx" enableControllers: - eip networkController: eipController: maxConcurrentReconciles: 1 garbageCollectionPeriodInMinutes: 1 customStatefulWorkloadKinds: - foo credential: accessKey: "" accessSecret: ""
-
Untuk memperbarui versi dan parameter ack-extend-network-controller, lihat Memodifikasi Helm chart.
Terway
Jika kluster Anda menggunakan Terway, tingkatkan terway-eni atau terway-eniip ke versi yang mendukung EIP. Lihat Komponen.
Versi plugin Terway harus v1.0.10.280-gdc2cb6c-aliyun atau lebih baru, tetapi sebelum v1.7.0. Lihat Terway untuk detail versi.
Langkah 3: Aktifkan fitur EIP
Anotasi EIP
Gunakan anotasi pod untuk mengaktifkan EIP: tetapkan secara otomatis ke pod atau kaitkan dengan EIP yang sudah ada.
Menetapkan EIP secara otomatis
Penetapan EIP otomatis dapat berulang kali membuat dan melepas EIP selama pembuatan ulang pod atau kegagalan CNI. Sebaiknya tentukan EIP yang sudah ada.
|
Anotasi pod |
Nilai |
|
network.alibabacloud.com/pod-with-eip k8s.aliyun.com/pod-with-eip |
Menentukan apakah akan membuat dan mengaitkan EIP secara otomatis. Nilai yang valid:
|
|
k8s.aliyun.com/eci-with-eip (Kompatibel) |
|
|
network.alibabacloud.com/eip-bandwidth k8s.aliyun.com/eip-bandwidth |
Anotasi ini hanya berlaku saat membuat EIP. Menentukan bandwidth puncak EIP dalam Mbps. Lihat Meminta EIP. |
|
network.alibabacloud.com/eip-internet-charge-type k8s.aliyun.com/eip-internet-charge-type |
Anotasi ini hanya berlaku saat membuat EIP. Menentukan metode pengukuran EIP. Nilai yang valid:
Lihat Meminta EIP. |
|
k8s.aliyun.com/eip-charge-type (Kompatibel) |
|
|
network.alibabacloud.com/eip-instance-charge-type k8s.aliyun.com/eip-instance-charge-type |
Anotasi ini hanya berlaku saat membuat EIP. Menentukan metode penagihan EIP. Nilai yang valid:
Lihat Meminta EIP. Catatan
Anotasi ini hanya didukung oleh ack-extend-network-controller. Opsi PrePaid (langganan) tidak didukung. |
|
network.alibabacloud.com/eip-common-bandwidth-package-id k8s.aliyun.com/eip-common-bandwidth-package-id |
ID Paket Bandwidth EIP yang akan dikaitkan. Catatan
Fitur ini memerlukan Terway v1.2.3 atau lebih baru. Tidak ada batasan versi untuk komponen ack-extend-network-controller. |
|
network.alibabacloud.com/eip-isp k8s.aliyun.com/eip-isp |
Anotasi ini hanya berlaku saat membuat EIP. Menentukan jenis jalur EIP. Nilai yang valid:
Lihat Meminta EIP. Catatan
Fitur ini memerlukan Terway v1.2.3 atau lebih baru. Tidak ada batasan versi untuk komponen ack-extend-network-controller. |
|
network.alibabacloud.com/eip-public-ip-address-pool-id k8s.aliyun.com/eip-public-ip-address-pool-id |
Anotasi ini hanya berlaku saat membuat EIP. Menentukan ID kolam alamat IP. Lihat Kolam alamat IP untuk batasan dan prosedurnya. Catatan
Hanya didukung oleh ack-extend-network-controller. |
|
network.alibabacloud.com/eip-resource-group-id k8s.aliyun.com/eip-resource-group-id |
Anotasi ini hanya berlaku saat membuat EIP. Menentukan ID kelompok sumber daya untuk EIP. Lihat Meminta EIP. Catatan
Didukung oleh ack-extend-network-controller v0.4.0 dan lebih baru. |
|
network.alibabacloud.com/eip-name k8s.aliyun.com/eip-name |
Anotasi ini hanya berlaku saat membuat EIP. Menentukan nama EIP. Lihat Meminta EIP. Catatan
Didukung oleh ack-extend-network-controller v0.6.0 dan lebih baru. |
|
network.alibabacloud.com/eip-description k8s.aliyun.com/eip-description |
Anotasi ini hanya berlaku saat membuat EIP. Menentukan deskripsi EIP. Lihat Meminta EIP. Catatan
Didukung oleh ack-extend-network-controller v0.6.0 dan lebih baru. |
|
network.alibabacloud.com/eip-security-protection-types k8s.aliyun.com/eip-security-protection-types |
Anotasi ini hanya berlaku saat membuat EIP. Menentukan tingkat perlindungan keamanan untuk EIP. EIP dengan Anti-DDoS yang diaktifkan didukung.
Untuk menentukan beberapa tingkat perlindungan, pisahkan dengan koma ( Catatan
Didukung oleh ack-extend-network-controller v0.9.0 dan lebih baru. |
|
network.alibabacloud.com/eip-tags k8s.aliyun.com/eip-tags |
Anotasi ini hanya berlaku saat membuat EIP. Menentukan tag yang akan ditambahkan ke EIP. Nilainya harus berupa string JSON yang valid. Lihat Mengelola tag. Contoh: Catatan
Didukung oleh ack-extend-network-controller v0.11.0 dan lebih baru. |
Menentukan instans EIP
Tentukan ID instans EIP dalam anotasi pod untuk mengaitkan EIP yang sudah ada. Anotasi ini hanya mengikat EIP; tidak mengubah konfigurasi EIP.
Fitur ini tidak cocok untuk controller multi-replika seperti Deployment. Hanya satu pod yang dapat mereferensikan setiap instans EIP. Gunakan dengan beban kerja stateful seperti StatefulSet.
|
Anotasi pod |
Nilai |
|
network.alibabacloud.com/pod-eip-instanceid k8s.aliyun.com/pod-eip-instanceid |
ID instans EIP yang akan dikaitkan, misalnya, eip-bp14qxxxxxxx. Penting
Jangan menetapkan instans EIP yang sama ke pod dengan nama berbeda. Setelah pod dihapus, controller EIP akan memutus kaitan EIP tersebut. Selama periode ini, Anda tidak dapat menggunakan instans EIP yang sama untuk pod baru. Untuk memeriksa apakah pemutusan kaitan telah selesai, pastikan resource PodEIP yang memiliki nama yang sama dengan pod tersebut tidak lagi ada. |
|
k8s.aliyun.com/eci-eip-instanceid (Kompatibel) |
Anotasi strategi rilis EIP
Strategi pelepasan ini mempertahankan EIP pod setelah pembuatan ulang. Gabungkan dengan penetapan otomatis untuk EIP persisten pada beban kerja stateful.
-
Fitur ini hanya didukung oleh ack-extend-network-controller dan hanya berlaku untuk controller replika stateful. Tidak dapat digunakan untuk controller tanpa status.
-
Jika Anda menentukan ID instans EIP, instans EIP tersebut tidak dilepas saat pod dihapus.
|
Anotasi pod |
Nilai |
|
network.alibabacloud.com/pod-eip-release-strategy k8s.aliyun.com/pod-eip-release-strategy |
Strategi pelepasan EIP pod. Nilai yang valid:
Anda juga dapat menentukan periode retensi. Ekspresi durasi bergaya Go didukung. Misalnya, |
Mengaktifkan EIP di ack-extend-network-controller atau Terway
Mengaktifkan di ack-extend-network-controller
ack-extend-network-controller memanggil API Alibaba Cloud untuk membuat sumber daya. Konfigurasikan izin RAM, instal komponen dari Marketplace, dan gunakan anotasi untuk membuat serta mengaitkan EIP ke pod.
Membuat dan mengaitkan EIP dengan anotasi
Gunakan anotasi manifes pod untuk membuat EIP dan mengaitkannya dengan pod. Lihat FAQ untuk detail anotasi.
-
Buat aplikasi dan gunakan anotasi untuk membuat serta mengaitkan EIP dengan pod.
Deployment
Manifes ini membuat Deployment di mana ACK secara otomatis menetapkan instans EIP dengan bandwidth puncak 5 Mbps ke setiap pod.
apiVersion: apps/v1 kind: Deployment metadata: name: example labels: app: example spec: replicas: 1 selector: matchLabels: app: example template: metadata: labels: app: example annotations: k8s.aliyun.com/pod-with-eip: "true" k8s.aliyun.com/eip-bandwidth: "5" spec: readinessGates: - conditionType: "k8s.aliyun.com/eip" containers: - name: example image: nginxSetelah pod dibuat, kueri resource
podeips.alibabacloud.comyang memiliki nama yang sama dengan pod untuk melihat detail EIP yang ditetapkan.kubectl get podeip -n <namespace> <podname> -o yamlOutput yang diharapkan:
apiVersion: alibabacloud.com/v1beta1 kind: PodEIP metadata: creationTimestamp: "2023-12-15T04:25:37Z" finalizers: - podeip-controller.alibabacloud.com/finalizer generation: 1 name: example-xxx namespace: default resourceVersion: "222800" uid: 43xxx-f1xx-4xxx-b3xx-969faxxx spec: allocationID: eip-2ze2qe8zsxxx allocationType: releaseStrategy: Follow type: Auto status: eipAddress: 39.102.XX.XX internetChargeType: PayByTraffic isp: BGP networkInterfaceID: eni-2zeagv8f3xxxx podLastSeen: "2023-12-15T05:18:47Z" privateIPAddress: 192.168.XX.XX resourceGroupID: rg-acfmwxxxxxsq status: InUseStatefulSet
Gunakan manifes berikut untuk membuat StatefulSet dengan dua pod. EIP ditetapkan secara otomatis ke setiap pod, dan strategi pelepasan diatur untuk menghapus resource PodEIP 10 menit setelah pod yang sesuai dihapus.
apiVersion: apps/v1 kind: StatefulSet metadata: name: example labels: app: example spec: serviceName: "example" replicas: 2 selector: matchLabels: app: example template: metadata: labels: app: example annotations: k8s.aliyun.com/pod-with-eip: "true" k8s.aliyun.com/pod-eip-release-strategy: "10m" spec: containers: - name: example image: nginxSetelah pod dibuat, kueri resource
podeips.alibabacloud.comuntuk melacak informasi tentang EIP yang ditetapkan.kubectl get podeip -n <namespace> -o yamlOutput yang diharapkan:
apiVersion: v1 items: - apiVersion: alibabacloud.com/v1beta1 kind: PodEIP metadata: creationTimestamp: "2023-12-15T03:28:01Z" finalizers: - podeip-controller.alibabacloud.com/finalizer generation: 1 name: example-0 namespace: default resourceVersion: "227221" uid: 79954xx-17xx-4dxx-b7xx-15b84xxx spec: allocationID: eip-2ze08metxxx allocationType: releaseAfter: 10m releaseStrategy: TTL type: Auto status: eipAddress: 39.105.XX.XX internetChargeType: PayByTraffic isp: BGP networkInterfaceID: eni-2ze4tkg4xxx podLastSeen: "2023-12-15T05:31:34Z" privateIPAddress: 192.168.XX.XX resourceGroupID: rg-acfmwxxx status: InUse - apiVersion: alibabacloud.com/v1beta1 kind: PodEIP metadata: creationTimestamp: "2023-12-15T03:28:03Z" finalizers: - podeip-controller.alibabacloud.com/finalizer generation: 1 name: example-1 namespace: default resourceVersion: "227222" uid: 1339xxxe7-97xx-46xx-9bxx-537690xxx spec: allocationID: eip-2zetwhffqxxx allocationType: releaseAfter: 10m releaseStrategy: TTL type: Auto status: eipAddress: 39.105.XX.XX internetChargeType: PayByTraffic isp: BGP networkInterfaceID: eni-2zeagv8f3wxxx podLastSeen: "2023-12-15T05:31:34Z" privateIPAddress: 192.168.XX.XX resourceGroupID: rg-acfmwqnwxxx status: InUse - apiVersion: alibabacloud.com/v1beta1 kind: PodEIP metadata: creationTimestamp: "2023-12-15T04:25:37Z" finalizers: - podeip-controller.alibabacloud.com/finalizer generation: 1 name: example-5bxxx-9xx namespace: default resourceVersion: "227220" uid: 43cdfxxx-f1xx-42xx-b3xx-969fxxx spec: allocationID: eip-2ze2qe8zsmnxxx allocationType: releaseStrategy: Follow type: Auto status: eipAddress: 39.102.XX.XX internetChargeType: PayByTraffic isp: BGP networkInterfaceID: eni-2zeagv8f3wxxx podLastSeen: "2023-12-15T05:31:34Z" privateIPAddress: 192.168.XX.XX publicIpAddressPoolID: pippool-2ze498cxxx resourceGroupID: rg-acfmwqnxxx status: InUse kind: List metadata: resourceVersion: ""Setelah pod dalam aplikasi stateful ini dihapus, resource kustom PodEIP (CR)-nya dipertahankan selama 10 menit sebelum dihapus. Jika pod dengan nama yang sama dibuat selama periode ini, pod tersebut menggunakan kembali EIP yang sesuai.
-
Verifikasi konfigurasi.
Setelah pod berada dalam status Running, periksa anotasi k8s.aliyun.com/allocated-eipAddress untuk melihat alamat EIP yang ditetapkan dan mengakses pod.
Mengaktifkan di Terway
-
Terapkan konfigurasi Terway untuk mendukung fitur EIP.
-
Edit ConfigMap Terway.
kubectl edit cm eni-config -n kube-system -
Di eni_conf, tambahkan baris berikut.
"enable_eip_pool": "true"CatatanUntuk memaksa memutus kaitan EIP dari instans saat ini saat Anda mengaitkannya dengan yang baru, tambahkan parameter "allow_eip_rob": "true" ke eni_conf.
-
Setelah selesai mengedit, tekan tombol Esc, ketik :wq!, lalu tekan tombol Enter untuk menyimpan perubahan dan keluar dari mode edit.
-
Buat ulang pod Terway untuk menerapkan perubahan.
kubectl delete pod -n kube-system -l app=terway-eniip # Jika Anda menginstal komponen terway-eni, ganti terway-eniip dengan terway-eni.
-
-
Buat dan kaitkan EIP ke pod menggunakan anotasi.
Gunakan anotasi manifes pod untuk membuat EIP dan mengaitkannya dengan pod. Lihat Batasan terkait EIP.
Menetapkan EIP secara otomatis
Tambahkan anotasi berikut untuk menetapkan EIP secara otomatis dan menentukan bandwidth:
-
k8s.aliyun.com/pod-with-eip: "true": Menetapkan EIP publik khusus ke pod. -
k8s.aliyun.com/eip-bandwidth: "5": Menentukan bandwidth EIP. Default-nya adalah 5 Mbps.
Contoh manifes:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment-basic labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: annotations: network.alibabacloud.com/pod-with-eip: "true" # Menetapkan EIP publik secara otomatis ke kontainer Nginx. network.alibabacloud.com/eip-bandwidth: "5" # Menentukan bandwidth EIP. Default-nya adalah 5 Mbps, yang konsisten dengan nilai default EIP. labels: app: nginx spec: containers: - name: nginx image: nginxMenentukan EIP
Penting-
Karena satu EIP tidak dapat dikaitkan dengan beberapa pod, metode ini tidak cocok untuk beban kerja seperti Deployment dan StatefulSet yang memiliki lebih dari satu replika.
-
Secara default, jika EIP yang ditentukan sudah dikaitkan dengan instans, pengaitan akan gagal. Untuk memaksa memutus kaitan EIP dari instans sebelumnya dan mengaitkannya dengan yang baru, Anda harus mengatur "allow_eip_rob": "true" di ConfigMap seperti yang dijelaskan sebelumnya.
-
Anda hanya dapat menentukan ID instans EIP untuk beban kerja satu replika. Misalnya, Deployment tidak boleh memiliki lebih dari satu replika.
Tambahkan anotasi berikut untuk menentukan ID instans EIP untuk pod:
k8s.aliyun.com/pod-eip-instanceid: "<your-eip-instance-id>" -
-
Verifikasi konfigurasi.
Setelah pod berada dalam status Running, periksa anotasi network.alibabacloud.com/allocated-eipAddress untuk melihat alamat EIP yang ditetapkan dan mengakses pod.
FAQ
Pod siap sebelum EIP dikaitkan
Controller hanya menetapkan EIP setelah alamat IP pod dialokasikan, sehingga pod mungkin menjadi Ready sebelum EIP dikaitkan. Gunakan metode berikut untuk mengontrol waktu.
Readiness gates
Mengonfigurasi readiness gates memerlukan ack-extend-network-controller.
Dengan readinessGates, controller hanya memperbarui kondisi pod setelah EIP dikaitkan, sehingga mencegah status Ready hingga pengikatan selesai.
kind: Pod
...
spec:
readinessGates:
- conditionType: "k8s.aliyun.com/eip"
status:
conditions:
- lastProbeTime: "2022-12-12T03:45:48Z"
lastTransitionTime: "2022-12-12T03:45:48Z"
reason: Associate eip succeed
status: "True"
type: k8s.aliyun.com/eip
...
Init container
Konfigurasikan init container untuk memverifikasi penetapan EIP.
apiVersion: v1
kind: Pod
metadata:
name: example
annotations:
network.alibabacloud.com/pod-with-eip: "true"
spec:
containers:
- name: example
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init
image: busybox:1.28
command: ['timeout', '-t' ,'60', 'sh','-c', "until grep -E '^k8s.aliyun.com\\/allocated-eipAddress=\\S?[0-9]+\\S?' /etc/podinfo/annotations; do echo waiting for annotations; sleep 2; done"]
volumeMounts:
- name: podinfo
mountPath: /etc/podinfo
volumes:
- name: podinfo
downwardAPI:
items:
- path: "labels"
fieldRef:
fieldPath: metadata.labels
- path: "annotations"
fieldRef:
fieldPath: metadata.annotations
Pod tidak dapat diakses melalui EIP
Kebijakan ACL yang ketat sering menjadi penyebabnya. Periksa kontrol akses berikut:
-
Cloud Firewall: Lalu lintas EIP tunduk pada aturan kontrol akses Cloud Firewall. Izinkan lalu lintas inbound dan outbound untuk EIP pod dan port layanan. Lihat Mengonfigurasi kebijakan kontrol akses untuk firewall internet.
-
Grup keamanan node: Setelah EIP disambungkan ke pod, grup keamanan node tetap mengatur lalu lintas. Izinkan lalu lintas inbound dari IP klien ke port layanan pod dan lalu lintas outbound yang diperlukan. Lihat Mengonfigurasi grup keamanan kluster.