All Products
Search
Document Center

Alibaba Cloud Service Mesh:Gunakan gateway ASM sebagai Ingress controller

Last Updated:Mar 20, 2026

Ketika workload dalam kluster Container Service for Kubernetes (ACK) memerlukan akses HTTP atau HTTPS dari klien eksternal, Anda dapat mengeksposnya melalui sumber daya Ingress Kubernetes standar yang didukung oleh gateway Alibaba Cloud Service Mesh (ASM). Pendekatan ini memberikan penskalaan otomatis, percepatan Transport Layer Security (TLS), penutupan anggun instance Server Load Balancer (SLB), pemuatan sertifikat dinamis, serta fitur observabilitas dan keamanan bawaan tanpa perlu mengelola ingress controller terpisah.

Prasyarat

  • Kluster ACK telah ditambahkan ke instance ASM versi 1.16 atau lebih baru. Untuk informasi lebih lanjut, lihat Tambahkan kluster ke instance ASM.

  • Ingress gateway telah dikonfigurasi dengan port 80 dan 443 diekspos. Untuk informasi lebih lanjut, lihat Buat layanan ingress gateway.

  • Aplikasi httpbin telah diterapkan dalam kluster (tidak perlu diekspos melalui gateway). Untuk informasi lebih lanjut, lihat Terapkan aplikasi HTTPBin.

  • kubectl telah dikonfigurasi untuk terhubung ke kluster ACK.

Batasan

Batasan Detail
defaultBackend tidak didukung Gateway ASM tidak mendukung bidang defaultBackend dalam sumber daya Ingress. Untuk informasi lebih lanjut, lihat Ingress.
Versi API Ingress Hanya networking.k8s.io/v1 yang didukung. Pastikan bahwa lapisan data mendukung API Ingress v1 sebelum melanjutkan.

Aktifkan Ingress pada gateway ASM

  1. Masuk ke Konsol ASM. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih ASM Gateways > Ingress Gateway.

  3. Di bagian Advanced features, klik Enable Ingress API access. Dalam pesan Submit yang muncul, klik OK.

Buat sumber daya Ingress

Ingress tidak mendukung port pendengaran khusus. Secara default, port 80 menangani lalu lintas HTTP dan port 443 menangani lalu lintas HTTPS. Pastikan kedua port tersebut diaktifkan pada gateway ASM.

Dua metode tersedia untuk menentukan gateway ASM sebagai ingress controller:

Metode Bidang / Anotasi Status
Bidang ingressClassName (direkomendasikan) ingressClassName: istio Pendekatan standar Kubernetes
Anotasi (usang) kubernetes.io/ingress.class: istio Telah diusangkan oleh Kubernetes

Gunakan bidang ingressClassName (direkomendasikan)

Bidang ingressClassName merujuk pada sumber daya IngressClass yang mengidentifikasi controller yang bertanggung jawab atas Ingress tersebut.

  1. Buat file bernama ingress.yaml:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress
    spec:
      ingressClassName: istio
      rules:
      - host: httpbin.aliyun.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: httpbin
                port:
                  number: 8000
  2. Terapkan sumber daya Ingress:

    kubectl apply -f ingress.yaml

Gunakan anotasi (usang)

Catatan

CATATAN: Anotasi kubernetes.io/ingress.class telah diusangkan oleh Kubernetes. Gunakan bidang ingressClassName untuk kompatibilitas ke depan.

  1. Buat file bernama ingress.yaml:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/ingress.class: istio
      name: ingress
    spec:
      rules:
      - host: httpbin.aliyun.com
        http:
          paths:
          - path: /status
            pathType: Prefix
            backend:
              service:
                name: httpbin
                port:
                  number: 8000
  2. Terapkan sumber daya Ingress:

    kubectl apply -f ingress.yaml

Verifikasi akses HTTP

  1. Dapatkan alamat IP eksternal ingress gateway ASM:

    export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway \
      -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
  2. Kirim permintaan ke layanan httpbin:

    curl -H 'Host: httpbin.aliyun.com' "http://${INGRESS_HOST}/status/418"

    Output yang diharapkan:

        -=[ teapot ]=-
    
           _...._
         .'  _ _ `.
        | ."` ^ `". _,
        \_;`"---"`|//
          |       ;/
          \_     _/

    Output ini menegaskan bahwa Ingress berhasil mengarahkan lalu lintas ke aplikasi httpbin melalui gateway ASM.

Konfigurasikan TLS untuk akses HTTPS

Gateway ASM mendukung pemuatan sertifikat dinamis. Anda dapat memperbarui kunci privat, sertifikat server, dan sertifikat akar tanpa memulai ulang pod gateway. Beberapa Secret dapat dipasang secara bersamaan untuk melayani sertifikat berbeda.

Karena gateway ASM berjalan dalam namespace istio-system, Secret TLS yang dirujuk dalam sumber daya Ingress juga harus berada dalam namespace istio-system.

Siapkan sertifikat server dan kunci privat

Nama domain hanya dapat diakses setelah memiliki pendaftaran Penyedia Konten Internet (ICP). Contoh berikut menghasilkan sertifikat mandiri untuk aliyun.com.

Pilih salah satu skenario berikut:

Skenario 1: Hasilkan sertifikat baru

  1. Buat sertifikat akar dan kunci privat:

    openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \
      -subj '/O=myexample Inc./CN=aliyun.com' \
      -keyout aliyun.root.key -out aliyun.root.crt
  2. Hasilkan sertifikat server dan kunci privat untuk aliyun.com:

    openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes \
      -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization"
    openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key \
      -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt
  3. Buat TLS Secret dalam namespace istio-system:

    kubectl create -n istio-system secret tls myexample-credential \
      --key=aliyun.com.key --cert=aliyun.com.crt

Skenario 2: Gunakan sertifikat yang sudah ada

  1. Berikan nama file sertifikat sebagai aliyun.com.crt dan kunci privat sebagai aliyun.com.key.

  2. Buat TLS Secret dalam namespace istio-system:

    kubectl create -n istio-system secret tls myexample-credential \
      --key=aliyun.com.key --cert=aliyun.com.crt

Buat Ingress dengan TLS

  1. Buat file bernama ingress-https.yaml:

    Catatan

    Jika Anda membuat Ingress di konsol ACK, Anda hanya dapat memilih Secret dari namespace tempat Ingress berada. Jika Ingress berada dalam namespace default, salin Secret myexample-credential ke namespace default agar muncul dalam konsol:

    kubectl get secret myexample-credential -n istio-system -o yaml \
      | sed 's/namespace: istio-system/namespace: default/' \
      | kubectl apply -f -
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress
      annotations:
        kubernetes.io/ingress.class: istio
    spec:
      rules:
        - host: httpbin.aliyun.com
          http:
            paths:
              - backend:
                  service:
                    name: httpbin
                    port:
                      number: 8000
                path: /status
                pathType: Prefix
      tls:
        - hosts:
            - httpbin.aliyun.com
          secretName: myexample-credential
  2. Terapkan sumber daya Ingress:

    kubectl apply -f ingress-https.yaml

Verifikasi akses HTTPS

  1. Kirim permintaan ke layanan httpbin melalui HTTPS:

    curl -H 'Host: httpbin.aliyun.com' \
      --resolve "httpbin.aliyun.com:443:${INGRESS_HOST}" \
      "https://httpbin.aliyun.com:443/status/418" -k

    Output yang diharapkan:

        -=[ teapot ]=-
    
           _...._
         .'  _ _ `.
        | ."` ^ `". _,
        \_;`"---"`|//
          |       ;/
          \_     _/

    Output ini menegaskan bahwa Ingress berhasil mengarahkan lalu lintas ke aplikasi httpbin melalui HTTPS melalui gateway ASM.

Muat sertifikat tambahan

Untuk melayani beberapa domain dengan sertifikat berbeda, ulangi langkah persiapan sertifikat dan pembuatan Secret untuk setiap domain, lalu tambahkan entri ke dalam array tls dalam sumber daya Ingress Anda. Gateway ASM akan memuat sertifikat baru secara dinamis tanpa memulai ulang pod.

Catatan penggunaan

Catatan

CATATAN: Ingress menangani routing HTTP/HTTPS standar. Untuk manajemen lalu lintas tingkat lanjut seperti pembagian lalu lintas, injeksi kesalahan, atau kebijakan otorisasi, gunakan sumber daya ASM Gateway dan VirtualService sebagai gantinya. Untuk informasi selengkapnya tentang Kubernetes Gateway API, lihat Ingress Gateways.