全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan MSE Ingress untuk mengakses aplikasi di kluster ACK

更新时间:Mar 01, 2026

Standard NGINX Ingress Controller tidak mendukung routing traffic yang kompleks, protokol lapisan aplikasi ganda seperti Dubbo dan QUIC, atau load balancing traffic Lapisan 7. MSE Ingress adalah implementasi Ingress yang dibangun di atas gateway cloud-native Alibaba Cloud Microservices Engine (MSE). MSE Ingress kompatibel dengan NGINX Ingress dan anotasi NGINX Ingress, serta mengatasi keterbatasan tersebut melalui kemampuan berikut:

  • Dukungan protokol: Menangani Dubbo, QUIC, dan protokol lapisan aplikasi lainnya selain HTTP/HTTPS.

  • Tata kelola traffic: Menyediakan rilis canary untuk beberapa versi layanan dan aturan routing traffic yang fleksibel.

  • Proteksi keamanan: Menyertakan fitur keamanan bawaan di tingkat gateway.

  • Ketersediaan tinggi: Berjalan sebagai gateway terkelola penuh dengan replika ganda.

Topik ini menjelaskan cara mengonfigurasi MSE Ingress untuk mengarahkan traffic eksternal ke aplikasi dalam kluster Container Service for Kubernetes (ACK). Untuk informasi lebih lanjut tentang MSE Ingress dan cara kerjanya, lihat Manajemen MSE Ingress.

Prasyarat

Sebelum memulai, pastikan bahwa:

Langkah 1: Buat gateway cloud-native MSE

MseIngressConfig adalah CustomResourceDefinition (CRD) yang disediakan oleh MSE Ingress Controller. CRD ini mengelola siklus hidup dan konfigurasi global gateway cloud-native MSE.

Penting

Satu MseIngressConfig dipetakan ke satu gateway cloud-native. Jika Anda memerlukan beberapa gateway, buat beberapa MseIngressConfig. Menghapus MseIngressConfig juga akan menghapus gateway cloud-native yang dipetakan, kecuali dalam skenario penggunaan ulang.

Jalankan perintah berikut untuk membuat gateway bernama mse-ingress dengan tiga replika. Setiap replika menggunakan 2 vCPU dan memori 4 GB.

cat << EOF | kubectl apply -f -
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
  name: test
spec:
  name: mse-ingress                # Nama gateway cloud-native
  common:
    instance:
      spec: 2c4g                   # 2 vCPU, memori 4 GB per replika (default: 4c8g)
      replicas: 3                  # Jumlah replika gateway (default: 3)
EOF
Catatan

Jika Anda mengabaikan konfigurasi opsional, sistem akan menerapkan nilai default berikut:

  1. vSwitch: Secara otomatis memilih vSwitch dari node Kubernetes yang dijadwalkan oleh MSE Ingress Controller. Hanya satu vSwitch yang dikonfigurasi. Untuk lingkungan produksi, konfigurasikan dua vSwitch secara manual.

  2. SLB: Secara otomatis membuat instans Server Load Balancer (SLB) yang menghadap Internet dengan spesifikasi slb.s2.small.

  3. Security group: Secara otomatis membuat kelompok keamanan dasar.

Tabel berikut menjelaskan parameter dalam spec.

Parameter

Wajib

Default

Deskripsi

spec.name

Tidak

-

Nama gateway cloud-native.

spec.common.instance.spec

Tidak

4c8g

Spesifikasi per replika. Misalnya, 2c4g berarti 2 vCPU dan memori 4 GB.

spec.common.instance.replicas

Tidak

3

Jumlah replika gateway.

Untuk referensi parameter lengkap, lihat Konfigurasi MseIngressConfig.

Langkah 2: Buat resource IngressClass

Resource IngressClass menyatakan controller Ingress mana yang menangani sekumpulan resource Ingress. Kaitkan IngressClass dengan MseIngressConfig yang dibuat pada Langkah 1 agar gateway cloud-native memproses aturan Ingress yang sesuai.

Pilih salah satu metode berikut berdasarkan skenario Anda.

Metode 1: Gunakan resource IngressClass Kubernetes (disarankan)

Gunakan metode ini untuk layanan baru yang mengakses MSE Ingress. Jalankan salah satu perintah berikut berdasarkan versi Kubernetes kluster Anda.

Kluster yang menjalankan versi Kubernetes sebelum v1.19

cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1beta1
kind: IngressClass
metadata:
  name: mse
spec:
  controller: mse.alibabacloud.com/ingress
  parameters:
    apiGroup: mse.alibabacloud.com       # Grup API MseIngressConfig
    kind: MseIngressConfig               # Jenis resource
    name: test                           # Nama MseIngressConfig dari Langkah 1
EOF

Kluster yang menjalankan Kubernetes v1.19 atau yang lebih baru

cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: mse
spec:
  controller: mse.alibabacloud.com/ingress
  parameters:
    apiGroup: mse.alibabacloud.com       # Grup API MseIngressConfig
    kind: MseIngressConfig               # Jenis resource
    name: test                           # Nama MseIngressConfig dari Langkah 1
EOF

Metode 2: Gunakan resource MseIngressConfig (untuk migrasi)

Gunakan metode ini saat melakukan migrasi dari NGINX Ingress ke MSE Ingress, atau dalam skenario di mana resource IngressClass tidak dapat dibuat. Selama migrasi, NGINX Ingress dan MSE Ingress harus mendengarkan resource IngressClass yang sama. Metode ini memungkinkan Anda mengonfigurasi IngressClass langsung dalam MseIngressConfig, sehingga menghindari konflik nama IngressClass.

Tambahkan bidang ingressClass ke MseIngressConfig yang dibuat pada Langkah 1:

apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
  name: test
spec:
  name: mse-ingress
  common:
    instance:
      spec: 2c4g
      replicas: 3
  ingress:
    local:
      ingressClass: mse                  # Nama IngressClass yang akan didengarkan

Tabel berikut menjelaskan nilai ingress.local.ingressClass.

Nilai

Perilaku

Tidak dikonfigurasi

Gateway tidak mendengarkan resource Ingress apa pun.

mse

Gateway mendengarkan resource Ingress yang dikaitkan dengan IngressClass bernama mse.

"" (string kosong)

Gateway mendengarkan semua resource Ingress.

nginx

Gateway mendengarkan resource Ingress yang dikaitkan dengan IngressClass bernama nginx, serta resource Ingress yang tidak dikaitkan dengan IngressClass apa pun.

Nilai lainnya

Gateway mendengarkan resource Ingress yang dikaitkan dengan IngressClass yang ditentukan.

Catatan

Jika resource IngressClass Kubernetes (Metode 1) dan parameter ini dikonfigurasi bersamaan, resource IngressClass Kubernetes memiliki prioritas lebih tinggi.

Verifikasi status gateway

Jalankan perintah berikut untuk memeriksa status MseIngressConfig:

kubectl get MseIngressConfig test

Output yang diharapkan:

NAME   STATUS      AGE
test   Listening   3m15s

Status Listening menegaskan bahwa gateway cloud-native sedang berjalan dan memantau resource Ingress yang dikaitkan dengan IngressClass mse.

Status berubah dalam urutan berikut:

StatusDeskripsi
PendingGateway sedang dibuat. Proses ini memakan waktu sekitar 3 menit.
RunningGateway telah dibuat dan berjalan.
ListeningGateway berjalan dan mendengarkan resource Ingress di kluster.
FailedGateway tidak valid. Jalankan kubectl describe MseIngressConfig test dan periksa bidang Message dalam Status untuk mengidentifikasi penyebabnya.

Langkah 3: Arahkan traffic ke aplikasi

Deploy layanan backend contoh

Jalankan perintah berikut untuk mendeploy layanan go-httpbin:

cat << EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: go-httpbin
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: go-httpbin
  template:
    metadata:
      labels:
        app: go-httpbin
        version: v1
    spec:
      containers:
        - image: specialyang/go-httpbin:v3
          args:
            - "--port=8090"            # Aplikasi mendengarkan di port 8090
            - "--version=v1"           # Melaporkan versi v1
          imagePullPolicy: Always
          name: go-httpbin
          ports:
            - containerPort: 8090
---
apiVersion: v1
kind: Service
metadata:
  name: go-httpbin
  namespace: default
spec:
  ports:
    - port: 80                         # Port layanan yang diekspos ke Ingress
      targetPort: 8090                 # Meneruskan ke port kontainer 8090
      protocol: TCP
  selector:
    app: go-httpbin
EOF

Buat resource Ingress

Jalankan salah satu perintah berikut untuk membuat resource Ingress. Ingress mengarahkan permintaan untuk example.com/version ke layanan go-httpbin.

Kluster yang menjalankan versi Kubernetes sebelum v1.19

cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress
  namespace: default
spec:
  ingressClassName: mse                  # Mengaitkan dengan IngressClass MSE
  rules:
   - host: example.com
     http:
      paths:
      - path: /version
        backend:
          serviceName: go-httpbin
          servicePort: 80
EOF

Kluster yang menjalankan Kubernetes v1.19 atau yang lebih baru

cat << EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  namespace: default
spec:
  ingressClassName: mse                  # Mengaitkan dengan IngressClass MSE
  rules:
  - host: example.com
    http:
      paths:
      - backend:
          service:
            name: go-httpbin
            port:
              number: 80
        path: /version
        pathType: Prefix
EOF

Verifikasi hasil

  1. Dapatkan alamat yang ditetapkan untuk Ingress: Output yang diharapkan:

       kubectl get ingress ingress
       NAME      CLASS   HOSTS            ADDRESS         PORTS   AGE
       ingress   mse     example.com      114.55.XX.XX   80      12m
  2. Kirim permintaan uji menggunakan alamat Ingress: Output yang diharapkan: Respons version:v1 menegaskan bahwa traffic diarahkan melalui MSE Ingress ke layanan backend go-httpbin.

       curl -H "host: example.com" <ADDRESS>/version
       version:v1
Catatan

Jika bidang ADDRESS kosong, gateway cloud-native mungkin masih dalam proses provisioning. Tunggu beberapa menit lalu jalankan kembali kubectl get ingress ingress. Jika masalah berlanjut, periksa status MseIngressConfig dengan kubectl describe MseIngressConfig test.

Bersihkan resource

Untuk menghapus resource contoh yang dibuat dalam tutorial ini, jalankan perintah berikut:

kubectl delete ingress ingress
kubectl delete service go-httpbin
kubectl delete deployment go-httpbin
Peringatan

Menghapus MseIngressConfig juga akan menghapus gateway cloud-native MSE yang terkait. Hapus hanya jika Anda tidak lagi memerlukan gateway tersebut:

kubectl delete MseIngressConfig test

Langkah selanjutnya