Instal pengontrol NGINX Ingress independen melalui Helm bersamaan dengan pengontrol Add-ons bawaan untuk membuat titik masuk traffic khusus bagi layanan atau lingkungan berbeda, mengisolasi traffic menggunakan instans SLB publik dan Internal-facing SLB yang terpisah, atau menyediakan konfigurasi dan versi pengontrol berbeda untuk aplikasi tertentu—sehingga mencapai isolasi kesalahan dan konfigurasi lengkap yang tidak dimungkinkan oleh satu pengontrol bersama.
Pengontrol yang diinstal melalui Helm berbeda dari pengontrol Add-ons bawaan:
Fitur terintegrasi: Pengontrol Add-ons mencakup fitur tambahan seperti rilis canary, logging dan pemantauan, serta inspeksi kluster.
Tanggung jawab: Anda mengelola siklus hidup pengontrol yang diinstal melalui Helm, termasuk peningkatan, konfigurasi, dan troubleshooting.
Cara kerja
Setiap pengontrol memiliki nama IngressClass yang unik. Atur bidang spec.ingressClassName dalam Ingress untuk menargetkan pengontrol tertentu. Hanya pengontrol yang sesuai yang menerapkan aturan tersebut, sehingga mencapai isolasi traffic.
Contoh: mengisolasi traffic publik dan lalu lintas internal.
Prasyarat
Kluster menjalankan versi 1.22 atau lebih baru.
Versi komponen untuk kluster versi 1.20 atau lebih lama telah EOL ([Pengumuman Produk] Akhir Masa Maintenance untuk NGINX Ingress controller v1.2 dan Lebih Lama). Tingkatkan kluster ACK secara manual jika diperlukan.
Terapkan pengontrol Ingress baru menggunakan Helm
-
Pada halaman ACK Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
Klik Deploy untuk menginstal ack-ingress-nginx-v1.
Konfigurasikan parameter utama berikut:
Parameter
Deskripsi
Application name
Nama harus unik dalam kluster.
PentingMenjadi awalan nama Service:
<Application Name>-ack-ingress-nginx-v1-controller(Internet-facing) atau<Application Name>-ack-ingress-nginx-v1-controller-internal(internal-facing). Pembuatan gagal jika total panjang nama melebihi 63 karakter.Chart
Cari dan pilih ack-ingress-nginx-v1.
Chart ack-ingress-nginx tidak lagi dipelihara.
Chart Version
Untuk kluster versi 1.24 atau lebih baru: 4.0.22 atau lebih baru.
Untuk kluster versi 1.22: versi dari 4.0.16 (inklusif) hingga 4.0.22 (eksklusif).
Parameters
Bawaan: diterapkan sebagai Deployment dengan 2 replika, membuat Service LoadBalancer Internet-facing yang terikat ke instans CLB.
Sesuaikan nilai bawaan di parameter ack-ingress-nginx-v1.
Contoh ini menerapkan pengontrol internal-facing. Atur
controller.service.external.enabledkefalsedancontroller.service.internal.enabledketrue.PentingPastikan controller.ingressClassResource.name dan controller.ingressClassResource.controllerValue unik dalam kluster.
Pada halaman Helm, catat Namespace (di bawah Basic Information) serta nama IngressClass dan nama Service (di bawah Resource) untuk digunakan nanti.
Verifikasi isolasi traffic
Skenario ini menggunakan pengontrol publik dan internal-facing terpisah untuk memverifikasi isolasi:
Pengontrol bawaan: diterapkan dari Add-ons, terikat ke instans SLB publik.
Jika belum dikonfigurasi, lihat Buat dan gunakan NGINX Ingress untuk mengekspos layanan.
Pengontrol baru: terikat ke instans SLB internal-facing, hanya dapat diakses dalam VPC.
Terapkan aplikasi contoh dan buat aturan Ingress yang hanya menargetkan pengontrol baru.
Langkah 1: Terapkan aplikasi uji coba
Buat file
nginx.yaml.Contoh: Deployment dan Service NGINX.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: run: nginx template: metadata: labels: run: nginx spec: containers: - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 imagePullPolicy: Always name: nginx ports: - containerPort: 80 protocol: TCP restartPolicy: Always --- apiVersion: v1 kind: Service metadata: name: nginx spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: run: nginx sessionAffinity: None type: NodePortTerapkan aplikasi contoh.
kubectl apply -f nginx.yaml
Langkah 2: Buat dan ikat aturan Ingress
Buat file
ingress.yaml.apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx spec: # Ubah nilai berikut menjadi nama IngressClass yang Anda konfigurasi sebelumnya (controller.ingressClassResource.name). ingressClassName: "<YOUR_INGRESS_CLASS>" rules: # Nama domain berikut hanya untuk tujuan pengujian. Ganti dengan nama domain aktual Anda di lingkungan produksi. - host: foo.bar.com http: paths: - path: / backend: service: name: nginx port: number: 80 pathType: ImplementationSpecificBuat aturan Ingress.
kubectl apply -f ingress.yaml
Langkah 3: Uji akses
Dapatkan alamat IP SLB masing-masing pengontrol.
Alamat IP SLB pengontrol Internet-facing bawaan:
PUBLIC_IP=$(kubectl get svc -n kube-system nginx-ingress-lb -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo "Public Ingress IP: $PUBLIC_IP"Alamat IP SLB pengontrol internal-facing baru:
# Ganti <YourNamespace> dengan namespace pengontrol baru (misalnya, default). # Ganti <YourChartName> dengan nama aplikasi (nama rilis) pengontrol baru. INTERNAL_IP=$(kubectl get svc -n <YourNamespace> <YourChartName>-ack-ingress-nginx-v1-controller-internal -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo "Internal Ingress IP: $INTERNAL_IP"
Akses aplikasi melalui pengontrol internal-facing (diharapkan berhasil).
Dari terminal dalam VPC, kirim permintaan. Kode status
200mengonfirmasi bahwa pengontrol internal-facing merutekan traffic dengan benar.# Ganti dengan alamat IP internal aktual. curl -o /dev/null -s -w "%{http_code}\n" -H "Host: foo.bar.com" http://$INTERNAL_IPAkses aplikasi melalui pengontrol Internet-facing (diharapkan gagal).
Kirim permintaan
curl. Tanggapan404 Not Foundmengonfirmasi bahwa pengontrol Internet-facing mengabaikan aturan Ingress—isolasi traffic berfungsi.# Ganti dengan alamat IP Internet-facing aktual. curl -H "Host: foo.bar.com" http://$PUBLIC_IP
Penerapan produksi
Perencanaan resource: Konfigurasikan parameter berikut untuk ketersediaan tinggi:
Konfigurasikan beberapa replika:
controller.replicaCountAtur permintaan dan batas resource yang sesuai:
controller.resources.requestsdancontroller.resources.limitsPod anti-affinity: Tambahkan aturan
podAntiAffinitydi bawahcontroller.affinityuntuk menjadwalkan Pod pada node berbeda.
Pemantauan: Atur
controller.metrics.enabled: truedancontroller.metrics.serviceMonitor.enabled: true. Integrasikan dengan Prometheus dan pantau metrik seperti latensi permintaan, laju error (4xx/5xx), serta konfigurasikan aturan alert.Kinerja: Untuk skenario latensi rendah, gunakan instans NLB dalam konfigurasi Service:
Service internal-facing:
controller.service.internal.loadBalancerClass: "alibabacloud.com/nlb"Service Internet-facing:
controller.service.loadBalancerClass: "alibabacloud.com/nlb"
Maintenance versi:
Terapkan perbaikan keamanan sesuai catatan rilis komponen NGINX Ingress controller.
Untuk isolasi lebih kuat, batasi akses backend per pengontrol dengan Network Policy.
Lampiran: Parameter komponen utama
Parameter | Deskripsi |
| Repository image pengontrol NGINX Ingress. |
| Versi gambar pengontrol NGINX Ingress. |
| Nama IngressClass yang unik dalam kluster. Tidak boleh |
| Nilai kelas pengontrol yang unik. Tidak boleh |
| Jumlah replika Pod pengontrol. Atur ke 2+ untuk ketersediaan tinggi. |
| Apakah akan membuat Service LoadBalancer (Internet-facing atau internal-facing) untuk mengekspos pengontrol. |
| Jika |
| Jika |
| Mode penyebaran pengontrol Ingress: |
| Identifikasi pemilihan leader di antara replika pengontrol. Hanya Leader yang dapat memperbarui status resource Ingress. Harus unik saat menerapkan beberapa pengontrol dalam namespace yang sama. |
| Jika |
| Jika Disarankan saat |
| Jenis SLB untuk Service Internet-facing. |
| Jenis SLB untuk Service internal-facing. |