All Products
Search
Document Center

Container Service for Kubernetes:Ekspos layanan dengan ALB Ingress

Last Updated:Jun 21, 2026

Secara default, layanan dalam kluster ACK terisolasi dari jaringan eksternal. ALB Ingress mengekspos layanan tersebut dengan menggunakan Application Load Balancer (ALB) sebagai titik masuk untuk lalu lintas eksternal. ALB menyediakan routing berbasis domain, keamanan, dan ketersediaan tinggi.

Cara kerja

  1. Asosiasi resource

    Objek AlbConfig mendefinisikan konfigurasi spesifik instans ALB, seperti edisi fitur dan pendengarnya (listeners). Setiap objek AlbConfig memiliki pemetaan satu-ke-satu ke instans ALB. Pemetaan path dan layanan yang diasosiasikan yang didefinisikan dalam Ingress secara otomatis diterjemahkan menjadi aturan routing dan grup server untuk instans ALB.

  2. Sinkronisasi dinamis

    ALB Ingress Controller terus-menerus memantau API server untuk perubahan pada resource Ingress dan AlbConfig serta memperbarui instans ALB yang terkait secara dinamis.

  3. Traffic Forwarding

    Berbeda dengan Nginx Ingress Controller, ALB Ingress Controller adalah komponen terkelola yang bertindak sebagai lapisan kontrol untuk instans ALB. Komponen ini tidak secara langsung menangani traffic bidang data. Instans ALB memproses traffic pengguna dan meneruskannya ke pod backend layanan tersebut.

Batasan tipe layanan

Saat menggunakan plugin jaringan Flannel, layanan backend untuk ALB Ingress hanya mendukung tipe NodePort dan LoadBalancer.

Instal ALB Ingress Controller

Saat pembuatan kluster

  1. Masuk ke Konsol ACK dan klik Create Kubernetes Cluster.

  2. Pada langkah Component Configuration, buka bagian Ingress dan pilih ALB Ingress.

  3. Contoh ini menggunakan opsi New. Ikuti petunjuk di layar untuk membuat kluster.

    ALB Instance

    Description

    New

    Otomatis membuat instans ALB, AlbConfig, dan IngressClass.

    • Instans ALB: Secara otomatis membuat instans ALB publik atau privat standar dengan model bayar sesuai penggunaan di VPC kluster dan mengonfigurasi pendengar HTTP:80.

    • AlbConfig dan IngressClass: Secara otomatis membuat resource AlbConfig dan IngressClass yang sesuai di kluster dan mengasosiasikannya dengan instans ALB.

    Select Existing VPC

    Opsi ini hanya tersedia jika kluster dikonfigurasi untuk menggunakan Virtual Private Cloud (VPC) yang sudah ada.

    Menggunakan instans ALB yang sudah ada dan secara otomatis membuat AlbConfig serta IngressClass. Instans ALB yang ditentukan harus merupakan edisi Standard atau WAF-enhanced, berada di VPC yang sama dengan kluster, dan belum diasosiasikan dengan kluster lain.

    None

    Hanya menginstal komponen ALB Ingress Controller. Anda harus membuat AlbConfig dan IngressClass secara manual nanti. Ini cocok untuk skenario di mana Anda perlu menyesuaikan konfigurasi instans ALB.

Untuk kluster yang sudah ada

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Components and Add-ons.

  3. Gunakan kotak pencarian atau klik tab Networking untuk menemukan komponen tersebut. Di kartu komponen ALB Ingress Controller, klik Install di pojok kanan bawah.

  4. Contoh ini menggunakan opsi New. Klik OK.

    ALB Instance

    Description

    New

    Otomatis membuat instans ALB, AlbConfig, dan IngressClass.

    • Instans ALB: Secara otomatis membuat instans ALB publik atau privat standar dengan model bayar sesuai penggunaan di VPC kluster dan mengonfigurasi pendengar HTTP:80.

    • AlbConfig dan IngressClass: Secara otomatis membuat resource AlbConfig dan IngressClass yang sesuai di kluster dan mengasosiasikannya dengan instans ALB.

    Existing

    Menggunakan instans ALB yang sudah ada dan secara otomatis membuat AlbConfig serta IngressClass. Instans ALB yang ditentukan harus merupakan edisi Standard atau WAF-enhanced, berada di VPC yang sama dengan kluster, dan belum diasosiasikan dengan kluster lain.

    None

    Hanya menginstal komponen ALB Ingress Controller. Anda harus membuat AlbConfig dan IngressClass secara manual nanti. Ini cocok untuk skenario saat Anda perlu menyesuaikan konfigurasi instans ALB.

Buat aplikasi contoh

Aplikasi contoh ini menyebarkan Deployment bernama coffee dan layanan (Service) terkait bernama coffee-svc.

Konsol

  1. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.

  2. Klik Create from YAML. Pilih Custom dari daftar drop-down Sampel Template. Lalu, salin konten berikut ke editor templat dan klik Create.

    YAML aplikasi contoh

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: ClusterIP  # Saat Anda menggunakan plugin jaringan flannel, layanan backend ALB Ingress hanya mendukung tipe NodePort dan LoadBalancer.
  3. Di kotak dialog konfirmasi, klik View dan verifikasi bahwa status Pod adalah Running.

kubectl

  1. Hubungkan ke kluster menggunakan kubectl.

  2. Buat file bernama coffee-deployment-service.yaml yang berisi konten berikut.

    YAML aplikasi contoh

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: ClusterIP  # Saat Anda menggunakan plugin jaringan flannel, layanan backend ALB Ingress hanya mendukung tipe NodePort dan LoadBalancer.
  3. Buat Deployment dan Service untuk aplikasi contoh.

    kubectl apply -f coffee-deployment-service.yaml
  4. Verifikasi bahwa status Pod adalah Running.

     kubectl get pod -l app=coffee

    Output yang diharapkan:

    NAME                      READY   STATUS    RESTARTS   AGE
    coffee-84bd6*****-*****   1/1     Running   0          4m22s
    coffee-84bd6*****-*****   1/1     Running   0          4m22s

Buat ALB Ingress

Konfigurasikan nama domain dan pemetaan path untuk ALB Ingress agar mengarahkan permintaan untuk ingress-demo.com/coffee ke layanan coffee-svc di dalam kluster.

Untuk menggunakan ALB Ingress di kluster khusus ACK, Anda harus memberikan izin akses kepada ALB Ingress Controller.

Konsol

  1. Di panel navigasi kiri, pilih Network > Ingresses. Pilih namespace default dan klik Create Ingress.

  2. Tentukan parameter Ingress berikut dan klik OK.

    • Name: coffee-ingress

    • Domain Name: ingress-demo.com

    • Mappings: Path: /coffee, Match Rule: Prefix, Service: coffee-svc, Port: 80.

      Matching rule (pathType)

      Description

      Prefix

      Mencocokkan path permintaan berdasarkan awalannya. Misalnya, permintaan untuk /coffee/1 atau /coffee/buy/1 akan dicocokkan, tetapi permintaan untuk /cof atau /coffeebuy/1 tidak.

      Exact

      Mencocokkan path permintaan secara tepat. Hanya permintaan untuk /coffee yang dicocokkan.

      ImplementationSpecific

      Perilaku pencocokan bergantung pada implementasi controller Ingress. Untuk ALB Ingress Controller, tipe ini setara dengan pencocokan Exact.

  3. Dapatkan alamat Endpoint.

    ALB Ingress membutuhkan waktu sekitar 10 detik untuk berlaku. Anda dapat mengklik tombol refresh untuk mendapatkan informasi endpoint. Jika endpoint tidak diperbarui setelah waktu yang lama, klik nama Ingress dan buka tab Events untuk troubleshooting masalah.

    Di kolom Endpoint daftar Ingress, temukan alamat endpoint ALB, yang memiliki format serupa dengan alb-<instance_id>.cn-wulanchabu.alb.aliyuncsslb.com.

  4. Uji akses ke domain dan endpoint. Kode status HTTP 200 menunjukkan bahwa ALB Ingress berfungsi dengan benar.

    curl -H "Host:ingress-demo.com" http://<endpoint_address>/coffee -s -o /dev/null -w "%{http_code}\n"

kubectl

  1. Buat file bernama coffee-ingress.yaml dengan konten berikut. Lalu, jalankan perintah kubectl apply -f coffee-ingress.yaml untuk membuat ALB Ingress.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: coffee-ingress
      namespace: default
    spec:
      ingressClassName: alb
      rules:
      - host: ingress-demo.com
        http:
          paths:
          - path: /coffee
            backend:
              service: 
                name: coffee-svc
                port:
                  number: 80
            pathType: Prefix

    Matching rule (pathType)

    Description

    Prefix

    Mencocokkan path permintaan berdasarkan awalannya. Misalnya, permintaan untuk /coffee/1 atau /coffee/buy/1 akan dicocokkan, tetapi permintaan untuk /cof atau /coffeebuy/1 tidak.

    Exact

    Mencocokkan path permintaan secara tepat. Hanya permintaan untuk /coffee yang dicocokkan.

    ImplementationSpecific

    Perilaku pencocokan bergantung pada implementasi controller Ingress. Untuk ALB Ingress Controller, tipe ini setara dengan pencocokan Exact.

  2. Lihat Ingress dan dapatkan alamat endpoint dari field ADDRESS.

    kubectl get ingress coffee-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'

    Output yang diharapkan:

    alb-******************.cn-wulanchabu.alb.aliyuncsslb.com
  3. Uji akses ke domain dan endpoint. Kode status HTTP 200 menunjukkan bahwa ALB Ingress berfungsi dengan benar.

    curl -H "Host:ingress-demo.com" http://<endpoint_address>/coffee -s -o /dev/null -w "%{http_code}\n"

Penagihan

  • ALB Ingress Controller: Ini adalah komponen terkelola ACK dan tidak dikenai biaya.

  • Instans ALB: Setiap resource objek AlbConfig membuat instans ALB yang sesuai. Instans ALB menggunakan penagihan pay-as-you-go.

Deployment produksi

  • Konfigurasikan DNS: Buat rekaman CNAME untuk memetakan domain layanan Anda ke titik akhir publik instans ALB. Hal ini memisahkan domain dari titik akhir instans, sehingga memastikan titik masuk layanan yang sangat tersedia dan fleksibel.

  • Aktifkan HTTPS: Gunakan Layanan Manajemen Sertifikat untuk mengelola sertifikat Anda secara terpusat, dan referensikan secara deklaratif di field tls resource Ingress untuk mengamankan lalu lintas layanan dengan HTTPS.

Kuota dan batasan

FAQ

Mengapa Ingress mengembalikan kode error HTTP?

Penyebab

  • Error 503 (Service Temporarily Unavailable)

    • Tidak ada aturan routing yang sesuai: Path permintaan tidak sesuai dengan aturan routing apa pun yang dikonfigurasi di Ingress.

    • Tidak ada pod backend yang sehat: Layanan terkait tidak memiliki pod yang siap, sehingga menghasilkan objek endpoints kosong.

  • Error 502 (Bad Gateway)

    Setelah pendengar HTTP atau HTTPS menerima permintaan koneksi klien, ALB mengirim kode status HTTP 502 Bad Gateway ke klien karena gagal meneruskan permintaan ke Pod atau menerima respons dari Pod.

  • Error 404 (Not Found)

    Hal ini biasanya terjadi ketika permintaan sesuai dengan aturan routing Ingress, tetapi URL-nya tidak sesuai dengan path layanan aplikasi di pod backend.

  • Error 400 (Bad Request)

    Hal ini dapat terjadi karena beberapa alasan, seperti mengirim permintaan HTTP ke pendengar HTTPS.

Untuk informasi lebih lanjut tentang kode error HTTP, lihat Kode status ALB.

Solusi

  1. Periksa status Ingress: Jalankan perintah kubectl describe ingress <ingress-name> -n <namespace> dan periksa bagian Events untuk pesan error. Jika muncul event seperti listener is not exist in alb, tambahkan konfigurasi pendengar yang diperlukan ke AlbConfig Anda.

    ...
    Events:
      Type     Reason                  Age     From     Message
      ----     ------                  ----    ----     -------
      Warning  FailedBuildModel        ****    ingress  listener is not exist in alb, port: 443, protocol: HTTPS
      Warning  FailedBuildModel        ****    ingress  listener not found for (443/HTTPS), with ingresses 1
    ...
  2. Periksa endpoints backend: Jalankan perintah kubectl get endpoints <service-name> -n <namespace> untuk memastikan field ENDPOINTS mencantumkan setidaknya satu alamat IP dan port pod yang sehat. Jika kosong, verifikasi bahwa selector layanan sesuai dengan labels pod, dan bahwa pod berada dalam status Running.

  3. Periksa status dan log pod: Jalankan kubectl get pod -l <app=your-app> -n <namespace> untuk melihat status pod. Lalu, gunakan nama pod untuk menjalankan kubectl logs <pod-name> -n <namespace> dan periksa log aplikasi untuk kegagalan startup atau error pemrosesan permintaan.

  4. Uji konektivitas jaringan: Dari dalam pod atau dari node, gunakan curl untuk mengakses ClusterIP layanan backend atau IP pod guna memverifikasi bahwa layanan dapat dijangkau di dalam kluster.

Mengapa HTTPS tidak dapat diakses setelah konfigurasi TLS?

Penyebab

  • Instans ALB tidak mendengarkan di port 443: Anda telah mengonfigurasi TLS untuk Ingress, tetapi pendengar HTTPS:443 yang sesuai belum dibuat.

  • Konfigurasi sertifikat salah: Tipe Secret bukan kubernetes.io/tls atau IngressTLS, atau konten tls.crt dan tls.key di field data salah atau tidak cocok.

  • Sertifikat kedaluwarsa: Instans ALB mungkin menggunakan sertifikat lama. Hal ini terjadi jika Anda memperbarui sertifikat di Alibaba Cloud Certificate Management Service tetapi tidak memperbarui ID sertifikat di AlbConfig Anda, atau jika penemuan otomatis dan rekonsiliasi gagal dipicu.

Solusi

  1. Periksa port pendengar: Jalankan perintah kubectl describe albconfig <alb-name> -n <namespace> untuk memverifikasi bahwa konfigurasi spec.listeners.port: 443 dan spec.listeners.protocol: HTTPS ada.

  2. Periksa konfigurasi Ingress: Verifikasi bahwa konfigurasi Ingress mencakup anotasi alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]. Anotasi ini mengasosiasikan Ingress dengan pendengar HTTP dan HTTPS.

  3. Periksa konfigurasi Secret: Di konfigurasi Ingress, periksa field secretName dari spec.tls untuk memastikan Secret yang benar dirujuk. Jalankan perintah kubectl get secret <secret-name> -n <namespace> -o yaml untuk memastikan tipe Secret dan integritas data.

Bagaimana cara mengonfigurasi resolusi nama domain Ingress?

  1. Daftarkan nama domain.

  2. Tambahkan rekaman CNAME.

    Misalnya, tambahkan rekaman DNS dengan tipe catatan CNAME, rekaman host @ (yang mewakili domain root, seperti ingress-demo.com), dan nilai catatan sebagai alamat endpoint Ingress.
  3. Di browser, buka http://ingress-demo.com/coffee untuk memverifikasi bahwa resolusi nama domain berfungsi.

    Setelah akses berhasil, halaman uji NGINX dikembalikan, menampilkan informasi seperti Server address, Server name, Date, dan URI (dengan nilai /coffee) dari pod backend. Hal ini menunjukkan bahwa Ingress telah mengarahkan permintaan ke pod backend dengan benar.

    Untuk verifikasi, ganti contoh dengan nama domain yang Anda daftarkan. Jika resolusi nama domain gagal, lihat Troubleshooting cepat untuk kegagalan resolusi nama domain.

Bagaimana cara mengonfigurasi HTTPS untuk Ingress?

  1. Beli sertifikat resmi, dan ajukan sertifikat. Pastikan sertifikat yang ingin Anda gunakan berada dalam status Issued.

  2. Unduh sertifikat SSL.

    Contoh ini menunjukkan cara mengunduh file sertifikat berformat PEM untuk domain ingress-demo.com, dengan tipe server diatur ke Other.
  3. Buat Secret untuk menyimpan file sertifikat.

    1. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Configurations > Secrets.

    2. Di halaman Secrets, pilih namespace default lalu klik Create di sebelah kiri. Tambahkan konfigurasi berikut dan klik OK.

      • Name: ingress-tls

      • Type: TLS Certificate

      • Certificates: Konten lengkap file sertifikat (.pem) yang telah diunduh dan diekstrak.

      • Key: Konten lengkap file kunci privat (.key) yang telah diunduh dan diekstrak.

  4. Perbarui AlbConfig untuk menambahkan pendengar HTTPS:443 untuk instans ALB.

    1. Di panel navigasi kiri, pilih Workloads > Custom Resources. Di tab Resource Objects, cari AlbConfig, lalu klik hasil pencarian tersebut.

    2. Di daftar objek resource AlbConfig, temukan resource target alb dan klik Edit YAML di kolom Actions.

    3. Tambahkan field spec.listeners.port: 443 dan spec.listeners.protocol: HTTPS, lalu klik OK.

      spec:
          config:
            addressAllocatedMode: Fixed
            addressType: Internet
            zoneMappings:
              - vSwitchId: vsw-xxx
              - vSwitchId: vsw-xxx
          listeners:
            - port: 80
              protocol: HTTP
            - port: 443
              protocol: HTTPS
  5. Perbarui Ingress untuk menambahkan konfigurasi TLS dan mengasosiasikannya dengan pendengar HTTPS:443.

    1. Di panel navigasi kiri, pilih Network > Ingresses. Di kolom Actions Ingress target, klik Update.

    2. Tambahkan konfigurasi berikut dan klik OK.

      • TLS Settings: Enabled

      • Domain Name: ingress-demo.com

      • Secrets: ingress-tls

      • Annotations: alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]

  6. Di browser, buka https://ingress-demo.com/coffee untuk memverifikasi akses HTTPS.

    Halaman menampilkan logo NGINX dan informasi respons server. Server address, Server name, dan URI (dengan nilai /coffee) dikembalikan sesuai harapan. Hal ini mengonfirmasi bahwa HTTPS dikonfigurasi dengan benar dan Ingress mengarahkan permintaan ke pod backend coffee.

    Untuk verifikasi, ganti contoh dengan nama domain yang Anda daftarkan.

Untuk informasi lebih lanjut tentang cara mengonfigurasi sertifikat HTTPS, lihat Mengonfigurasi sertifikat HTTPS untuk komunikasi terenkripsi.

Bagaimana cara membuat AlbConfig dan IngressClass secara manual?

Buat AlbConfig

  1. Masuk ke Konsol VPC dan catat ID minimal dua vSwitch yang berada di zona ketersediaan berbeda dalam VPC tempat kluster ditempatkan.

    Zona ketersediaan vSwitch yang dikonfigurasi harus didukung oleh ALB. Untuk informasi lebih lanjut, lihat Wilayah dan zona ALB.
  2. Ganti zoneMappings.vSwitchId dalam kode berikut dengan ID vSwitch yang Anda peroleh pada langkah sebelumnya. Simpan konten ke file bernama albconfig.yaml dan jalankan kubectl apply -f albconfig.yaml untuk membuat AlbConfig.

    Untuk langkah-langkah lebih rinci, lihat Buat AlbConfig.
    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb # Jangan membuat resource AlbConfig lain dengan nama yang sama.
    spec:
      config:
        name: alb-test
        addressType: Internet
        zoneMappings:
        - vSwitchId: vsw-****cg2a9g71hx8go**** # Ganti dengan ID vSwitch aktual Anda.
        - vSwitchId: vsw-****un9tql5t8nh15**** # Ganti dengan ID vSwitch aktual Anda.
      listeners:
        - port: 80
          protocol: HTTP

Buat IngressClass

Resource IngressClass mengasosiasikan AlbConfig dengan resource Ingress. Saat Anda menentukan ingressClassName: alb dalam Ingress, resource tersebut menggunakan AlbConfig yang didefinisikan dalam IngressClass alb.

Simpan konten berikut ke file bernama IngressClass.yaml, lalu jalankan kubectl apply -f IngressClass.yaml untuk membuat IngressClass.

Field spec.parameters.name harus diatur ke nama AlbConfig. AlbConfig default yang dibuat saat Anda menginstal komponen diberi nama alb. Untuk informasi lebih lanjut, lihat Gunakan IngressClass untuk mengasosiasikan AlbConfig dengan Ingress.
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: alb
spec:
  controller: ingress.k8s.alibabacloud/alb
  parameters:
    apiGroup: alibabacloud.com
    kind: AlbConfig
    name: alb # Ini harus sesuai dengan nama resource AlbConfig.

Dokumentasi terkait

Penggunaan ALB Ingress Tingkat Lanjut

Menyesuaikan Aturan Pengalihan ALB Ingress

Melakukan Rilis Canary dengan ALB Ingress