Ketika workload dalam kluster Container Service for Kubernetes (ACK) memerlukan akses HTTP atau HTTPS dari klien eksternal, Anda dapat mengeksposnya melalui sumber daya Ingress Kubernetes standar yang didukung oleh gateway Alibaba Cloud Service Mesh (ASM). Pendekatan ini memberikan penskalaan otomatis, percepatan Transport Layer Security (TLS), penutupan anggun instance Server Load Balancer (SLB), pemuatan sertifikat dinamis, serta fitur observabilitas dan keamanan bawaan tanpa perlu mengelola ingress controller terpisah.
Prasyarat
-
Kluster ACK telah ditambahkan ke instance ASM versi 1.16 atau lebih baru. Untuk informasi lebih lanjut, lihat Tambahkan kluster ke instance ASM.
-
Ingress gateway telah dikonfigurasi dengan port 80 dan 443 diekspos. Untuk informasi lebih lanjut, lihat Buat layanan ingress gateway.
-
Aplikasi httpbin telah diterapkan dalam kluster (tidak perlu diekspos melalui gateway). Untuk informasi lebih lanjut, lihat Terapkan aplikasi HTTPBin.
-
kubectl telah dikonfigurasi untuk terhubung ke kluster ACK.
Batasan
| Batasan | Detail |
|---|---|
| defaultBackend tidak didukung | Gateway ASM tidak mendukung bidang defaultBackend dalam sumber daya Ingress. Untuk informasi lebih lanjut, lihat Ingress. |
| Versi API Ingress | Hanya networking.k8s.io/v1 yang didukung. Pastikan bahwa lapisan data mendukung API Ingress v1 sebelum melanjutkan. |
Aktifkan Ingress pada gateway ASM
-
Masuk ke Konsol ASM. Di panel navigasi kiri, pilih .
-
Di halaman Mesh Management, klik nama instance ASM. Di panel navigasi kiri, pilih .
-
Di bagian Advanced features, klik Enable Ingress API access. Dalam pesan Submit yang muncul, klik OK.
Buat sumber daya Ingress
Ingress tidak mendukung port pendengaran khusus. Secara default, port 80 menangani lalu lintas HTTP dan port 443 menangani lalu lintas HTTPS. Pastikan kedua port tersebut diaktifkan pada gateway ASM.
Dua metode tersedia untuk menentukan gateway ASM sebagai ingress controller:
| Metode | Bidang / Anotasi | Status |
|---|---|---|
| Bidang ingressClassName (direkomendasikan) | ingressClassName: istio |
Pendekatan standar Kubernetes |
| Anotasi (usang) | kubernetes.io/ingress.class: istio |
Telah diusangkan oleh Kubernetes |
Gunakan bidang ingressClassName (direkomendasikan)
Bidang ingressClassName merujuk pada sumber daya IngressClass yang mengidentifikasi controller yang bertanggung jawab atas Ingress tersebut.
-
Buat file bernama ingress.yaml:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress spec: ingressClassName: istio rules: - host: httpbin.aliyun.com http: paths: - path: / pathType: Prefix backend: service: name: httpbin port: number: 8000 -
Terapkan sumber daya Ingress:
kubectl apply -f ingress.yaml
Gunakan anotasi (usang)
CATATAN: Anotasi kubernetes.io/ingress.class telah diusangkan oleh Kubernetes. Gunakan bidang ingressClassName untuk kompatibilitas ke depan.
-
Buat file bernama ingress.yaml:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: istio name: ingress spec: rules: - host: httpbin.aliyun.com http: paths: - path: /status pathType: Prefix backend: service: name: httpbin port: number: 8000 -
Terapkan sumber daya Ingress:
kubectl apply -f ingress.yaml
Verifikasi akses HTTP
-
Dapatkan alamat IP eksternal ingress gateway ASM:
export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway \ -o jsonpath='{.status.loadBalancer.ingress[0].ip}') -
Kirim permintaan ke layanan httpbin:
curl -H 'Host: httpbin.aliyun.com' "http://${INGRESS_HOST}/status/418"Output yang diharapkan:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/Output ini menegaskan bahwa Ingress berhasil mengarahkan lalu lintas ke aplikasi httpbin melalui gateway ASM.
Konfigurasikan TLS untuk akses HTTPS
Gateway ASM mendukung pemuatan sertifikat dinamis. Anda dapat memperbarui kunci privat, sertifikat server, dan sertifikat akar tanpa memulai ulang pod gateway. Beberapa Secret dapat dipasang secara bersamaan untuk melayani sertifikat berbeda.
Karena gateway ASM berjalan dalam namespace istio-system, Secret TLS yang dirujuk dalam sumber daya Ingress juga harus berada dalam namespace istio-system.
Siapkan sertifikat server dan kunci privat
Nama domain hanya dapat diakses setelah memiliki pendaftaran Penyedia Konten Internet (ICP). Contoh berikut menghasilkan sertifikat mandiri untuk aliyun.com.
Pilih salah satu skenario berikut:
Skenario 1: Hasilkan sertifikat baru
-
Buat sertifikat akar dan kunci privat:
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \ -subj '/O=myexample Inc./CN=aliyun.com' \ -keyout aliyun.root.key -out aliyun.root.crt -
Hasilkan sertifikat server dan kunci privat untuk
aliyun.com:openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes \ -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization" openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key \ -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt -
Buat TLS Secret dalam namespace
istio-system:kubectl create -n istio-system secret tls myexample-credential \ --key=aliyun.com.key --cert=aliyun.com.crt
Skenario 2: Gunakan sertifikat yang sudah ada
-
Berikan nama file sertifikat sebagai aliyun.com.crt dan kunci privat sebagai aliyun.com.key.
-
Buat TLS Secret dalam namespace
istio-system:kubectl create -n istio-system secret tls myexample-credential \ --key=aliyun.com.key --cert=aliyun.com.crt
Buat Ingress dengan TLS
-
Buat file bernama ingress-https.yaml:
CatatanJika Anda membuat Ingress di konsol ACK, Anda hanya dapat memilih Secret dari namespace tempat Ingress berada. Jika Ingress berada dalam namespace
default, salin Secretmyexample-credentialke namespacedefaultagar muncul dalam konsol:kubectl get secret myexample-credential -n istio-system -o yaml \ | sed 's/namespace: istio-system/namespace: default/' \ | kubectl apply -f -apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress annotations: kubernetes.io/ingress.class: istio spec: rules: - host: httpbin.aliyun.com http: paths: - backend: service: name: httpbin port: number: 8000 path: /status pathType: Prefix tls: - hosts: - httpbin.aliyun.com secretName: myexample-credential -
Terapkan sumber daya Ingress:
kubectl apply -f ingress-https.yaml
Verifikasi akses HTTPS
-
Kirim permintaan ke layanan httpbin melalui HTTPS:
curl -H 'Host: httpbin.aliyun.com' \ --resolve "httpbin.aliyun.com:443:${INGRESS_HOST}" \ "https://httpbin.aliyun.com:443/status/418" -kOutput yang diharapkan:
-=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/Output ini menegaskan bahwa Ingress berhasil mengarahkan lalu lintas ke aplikasi httpbin melalui HTTPS melalui gateway ASM.
Muat sertifikat tambahan
Untuk melayani beberapa domain dengan sertifikat berbeda, ulangi langkah persiapan sertifikat dan pembuatan Secret untuk setiap domain, lalu tambahkan entri ke dalam array tls dalam sumber daya Ingress Anda. Gateway ASM akan memuat sertifikat baru secara dinamis tanpa memulai ulang pod.
Catatan penggunaan
CATATAN: Ingress menangani routing HTTP/HTTPS standar. Untuk manajemen lalu lintas tingkat lanjut seperti pembagian lalu lintas, injeksi kesalahan, atau kebijakan otorisasi, gunakan sumber daya ASM Gateway dan VirtualService sebagai gantinya. Untuk informasi selengkapnya tentang Kubernetes Gateway API, lihat Ingress Gateways.