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

Catatan penggunaan
-
Jika Anda menggunakan plug-in jaringan overlay seperti Flannel, layanan backend untuk ALB Ingress harus berupa Service bertipe NodePort atau LoadBalancer.
-
Nama sumber daya AlbConfig, Namespace, Ingress, dan Service tidak boleh diawali dengan
aliyun.
Prasyarat
-
Anda memiliki kluster Kubernetes yang dikelola sendiri (v1.20 atau lebih baru) yang berjalan di Alibaba Cloud dan dapat terhubung ke kluster tersebut 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 pada Internet NAT gateway 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 umum, 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 sumber daya AlbConfig dan IngressClass, yang secara otomatis membuat instans 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
Penarikan image deployment dapat 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.
Pada topik ini, alb-ingress-controller dijalankan dalam mode InCluster. Setelah Anda mengonfigurasi izin untuk memantau sumber daya 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.yaml digunakan 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 instans 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 sumber daya AlbConfig dan IngressClass
Setelah membuat sumber daya AlbConfig dan IngressClass, sebuah instans ALB akan dibuat secara otomatis.
-
Buat file bernama alb.yaml dan salin konten berikut ke dalamnya.
File
alb.yamldigunakan untuk membuat sumber daya AlbConfig dan IngressClass.apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-demo spec: config: name: alb-test # Nama instans 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 # Sumber daya AlbConfig yang direferensikan.CatatanPerhatikan parameter berikut:
-
albconfig.spec.config.addressType: Jenis jaringan instans. Nilai yang valid:
-
Internet (default): Membuat instans publik. IP publik dan IP privat dialokasikan untuk setiap zona. Instans 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 instans ALB.
-
IP privat memungkinkan akses ke instans ALB dari Instance ECS dalam VPC yang sama.
-
-
Intranet: Membuat instans privat. IP privat dialokasikan untuk setiap zona. Instans 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 yang berbeda. vSwitch yang ditentukan harus berada di zona yang didukung oleh instans 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 instans ALB.
-
Metode 1: Jalankan perintah berikut untuk melihat ID instans 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 instans 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 sumber daya 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 instans ALB. Topik ini menggunakan routing berbasis path. Untuk informasi lebih lanjut tentang fitur lanjutan, lihat Panduan pengguna ALB Ingress.
-
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 sumber daya
test-ingress.kubectl get ingressOutput berikut menunjukkan bahwa sumber daya
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 berdasarkan nama domain
-
Buat Rekaman CNAME untuk memetakan nama domain Anda ke nama DNS instans ALB. Untuk informasi lebih lanjut, lihat Konfigurasi Rekaman CNAME untuk instans ALB.
Pada contoh ini, asumsikan Anda memetakan nama domain kustom
demo.domain.ingress.topke nama DNS publik instans ALB. -
Jalankan perintah berikut untuk mengakses layanan
test01melalui instans ALB.curl http://demo.domain.ingress.top/test01Pod backend NGINX mengembalikan tanggapan yang berisi 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 instans 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 ALB Ingress:
Dokumentasi kode sumber: