Topik ini menjelaskan cara menggunakan ingress ALB dalam kluster Kubernetes yang dikelola sendiri dan berjalan di Alibaba Cloud untuk mengelola lalu lintas dengan Application Load Balancer (ALB).
Skenario contoh
Topik ini menggunakan skenario yang ditunjukkan pada gambar berikut, di mana kluster Kubernetes yang dikelola sendiri dan berjalan di Alibaba Cloud menggunakan ingress ALB untuk mengarahkan permintaan.
Anda dapat men-deploy alb-ingress-controller serta membuat resource Ingress dan Service di kluster Kubernetes yang dikelola sendiri. alb-ingress-controller menyinkronkan konfigurasi Ingress ke instance ALB sebagai aturan pengalihan. Controller ini juga memantau API Server kluster terhadap perubahan pada Ingress dan menyinkronkan pembaruan tersebut dengan instance ALB. Instance ALB kemudian secara dinamis mengarahkan lalu lintas ke Pod yang sesuai dalam kluster. Untuk informasi lebih lanjut, lihat Manajemen ingress ALB.

Catatan penggunaan
-
Jika Anda menggunakan plug-in jaringan overlay, seperti Flannel, layanan backend untuk ingress ALB harus berupa Service bertipe NodePort atau LoadBalancer.
-
Nama resource AlbConfig, Namespace, Ingress, dan Service tidak boleh diawali dengan
aliyun.
Prasyarat
-
Anda memiliki kluster Kubernetes yang dikelola sendiri (versi 1.20 atau lebih baru) yang berjalan di Alibaba Cloud dan dapat mengaksesnya menggunakan kubectl. Untuk informasi tentang cara mengunduh dan menginstal kubectl, lihat Install and set up kubectl.
-
Anda telah mengonfigurasi SNAT untuk mengaktifkan akses Internet bagi kluster yang dikelola sendiri. Untuk informasi lebih lanjut, lihat Gunakan fitur SNAT gateway NAT Internet untuk mengakses Internet.
-
Saat menggunakan image controller untuk kluster yang dikelola sendiri, pertimbangkan hal berikut:
-
Jika Anda menggunakan image privat, Anda dapat mengompilasi dan mengunggahnya dengan mengikuti petunjuk di Deploy the controller from source code.
-
Untuk kluster dengan arsitektur x86 generik, Anda dapat menggunakan image publik yang disediakan oleh Alibaba Cloud untuk pengujian.
-
Prosedur

Langkah-langkah berikut melibatkan modifikasi beberapa file. Tabel di bawah ini menjelaskan tujuan masing-masing file.
|
Langkah |
Nama file |
Tujuan |
|
load-balancer-controller.yaml Dimodifikasi dari templat |
Untuk men-deploy alb-ingress-controller |
|
|
alb.yaml Dibuat dan dimodifikasi |
Untuk membuat resource AlbConfig dan IngressClass, yang secara otomatis membuat instance ALB |
|
|
test-service.yaml Dibuat dan dimodifikasi |
Untuk men-deploy layanan uji |
|
|
test-ingress.yaml Dibuat dan dimodifikasi |
Untuk membuat ingress |
Langkah 1: Deploy alb-ingress-controller
Pengambilan image deployment mungkin gagal karena masalah jaringan ISP. Untuk menghindarinya, Anda dapat menggunakan image privat. Kompilasi dan unggah image tersebut dengan mengikuti petunjuk di Deploy the controller from source code.
Dalam topik ini, alb-ingress-controller dijalankan dalam mode InCluster. Setelah Anda mengonfigurasi izin untuk memantau resource Service, endpoint, dan node, Anda dapat menggunakan file load-balancer-controller.yaml untuk men-deploy alb-ingress-controller. ServiceAccount, Deployment, dan ConfigMap yang diperlukan telah dikonfigurasi sebelumnya. Anda hanya perlu memodifikasinya agar sesuai dengan lingkungan Anda.
-
Modifikasi file load-balancer-controller.yaml untuk mengubah image Deployment menjadi alamat image yang dapat diakses.
File
load-balancer-controller.yamldigunakan untuk men-deploy alb-ingress-controller.Sebelum modifikasi:
image: ${path/to/your/image/registry}Setelah modifikasi:
image: alibabacloudslb/alibaba-load-balancer-controller:v1.2.0 # Image yang dikompilasi untuk x86. -
Modifikasi file
load-balancer-controller.yamluntuk mengonfigurasi ID AccessKey dan Rahasia AccessKey dalam ConfigMap.CatatanLogin ke Konsol RAM dengan Akun Alibaba Cloud yang ingin Anda gunakan untuk membuat instance ALB. Lalu, lihat ID AccessKey dan Rahasia AccessKey di halaman AccessKey.
apiVersion: v1 kind: ConfigMap metadata: name: load-balancer-config namespace: kube-system data: cloud-config.conf: |- { "Global": { "AccessKeyID": "<YOUR_ACCESS_KEY_ID>", # Diperlukan encoding Base64. "AccessKeySecret": "<YOUR_ACCESS_KEY_SECRET>" # Diperlukan encoding Base64. } } -
Hubungkan ke kluster menggunakan kubectl dan jalankan perintah berikut untuk menerapkan file
load-balancer-controller.yamlyang telah dimodifikasi.kubectl apply -f load-balancer-controller.yamlOutput yang diharapkan:
clusterrole.rbac.authorization.k8s.io/system:load-balancer-controller created serviceaccount/load-balancer-controller created clusterrolebinding.rbac.authorization.k8s.io/system:load-controller-manager created configmap/load-balancer-config created deployment.apps/load-balancer-controller created -
Jalankan perintah berikut untuk memverifikasi deployment alb-ingress-controller.
kubectl -n kube-system get all | grep load-balancerOutput berikut menunjukkan bahwa Pod berada dalam status
Running, yang mengindikasikan deployment berhasil.[root@iZ2ze9xxx uoZ test]# kubectl -n kube-system get all | grep load-balancer pod/load-balancer-controller-67985dd48d-qtgl8 1/1 Running 0 61d deployment.apps/load-balancer-controller 1/1 1 1 62d replicaset.apps/load-balancer-controller-67985dd48d 1 1 1 62d
Langkah 2: Buat resource AlbConfig dan IngressClass
Setelah membuat resource AlbConfig dan IngressClass, instance ALB akan dibuat secara otomatis.
-
Buat file bernama alb.yaml dan salin konten berikut ke dalamnya.
File
alb.yamldigunakan untuk membuat resource AlbConfig dan IngressClass.apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-demo spec: config: name: alb-test # Nama instance ALB. addressType: Internet # Gunakan 'Internet' untuk publik atau 'Intranet' untuk privat. zoneMappings: - vSwitchId: vsw-wz9e2usil7e5an1xi**** # Tentukan ID vSwitch di minimal dua zona. - vSwitchId: vsw-wz92lvykqj1siwvif**** listeners: - port: 80 protocol: HTTP --- apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb-demo # Resource AlbConfig yang direferensikan.CatatanPerhatikan parameter berikut:
-
albconfig.spec.config.addressType: Jenis jaringan instance. Nilai yang valid:
-
Internet (default): Membuat instance publik. IP publik dan IP privat diberikan ke setiap zona. Instance ALB publik menggunakan elastic IP address (EIP) untuk menyediakan layanan melalui Internet. Anda dikenai biaya instans dan biaya transfer data untuk EIP tersebut.
-
EIP menyediakan akses Internet publik ke instance ALB.
-
IP privat memungkinkan akses ke instance ALB dari instance ECS dalam VPC yang sama.
-
-
Intranet: Membuat instance privat. IP privat diberikan ke setiap zona. Instance ALB hanya dapat diakses dari dalam jaringan Alibaba Cloud dan tidak dapat dijangkau dari Internet.
-
-
spec.config.zoneMappings: Menentukan ID vSwitch untuk ALB Ingress. Anda harus menentukan minimal dua ID vSwitch dari zona berbeda. vSwitch yang ditentukan harus berada di zona yang didukung oleh instance ALB saat ini. Untuk informasi lebih lanjut tentang wilayah dan zona yang didukung oleh ALB, lihat Wilayah dan zona yang didukung.
-
-
Hubungkan ke kluster menggunakan kubectl dan jalankan perintah berikut untuk menerapkan file
alb.yaml.kubectl apply -f alb.yamlOutput yang diharapkan:
AlbConfig.alibabacloud.com/alb-demo created ingressclass.networking.k8s.io/alb created -
Verifikasi pembuatan instance ALB.
-
Metode 1: Jalankan perintah berikut untuk melihat ID instance ALB.
kubectl get albconfig alb-demo[root@i-xxx nuoZ test]# kubectl get albconfig alb-demo NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb-demo alb-3lzokczr3c9guq7zz7 alb-3xxx.com 84s -
Metode 2: Login ke Konsol ALB untuk melihat instance ALB yang telah dibuat.
CatatanAnda harus login ke konsol dengan Akun Alibaba Cloud yang telah Anda konfigurasikan dalam ConfigMap di Langkah 1: Deploy alb-ingress-controller.
-
Langkah 3: Deploy aplikasi uji
Bagian ini memandu Anda dalam menggunakan image uji untuk membuat resource Deployment dan men-deploy aplikasi uji.
-
Buat file bernama test-service.yaml dan salin konten berikut ke dalamnya.
File
test-service.yamldigunakan untuk men-deploy dua Deployment bernamatest01dantest02, serta dua Service bernamatest01-servicedantest02-service.apiVersion: apps/v1 kind: Deployment metadata: name: test01 spec: replicas: 2 selector: matchLabels: app: test01 template: metadata: labels: app: test01 spec: containers: - name: test01 image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: test01-service spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: test01 type: NodePort --- apiVersion: apps/v1 kind: Deployment metadata: name: test02 spec: replicas: 1 selector: matchLabels: app: test02 template: metadata: labels: app: test02 spec: containers: - name: test02 image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: test02-service spec: ports: - port: 80 targetPort: 80 protocol: TCP selector: app: test02 type: NodePort -
Hubungkan ke kluster menggunakan kubectl dan jalankan perintah berikut untuk menerapkan file
test-service.yaml.kubectl apply -f test-service.yamlOutput yang diharapkan:
deployment.apps/test01 created service/test01-service created deployment.apps/test02 created service/test02-service created -
Jalankan perintah berikut untuk memverifikasi bahwa layanan uji berhasil dideploy.
kubectl get svc,deployOutput berikut menunjukkan bahwa layanan uji berhasil dideploy.
[root@iZ2z***uoZ test]# kubectl get svc,deploy NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/cloud-nodeport NodePort 10.xxx.122 <none> 80:31310/TCP 63d service/kubernetes ClusterIP 10.xxx.1 <none> 443/TCP 63d service/test01-service NodePort 10.xxx.121 <none> 80:31254/TCP 9s service/test02-service NodePort 10.xxx.118 <none> 80:30337/TCP 9s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/openresty-deployment 2/2 2 2 63d deployment.apps/test01 2/2 2 2 9s deployment.apps/test02 1/1 1 1 9s
Langkah 4: Buat ingress
Ingress berkorespondensi dengan aturan pengalihan dalam instance ALB. Topik ini menggunakan routing berbasis path. Untuk informasi lebih lanjut tentang fitur lanjutan, lihat Panduan pengguna ingress ALB.
-
Buat file bernama test-ingress.yaml dan salin konten berikut ke dalamnya.
File
test-ingress.yamldigunakan untuk membuat Ingress.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-ingress spec: ingressClassName: alb rules: - host: demo.domain.ingress.top http: paths: - path: /test01 pathType: Prefix backend: service: name: test01-service port: number: 80 - path: /test02 pathType: Prefix backend: service: name: test02-service port: number: 80 -
Hubungkan ke kluster menggunakan kubectl dan jalankan perintah berikut untuk menerapkan file
test-ingress.yaml.kubectl apply -f test-ingress.yamlOutput yang diharapkan:
ingress.networking.k8s.io/test-ingress created -
Jalankan perintah berikut untuk memverifikasi pembuatan resource
test-ingress.kubectl get ingressOutput berikut menunjukkan bahwa resource
test-ingressberhasil dibuat.[root@iZ2zxxx test]# kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE test-ingress alb demo.domain.ingress.top alb-xxx.cn-beijing.alb.aliyuncs.com 80 19s
Langkah 5: Verifikasi hasil
Akses melalui nama domain
-
Buat Rekaman CNAME untuk memetakan nama domain Anda ke nama DNS instance ALB. Untuk informasi lebih lanjut, lihat Konfigurasi Rekaman CNAME untuk instance ALB.
Dalam contoh ini, asumsikan Anda memetakan nama domain kustom
demo.domain.ingress.topke nama DNS publik instance ALB. -
Jalankan perintah berikut untuk mengakses layanan
test01melalui instance ALB.curl http://demo.domain.ingress.top/test01Pod backend NGINX mengembalikan tanggapan dengan detail seperti alamat Server (
10.xxx.xxx.xxx:80), nama Server (test01-648bf46944-kvlhj), Tanggal (07/Nov/2022:08:16:35 +0000), dan URI (/test01). Hal ini mengonfirmasi bahwa Ingress berhasil mengarahkan permintaan ke Pod backend untuk layanantest01. -
Jalankan perintah berikut untuk mengakses layanan
test02melalui instance ALB.curl http://demo.domain.ingress.top/test02Perintah ini mengembalikan halaman uji NGINX, yang menunjukkan alamat Server adalah
10.xxx.20:80, nama Server adalahtest02-76d96f7b8d-6mtnn, dan URI adalah/test02. Hal ini mengonfirmasi bahwa Ingress berhasil mengarahkan permintaan ke Pod backendtest02.
Untuk pertanyaan, bergabunglah dengan Grup Pelanggan ALB (ID DingTalk: 31945843) untuk mendapatkan bantuan.
Dokumen terkait
Ikhtisar dan fitur ingress ALB:
Dokumentasi kode sumber: