Dalam kluster Kubernetes, pod biasanya diberi alamat IP pribadi. Namun, beberapa skenario mengharuskan pod memiliki alamat IP publik independen agar dapat berkomunikasi dengan jaringan eksternal tanpa terpengaruh oleh lalu lintas dari pod lain. Komponen Terway dan ack-extend-network-controller Alibaba Cloud mendukung pengaitan Elastic IP Address (EIP) ke pod tertentu, sehingga memberikan egress publik yang independen.
Prasyarat
Anda harus membuat Kluster ACK yang dikelola atau Cluster khusus ACK yang menggunakan plugin jaringan Terway. Untuk informasi selengkapnya, lihat Membuat Kluster ACK yang dikelola dan Membuat Cluster khusus ACK (tidak lagi tersedia untuk pembuatan). Untuk informasi lebih lanjut tentang mode jaringan Terway, lihat Menggunakan plugin jaringan Terway.
Mulai November 2023, Terway tidak lagi menyediakan pembaruan untuk fitur EIP. Fitur ini secara resmi dihapus pada v1.7.0. Kami menyarankan Anda menggunakan komponen ack-extend-network-controller untuk melampirkan EIP publik independen ke pod. Untuk informasi selengkapnya, lihat Migrasi fitur EIP dari Terway ke ack-extend-network-controller.
Batasan
Sebelum menggunakan EIP, Anda harus memahami batasan-batasannya. Untuk informasi selengkapnya, lihat Batasan.
Fitur ini hanya didukung untuk node ECS.
Penagihan
Mengaktifkan plugin Terway dan ack-extend-network-controller tidak dikenakan biaya tambahan. Namun, Anda mungkin dikenakan biaya untuk sumber daya cloud yang digunakan. Untuk informasi selengkapnya tentang penagihan sumber daya cloud ACK, lihat Biaya sumber daya cloud.
Informasi latar belakang
Dalam jaringan Terway, lalu lintas dari pod ke Internet biasanya dirutekan menggunakan Source Network Address Translation (SNAT) host atau SNAT eksternal melalui EIP. Lalu lintas Internet arah masuk ke pod umumnya mengalir melalui layanan LoadBalancer. Namun, beberapa skenario mengharuskan pod memiliki alamat IP publik independen. Misalnya:
Port yang dipetakan untuk pod bersifat acak. Hal ini umum terjadi pada server game berbasis User Datagram Protocol (UDP) atau panggilan konferensi. Sebagai contoh, Real-Time Streaming Protocol (RTSP) menggunakan port berbeda untuk klien yang berbeda.
Pod bersaing untuk lalu lintas Internet, dan pod tertentu memerlukan egress publik yang independen.
Langkah 1: Konfigurasikan izin RAM untuk melampirkan EIP
ack-extend-network-controller (disarankan)
Berikan izin RAM ke Kluster ACK yang dikelola atau Cluster khusus ACK
Buat kebijakan kustom dengan konten berikut. Untuk informasi selengkapnya, lihat Langkah 1: Membuat kebijakan 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. Untuk informasi selengkapnya, lihat Langkah 2: Memberikan izin ke peran RAM Worker kluster.
Terway
Terway memerlukan izin terkait EIP untuk meminta dan mengonfigurasi EIP bagi pod. Anda harus mengonfigurasi izin tambahan.
Berikan izin RAM ke Kluster ACK yang dikelola atau Kluster ACK yang dikelola Edisi Dasar yang dibuat pada atau setelah Juni 2020
Buat kebijakan kustom dengan konten berikut. Untuk informasi selengkapnya, lihat Langkah 1: Membuat kebijakan 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. Untuk informasi selengkapnya, lihat Langkah 2: Memberikan izin ke peran RAM Worker kluster.
Berikan izin RAM ke Cluster khusus ACK atau Kluster ACK yang dikelola yang dibuat sebelum Juni 2020
Buat kebijakan kustom dengan konten berikut. Untuk informasi selengkapnya, lihat Langkah 1: Membuat kebijakan kustom.
{ "Effect": "Allow", "Action": [ "vpc:DescribeVSwitches", "vpc:AllocateEipAddress", "vpc:DescribeEipAddresses", "vpc:AssociateEipAddress", "vpc:UnassociateEipAddress", "vpc:ReleaseEipAddress", "vpc:AddCommonBandwidthPackageIp", "vpc:RemoveCommonBandwidthPackageIp" ], "Resource": [ "*" ], "Condition": {} }Pada halaman Peran RAM AliyunCSManagedNetworkRole, buka tab Permissions dan klik Add Permissions. Kemudian, klik Custom Policy, pilih kebijakan kustom yang telah Anda buat pada langkah sebelumnya, lalu klik OK.
Langkah 2: Instal atau tingkatkan plugin untuk kluster
Jangan aktifkan kemampuan konfigurasi EIP dari ack-extend-network-controller dan Terway secara bersamaan. Hal ini dapat menyebabkan alokasi ulang sumber daya EIP dan mengakibatkan kegagalan pengikatan EIP. Kami menyarankan Anda menggunakan plugin ack-extend-network-controller.
Perbandingan plugin
Item | ack-extend-network-controller | Terway |
Jenis kluster yang didukung |
|
|
EIP tetap | Didukung | Tidak didukung |
Fase konfigurasi | Setelah alamat IP pod dialokasikan, controller mengalokasikan dan melampirkan EIP ke pod. | EIP dialokasikan dan dilampirkan selama proses eksekusi CNI. |
Versi yang didukung | v0.2.0 atau yang lebih baru | Sama dengan atau lebih baru dari v1.0.10.280-gdc2cb6c-aliyun, tetapi sebelum v1.7.0 |
Instal atau tingkatkan plugin
Jika Anda menggunakan plugin ack-extend-network-controller, instal dari Marketplace Aplikasi ACK dan aktifkan controller EIP. Jika Anda menggunakan plugin jaringan Terway, tingkatkan Terway ke versi v1.0.10.280-gdc2cb6c-aliyun atau yang lebih baru.
Instal ack-extend-network-controller (disarankan)
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, pilih .
Pada halaman App Marketplace, masukkan
ack-extend-network-controllerdi kotak pencarian lalu klik aplikasi tersebut.Pada halaman detail aplikasi, klik Deploy di pojok kanan atas.
Pada panel Create, pilih kluster dan namespace, lalu klik Next.
Pada halaman konfigurasi parameter, pilih nomor versi, atur parameter, lalu klik OK.
Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter
Tipe
Wajib
Deskripsi
clusterID
string
Ya
ID kluster.
regionID
string
Ya
ID zona tempat kluster ditempatkan.
enableControllers
[]string
Ya
Atur parameter ini ke
eipuntuk mengaktifkan fitur EIP.networkController.vpcid
string
Ya
ID VPC kluster.
networkController.eipController.maxConcurrentReconciles
int
Tidak
Jumlah controller EIP konkuren.
networkController.eipController.garbageCollectionPeriodInMinutes
int
Tidak
Periode pembersihan EIP tetap oleh controller EIP.
customStatefulWorkloadKinds
[]string
Tidak
Kind dari controller stateful kustom.
enableVirtualNode
bool
Tidak
Menentukan apakah akan mendukung node virtual ECI.
PentingJika Anda mengaktifkan parameter ini, controller akan mengalokasikan EIP ke pod instans ECI. Anotasi pod yang Anda konfigurasi tidak boleh sama dengan fitur EIP yang didukung oleh ECI. Gunakan parameter ini dengan hati-hati.
enableRRSA
bool
Tidak
Mengotentikasi permintaan menggunakan RRSA.
CatatanDidukung oleh ack-extend-network-controller v0.10.0 dan yang lebih baru.
Hanya metode injeksi ack-pod-identity-webhook yang didukung untuk mengonfigurasi RRSA. Konfigurasikan label yang sesuai untuk namespace kube-system. Untuk informasi selengkapnya tentang konfigurasi, lihat Isolasi izin pod berdasarkan RRSA.
rrsaRoleName
string
Tidak
Nama peran.
CatatanDidukung oleh ack-extend-network-controller v0.10.0 dan yang lebih baru.
credential.accessKey
string
Tidak
ID AccessKey dari akun yang memiliki izin untuk melampirkan EIP.
Jika Anda telah menyelesaikan Langkah 1: Konfigurasikan izin RAM untuk melampirkan EIP, Anda tidak perlu mengonfigurasi parameter ini.
PentingKonfigurasi ini menyimpan informasi sensitif dalam Secret Kubernetes. Metode ini tidak disarankan.
credential.accessSecret
string
Tidak
Rahasia AccessKey dari akun yang memiliki izin untuk melampirkan EIP.
Jika Anda telah menyelesaikan Langkah 1: Konfigurasikan izin RAM untuk melampirkan EIP, Anda tidak perlu mengonfigurasi parameter ini.
PentingKonfigurasi ini menyimpan informasi sensitif dalam Secret Kubernetes. Metode ini tidak disarankan.
kubeClientQPS
float32
Tidak
Batas permintaan per detik (QPS) untuk komponen saat mengakses API server kluster.
CatatanDidukung oleh ack-extend-network-controller v0.12.2 dan yang lebih baru.
kubeClientBurst
int
Tidak
Jumlah maksimum permintaan burst untuk komponen saat mengakses API server kluster.
CatatanDidukung oleh ack-extend-network-controller v0.12.2 dan yang lebih baru.
Kode berikut memberikan 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 plugin ack-extend-network-controller, lihat Memodifikasi chart Helm.
Tingkatkan Terway
Pastikan kluster menggunakan plugin Terway, lalu tingkatkan plugin Terway (terway-eni atau terway-eniip) ke versi yang mendukung fitur EIP. Untuk informasi selengkapnya tentang cara meningkatkan plugin Terway, lihat Mengelola komponen.
Versi plugin Terway harus v1.0.10.280-gdc2cb6c-aliyun atau yang lebih baru, dan lebih lama dari v1.7.0. Untuk informasi selengkapnya tentang versi plugin Terway, lihat Terway.
Langkah 3: Aktifkan fitur EIP
Pengenalan anotasi untuk mengaktifkan EIP
ACK memungkinkan Anda menggunakan anotasi untuk mengaktifkan fitur EIP. Anda dapat memilih untuk mengalokasikan EIP secara otomatis atau menetapkan EIP tetap ke pod sesuai kebutuhan Anda.
Alokasikan EIP secara otomatis
Saat menggunakan fitur alokasi EIP otomatis, sumber daya EIP mungkin diminta dan dilepas berulang kali jika pod dibuat ulang atau eksekusi Container Network Interface (CNI) gagal. Untuk mencegah masalah ini, Anda dapat menentukan instans EIP.
Anotasi Pod | Nilai |
network.alibabacloud.com/pod-with-eip k8s.aliyun.com/pod-with-eip | Menentukan apakah akan membuat dan melampirkan EIP secara otomatis. Nilai yang valid:
|
k8s.aliyun.com/eci-with-eip (kompatibel) | |
network.alibabacloud.com/eip-bandwidth k8s.aliyun.com/eip-bandwidth | Hanya didukung saat Anda membuat EIP. Bandwidth puncak EIP. Satuan: Mbit/s. Untuk informasi selengkapnya, lihat Meminta EIP. |
network.alibabacloud.com/eip-internet-charge-type k8s.aliyun.com/eip-internet-charge-type | Hanya didukung saat Anda membuat EIP. Metode pengukuran EIP. Nilai yang valid:
Untuk informasi selengkapnya, lihat Meminta EIP. |
k8s.aliyun.com/eip-charge-type (kompatibel) | |
network.alibabacloud.com/eip-instance-charge-type k8s.aliyun.com/eip-instance-charge-type | Hanya didukung saat Anda membuat EIP. Metode penagihan EIP. Nilai yang valid:
Untuk informasi selengkapnya, lihat Meminta EIP. Catatan Hanya didukung di ack-extend-network-controller. Konfigurasi langganan PrePaid tidak didukung. |
network.alibabacloud.com/eip-common-bandwidth-package-id k8s.aliyun.com/eip-common-bandwidth-package-id | Menambahkan instans Bandwidth Internet Bersama yang sudah ada. Catatan Plugin Terway harus v1.2.3 atau yang lebih baru. Tidak ada batasan versi untuk plugin ack-extend-network-controller. |
network.alibabacloud.com/eip-isp k8s.aliyun.com/eip-isp | Hanya didukung saat Anda membuat EIP. Jenis jalur EIP. Nilai yang valid:
Untuk informasi selengkapnya, lihat Meminta EIP. Catatan Plugin Terway harus v1.2.3 atau yang lebih baru. Tidak ada batasan versi untuk plugin ack-extend-network-controller. |
network.alibabacloud.com/eip-public-ip-address-pool-id k8s.aliyun.com/eip-public-ip-address-pool-id | Hanya didukung saat Anda membuat EIP. Kolam alamat EIP. Untuk informasi selengkapnya tentang batasan dan langkah-langkah penggunaan kolam alamat EIP, lihat Membuat dan mengelola kolam alamat IP. Catatan Hanya didukung di ack-extend-network-controller. |
network.alibabacloud.com/eip-resource-group-id k8s.aliyun.com/eip-resource-group-id | Hanya didukung saat Anda membuat EIP. Kelompok sumber daya EIP. Untuk informasi selengkapnya, lihat Meminta EIP. Catatan Hanya didukung oleh ack-extend-network-controller v0.4.0 dan yang lebih baru. |
network.alibabacloud.com/eip-name k8s.aliyun.com/eip-name | Hanya didukung saat Anda membuat EIP. Nama EIP. Untuk informasi selengkapnya, lihat Meminta EIP. Catatan Hanya didukung oleh ack-extend-network-controller v0.6.0 dan yang lebih baru. |
network.alibabacloud.com/eip-description k8s.aliyun.com/eip-description | Hanya didukung saat Anda membuat EIP. Deskripsi EIP. Untuk informasi selengkapnya, lihat Meminta EIP. Catatan Hanya didukung oleh ack-extend-network-controller v0.6.0 dan yang lebih baru. |
network.alibabacloud.com/eip-security-protection-types k8s.aliyun.com/eip-security-protection-types | Hanya didukung saat Anda membuat EIP. Tingkat perlindungan keamanan EIP. EIP yang diaktifkan Anti-DDoS Proxy didukung. Jika Anda mengonfigurasi beberapa tingkat, pisahkan dengan koma ( Catatan Hanya didukung oleh ack-extend-network-controller v0.9.0 dan yang lebih baru. |
network.alibabacloud.com/eip-tags k8s.aliyun.com/eip-tags | Hanya didukung saat Anda membuat EIP. Konfigurasi tag EIP. Nilainya harus dalam format JSON yang valid. Untuk informasi selengkapnya, lihat Mengelola tag. Contoh: Catatan Hanya didukung oleh ack-extend-network-controller v0.11.0 dan yang lebih baru. |
Tentukan instans EIP
Anda dapat melampirkan EIP yang sudah ada dengan menentukan ID instansnya. Anotasi pod tidak mengubah konfigurasi instans EIP. Anotasi tersebut hanya melampirkan EIP ke pod yang ditentukan.
Fitur ini tidak berlaku untuk controller multi-replika. Pastikan hanya satu pod yang mereferensikan instans EIP. Kami menyarankan Anda hanya menggunakan fitur ini dengan aplikasi berstatus StatefulSet.
Anotasi Pod | Nilai |
network.alibabacloud.com/pod-eip-instanceid k8s.aliyun.com/pod-eip-instanceid | Menggunakan EIP yang ditentukan. Masukkan ID instans EIP. Contohnya, eip-bp14qxxxxxxx. Penting Hindari mengalokasikan instans EIP yang sama ke pod dengan nama berbeda. Controller EIP akan melepas EIP setelah pod keluar. Selama periode ini, Anda tidak dapat menggunakan instans EIP yang sama di kontainer baru. Anda dapat memeriksa apakah sumber daya Pod EIP dengan nama yang sama dengan pod tersebut ada untuk menentukan apakah pod dan EIP telah dilepas. |
k8s.aliyun.com/eci-eip-instanceid (kompatibel) |
Pengenalan anotasi untuk mengatur kebijakan pelepasan EIP
EIP tetap memastikan bahwa pod terus menggunakan alamat EIP yang sama setelah pod dibuat ulang. Kebijakan ini dapat dikombinasikan dengan fitur alokasi EIP otomatis untuk EIP tetap dalam aplikasi berstatus.
Fitur ini hanya didukung oleh ack-extend-network-controller dan hanya untuk controller replika berstatus. Fitur ini tidak dapat digunakan untuk controller tanpa status.
Jika Anda menentukan ID instans EIP, instans EIP tersebut tidak dilepas.
Anotasi Pod | Nilai |
network.alibabacloud.com/pod-eip-release-strategy k8s.aliyun.com/pod-eip-release-strategy | Kebijakan pelepasan Pod EIP. Nilai yang valid:
Anda juga dapat langsung mengonfigurasi waktu kedaluwarsa. Ekspresi waktu tipe Go didukung. Misalnya, |
Aktifkan EIP di kluster ack-extend-network-controller atau Terway
Aktifkan di ack-extend-network-controller
ack-extend-network-controller perlu mengakses OpenAPI Alibaba Cloud untuk membuat sumber daya. Anda harus mengonfigurasi izin yang diperlukan di RAM. Kemudian, Anda dapat menginstal ack-extend-network-controller dari Marketplace Aplikasi dan menggunakan anotasi untuk membuat serta mengaitkan EIP ke pod tertentu.
Buat dan kaitkan EIP ke pod tertentu menggunakan anotasi
Anda dapat membuat atau mengaitkan EIP ke pod dengan menentukan anotasi di pod tersebut. Untuk informasi selengkapnya tentang anotasi, lihat bagian FAQ dalam topik ini.
Buat aplikasi, lalu buat dan kaitkan EIP ke pod tertentu.
Deployment
Gunakan contoh berikut untuk membuat deployment. Instans EIP dengan bandwidth 5 Mbit/s dialokasikan secara otomatis 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, Anda dapat mengkueri sumber daya
podeips.alibabacloud.comyang memiliki nama sama dengan pod untuk melacak informasi EIP yang dialokasikan.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 contoh berikut untuk membuat sumber daya StatefulSet. Dua pod dibuat, dan instans EIP dialokasikan secara otomatis ke setiap pod. Kebijakan pelepasan diatur agar PodEIP dihapus 10 menit setelah pod 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, Anda dapat mengambil informasi EIP yang dialokasikan dari sumber daya
podeips.alibabacloud.comyang memiliki nama sama dengan pod.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 dari aplikasi berstatus dihapus, sumber daya kustom PodEIP (CR)-nya dipertahankan selama 10 menit sebelum dihapus. Jika pod dengan nama yang sama dibuat selama periode ini, pod tersebut akan menggunakan kembali EIP tersebut.
Verifikasi konfigurasi.
Setelah pod memasuki status Berjalan, Anda dapat memeriksa nilai anotasi k8s.aliyun.com/allocated-eipAddress di pod untuk melihat alamat EIP yang terkait. Anda kemudian dapat mengakses pod menggunakan EIP ini.

Aktifkan di Terway
Konfigurasikan Terway untuk mendukung fitur EIP.
Modifikasi ConfigMap Terway.
kubectl edit cm eni-config -n kube-systemTambahkan konten berikut ke eni_conf.
"enable_eip_pool": "true"CatatanJika Anda ingin memaksa melepas instans sebelumnya saat menentukan EIP, Anda juga harus menambahkan parameter "allow_eip_rob": "true" ke eni_conf.
Setelah mengubah file, tekan tombol Esc, masukkan :wq!, lalu tekan tombol Enter untuk menyimpan file konfigurasi yang telah dimodifikasi dan keluar dari mode edit.
Buat ulang instans Terway.
kubectl delete pod -n kube-system -l app=terway-eniip # Jika Anda menginstal komponen terway-eni, ganti terway-eniip dengan terway-eni.
Gunakan anotasi untuk membuat dan mengaitkan EIP ke pod.
Anda dapat membuat atau mengaitkan EIP ke pod dengan menentukan anotasi di pod tersebut. Untuk informasi selengkapnya tentang batasan EIP, lihat Batasan.
Konfigurasikan anotasi untuk skenario berbeda sebagai berikut:
Skenario alokasi EIP otomatis
Tambahkan anotasi berikut untuk mengalokasikan EIP secara otomatis ke pod dan menentukan bandwidth EIP tersebut.
k8s.aliyun.com/pod-with-eip: "true": Mengalokasikan EIP publik independen ke pod target.k8s.aliyun.com/eip-bandwidth: "5": Menentukan bandwidth EIP. Bandwidth default adalah 5 Mbit/s, yang sama dengan nilai default untuk EIP.
Kode berikut memberikan contoh file YAML.
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" # Mengalokasikan alamat IP publik secara otomatis ke kontainer Nginx. network.alibabacloud.com/eip-bandwidth: "5" # Menentukan bandwidth EIP. Bandwidth default adalah 5 Mbit/s, yang konsisten dengan nilai default untuk EIP. labels: app: nginx spec: containers: - name: nginx image: nginxSkenario menentukan EIP
PentingSatu EIP tidak dapat dikaitkan dengan beberapa pod. Oleh karena itu, skenario ini tidak berlaku untuk deployment dan StatefulSets.
Secara default, jika EIP sudah terpasang ke instans, EIP tersebut tidak dapat dipasang ke pod. Jika Anda ingin melepas EIP dari instans sebelumnya sebelum memasangnya ke yang baru, Anda harus mengonfigurasi "allow_eip_rob": "true" di ConfigMap seperti yang dijelaskan pada langkah sebelumnya.
Anda hanya dapat menentukan ID instans EIP untuk instans single-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: "<youreipInstanceId>"Verifikasi konfigurasi.
Setelah pod memasuki status Berjalan, Anda dapat memeriksa nilai anotasi network.alibabacloud.com/allocated-eipAddress di pod untuk melihat alamat EIP yang terkait. Anda kemudian dapat mengakses pod menggunakan EIP ini.
FAQ
Mengapa pod menjadi Ready?
Controller mengonfigurasi alamat EIP untuk pod setelah alamat IP pod dialokasikan. Pod mungkin memasuki status Ready sebelum EIP berhasil dilampirkan. Anda dapat menggunakan metode berikut untuk mengontrol kapan pod memasuki status Ready.
Konfigurasikan readiness gates untuk pod
Mengonfigurasi readiness gates untuk pod hanya didukung oleh ack-extend-network-controller.
Setelah Anda mengonfigurasi readinessGates di pod, controller akan mengatur kondisi pod setelah EIP berhasil dilampirkan. Pod tidak akan memasuki status Ready hingga EIP dilampirkan.
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
...Konfigurasikan init container untuk pod
Anda dapat mengonfigurasi init container untuk pod. Di dalam init container, Anda dapat memeriksa apakah EIP telah berhasil dialokasikan. Untuk informasi selengkapnya, lihat contoh berikut.
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.annotationsMengapa saya tidak dapat mengakses pod menggunakan EIP?
Masalah ini biasanya disebabkan oleh aturan daftar kontrol akses (ACL). Periksa kebijakan kontrol akses berikut:
Cloud Firewall: EIP tunduk pada aturan kontrol akses Cloud Firewall. Anda harus mengizinkan lalu lintas arah masuk dan keluar untuk EIP dan port bisnis yang digunakan oleh pod di Cloud Firewall. Untuk informasi selengkapnya, lihat Mengonfigurasi kebijakan kontrol akses untuk batas Internet.
Grup keamanan node: Setelah EIP dilampirkan ke pod, lalu lintas yang melewati EIP tetap tunduk pada kebijakan grup keamanan node tempat pod berada. Pastikan alamat IP klien diizinkan untuk lalu lintas arah masuk dan keluar di grup keamanan node, dan port bisnis pod terbuka. Untuk informasi selengkapnya, lihat Mengonfigurasi grup keamanan kluster.