All Products
Search
Document Center

Server Load Balancer:Gunakan ingress ALB pada kluster Kubernetes yang dikelola sendiri

Last Updated:Jun 22, 2026

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.

ALB Ingress场景示例

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

Langkah 1: Deploy alb-ingress-controller

load-balancer-controller.yaml

Dimodifikasi dari templat

Untuk men-deploy alb-ingress-controller

Langkah 2: Buat resource AlbConfig dan IngressClass

alb.yaml

Dibuat dan dimodifikasi

Untuk membuat resource AlbConfig dan IngressClass, yang secara otomatis membuat instance ALB

Langkah 3: Deploy aplikasi uji

test-service.yaml

Dibuat dan dimodifikasi

Untuk men-deploy layanan uji

Langkah 4: Buat ingress

test-ingress.yaml

Dibuat dan dimodifikasi

Untuk membuat ingress

Langkah 1: Deploy alb-ingress-controller

Catatan

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.

  1. 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.
  2. Modifikasi file load-balancer-controller.yaml untuk mengonfigurasi ID AccessKey dan Rahasia AccessKey dalam ConfigMap.

    Catatan

    Login 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.
               }
           }
                            
  3. Hubungkan ke kluster menggunakan kubectl dan jalankan perintah berikut untuk menerapkan file load-balancer-controller.yaml yang telah dimodifikasi.

    kubectl apply -f load-balancer-controller.yaml

    Output 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
  4. Jalankan perintah berikut untuk memverifikasi deployment alb-ingress-controller.

    kubectl -n kube-system get all | grep load-balancer

    Output 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.

  1. Buat file bernama alb.yaml dan salin konten berikut ke dalamnya.

    File alb.yaml digunakan 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.
    Catatan

    Perhatikan 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.

  2. Hubungkan ke kluster menggunakan kubectl dan jalankan perintah berikut untuk menerapkan file alb.yaml.

    kubectl apply -f alb.yaml

    Output yang diharapkan:

    AlbConfig.alibabacloud.com/alb-demo created
    ingressclass.networking.k8s.io/alb created
  3. 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.

      Catatan

      Anda 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.

  1. Buat file bernama test-service.yaml dan salin konten berikut ke dalamnya.

    File test-service.yaml digunakan untuk men-deploy dua Deployment bernama test01 dan test02, serta dua Service 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: NodePort
  2. Hubungkan ke kluster menggunakan kubectl dan jalankan perintah berikut untuk menerapkan file test-service.yaml.

    kubectl apply -f test-service.yaml

    Output yang diharapkan:

    deployment.apps/test01 created
    service/test01-service created
    deployment.apps/test02 created
    service/test02-service created
  3. Jalankan perintah berikut untuk memverifikasi bahwa layanan uji berhasil dideploy.

    kubectl get svc,deploy  

    Output 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.

  1. Buat file bernama test-ingress.yaml dan salin konten berikut ke dalamnya.

    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: 80
  2. Hubungkan ke kluster menggunakan kubectl dan jalankan perintah berikut untuk menerapkan file test-ingress.yaml.

    kubectl apply -f test-ingress.yaml

    Output yang diharapkan:

    ingress.networking.k8s.io/test-ingress created
  3. Jalankan perintah berikut untuk memverifikasi pembuatan resource test-ingress.

    kubectl get ingress

    Output berikut menunjukkan bahwa resource test-ingress berhasil 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

  1. 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.top ke nama DNS publik instance ALB.

  2. Jalankan perintah berikut untuk mengakses layanan test01 melalui instance ALB.

    curl http://demo.domain.ingress.top/test01

    Pod 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 layanan test01.

  3. Jalankan perintah berikut untuk mengakses layanan test02 melalui instance ALB.

    curl http://demo.domain.ingress.top/test02

    Perintah ini mengembalikan halaman uji NGINX, yang menunjukkan alamat Server adalah 10.xxx.20:80, nama Server adalah test02-76d96f7b8d-6mtnn, dan URI adalah /test02. Hal ini mengonfirmasi bahwa Ingress berhasil mengarahkan permintaan ke Pod backend test02.

Untuk pertanyaan, bergabunglah dengan Grup Pelanggan ALB (ID DingTalk: 31945843) untuk mendapatkan bantuan.

Dokumen terkait

Ikhtisar dan fitur ingress ALB: