Topik ini menjelaskan cara menggunakan ALB Ingress dengan kluster Kubernetes yang dikelola sendiri dan diterapkan di Alibaba Cloud.
Contoh skenario
Topik ini menggunakan skenario yang ditunjukkan pada gambar berikut. Anda memiliki kluster Kubernetes yang dikelola sendiri yang dibangun di atas sumber daya Alibaba Cloud dan ingin menggunakan ALB Ingress untuk meneruskan permintaan.
Anda dapat menerapkan `alb-ingress-controller` di kluster Kubernetes yang dikelola sendiri serta membuat sumber daya Ingress dan Service. `alb-ingress-controller` menyinkronkan sumber daya Ingress ke ALB sebagai aturan pengalihan berdasarkan konfigurasi layanan dalam kluster Kubernetes. Selain itu, controller ini memantau API server kluster untuk mendeteksi perubahan pada sumber daya Ingress dan menyinkronkan perubahan tersebut ke ALB. ALB mendeteksi perubahan ini dan secara dinamis meneruskan lalu lintas ke pod yang sesuai dalam kluster. Untuk informasi lebih lanjut, lihat Manajemen ALB Ingress.

Catatan
Jika Anda menggunakan plug-in jaringan overlay seperti Flannel, layanan backend untuk ALB Ingress hanya mendukung jenis NodePort dan LoadBalancer.
Nama sumber daya seperti AlbConfig, Namespace, Ingress, dan Service tidak boleh diawali dengan `aliyun`.
Prasyarat
Anda memiliki kluster Kubernetes versi 1.20 atau lebih baru yang dikelola sendiri dan diterapkan di Alibaba Cloud. Gunakan alat kubectl untuk terhubung ke kluster. Untuk informasi lebih lanjut tentang cara mengunduh dan menginstal alat kubectl, lihat Instal dan Atur kubectl.
Akses jaringan publik diaktifkan untuk kluster menggunakan Translasi Alamat IP Sumber (SNAT). Untuk informasi lebih lanjut, lihat Gunakan fitur SNAT dari gateway NAT Internet untuk mengakses Internet.
Perhatikan hal berikut saat menggunakan citra kontroler untuk kluster yang dikelola sendiri:
Jika Anda menggunakan citra pribadi, Anda dapat mengompilasi dan mengunggah citra tersebut. Untuk informasi lebih lanjut, lihat dokumen sumber terbuka Cara menerapkan kontroler dari kode sumber.
Untuk kluster dengan arsitektur x86, Anda dapat menggunakan citra publik Alibaba Cloud untuk pengujian.
Prosedur

Langkah-langkah berikut melibatkan modifikasi file. Pastikan Anda memahami nama serta tujuan dari setiap file tersebut.
Langkah | Nama File | Tujuan |
load-balancer-controller.yaml Dimodifikasi dari templat | Digunakan untuk menerapkan alb-ingress-controller | |
alb.yaml Dibuat dan dimodifikasi | Digunakan untuk membuat sumber daya albconfig dan ingressClass, serta secara sinkron membuat instans ALB. | |
test-service.yaml Dibuat dan dimodifikasi | Digunakan untuk menerapkan layanan uji | |
test-ingress.yaml Dibuat dan dimodifikasi | Digunakan untuk membuat Ingress |
Langkah 1: Terapkan alb-ingress-controller
Sistem mungkin gagal menarik citra penyebaran karena masalah jaringan penyedia layanan. Jika hal ini terjadi, gunakan citra pribadi. Anda dapat mengompilasi dan mengunggah citra tersebut. Untuk informasi lebih lanjut, lihat dokumen sumber terbuka Cara menerapkan kontroler dari kode sumber.
alb-ingress-controller dijalankan dalam mode InCluster dan diterapkan menggunakan file load-balancer-controller.yaml. Izin untuk mendengarkan sumber daya seperti Service, Endpoint, dan Node telah dikonfigurasi. ServiceAccount, penyebaran, dan ConfigMap terkait telah disiapkan sebelumnya. Lakukan modifikasi konfigurasi sesuai kebutuhan Anda.
Modifikasi file load-balancer-controller.yaml untuk mengubah citra penyebaran menjadi alamat citra yang tersedia.
File `load-balancer-controller.yaml` digunakan untuk menerapkan alb-ingress-controller.
Sebelum modifikasi:
image: ${path/to/your/image/registry}Setelah modifikasi:
image: alibabacloudslb/alibaba-load-balancer-controller:v1.2.0 #Citra dikompilasi untuk x86Modifikasi file `load-balancer-controller.yaml` untuk mengonfigurasi ID AccessKey dan Rahasia AccessKey dalam ConfigMap.
CatatanAnda dapat menggunakan Akun Alibaba Cloud yang Anda gunakan untuk membuat instans ALB untuk masuk ke Konsol Resource Access Management (RAM) dan melihat ID AccessKey serta 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 enkode Base64 "AccessKeySecret": "<YOUR_ACCESS_KEY_SECRET>" # Diperlukan enkode Base64 } }Terhubung ke kluster menggunakan kubectl dan jalankan perintah berikut untuk menerapkan file `load-balancer-controller.yaml` yang telah dimodifikasi.
kubectl apply -f load-balancer-controller.yamlKeluaran 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 createdJalankan perintah berikut untuk memverifikasi penyebaran alb-ingress-controller.
kubectl -n kube-system get all | grep load-balancerJika status pod adalah Running seperti yang ditunjukkan pada gambar berikut, penyebaran berhasil.

Langkah 2: Buat sumber daya AlbConfig dan IngressClass
Setelah sumber daya AlbConfig dan IngressClass dibuat, instans ALB juga akan terbuat.
Buat file `alb.yaml` dan salin konten berikut ke dalam file tersebut.
File `alb.yaml` digunakan untuk membuat sumber daya AlbConfig dan IngressClass.
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-demo spec: config: name: alb-test #alb-test adalah nama instans ALB. addressType: Internet #Intranet menentukan jaringan pribadi. Internet menentukan Internet. zoneMappings: - vSwitchId: vsw-wz9e2usil7e5an1xi**** #ALB memerlukan ID vSwitch di setidaknya 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 ditentukan.CatatanPerhatikan konfigurasi parameter berikut:
albconfig.spec.config.addressType: Jenis jaringan instans. Nilai yang valid adalah:
Internet (default): Instans terhubung ke Internet. Alamat IP publik dan alamat IP pribadi disediakan di setiap zona. Instans ALB yang menghadap ke Internet menggunakan Elastic IP Address (EIP) untuk menyediakan akses jaringan publik. Jika Anda memilih opsi ini, Anda akan dikenakan biaya untuk instans EIP serta untuk bandwidth atau transfer data.
EIP menyediakan layanan yang menghadap ke publik dan memungkinkan akses ke ALB melalui Internet.
Alamat IP pribadi memungkinkan Instance ECS dalam VPC mengakses ALB.
Intranet: Instans terhubung ke jaringan pribadi. Alamat IP pribadi disediakan di setiap zona. Instans ALB hanya dapat diakses melalui jaringan internal Alibaba Cloud, bukan dari Internet.
spec.config.zoneMappings: Menentukan ID vSwitch untuk ALB Ingress. Anda harus menentukan ID setidaknya dua vSwitch dari zona yang berbeda. vSwitch yang ditentukan harus berada di zona yang didukung oleh ALB. 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.yamlKeluaran yang diharapkan:
AlbConfig.alibabacloud.com/alb-demo create ingressclass.networking.k8s.io/alb createdVerifikasi bahwa instans ALB telah dibuat.
Metode 1: Jalankan perintah berikut untuk melihat ID instans ALB.
kubectl get albconfig alb-demo
Metode 2: Masuk ke Konsol Application Load Balancer untuk melihat instans ALB yang telah dibuat.
CatatanMasuk ke konsol menggunakan Akun Alibaba Cloud yang dikonfigurasi dalam file ConfigMap di Langkah 1: Terapkan alb-ingress-controller.
Langkah 3: Terapkan aplikasi uji
Langkah ini menggunakan citra uji untuk membuat sumber daya penyebaran yang akan digunakan dalam penerapan aplikasi uji.
Buat file `test-service.yaml` dan salin konten berikut ke dalam file tersebut.
File `test-service.yaml` digunakan untuk menerapkan dua penyebaran bernama test01 dan test02, serta dua layanan bernama test01-service dan test02-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: NodePortTerhubung ke kluster menggunakan kubectl dan jalankan perintah berikut untuk menerapkan file `test-service.yaml`.
kubectl apply -f test-service.yamlKeluaran yang diharapkan:
deployment "test01" created service "test01-service" created deployment "test02" created service "test02-service" createdJalankan perintah berikut untuk memverifikasi bahwa layanan uji telah diterapkan.
kubectl get svc,deployJika tanggapan serupa dengan berikut ini dikembalikan, layanan uji berhasil diterapkan.

Langkah 4: Buat Ingress
Ingress sesuai dengan aturan pengalihan dalam instans ALB. Bagian ini menjelaskan konfigurasi yang menggunakan fitur pengalihan berbasis jalur. Untuk informasi lebih lanjut tentang fitur lanjutan, lihat Panduan Pengguna ALB Ingress.
Buat file `test-ingress.yaml` dan salin konten berikut ke dalam file.
File `test-ingress.yaml` digunakan 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: 80Terhubung ke kluster menggunakan kubectl dan jalankan perintah berikut untuk menerapkan file `test-ingress.yaml`.
kubectl apply -f test-ingress.yamlKeluaran yang diharapkan:
ingress "test-ingress" createdJalankan perintah berikut untuk memverifikasi pembuatan sumber daya test-ingress.
kubectl get ingressJika tanggapan serupa dengan berikut ini dikembalikan, sumber daya test-ingress telah berhasil dibuat.

Langkah 5: Verifikasi hasil
Akses layanan melalui resolusi nama domain
Buat rekaman CNAME untuk memetakan nama domain Anda ke nama DNS instans ALB. Untuk informasi lebih lanjut, lihat Tambahkan rekaman CNAME untuk instans ALB.
Contoh ini mengasumsikan bahwa nama domain kustom
demo.domain.ingress.topdipetakan ke nama domain layanan publik instans ALB.Jalankan perintah berikut untuk mengakses layanan test01 menggunakan instans ALB.
curl http://demo.domain.ingress.top/test01
Jalankan perintah berikut untuk mengakses layanan test02 menggunakan instans ALB.
curl http://demo.domain.ingress.top/test02
Jika Anda memiliki pertanyaan, bergabunglah dengan grup DingTalk Grup Komunikasi Pelanggan ALB (ID: 31945843) untuk mendapatkan bantuan.
Referensi
Ikhtisar dan Fitur ALB Ingress: