Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Service Mesh:Gateway API ile yönlendirme kurallarını tanımlama

Son Güncelleme:Oct 07, 2026

Gateway API, SIG-NETWORK topluluğu tarafından yönetilen açık kaynaklı bir projedir. İfade gücü yüksek, genişletilebilir ve rol odaklı arayüzler sunarak hizmet ağınızı geliştirir. Bir küme içindeki uygulamalara erişim için kullanılan yönlendirme kurallarına koşullu kısıtlamalar getirmek amacıyla Gateway API'yi kullanabilirsiniz.

Ön koşullar

Notlar

  • Sürüm uyumluluğu:

    • ASM 1,18, Gateway API v0.6.0 sürümünü destekler.

    • ASM 1,22 ve sonraki sürümler, Gateway API v1.1'i destekler ve GRPCRoute desteği ekler.

    • ASM 1,24 ve sonraki sürümler, Gateway API v1.2.0 sürümünü destekler.

  • Çok küme modunda, aynı ada sahip Gateway API kaynaklarını birden fazla veri düzlemi kümesindeki aynı ad alanına uygularsanız en son uygulanan kaynak öncekilerin üzerine yazar.

Adım 1: Gateway API CRD'lerini doğrulama

Gateway API bileşeni CRD'leri, Container Service for Kubernetes (ACK) kümelerinin v1.24 ve sonraki sürümlerinde varsayılan olarak yüklüdür.

CRD'lerin ACK kümenizde bulunduğunu doğrulamak için aşağıdaki komutu çalıştırın.

kubectl get crds | grep gateway.networking.k8s.io
  • CRD'ler yüklüyse çıktı aşağıdakine benzer görünür:

    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

    CRD sürümünü kontrol etmek için aşağıdaki komutu çalıştırın.

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

    Beklenen çıktı:

    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
  • Çıktı beklenen CRD'leri içermiyorsa ACK konsoluna gidin, Add-ons sayfasına gidin ve Gateway API bileşenini yükleyin. Daha fazla bilgi için bkz. Eklentileri yönetme.

Adım 2: Gateway API desteğini etkinleştirme

ASM örneğinizin kubeconfig ortamında, adı default olan ASMMeshConfig kaynağına enableGatewayAPI: true alanını ekleyin.

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

enableGatewayAPI anahtarını etkinleştirdikten sonra kontrol düzlemi ilgili Gateway API CRD'lerini oluşturur. Hem Gateway API hem de Istio, Gateway adında bir kaynak tanımlar; bu durum kubectl kullanırken çakışmalara neden olabilir. Bu sorunu çözmek için Gateway API'den Gateway kaynaklarını almak üzere kubectl get gtw komutunu, Istio'dan Gateway kaynaklarını almak üzere ise kubectl get gw komutunu kullanın.

Adım 3: HTTP yönlendirme kuralını yapılandırma

httpbin uygulamasını ağ geçidi üzerinden dışa açmak için Gateway API kullanarak bir HTTP yönlendirme kuralı yapılandırın. ACK kümenizde Gateway ve HTTPRoute kaynakları oluşturmanız gerekir.

  1. Bir Gateway kaynağı oluşturun.

    1. Aşağıdaki içeriğe sahip gateway.yaml adlı bir dosya oluşturun.

      Bu yapılandırma, Gateway kaynağını belirtilen ASM ağ geçidine uygular. HTTP protokolünü kullanan ve hostname değerini *.aliyun.com olarak ayarlayan 80 numaralı bağlantı noktasında bir dinleyici oluşturur. Bu ayar, tüm ad alanlarından gelen yönlendirme kurallarının bu dinleyiciye bağlanmasına olanak tanır. YAML dosyasında ${ASM_GATEWAY_NAME} ifadesini ASM ağ geçidinizin adıyla değiştirin.

      gateway.yaml

      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: Gateway
      metadata:
        name: gateway
        namespace: istio-system
      spec:
        addresses:  # Specifies the ASM gateway Service. This can be applied to the services of multiple ASM gateways.
        - type: Hostname
          value: istio-${ASM_GATEWAY_NAME}.istio-system.svc.cluster.local
        gatewayClassName: istio
        listeners:
        - allowedRoutes:
            namespaces:
              from: All
          hostname: '*.aliyun.com'  # Direct matching on "*" is not supported. To match all hosts, do not specify this field.
          name: default
          port: 80
          protocol: HTTP
    2. ACK kümenizin kubeconfig ortamında Gateway'i dağıtmak için aşağıdaki komutu çalıştırın.

      kubectl apply -f gateway.yaml
  2. Bir HTTPRoute kaynağı oluşturun.

    1. Aşağıdaki içeriğe sahip http-route.yaml adlı bir dosya oluşturun.

      Bu yapılandırma, HTTPRoute'u istio-system ad alanındaki gateway kaynağına bağlar. Belirli bir dinleyici adı belirtilmediğinden kural, ağ geçidindeki tüm uyumlu dinleyicilere uygulanır. /get yol ön ekiyle eşleşen istekler, aynı ad alanındaki httpbin hizmetinin 8000 numaralı bağlantı noktasına yönlendirilir.

      http-route.yaml

      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: HTTPRoute
      metadata:
        name: http
        namespace: default
      spec:
        parentRefs:  # This route can also be attached to different Gateways.
        - name: gateway
          namespace: istio-system
        hostnames: ["*.aliyun.com"]
        rules:
        - matches:
          - path:
              type: PathPrefix
              value: /get
          backendRefs:  # By default, you can reference only services in the same namespace. To use services in different namespaces, configure a ReferenceGrant resource. For more information, see https://gateway-api.sigs.k8s.io/api-types/referencegrant/
          - name: httpbin 
            port: 8000
    2. ACK kümenizin kubeconfig ortamında HTTPRoute'u dağıtmak için aşağıdaki komutu çalıştırın.

      kubectl apply -f http-route.yaml
  3. HTTP yönlendirme kuralının etkin olduğunu doğrulamak için ingress ağ geçidi üzerinden httpbin uygulamasına erişmek amacıyla aşağıdaki komutu çalıştırın. {INGRESS_GATEWAY_IP} ifadesini ingress ağ geçidinizin IP adresiyle değiştirin.

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

    Beklenen çıktı:

    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

    200 OK yanıtı, HTTP yönlendirme kuralının etkin olduğunu doğrular.

Adım 4: HTTPS yönlendirme kuralını yapılandırma

HTTPS yönlendirme kuralını yapılandırmak için Gateway API'yi kullanın. Bu kural, httpbin uygulamasını dışa açar ve TLS sonlandırmasını ASM ağ geçidinde gerçekleştirir. ACK kümesinde Gateway ve HTTPRoute kaynakları oluşturmanız gerekir.

  1. a.aliyun.com için bir HTTPS sertifikası oluşturmak üzere ASM'nin genel sertifika yönetimi özelliğini kullanın. Sertifikaya myexample-credential adını verin. Daha fazla bilgi için bkz. Adım 1: Birden çok ana bilgisayar için sunucu sertifikalarını ve özel anahtarları hazırlama.

  2. Bir Gateway kaynağı oluşturun.

    1. Aşağıdaki içeriğe sahip gateway-https.yaml adlı bir dosya oluşturun.

      YAML dosyasında ${ASM_GATEWAY_NAME} ifadesini ASM ağ geçidinizin adıyla değiştirin.

      gateway-https.yaml

      apiVersion: gateway.networking.k8s.io/v1beta1
      kind: Gateway
      metadata:
        name: gateway-https
        namespace: istio-system
      spec:
        addresses:  # Specifies the ASM gateway Service. This can be applied to the services of multiple ASM gateways.
        - 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. ACK kümenizin kubeconfig ortamında Gateway'i dağıtmak için aşağıdaki komutu çalıştırın.

      kubectl apply -f gateway-https.yaml
  3. Bir HTTPRoute kaynağı oluşturun.

    1. Aşağıdaki içeriğe sahip httpbin-https.yaml adlı bir dosya oluşturun.

      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. ACK kümenizin kubeconfig ortamında HTTPRoute'u dağıtmak için aşağıdaki komutu çalıştırın.

      kubectl apply -f httpbin-https.yaml
  4. HTTPS yönlendirme kuralının etkin olduğunu doğrulamak için ingress ağ geçidi üzerinden httpbin uygulamasına erişmek amacıyla aşağıdaki komutu çalıştırın. {INGRESS_GATEWAY_IP} ifadesini ingress ağ geçidinizin IP adresiyle değiştirin.

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

    Beklenen çıktı:

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

    Çıktı, HTTPS yönlendirme kuralının etkin olduğunu doğrular.