Ingress adalah objek resource Kubernetes yang digunakan untuk mengaktifkan akses eksternal ke layanan (Services) dalam kluster Kubernetes. Topik ini menjelaskan cara membuat, melihat, memperbarui, dan menghapus NGINX Ingress di Container Service for Kubernetes (ACK) menggunakan Konsol ACK atau kubectl.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Membuat kluster ACK. Lihat Buat kluster ACK yang dikelola.
Batasan
Jangan melanggar batasan berikut karena dapat memengaruhi apakah controller NGINX Ingress berjalan dengan benar:
Jangan menghapus layanan
kube-system/nginx-ingress-lb. Ini adalah layanan default yang digunakan oleh controller NGINX Ingress. Menghapusnya dapat menyebabkan controller gagal atau berhenti.Sesuaikan parameter komponen hanya melalui halaman detail kluster di Konsol ACK atau melalui API ACK. Metode lain dapat menyebabkan perilaku tak terduga atau kegagalan pembaruan.
Rekomendasi
Konfigurasikan fitur komponen melalui anotasi dan parameter, bukan melalui kode Snippet atau Lua. ACK tidak memberikan dukungan teknis untuk masalah yang disebabkan oleh konfigurasi Snippet.
Perbarui controller NGINX Ingress ke versi terbaru untuk menghindari bug dan kerentanan yang diketahui dari rilis open-source upstream.
Pada skenario beban tinggi, sebarkan setiap Pod controller NGINX Ingress pada node khusus. Lihat Sebarkan controller Ingress dalam arsitektur berkeandalan tinggi.
Untuk referensi penggunaan lengkap, lihat Catatan penggunaan controller NGINX Ingress.
Buat NGINX Ingress di Konsol ACK
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster target. Di panel kiri, pilih Network > Ingresses.
Pada halaman Ingresses, klik Create Ingress. Pada kotak dialog Create Ingress, konfigurasikan parameter berikut:
Parameter Deskripsi Contoh Gateway Type Pilih ALB, MSE Cloud-native Gateway, atau Nginx. Untuk perbandingan, lihat Perbandingan antara Nginx Ingress, ALB Ingress, dan MSE Ingress. Nginx Name Nama Ingress. nginx-ingress Ingress Class Kelas Ingress. nginx Rules Klik +Add Rule untuk menentukan aturan routing. Untuk setiap aturan, tentukan: Domain name (domain kustom), Path (jalur URL layanan backend), Rule (Prefix, Exact, atau ImplementationSpecific), Service (layanan backend), dan Port (port layanan yang diekspos). Klik + Add untuk menambahkan beberapa jalur untuk domain yang sama. Domain name: test.example.com, Path:/, Rule: ImplementationSpecific, Service:nginx-ingress-lb, Port:80TLS Settings Aktifkan otentikasi TLS. Tentukan nama domain dan pilih atau buat Secret (memerlukan Name, Cert, dan Key). Klik + Add untuk menyambungkan beberapa sertifikat TLS. Lihat Dukungan Ingress. Domain name: test.example.com, Secret:certMore Konfigurasikan fitur opsional: Canary release — arahkan traffic berdasarkan header permintaan ( nginx.ingress.kubernetes.io/canary-by-header,nginx.ingress.kubernetes.io/canary-by-header-value,nginx.ingress.kubernetes.io/canary-by-header-pattern), cookie (nginx.ingress.kubernetes.io/canary-by-cookie), atau bobot (nginx.ingress.kubernetes.io/canary-weight, bilangan bulat 0–100). Saat beberapa metode aktif, header permintaan memiliki prioritas lebih tinggi daripada cookie, dan cookie lebih tinggi daripada bobot. Protocol — atur protokol backend (nginx.ingress.kubernetes.io/backend-protocol): HTTP, HTTPS, gRPC, atau gRPCS. Rewrite Path — tulis ulang jalur permintaan sebelum meneruskan (nginx.ingress.kubernetes.io/rewrite-target).Canary release: berdasarkan header permintaan foo: bar(Exact Match); Protocol: gRPCAnnotation Tambahkan anotasi kustom berdasarkan nama dan nilai. Pilih dari daftar drop-down atau masukkan kunci kustom. Tidak ada batasan jumlah anotasi. Lihat Annotations. Name: nginx.ingress.kubernetes.io/proxy-body-size, Value:10mLabels Tambahkan label untuk menggambarkan karakteristik Ingress. Tidak ada batasan jumlah label. Name: foo, Value:barKlik OK.
Ingress akan muncul di halaman Ingresses.
Kelola Ingress yang sudah ada
Di halaman Ingresses, gunakan kolom Actions untuk mengelola Ingress yang sudah ada:
Update — edit konfigurasi Ingress
Edit YAML — modifikasi langsung YAML Ingress
Monitor — lihat metrik pemantauan
> Delete — hapus Ingress
Buat NGINX Ingress menggunakan kubectl
Langkah 1: Buat Deployment dan Service
Ingress mengarahkan traffic ke Service, sehingga Service harus sudah ada sebelum Anda membuat Ingress.
Buat file bernama
test-deployment-service.yamldengan konten berikut:apiVersion: apps/v1 kind: Deployment metadata: name: test-web1 labels: app: test-web1 spec: replicas: 1 selector: matchLabels: app: test-web1 template: metadata: labels: app: test-web1 spec: containers: - name: test-web1 imagePullPolicy: IfNotPresent image: registry.cn-hangzhou.aliyuncs.com/yilong/ingress-test:web1 ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: web1-service spec: type: ClusterIP selector: app: test-web1 ports: - port: 8080 targetPort: 8080Terapkan manifes:
kubectl apply -f test-deployment-service.yaml
Langkah 2: Buat Ingress
Format manifes Ingress berbeda antar versi Kubernetes. Perbedaan utamanya terletak pada field versi API dan struktur spesifikasi untuk menentukan layanan backend. Kedua contoh di bawah mengarahkan /foo dan /bar ke web1-service pada port 8080.
Kubernetes 1.19 dan yang lebih baru (menggunakan networking.k8s.io/v1 dengan pathType eksplisit):
Buat file bernama
test-ingress.yamldengan konten berikut:Field Deskripsi metadata.nameNama resource Ingress ( test-ingress).spec.rules[].hostNama domain untuk akses eksternal ( test-ingress.com). Traffic hanya diteruskan ke backend jikahostdanpathsesuai dengan permintaan inbound.spec.rules[].http.paths[].pathJalur URL yang dicocokkan ( /foo,/bar).spec.rules[].http.paths[].pathTypeMode pencocokan jalur. ImplementationSpecificmendelegasikan perilaku ke controller Ingress.backend.service.nameNama layanan backend ( web1-service).backend.service.port.numberPort layanan tempat traffic diteruskan ( 8080).apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-ingress namespace: default spec: rules: - host: test-ingress.com http: paths: - path: /foo backend: service: name: web1-service port: number: 8080 pathType: ImplementationSpecific - path: /bar backend: service: name: web1-service port: number: 8080 pathType: ImplementationSpecificField utama:
Versi Kubernetes sebelum 1.19 (menggunakan networking.k8s.io/v1beta1 tanpa pathType):
Buat file bernama
test-ingress.yamldengan konten berikut:apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: test-ingress namespace: default spec: rules: - host: test-ingress.com http: paths: - path: /foo backend: serviceName: web1-service servicePort: 8080 - path: /bar backend: serviceName: web1-service servicePort: 8080Terapkan manifes:
kubectl apply -f test-ingress.yaml
Langkah 3: Verifikasi Ingress
Jalankan perintah berikut untuk memastikan Ingress berhasil dibuat:
kubectl get ingressLihat, perbarui, dan hapus Ingress
| Operasi | Perintah |
|---|---|
| Lihat semua Ingress | kubectl get ingress |
| Perbarui Ingress | kubectl edit ingress <Ingress name> |
| Hapus Ingress | kubectl delete ingress <Ingress name> |