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:
MSE telah diaktifkan. Buka Konsol MSE untuk mengaktifkan MSE.
Komponen MSE Ingress Controller telah diinstal di kluster ACK. Anda dapat menginstalnya dengan salah satu metode berikut:
Saat pembuatan kluster: pilih MSE Ingress untuk Ingress pada langkah Component Configurations.
Untuk kluster yang sudah ada: instal komponen tersebut di halaman Add-ons. Untuk detailnya, lihat Instal komponen MSE Ingress Controller di halaman Add-ons.
Kluster menjalankan Kubernetes v1.16 atau yang lebih baru. Untuk informasi tentang pembuatan kluster, lihat Buat kluster ACK yang dikelola atau Buat kluster khusus ACK (tidak tersedia lagi). Untuk meningkatkan kluster yang sudah ada, lihat Perbarui versi Kubernetes kluster ACK.
Izin telah diberikan kepada komponen MSE Ingress Controller. Untuk detailnya, lihat Berikan izin kepada MSE Ingress Controller.
Klien kubectl telah terhubung ke kluster ACK. Untuk detailnya, lihat Dapatkan file kubeconfig kluster dan gunakan kubectl untuk terhubung ke kluster.
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.
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)
EOFJika Anda mengabaikan konfigurasi opsional, sistem akan menerapkan nilai default berikut:
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.
SLB: Secara otomatis membuat instans Server Load Balancer (SLB) yang menghadap Internet dengan spesifikasi
slb.s2.small.Security group: Secara otomatis membuat kelompok keamanan dasar.
Tabel berikut menjelaskan parameter dalam spec.
Parameter | Wajib | Default | Deskripsi |
| Tidak | - | Nama gateway cloud-native. |
| Tidak |
| Spesifikasi per replika. Misalnya, |
| 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
EOFKluster 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
EOFMetode 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 didengarkanTabel berikut menjelaskan nilai ingress.local.ingressClass.
Nilai | Perilaku |
Tidak dikonfigurasi | Gateway tidak mendengarkan resource Ingress apa pun. |
| Gateway mendengarkan resource Ingress yang dikaitkan dengan IngressClass bernama |
| Gateway mendengarkan semua resource Ingress. |
| Gateway mendengarkan resource Ingress yang dikaitkan dengan IngressClass bernama |
Nilai lainnya | Gateway mendengarkan resource Ingress yang dikaitkan dengan IngressClass yang ditentukan. |
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 testOutput yang diharapkan:
NAME STATUS AGE
test Listening 3m15sStatus Listening menegaskan bahwa gateway cloud-native sedang berjalan dan memantau resource Ingress yang dikaitkan dengan IngressClass mse.
Status berubah dalam urutan berikut:
| Status | Deskripsi |
|---|---|
| Pending | Gateway sedang dibuat. Proses ini memakan waktu sekitar 3 menit. |
| Running | Gateway telah dibuat dan berjalan. |
| Listening | Gateway berjalan dan mendengarkan resource Ingress di kluster. |
| Failed | Gateway 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
EOFBuat 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
EOFKluster 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
EOFVerifikasi hasil
Dapatkan alamat yang ditetapkan untuk Ingress: Output yang diharapkan:
kubectl get ingress ingressNAME CLASS HOSTS ADDRESS PORTS AGE ingress mse example.com 114.55.XX.XX 80 12mKirim permintaan uji menggunakan alamat Ingress: Output yang diharapkan: Respons
version:v1menegaskan bahwa traffic diarahkan melalui MSE Ingress ke layanan backendgo-httpbin.curl -H "host: example.com" <ADDRESS>/versionversion:v1
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-httpbinMenghapus MseIngressConfig juga akan menghapus gateway cloud-native MSE yang terkait. Hapus hanya jika Anda tidak lagi memerlukan gateway tersebut:
kubectl delete MseIngressConfig testLangkah selanjutnya
Konfigurasi MseIngressConfig — Sesuaikan vSwitch, instans SLB, dan security group untuk gateway Anda.
Manajemen MSE Ingress — Pelajari fitur tata kelola traffic lanjutan termasuk rilis canary dan pemisahan traffic.
Berikan izin kepada MSE Ingress Controller — Konfigurasikan kontrol akses detail halus untuk MSE Ingress Controller.