All Products
Search
Document Center

Alibaba Cloud Service Mesh:Gunakan Gateway API untuk menentukan aturan routing

Last Updated:Jul 06, 2025

Gateway API adalah proyek sumber terbuka yang dikelola oleh komunitas SIG-NETWORK. Proyek ini bertujuan untuk mengembangkan jaringan layanan dengan menyediakan antarmuka yang ekspresif, dapat diperluas, dan berorientasi pada peran. Anda dapat menggunakan Gateway API untuk menentukan aturan routing guna mengakses aplikasi dalam kluster.

Prasyarat

  • Kluster Container Service for Kubernetes (ACK) telah ditambahkan ke instance Service Mesh (ASM) versi 1.18 atau lebih baru. Untuk informasi lebih lanjut, lihat Tambahkan Kluster ke Instance ASM.

  • Sebuah ingress gateway telah diterapkan, dan port 80 serta 443 diaktifkan untuk ingress gateway tersebut. Untuk informasi lebih lanjut, lihat Buat Ingress Gateway.

  • Aplikasi httpbin telah diterapkan. Untuk informasi lebih lanjut, lihat Langkah 1 dalam Terapkan Aplikasi httpbin.

Catatan penggunaan

  • Deskripsi Versi:

    • Instance ASM versi V1.18 mendukung Gateway API V0.6.0.

    • Instance ASM versi V1.22 dan lebih baru mendukung Gateway API V1.1 dan GRPCRoute.

    • Instance ASM versi V1.24 dan lebih baru mendukung Gateway API V1.2.0.

  • Dalam mode multi-kluster, jika sumber daya gateway dengan nama yang sama dikonfigurasi di namespace yang sama di dua kluster pada bidang data, sumber daya yang diterapkan kemudian akan menimpa sumber daya sebelumnya.

Langkah 1: Konfirmasi bahwa CRD dari komponen Gateway API dibuat di kluster ACK

Secara default, CustomResourceDefinitions (CRD) dari komponen Gateway API secara otomatis dibuat di kluster ACK versi V1.24 dan lebih baru. Anda dapat melakukan operasi berikut untuk memastikan bahwa CRD dibuat di kluster ACK.

Jalankan perintah berikut untuk memeriksa apakah CRD dibuat di kluster ACK:

kubectl get crds | grep gateway.networking.k8s.io
  • Jika keluarannya mirip dengan blok kode berikut, CRD telah dibuat.

    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'

    Keluaran 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 keluaran tidak berisi CRD dari komponen Gateway API, masuk ke Konsol ACK dan instal komponen Gateway API di halaman Add-ons. Untuk informasi lebih lanjut, lihat Kelola Komponen.

Langkah 2: Aktifkan Gateway API untuk instance ASM

Gunakan kubectl untuk terhubung ke instance ASM berdasarkan informasi dalam file kubeconfig, lalu tambahkan field enableGatewayAPI: true ke ASMMeshConfig bernama default.

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

Setelah Anda menetapkan enableGatewayAPI sebagai true, bidang kontrol akan membuat CRD dari komponen Gateway API. Baik komponen Gateway API maupun Istio berisi sumber daya gateway. Oleh karena itu, konflik mungkin terjadi saat Anda menggunakan kubectl untuk menjalankan perintah yang sama untuk menanyakan sumber daya gateway dari keduanya. Untuk menanyakan sumber daya gateway dari komponen Gateway API, jalankan perintah kubectl get gtw. Untuk menanyakan sumber daya gateway dari Istio, jalankan perintah kubectl get gw.

Langkah 3: Konfigurasikan aturan routing lalu lintas HTTP

Berikut ini menjelaskan cara menggunakan Gateway API untuk mengonfigurasi aturan routing lalu lintas HTTP. Aturan routing digunakan untuk mengekspos aplikasi httpbin di ingress gateway. Anda harus membuat gateway dan HTTPRoute di kluster ACK.

  1. Buat Gateway.

    1. Buat file gateway.yaml yang berisi konten berikut.

      Konfigurasi dalam file ini menunjukkan bahwa gateway diterapkan pada ingress gateway tertentu dan pendengar dengan host *.aliyun.com dibuat. Aturan routing dari semua namespace diizinkan untuk menggunakan pendengar. Pendengar menggunakan port 80 (HTTP). Ganti ${Name of the ingress gateway} dalam file YAML dengan nama ingress gateway yang telah diterapkan.

      Tampilkan File gateway.yaml

      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: Gateway
      metadata:
        name: gateway
        namespace: istio-system
      spec:
        addresses:  # Menentukan ingress gateway tempat gateway diterapkan.
        - type: Hostname
          value: istio-${Name of the ingress gateway}.istio-system.svc.cluster.local
        gatewayClassName: istio
        listeners:
        - allowedRoutes:
            namespaces:
              from: All
          hostname: '*.aliyun.com'  # Anda tidak dapat menentukan parameter ini sebagai asterisk (*) untuk mencocokkan semua host. Jika ingin mencocokkan semua host, biarkan bidang ini kosong.
          name: default
          port: 80
          protocol: HTTP
    2. Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk menerapkan gateway:

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

    1. Buat file http-route.yaml yang berisi konten berikut.

      Konfigurasi dalam file ini menunjukkan bahwa aturan routing menggunakan gateway bernama gateway di namespace istio-system. Semua pendengar dari gateway digunakan di sini karena Anda tidak menentukan nama pendengar yang ingin digunakan. Permintaan dengan path yang diawali dengan /get dirute ke port 8000 dari aplikasi httpbin di namespace yang sama.

      Tampilkan File http-route.yaml

      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: HTTPRoute
      metadata:
        name: http
        namespace: default
      spec:
        parentRefs:  # Rute dapat dilampirkan ke gateway yang berbeda.
        - name: gateway
          namespace: istio-system
        hostnames: ["*.aliyun.com"]
        rules:
        - matches:
          - path:
              type: PathPrefix
              value: /get
          backendRefs:  # Secara default, hanya layanan di namespace yang sama yang dapat dirujuk. Jika ingin menggunakan layanan di namespace berbeda, konfigurasikan ReferenceGrant. https://gateway-api.sigs.k8s.io/api-types/referencegrant/
          - name: httpbin 
            port: 8000
    2. Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk menerapkan HTTPRoute:

      kubectl apply -f http-route.yaml
  3. Jalankan perintah berikut untuk mengakses aplikasi httpbin menggunakan ingress gateway dan memeriksa apakah aturan routing lalu lintas HTTP berlaku:

    curl -I -HHost:httpbin.aliyun.com "http://${IP address of the ingress gateway}:80/get"

    Keluaran 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

    Dalam keluaran di atas, Anda dapat melihat bahwa 200 OK dikembalikan. Ini menunjukkan bahwa aturan routing lalu lintas HTTP berlaku.

Langkah 4: Konfigurasikan aturan routing lalu lintas HTTPS

Berikut ini menjelaskan cara menggunakan Gateway API untuk mengonfigurasi aturan routing lalu lintas HTTPS, mengekspos aplikasi httpbin di ingress gateway menggunakan aturan tersebut, dan melakukan terminasi Transport Level Security (TLS) di ingress gateway. Anda harus membuat gateway dan HTTPRoute di kluster ACK.

  1. Gunakan fitur manajemen sertifikat ASM untuk membuat sertifikat untuk host a.aliyun.com untuk menggunakan HTTPS. Tetapkan nama sertifikat menjadi myexample-credential. Untuk informasi lebih lanjut, lihat Langkah 1: Siapkan Sertifikat Server dan Kunci Pribadi untuk Beberapa Server.

  2. Buat Gateway.

    1. Buat file gateway-https.yaml yang berisi konten berikut.

      Ganti ${Name of the ingress gateway} dalam file YAML dengan nama ingress gateway yang telah diterapkan.

      Tampilkan File gateway-https.yaml

      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: Gateway
      metadata:
        name: gateway-https
        namespace: istio-system
      spec:
        addresses:  # Menentukan ingress gateway tempat gateway diterapkan.
        - type: Hostname
          value: istio-${Name of the ingress gateway}.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. Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk menerapkan gateway:

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

    1. Buat file httpbin-https.yaml yang berisi konten berikut:

      Tampilkan File 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. Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk menerapkan HTTPRoute:

      kubectl apply -f httpbin-https.yaml
  4. Jalankan perintah berikut untuk mengakses aplikasi httpbin menggunakan ingress gateway dan memeriksa apakah aturan routing lalu lintas HTTPS berlaku:

    curl -k -H Host:a.aliyun.com --resolve a.aliyun.com:443:{IP address of the deployed ingress gateway} https://a.aliyun.com/status/418

    Keluaran yang Diharapkan:

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

    Keluaran tersebut menunjukkan bahwa aturan routing lalu lintas HTTPS berlaku.