All Products
Search
Document Center

Alibaba Cloud Service Mesh:Tentukan aturan routing dengan Gateway API

Last Updated:Aug 24, 2026

Gateway API adalah proyek open-source yang dikelola oleh komunitas SIG-NETWORK. Gateway API meningkatkan jaringan layanan dengan menyediakan antarmuka yang ekspresif, dapat diperluas, dan berorientasi peran. Anda dapat menggunakan Gateway API untuk menerapkan batasan kondisional pada aturan routing guna mengakses aplikasi dalam sebuah kluster.

Prasyarat

Catatan

  • Kompatibilitas versi:

    • ASM 1.18 mendukung Gateway API v0.6.0.

    • ASM 1.22 dan versi lebih baru mendukung Gateway API v1.1 serta menambahkan dukungan untuk GRPCRoute.

    • ASM 1.24 dan versi lebih baru mendukung Gateway API v1.2.0.

  • Dalam mode multi-kluster, jika Anda menerapkan resource Gateway API dengan nama yang sama ke namespace yang sama di beberapa kluster bidang data, resource terakhir yang diterapkan akan menimpa resource sebelumnya.

Langkah 1: Verifikasi CRD Gateway API

Komponen CRD Gateway API diinstal secara default di kluster Container Service for Kubernetes (ACK) versi 1.24 dan lebih baru.

Untuk memverifikasi bahwa CRD tersebut ada di kluster ACK Anda, jalankan perintah berikut.

kubectl get crds | grep gateway.networking.k8s.io
  • Jika CRD telah diinstal, output-nya mirip dengan berikut:

    gatewayclasses.gateway.networking.k8s.io                         2023-05-10T02:51:33Z
    gateways.gateway.networking.k8s.io                               2023-05-10T02:51:33Z
    httproutes.gateway.networking.k8s.io                             2023-05-10T02:51:33Z
    referencegrants.gateway.networking.k8s.io                        2023-05-10T02:51:33Z

    Jalankan perintah berikut untuk memeriksa versi CRD.

    kubectl get crds -o yaml | grep 'gateway.networking.k8s.io/bundle-version'

    Output yang diharapkan:

    gateway.networking.k8s.io/bundle-version: v0.6.0
    gateway.networking.k8s.io/bundle-version: v0.6.0
    gateway.networking.k8s.io/bundle-version: v0.6.0
    gateway.networking.k8s.io/bundle-version: v0.6.0
  • Jika output tidak mencakup CRD yang diharapkan, login ke Konsol ACK, buka halaman Add-ons, lalu instal komponen Gateway API. Untuk informasi selengkapnya, lihat Manage add-ons.

Langkah 2: Aktifkan dukungan Gateway API

Di lingkungan kubeconfig untuk instans ASM Anda, tambahkan bidang enableGatewayAPI: true ke resource ASMMeshConfig bernama default.

apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMMeshConfig
metadata:
  name: default
spec:
  enableGatewayAPI: true

Setelah Anda mengaktifkan sakelar enableGatewayAPI, lapisan kontrol akan menghasilkan CRD Gateway API terkait. Baik Gateway API maupun Istio mendefinisikan resource bernama Gateway, yang dapat menyebabkan konflik saat Anda menggunakan kubectl. Untuk mengatasinya, gunakan perintah kubectl get gtw untuk mengambil resource Gateway dari Gateway API dan gunakan perintah kubectl get gw untuk mengambil resource Gateway dari Istio.

Langkah 3: Konfigurasikan aturan routing HTTP

Gunakan Gateway API untuk mengonfigurasi aturan routing HTTP yang mengekspos aplikasi httpbin melalui gerbang. Anda perlu membuat resource Gateway dan HTTPRoute di kluster ACK Anda.

  1. Buat resource Gateway.

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

      Konfigurasi ini menerapkan resource Gateway ke gerbang ASM yang ditentukan. Konfigurasi ini membuat listener pada Port 80 yang menggunakan protokol HTTP dan mengatur hostname menjadi *.aliyun.com, yang memungkinkan aturan routing dari semua namespace untuk disambungkan ke listener ini. Di file YAML, ganti ${ASM_GATEWAY_NAME} dengan nama gerbang ASM Anda.

      gateway.yaml

      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: Gateway
      metadata:
        name: gateway
        namespace: istio-system
      spec:
        addresses:  # Menentukan layanan gerbang ASM. Ini dapat diterapkan pada layanan beberapa gerbang ASM.
        - type: Hostname
          value: istio-${ASM_GATEWAY_NAME}.istio-system.svc.cluster.local
        gatewayClassName: istio
        listeners:
        - allowedRoutes:
            namespaces:
              from: All
          hostname: '*.aliyun.com'  # Pencocokan langsung pada "*" tidak didukung. Untuk mencocokkan semua host, jangan tentukan bidang ini.
          name: default
          port: 80
          protocol: HTTP
    2. Di lingkungan kubeconfig untuk kluster ACK Anda, jalankan perintah berikut untuk mendeploy Gateway.

      kubectl apply -f gateway.yaml
  2. Buat resource HTTPRoute.

    1. Buat file bernama http-route.yaml dengan konten berikut.

      Konfigurasi ini menyambungkan HTTPRoute ke resource gateway di namespace istio-system. Karena tidak ada listener spesifik yang dinamai, aturan ini berlaku untuk semua listener yang kompatibel pada gerbang tersebut. Permintaan dengan awalan path /get diarahkan ke Port 8000 layanan httpbin di namespace yang sama.

      http-route.yaml

      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: HTTPRoute
      metadata:
        name: http
        namespace: default
      spec:
        parentRefs:  # Rute ini juga dapat disambungkan ke Gateway yang berbeda.
        - name: gateway
          namespace: istio-system
        hostnames: ["*.aliyun.com"]
        rules:
        - matches:
          - path:
              type: PathPrefix
              value: /get
          backendRefs:  # Secara default, Anda hanya dapat mereferensikan layanan di namespace yang sama. Untuk menggunakan layanan di namespace berbeda, konfigurasikan resource ReferenceGrant. Untuk informasi selengkapnya, lihat https://gateway-api.sigs.k8s.io/api-types/referencegrant/
          - name: httpbin 
            port: 8000
    2. Di lingkungan kubeconfig untuk kluster ACK Anda, jalankan perintah berikut untuk mendeploy HTTPRoute.

      kubectl apply -f http-route.yaml
  3. Jalankan perintah berikut untuk mengakses aplikasi httpbin melalui ingress gateway dan verifikasi bahwa aturan routing HTTP aktif. Ganti {INGRESS_GATEWAY_IP} dengan alamat IP ingress gateway Anda.

    curl -I -HHost:httpbin.aliyun.com "http://{INGRESS_GATEWAY_IP}:80/get"

    Output yang diharapkan:

    HTTP/1.1 200 OK
    server: istio-envoy
    date: Fri, 12 May 2023 08:16:30 GMT
    content-type: application/json
    content-length: 516
    access-control-allow-origin: *
    access-control-allow-credentials: true
    x-envoy-upstream-service-time: 4

    Tanggapan 200 OK mengonfirmasi bahwa aturan routing HTTP aktif.

Langkah 4: Konfigurasikan aturan routing HTTPS

Gunakan Gateway API untuk mengonfigurasi aturan routing HTTPS. Aturan ini mengekspos aplikasi httpbin dan melakukan terminasi TLS di gerbang ASM. Anda perlu membuat resource Gateway dan HTTPRoute di kluster ACK.

  1. Gunakan fitur manajemen sertifikat global ASM untuk membuat sertifikat HTTPS untuk a.aliyun.com. Beri nama sertifikat tersebut myexample-credential. Untuk informasi selengkapnya, lihat Langkah 1: Siapkan sertifikat server dan kunci privat untuk beberapa host.

  2. Buat resource Gateway.

    1. Buat file bernama gateway-https.yaml dengan konten berikut.

      Di file YAML, ganti ${ASM_GATEWAY_NAME} dengan nama gerbang ASM Anda.

      gateway-https.yaml

      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: Gateway
      metadata:
        name: gateway-https
        namespace: istio-system
      spec:
        addresses:  # Menentukan layanan gerbang ASM. Ini dapat diterapkan pada layanan beberapa gerbang ASM.
        - type: Hostname
          value: istio-${ASM_GATEWAY_NAME}.istio-system.svc.cluster.local
        gatewayClassName: istio
        listeners:
        - name: https
          hostname: "*.aliyun.com"
          port: 443
          protocol: HTTPS
          tls:
            mode: Terminate
            certificateRefs:
            - name: myexample-credential
          allowedRoutes:
            namespaces:
              from: All
    2. Di lingkungan kubeconfig untuk kluster ACK Anda, jalankan perintah berikut untuk mendeploy Gateway.

      kubectl apply -f gateway-https.yaml
  3. Buat resource HTTPRoute.

    1. Buat file bernama httpbin-https.yaml dengan konten berikut.

      httpbin-https.yaml

      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: HTTPRoute
      metadata:
        name: httpbin-https
        namespace: default
      spec:
        parentRefs:
        - name: gateway-https
          namespace: istio-system
        hostnames: ["*.aliyun.com"]
        rules:
        - matches:
          - path:
              type: PathPrefix
              value: /status
          - path:
              type: PathPrefix
              value: /delay
          backendRefs:
          - name: httpbin
            port: 8000
    2. Di lingkungan kubeconfig untuk kluster ACK Anda, jalankan perintah berikut untuk mendeploy HTTPRoute.

      kubectl apply -f httpbin-https.yaml
  4. Jalankan perintah berikut untuk mengakses aplikasi httpbin melalui ingress gateway dan verifikasi bahwa aturan routing HTTPS aktif. Ganti {INGRESS_GATEWAY_IP} dengan alamat IP ingress gateway Anda.

    curl -k -H Host:a.aliyun.com --resolve a.aliyun.com:443:{INGRESS_GATEWAY_IP} https://a.aliyun.com/status/418

    Output yang diharapkan:

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

    Output tersebut mengonfirmasi bahwa aturan routing HTTPS aktif.