Dalam kluster ACS, alamat IP sebuah pod biasanya merupakan alamat IP pribadi. Namun, dalam beberapa skenario, pod memerlukan alamat IP publik mandiri untuk berkomunikasi secara langsung dengan Internet. Topik ini menjelaskan cara memasang Elastic IP Address (EIP) mandiri untuk pod di dalam kluster ACS.
Prasyarat
Kluster ACS telah dibuat. Untuk informasi lebih lanjut, lihat Buat kluster ACS.
Informasi latar belakang
Secara umum, pod mengakses data Internet melalui "external SNAT+EIP". Untuk informasi lebih lanjut, lihat Aktifkan akses Internet untuk kluster ACS. Data masuk Internet dari pod biasanya mengalir melalui Service tipe LoadBalancer. Dalam skenario tertentu, pod memerlukan alamat IP mandiri, seperti:
Port pemetaan eksternal pod bersifat acak, yang sering terjadi pada server game protokol User Datagram Protocol (UDP) atau telekonferensi. Sebagai contoh, protokol RTSP menggunakan port berbeda untuk klien yang berbeda.
Data Internet menghadapi persaingan sumber daya di titik keluar.
Batasan
Sebelum menggunakan EIP, pastikan Anda memahami batasan EIP. Untuk informasi lebih lanjut, lihat Batasan.
Jika Anda menggunakan kemampuan alokasi EIP otomatis, sumber daya EIP mungkin diminta dan dilepaskan berulang kali saat membuat ulang pod atau mengalami kegagalan CNI, yang dapat memicu batasan EIP. Untuk menghindari situasi ini, Anda dapat menentukan EIP untuk pod dengan mengonfigurasi anotasi pod
network.alibabacloud.com/allocated-eip-id.
Langkah 1: Konfigurasikan izin RAM yang diperlukan untuk memasang EIP
Untuk kluster ACS, Anda perlu menghasilkan AccessKey untuk pengguna Resource Access Management (RAM). Untuk operasi spesifik, lihat Buat pengguna RAM dan Buat kebijakan kustom.
Langkah 2: Instal atau tingkatkan plug-in untuk kluster
Anda perlu menginstal plug-in ack-extend-network-controller di ACK App Market atau entri aplikasi kluster ACS, serta mengaktifkan pengontrol EIP.
Kluster ACS dapat dikelola di konsol ACK. Untuk informasi lebih lanjut, lihat Ikhtisar Produk.
Instal melalui entri Helm di kluster ACS
Masuk ke konsol ACS. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik ID-nya. Di panel navigasi kiri halaman detail kluster, pilih .
Di halaman Helm, klik Deploy. Lengkapi konfigurasi Basic Information dengan informasi berikut.
Parameter
Nilai contoh
Application Name
ack-extend-network-controller
Namespace
kube-system
Source
Default adalah App Catalog.
Chart
Kotak pencarian: cari ack-extend-network-controller.
Klik Next.
Di halaman Parameters, pilih Chart Version. Konfigurasikan Required parameters sesuai dengan tabel berikut, lalu klik OK.
CatatanKluster ACS hanya mendukung instalasi dan penggunaan komponen dengan versi >=v0.9.3.
Deskripsi parameter adalah sebagai berikut:
Parameter konfigurasi
Tipe
Diperlukan
Deskripsi
enableControllers
[]string
Ya
Hapus komentar default dari
eipuntuk mengaktifkan fitur EIP.vpcid
string
Ya
ID VPC yang terkait dengan EIP.
credential.accessKey
string
Ya
ID AccessKey dari akun izin yang diperlukan untuk memasang EIP.
credential.accessSecret
string
Ya
Rahasia AccessKey dari akun izin yang diperlukan untuk memasang EIP.
networkController.eipController.maxConcurrentReconciles
int
Tidak
Jumlah konkurensi dari pengontrol EIP.
networkController.eipController.garbageCollectionPeriodInMinutes
int
Tidak
Periode untuk pengontrol EIP membersihkan EIP tetap.
customStatefulWorkloadKinds
[]string
Tidak
Jenis Pengontrol Stateful Kustom.
Kembali ke halaman Helm, dan Anda dapat melihat bahwa komponen baru ack-extend-network-controller telah diterapkan.
Instal melalui ACK App Market
Masuk ke Konsol Manajemen Layanan Kontainer, di panel navigasi kiri, pilih .
Di bilah pencarian di halaman Marketplace, masukkan
ack-extend-network-controller, lalu klik.Di halaman detail aplikasi, klik One-click Deployment di sudut kanan atas.
Di panel Create, pilih kluster dan namespace, lalu klik Next.
Di halaman konfigurasi parameter, pilih nomor versi dan atur parameter yang sesuai, lalu klik OK.
CatatanKluster ACS hanya mendukung instalasi dan penggunaan komponen dengan versi >=v0.9.2.
Deskripsi parameter adalah sebagai berikut:
Parameter konfigurasi
Tipe
Diperlukan
Deskripsi
enableControllers
[]string
Ya
Konfigurasikan
eipuntuk mengaktifkan fungsi EIP.vpcid
string
Ya
ID VPC yang terkait dengan EIP
credential.accessKey
string
Ya
AK dari akun izin yang diperlukan untuk memasang EIP.
credential.accessSecret
string
Ya
SK dari akun izin yang diperlukan untuk memasang EIP.
networkController.eipController.maxConcurrentReconciles
int
Tidak
Jumlah konkurensi dari pengontrol EIP.
networkController.eipController.garbageCollectionPeriodInMinutes
int
Tidak
Periode untuk pengontrol EIP membersihkan EIP tetap.
customStatefulWorkloadKinds
[]string
Tidak
Jenis Pengontrol Stateful Kustom.
Contoh parameter adalah sebagai berikut:
clusterID: "c11ba338192xxxxxxx" regionID: "cn-hangzhou" vpcID: "vpc-bp1rkq0zxxxxxx" enableVirtualNode: true affinity: null enableControllers: - eip networkController: eipController: maxConcurrentReconciles: 10 garbageCollectionPeriodInMinutes: 1 customStatefulWorkloadKinds: - foo credential: accessKey: "xxxxxxxxxxxx" accessSecret: "xxxxxxxxxxxxxx"Jika Anda perlu memperbarui versi dan parameter plug-in ack-extend-network-controller, lihat App Marketplace.
Langkah 3: Aktifkan fungsi EIP
ACS mendukung aktivasi fungsi EIP menggunakan anotasi. Anda dapat membuat atau mengaitkan EIP dengan pod dengan menentukan annotations di dalam pod. Untuk informasi rinci tentang aktivasi anotasi fungsi EIP, lihat Anotasi untuk mengaktifkan fitur EIP.
Anda dapat memilih untuk mengalokasikan EIP secara otomatis atau menentukan EIP sesuai kebutuhan. Kedua metode ini berbeda dalam anotasi yang digunakan dan kebijakan daur ulang EIP. Untuk metode instance EIP yang ditentukan, menghapus pod tidak melepaskan instance EIP, sedangkan metode alokasi EIP otomatis melepaskan instance EIP secara default. Untuk informasi rinci tentang kebijakan daur ulang EIP, lihat Anotasi untuk mengonfigurasi kebijakan pelepasan EIP.
Alokasikan EIP secara otomatis
Masuk ke konsol ACS. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik ID-nya. Di panel navigasi kiri halaman detail kluster, pilih .
Di sudut kanan atas halaman Deployments, klik Create from YAML.
Buat kontroler Deployment menggunakan contoh berikut dan beri nama kontroler tersebut "example".
Setelah pembuatan berhasil, masuk ke Deployment bernama example. Klik nama pod (misalnya: example-78d17b7xxx-adxxx) untuk masuk ke halaman Details pod. Anda dapat melihat informasi EIP yang dibuat di bagian Annotations di sebelah kanan halaman. Anda juga dapat mengklik Edit untuk melihat informasi EIP yang dibuat di YAML pod.
Setelah menyelesaikan contoh, Anda dapat menghapus Deployment bernama example. Jika Anda tidak menentukan ID instance EIP pod, kebijakan daur ulang EIP pod default mengikuti siklus hidup pod. Oleh karena itu, EIP dilepaskan secara otomatis saat pod dihapus.
Tentukan EIP
Siapkan instance EIP yang digunakan dalam contoh. Harap Ajukan EIP terlebih dahulu.
Masuk ke konsol ACS. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik ID-nya. Di panel navigasi kiri halaman detail kluster, pilih .
Di sudut kanan atas halaman Deployments, klik Create from YAML.
Buat kontroler StatefulSet menggunakan contoh berikut dan beri nama kontroler tersebut "example".
Setelah pembuatan berhasil, masuk ke StatefulSet bernama example. Klik nama pod (misalnya: example-0) untuk masuk ke halaman Details pod. Anda dapat melihat informasi instance EIP yang terikat di bagian Annotations di sebelah kanan halaman. Anda juga dapat mengklik Edit untuk melihat informasi instance EIP yang terikat di YAML pod.
Setelah menyelesaikan contoh, Anda dapat menghapus StatefulSet bernama example. Jika Anda menentukan ID instance EIP pod, kebijakan daur ulang EIP pod adalah tidak melepaskan instance EIP. Oleh karena itu, EIP tidak dilepaskan secara otomatis saat pod dihapus.
Operasi terkait
Pengontrol mengonfigurasi alamat EIP untuk pod setelah IP pod dialokasikan. Selama proses ini, pod mungkin memasuki status Ready sebelum pengikatan EIP berhasil. Untuk menyelesaikan masalah ini dan memastikan bahwa pod menyelesaikan pengikatan EIP sebelum memasuki status Ready, yang menghindari gangguan layanan potensial atau waktu habis koneksi, Anda dapat mencoba metode berikut.
Periksa status pengikatan EIP menggunakan Readiness gates
Pengontrol menetapkan kondisi pod conditions ketika readinessGates dikonfigurasi di dalam pod, dan pengikatan EIP berhasil. Pod tidak berada dalam status Ready sebelum EIP terikat.
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
...Periksa status pengikatan EIP menggunakan initContainers
Anda dapat memeriksa apakah EIP telah dialokasikan di initContainers saat Anda mengonfigurasi initContainers untuk pod. Silakan merujuk pada contoh berikut untuk mengonfigurasi initContainers.
apiVersion: v1
kind: Pod
metadata:
name: example
annotations:
network.alibabacloud.com/pod-with-eip: "true"
spec:
containers:
- name: example
image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init
image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/busybox:1.28
command: ['timeout', '-t' ,'60', 'sh','-c', "until grep -E '^k8s.aliyun.com\\/pod-ips=\\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