All Products
Search
Document Center

Container Service for Kubernetes:Mengakses layanan menggunakan Gateway dengan Inference Extension

Last Updated:Mar 18, 2026

Gateway API adalah API routing dan load balancing generasi berikutnya untuk Kubernetes. Topik ini menjelaskan cara mengonfigurasi rute HTTP, memodifikasi header permintaan, dan mendistribusikan permintaan berdasarkan bobot dalam kluster ACK Edge menggunakan komponen Gateway with Inference Extension.

Cara kerja

Komponen Gateway with Inference Extension didasarkan pada proyek Envoy Gateway dan mendukung semua fitur dasar Gateway API serta sumber daya ekstensi Envoy Gateway.

Arsitektur Envoy Gateway mencakup:

  • Control plane: Control plane terdiri dari komponen Envoy Gateway yang mendengarkan aturan lalu lintas dalam kluster, membuat dan mengelola instans proxy Envoy secara dinamis, serta memperbarui aturan pengalihan secara real time. Control plane tidak langsung meneruskan lalu lintas layanan.

  • Data plane: Data plane terdiri dari instans proxy Envoy yang memproses dan meneruskan lalu lintas layanan.

Dalam kluster ACK Edge, metode penerapan Envoy Gateway berbeda dibandingkan dengan kluster ACK standar:

Perbedaan

ACK Standar

ACK Edge

Metode eksposur layanan

LoadBalancer

NodePort

Penerapan control plane

Tingkat kluster

Satu set diterapkan per kelompok node

Penerapan data plane

Tingkat kluster

Diterapkan berdasarkan kelompok node

Banyak kelompok node

Berbagi satu gateway

Harus membuat gateway terpisah untuk setiap kelompok node

Topologi layanan

Tidak perlu konfigurasi

Memerlukan anotasi openyurt.io/topologyKeys

Penerapan saat ini dikonfigurasi dengan kebijakan distribusi kelompok node. Anda dapat menyesuaikan jumlah replika dalam manajemen komponen untuk memastikan bahwa setidaknya satu replika control plane berjalan di setiap kelompok node.

ACK Edge 中 Envoy Gateway 部署架构

Lingkup

Persiapan

Langkah 1: Buat aplikasi uji coba

Simpan contoh berikut sebagai backend.yaml dan jalankan perintah kubectl apply -f backend.yaml untuk membuat aplikasi uji coba: backend dan backend-2.

Untuk skenario ACK Edge, Anda harus mengonfigurasi topologi layanan. Tambahkan anotasi openyurt.io/topologyKeys: openyurt.io/nodepool ke Service untuk memastikan bahwa lalu lintas hanya diteruskan ke Pod dalam kelompok node yang sama. Untuk informasi selengkapnya, lihat Manajemen topologi layanan kelompok node.
apiVersion: v1
kind: ServiceAccount
metadata:
  name: backend
---
apiVersion: v1
kind: Service
metadata:
  name: backend
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool # Konfigurasikan topologi kelompok node
  labels:
    app: backend
    service: backend
spec:
  ports:
    - name: http
      port: 3000
      targetPort: 3000
  selector:
    app: backend
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backend
      version: v1
  template:
    metadata:
      labels:
        app: backend
        version: v1
    spec:
      serviceAccountName: backend
      containers:
        - image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/envoygateway-echo-basic:v20231214-v1.0.0-140-gf544a46e
          imagePullPolicy: IfNotPresent
          name: backend
          ports:
            - containerPort: 3000
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: backend-2
---
apiVersion: v1
kind: Service
metadata:
  name: backend-2
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool # Konfigurasikan topologi kelompok node
  labels:
    app: backend-2
    service: backend-2
spec:
  ports:
    - name: http
      port: 3000
      targetPort: 3000
  selector:
    app: backend-2
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backend-2
      version: v1
  template:
    metadata:
      labels:
        app: backend-2
        version: v1
    spec:
      serviceAccountName: backend-2
      containers:
        - image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/envoygateway-echo-basic:v20231214-v1.0.0-140-gf544a46e
          imagePullPolicy: IfNotPresent
          name: backend-2
          ports:
            - containerPort: 3000
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace

Langkah 2: Konfirmasi GatewayClass

Setelah Anda menginstal komponen Gateway with Inference Extension, sebuah GatewayClass dibuat secara default. Jalankan perintah berikut untuk mengonfirmasi:

kubectl get gatewayclass

Output yang diharapkan:

NAME          CONTROLLER                                      ACCEPTED   AGE
ack-gateway   gateway.envoyproxy.io/gatewayclass-controller   True       2m31s

Jika sumber daya GatewayClass tidak ditemukan, Anda dapat membuatnya secara manual. Simpan contoh berikut sebagai gatewayclass.yaml dan jalankan perintah kubectl apply -f gatewayclass.yaml untuk membuatnya.

apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: ack-gateway
spec:
  controllerName: gateway.envoyproxy.io/gatewayclass-controller

Langkah 3: Buat konfigurasi EnvoyProxy kustom

Dalam kluster ACK Edge, Anda dapat membuat konfigurasi EnvoyProxy kustom untuk setiap kelompok node guna menentukan kelompok node penjadwalan untuk Pod data plane dan metode eksposur layanan.

Ganti NPXXX dalam contoh berikut dengan ID kelompok node aktual Anda. Kemudian, simpan konfigurasi sebagai gateway-config.yaml dan jalankan perintah kubectl apply -f gateway-config.yaml.

Anda dapat menemukan ID kelompok node di halaman Node Management > Node Pools di Konsol ACK.
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
  name: custom-proxy-config
spec:
  provider:
    type: Kubernetes
    kubernetes:
      envoyDeployment:
        pod:
          nodeSelector:
            alibabacloud.com/nodepool-id: NPXXX  # Ganti dengan ID kelompok node aktual Anda
      envoyService:
        annotations:
          openyurt.io/topologyKeys: openyurt.io/nodepool  # Konfigurasikan topologi layanan
        type: NodePort  # ACK Edge menggunakan NodePort untuk mengekspos layanan

Konfigurasi ini mencakup tiga pengaturan utama untuk skenario ACK Edge:

Item konfigurasi

Deskripsi

nodeSelector

Menjadwalkan Pod data plane gateway ke kelompok node yang ditentukan

Anotasi openyurt.io/topologyKeys

Mengonfigurasi topologi layanan untuk memastikan trafik tetap berada dalam kelompok node

type: NodePort

Menggunakan NodePort untuk mengekspos layanan. LoadBalancer tidak digunakan dalam skenario edge.

Langkah 4: Buat resource Gateway

Simpan contoh berikut sebagai gateway.yaml dan jalankan perintah kubectl apply -f gateway.yaml.

Control plane komponen secara otomatis membuat deployment EnvoyProxy dan layanan NodePort berdasarkan resource Gateway. Komponen ini juga memulai listener pada port yang ditentukan di node tersebut.
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: ack-gateway
spec:
  gatewayClassName: ack-gateway
  listeners:
    - name: http
      protocol: HTTP
      port: 80
  infrastructure:
    parametersRef:
      group: gateway.envoyproxy.io
      kind: EnvoyProxy
      name: custom-proxy-config  # Asosiasikan dengan konfigurasi kustom yang dibuat di Langkah 3

Langkah 5: Dapatkan titik akhir gateway

Layanan gateway diekspos sebagai NodePort. Titik akhir layanan yang sesuai adalah alamat IP salah satu node dalam kelompok node dan port layanannya.

  1. Kueri port layanan.

    kubectl get service -n kube-system -l gateway.envoyproxy.io/owning-gateway-name=ack-gateway

    Output yang diharapkan:

    NAME                                 TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
    envoy-default-ack-gateway-7452df7d   NodePort   192.168.86.174   <none>        80:30364/TCP   19m
  2. Anda dapat mengatur variabel lingkungan host gateway. Ganti NODEIP dengan alamat IP salah satu node dalam kelompok node dan NODEPORT dengan nomor port yang diperoleh pada langkah sebelumnya.

    export GATEWAY_HOST=NODEIP:NODEPORT

Referensi