全部产品
Search
文档中心

Container Service for Kubernetes:Ekspos layanan dengan ALB Ingress

更新时间:Dec 17, 2025

Secara default, layanan dalam kluster Container Service for Kubernetes (ACK) terisolasi dari jaringan eksternal. Untuk mengekspos layanan tersebut kepada pengguna, Anda dapat menggunakan ALB Ingress, yang memanfaatkan Application Load Balancer (ALB) sebagai titik masuk untuk mengelola lalu lintas inbound. ALB menyediakan routing berbasis domain, perlindungan keamanan, dan ketersediaan tinggi.

Cara kerja

  1. Asosiasi Sumber Daya

    Objek AlbConfig mendefinisikan konfigurasi instans ALB tertentu, seperti edisi dan pendengarnya. Terdapat pemetaan satu-ke-satu antara objek AlbConfig dan instans ALB. Pemetaan path dan layanan terkait yang didefinisikan dalam Ingress secara otomatis diterjemahkan menjadi aturan routing dan grup server pada instans ALB.

  2. Sinkronisasi dinamis

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

  3. Penerusan Lalu Lintas

    Berbeda dengan controller NGINX Ingress, ALB Ingress Controller merupakan komponen managed yang bertindak sebagai control plane untuk instans ALB. Komponen ini tidak menangani traffic data plane secara langsung. Instans ALB memproses dan meneruskan traffic pengguna ke pod backend yang diproksi oleh Service.

image

Batasan tipe layanan

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

Langkah 1: Instal ALB Ingress Controller

Saat membuat kluster

  1. Masuk ke Konsol ACK atau , lalu klik Create Kubernetes Cluster.

  2. Pada langkah Component Configurations, temukan bagian Ingress dan pilih ALB Ingress.

  3. Pilih opsi untuk membuat instans ALB baru dan ikuti petunjuk di layar untuk membuat kluster.

    ALB Instance

    Description

    New

    Otomatis membuat instans ALB, AlbConfig, dan IngressClass.

    • Instans ALB: Instans ALB standar dengan model bayar sesuai penggunaan (pay-as-you-go) (publik atau privat) akan dibuat di dalam virtual private cloud (VPC) kluster, dengan pendengar default pada port 80 (HTTP).

    • AlbConfig dan IngressClass: Resource AlbConfig dan IngressClass yang sesuai akan dibuat secara otomatis di kluster dan dikaitkan dengan instans ALB baru tersebut.

    Existing

    Opsi ini hanya tersedia jika Anda memilih VPC yang sudah ada untuk jaringan kluster.

    Menggunakan instans ALB yang sudah ada dan secara otomatis membuat AlbConfig dan IngressClass terkait. Instans ALB yang dipilih harus memenuhi kriteria berikut:

    • Edisi: Harus standar atau WAF-enabled.

    • Jaringan: Harus berada di VPC yang sama dengan kluster.

    • Asosiasi: Tidak boleh sudah dikaitkan dengan kluster lain.

    None

    Hanya menginstal ALB Ingress Controller. Anda harus membuat resource AlbConfig dan IngressClass secara manual nanti. Opsi ini cocok untuk menyesuaikan konfigurasi instans ALB.

Untuk kluster yang sudah ada

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

  2. Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.

  3. Pada halaman Add-ons, klik tab Networking. Temukan ALB Ingress Controller dan klik Install.

  4. Pilih opsi untuk membuat instans ALB baru dan klik OK.

    ALB Instance

    Description

    New

    Otomatis membuat instans ALB, AlbConfig, dan IngressClass.

    • Instans ALB: Instans ALB standar dengan model bayar sesuai penggunaan (pay-as-you-go) (publik atau privat) akan dibuat di dalam virtual private cloud (VPC) kluster, dengan pendengar default pada port 80 (HTTP).

    • AlbConfig dan IngressClass: Resource AlbConfig dan IngressClass yang sesuai akan dibuat secara otomatis di kluster dan dikaitkan dengan instans ALB baru tersebut.

    Existing

    Menggunakan instans ALB yang sudah ada dan secara otomatis membuat AlbConfig dan IngressClass terkait. Instans ALB yang dipilih harus memenuhi kriteria berikut:

    • Edisi: Harus standar atau WAF-enabled.

    • Jaringan: Harus berada di VPC yang sama dengan kluster.

    • Asosiasi: Tidak boleh sudah dikaitkan dengan kluster lain.

    None

    Hanya menginstal ALB Ingress Controller. Anda harus membuat resource AlbConfig dan IngressClass secara manual nanti. Opsi ini cocok untuk menyesuaikan konfigurasi instans ALB.

Langkah 2: Deploy aplikasi contoh

Contoh ini mendeploy aplikasi Nginx bernama coffee sebagai Deployment dan mengeksposnya secara internal melalui Service bernama coffee-svc.

Konsol

  1. Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, pilih Workloads > Deployments.

  2. Klik Create from YAML. Atur Sampel Template ke Custom, salin konten berikut ke editor templat, lalu klik Create.

    Templat YAML

    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
  3. Pada kotak dialog yang muncul, klik View dan pastikan status pod adalah Running

kubectl

  1. Dapatkan kubeconfig kluster dan hubungkan ke kluster menggunakan kubectl.

  2. Buat file bernama coffee-deployment-service.yaml dengan konten berikut:

    Templat YAML

    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
  3. Deploy aplikasi.

    kubectl apply -f coffee-deployment-service.yaml
  4. Pastikan pod sedang berjalan.

     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

Langkah 3: Buat ALB Ingress

Dengan mengonfigurasi nama domain dan pemetaan path untuk ALB Ingress, Anda dapat mengarahkan permintaan ke ingress-demo.com/coffee ke layanan internal coffee-svc di kluster.

Untuk menggunakan ALB Ingress di kluster khusus ACK, berikan izin akses terlebih dahulu kepada ALB Ingress Controller.

Konsol

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

  2. Konfigurasikan hal berikut dan klik OK.

    • Name: coffee-ingress

    • Domain Name: ingress-demo.com

    • Mappings

      • Path: /coffee

      • Rule: Prefix

      • Service: coffee-svc

      • Port: 80

        Matching rule (pathType)

        Description

        Prefix

        Mencocokkan berdasarkan awalan path URL. Misalnya, aturan dengan path /coffee akan mencocokkan permintaan untuk /coffee/1 dan /coffee/buy/1, tetapi tidak akan mencocokkan /cof atau /coffeebuy/1.

        Exact

        Mencocokkan path URL secara persis. Untuk aturan dengan path /coffee, hanya permintaan untuk path persis /coffee yang akan dicocokkan.

        ImplementationSpecific

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

  3. Dapatkan Endpoint.

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

    image

  4. Uji nama domain dan endpoint. Jika kode status HTTP adalah 200, ALB Ingress telah berhasil dibuat.

    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.

    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 berdasarkan awalan path URL. Misalnya, aturan dengan path /coffee akan mencocokkan permintaan untuk /coffee/1 dan /coffee/buy/1, tetapi tidak akan mencocokkan /cof atau /coffeebuy/1.

    Exact

    Mencocokkan path URL secara persis. Untuk aturan dengan path /coffee, hanya permintaan untuk path persis /coffee yang akan dicocokkan.

    ImplementationSpecific

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

  2. Deploy Ingress.

    kubectl apply -f coffee-ingress.yaml
  3. Ambil endpoint publik Ingress dari field ADDRESS. Mungkin diperlukan waktu hingga alamat tersebut ditetapkan.

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

    Output yang diharapkan:

    alb-******************.cn-wulanchabu.alb.aliyuncsslb.com
  4. Uji nama domain dan endpoint. Jika kode status HTTP adalah 200, ALB Ingress telah berhasil dibuat.

    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 managed ACK dan tidak dikenai biaya.

  • Instans ALB: Setiap objek resource AlbConfig membuat instans ALB yang sesuai. Instans ALB ditagih berdasarkan model pay-as-you-go.

Terapkan di produksi

  • Konfigurasi DNS: Buat rekaman CNAME di penyedia DNS Anda untuk mengarahkan domain bisnis Anda ke endpoint publik instans ALB. Hal ini memisahkan nama domain dari endpoint instans dan memastikan ketersediaan tinggi serta konfigurasi fleksibel untuk endpoint layanan.

  • Aktifkan HTTPS: Gunakan Layanan Manajemen Sertifikat untuk mengelola sertifikat Anda dan referensikan dalam bagian tls resource Ingress Anda guna mengamankan layanan Anda dengan HTTPS.

Kuota dan batasan

FAQ

Mengapa saya mendapatkan error 503, 502, atau 404 saat mengakses Ingress saya?

Penyebab

  • Error 503 (Service Temporarily Unavailable)

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

    • Tidak ada pod backend yang sehat: Semua pod yang terkait dengan layanan tidak siap atau tidak ada. Hal ini menghasilkan objek endpoint kosong.

  • Error 502 (Bad Gateway)

    Pendengar HTTP atau HTTPS menerima permintaan koneksi klien. Jika instans ALB tidak dapat meneruskan permintaan ke pod atau menerima respons dari pod, instans tersebut mengirimkan kode status HTTP 502 Bad Gateway ke klien.

  • Error 404 (Not Found)

    Hal ini biasanya berarti permintaan sesuai dengan aturan routing yang didefinisikan di Ingress, tetapi tidak sesuai dengan URL layanan aktual yang disediakan oleh aplikasi di dalam pod.

Untuk kode error HTTP lainnya, lihat Kode Status ALB.

Solusi

  • Periksa status Ingress

    Jalankan perintah kubectl describe ingress <ingress-name> -n <namespace> dan periksa bagian Events untuk pesan error. Misalnya, jika Anda melihat event serupa listener is not exist in alb, artinya Anda perlu membuat pendengar yang diperlukan untuk resource Ingress di AlbConfig.

    ...
    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
    ...
  • Periksa endpoint backend

    Jalankan perintah kubectl get endpoints <service-name> -n <namespace> untuk memastikan field ENDPOINTS berisi setidaknya satu alamat IP dan port pod yang sehat. Jika field tersebut kosong, verifikasi bahwa selector Service sesuai dengan labels pada pod Anda, dan pastikan pod berada dalam status Running.

  • Periksa status dan log pod

    Pertama, jalankan perintah kubectl get pod -l <app=your-app> -n <namespace> untuk memeriksa status pod aplikasi Anda. Kemudian, jalankan kubectl logs <pod-name> -n <namespace> untuk memeriksa log pod tertentu guna menemukan kegagalan startup atau error pemrosesan permintaan.

  • Uji konektivitas jaringan

    Dari pod lain atau langsung dari node, gunakan curl untuk mengakses ClusterIP Service backend atau IP pod langsung. Hal ini akan memverifikasi bahwa layanan dapat dijangkau dari dalam kluster.

Mengapa HTTPS tidak berfungsi setelah saya mengonfigurasi TLS untuk Ingress?

Penyebab

  • HTTPS Listener tidak tersedia

    Anda telah mengonfigurasi TLS di Ingress, tetapi instans ALB yang mendasarinya tidak dikonfigurasi untuk mendengarkan pada HTTPS:443.

  • Konfigurasi Secret salah

    Secret yang direferensikan di Ingress Anda bukan bertipe kubernetes.io/tls atau IngressTLS, atau field data di tls.crt dan tls.key tidak valid atau tidak sesuai.

  • Pembaruan sertifikat belum disinkronkan

    Anda memperbarui sertifikat di Layanan Manajemen Sertifikat, tetapi perubahan tersebut belum tersebar ke instans ALB. Hal ini dapat terjadi jika ID sertifikat di AlbConfig tidak diperbarui atau proses penemuan dan rekonsiliasi otomatis belum selesai. Instans ALB masih mereferensikan sertifikat lama.

Solusi

  1. Verifikasi konfigurasi pendengar ALB

    Periksa resource AlbConfig Anda untuk memastikan pendengar HTTPS pada port 443 telah didefinisikan.

    kubectl describe albconfig <alb-name> -n <namespace>

    Cari entri pendengar dengan spec.listeners.port: 443 dan spec.listeners.protocol: HTTPS.

  2. Periksa anotasi Ingress

    Pastikan resource Ingress Anda menyertakan anotasi berikut untuk mengaitkannya dengan pendengar HTTP dan HTTPS:

    alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]
  3. Validasi konfigurasi Secret

    1. Periksa bagian spec.tls manifes Ingress Anda untuk memastikan field secretName mereferensikan Secret yang benar.

    2. Periksa Secret itu sendiri untuk memverifikasi tipe dan integritas datanya:

      kubectl get secret <secret-name> -n <namespace> -o yaml

    Pastikan tipe-nya adalah kubernetes.io/tls dan field tls.crt serta tls.key berisi data yang valid dan terenkripsi base64.

Bagaimana cara mengonfigurasi DNS untuk Ingress saya?

  1. Daftarkan nama domain.

  2. Tambahkan rekaman CNAME.

    Di konsol manajemen penyedia DNS Anda, tambahkan rekaman CNAME yang mengarahkan hostname yang diinginkan ke alamat endpoint Ingress.

    Konfigurasi contoh:

    • Tipe rekaman: CNAME

    • Host: @ (Biasanya merepresentasikan domain root, seperti ingress-demo.com)

    • Nilai: Alamat endpoint Ingress Anda, seperti alamat instans ALB Anda.

  3. Verifikasi konfigurasi.

    Setelah rekaman DNS sempat tersebar, buka browser web dan arahkan ke domain Anda http://ingress-demo.com/coffee. Jika halaman berhasil dimuat, resolusi DNS berfungsi dengan baik.

    image

    Gunakan nama domain terdaftar Anda sendiri untuk verifikasi. Jika resolusi nama domain gagal, lihat Troubleshooting cepat untuk kegagalan resolusi nama domain.

Bagaimana cara mengonfigurasi HTTPS untuk Ingress?

  1. Ajukan permohonan ke otoritas sertifikasi (CA), beli sertifikat resmi, dan pastikan sertifikat Anda berstatus issued.

  2. Unduh sertifikat SSL.

    Contoh ini menunjukkan cara mengunduh file sertifikat berformat PEM untuk nama domain ingress-demo.com. Jenis server diatur ke other.
  3. Buat Secret Kubernetes untuk sertifikat tersebut. Anda harus menyimpan sertifikat dan kunci privat Anda dalam Secret Kubernetes agar controller Ingress dapat mengaksesnya.

    1. Pada halaman Clusters, klik nama kluster yang ingin Anda ubah. Di panel navigasi kiri, pilih Configurations > Secrets.

    2. Pada halaman Secrets, pilih namespace default dan klik Create di pojok kiri atas. Tambahkan konfigurasi berikut dan klik OK.

      • Name: ingress-tls

      • Type: TLS Certificate

      • Certificates: Tempelkan seluruh isi file sertifikat Anda (.pem).

      • Key: Tempelkan seluruh isi file kunci privat Anda (.key).

      image

  4. Tambahkan pendengar HTTPS ke  AlbConfig Anda.

    1. Di panel navigasi kiri, pilih Workloads > Custom Resources. Pada tab Resource Objects, cari dan klik AlbConfig.

    2. Temukan resource AlbConfig target Anda (misalnya alb). Di kolom Actions, klik Edit YAML.

    3. Tambahkan pendengar baru untuk HTTPS pada port 443 ke bagian spec.listeners:

      image

    4. Klik OK untuk menerapkan perubahan.

  5. Perbarui Ingress untuk mengaktifkan TLS.

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

    2. Tambahkan konfigurasi berikut dan klik OK.

      • Aktifkan TLS Settings

        • Domain Name: ingress-demo.com

        • Secret: ingress-tls

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

  6. Buka browser web dan arahkan ke https://ingress-demo.com/coffee. Koneksi sekarang harus aman dan menggunakan HTTPS.

    image

    Gunakan domain terdaftar Anda sendiri untuk verifikasi.

Untuk informasi lebih lanjut, lihat Konfigurasi sertifikat HTTPS untuk komunikasi terenkripsi.

Bagaimana cara membuat AlbConfig dan IngressClass secara manual?

Buat AlbConfig

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

    Zona Ketersediaan vSwitch yang dipilih harus berada di Wilayah dan zona.
  2. Buat file bernama albconfig.yaml dengan konten berikut. Ganti placeholder zoneMappings.vSwitchId dengan ID aktual yang telah Anda catat pada langkah sebelumnya.

    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb # Jangan membuat beberapa resource AlbConfig dengan nama yang sama (alb)
    spec:
      config:
        name: alb-test
        addressType: Internet
        zoneMappings:
        - vSwitchId: vsw-****cg2a9g71hx8go**** # Ganti dengan ID vSwitch Anda yang sebenarnya
        - vSwitchId: vsw-****un9tql5t8nh15**** # Ganti dengan ID vSwitch Anda yang sebenarnya
      listeners:
        - port: 80
          protocol: HTTP
  3. Jalankan perintah berikut untuk membuat resource AlbConfig di kluster Anda:

    kubectl apply -f albconfig.yaml
Untuk instruksi lebih rinci, lihat Buat AlbConfig.

Buat IngressClass

Resource IngressClass mengaitkan AlbConfig dengan resource Ingress Anda. Dengan menyetel ingressClassName: alb dalam manifes Ingress, Anda menginstruksikan controller untuk menggunakan konfigurasi yang didefinisikan oleh IngressClass bernama alb.

  1. Buat file bernama ingressclass.yaml dengan konten berikut.

    Field spec.parameters.name harus sesuai dengan metadata.name resource AlbConfig Anda (dalam kasus ini, alb).
    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
  2. Jalankan perintah berikut untuk membuat IngressClass:

    kubectl apply -f ingressclass.yaml
Untuk panduan terperinci, lihat Gunakan IngressClass untuk mengaitkan AlbConfig dengan Ingress.

Referensi

Fitur lanjutan layanan ALB Ingress

Sesuaikan aturan pengalihan untuk ALB Ingress

Gunakan ALB Ingress untuk melakukan rilis canary