Anda dapat mengonfigurasi NGINX Ingress Controller untuk akses publik, privat, atau ganda guna menyesuaikan klien di lingkungan jaringan yang berbeda.
Cara kerja
Dalam sebuah kluster, instance Server Load Balancer (SLB) menerima permintaan klien dan meneruskannya ke beban kerja NGINX Ingress Controller. Beban kerja tersebut kemudian meneruskan permintaan ke Layanan lainnya.
Mengonfigurasi NGINX Ingress untuk akses publik dan privat sekaligus
Untuk mengaktifkan akses publik dan privat secara bersamaan, terapkan dua Layanan yang menargetkan Pod backend NGINX Ingress Controller: satu dikaitkan dengan instance SLB publik dan yang lainnya dengan instance SLB internal (privat).
Periksa jenis jaringan instance SLB Anda saat ini.
kubectl describe service -n kube-system nginx-ingress-lb | grep "service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type"Jika keluaran berisi
intranet, maka SLB tersebut bersifat internal. Jika tidak, SLB tersebut bersifat publik.Buat Layanan baru untuk memastikan tersedianya kedua jenis akses, yaitu publik dan internal.
Buat file bernama
nginx-ingress-lb-new.yaml. Lalu, jalankankubectl apply -f nginx-ingress-lb-new.yamluntuk membuat Layanan tersebut.Layanan Internal
apiVersion: v1 kind: Service metadata: name: nginx-ingress-lb-intranet namespace: kube-system labels: app: nginx-ingress-lb annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: intranet # Menentukan bahwa jenis alamat instance SLB bersifat internal. spec: type: LoadBalancer externalTrafficPolicy: "Cluster" ports: - port: 80 name: http targetPort: 80 - port: 443 name: https targetPort: 443 selector: app: ingress-nginxLayanan Publik
apiVersion: v1 kind: Service metadata: name: nginx-ingress-lb-internet namespace: kube-system labels: app: nginx-ingress-lb spec: type: LoadBalancer externalTrafficPolicy: "Cluster" ports: - port: 80 name: http targetPort: 80 - port: 443 name: https targetPort: 443 selector: app: ingress-nginxVerifikasi bahwa Layanan baru berfungsi dengan benar. Ganti
<service-name>dalam perintah berikut dengan nama Layanan baru. Tanggapan200menunjukkan bahwa Layanan tersebut berfungsi dengan baik.curl -s -o /dev/null -w "%{http_code}\n" http://$(kubectl get service -n kube-system <service-name> -o jsonpath='{.status.loadBalancer.ingress[0].ip}')Ambil IP eksternal Layanan baru dan konfigurasikan rekaman DNS sesuai kebutuhan. Ganti
<service-name>dalam perintah berikut dengan nama Layanan baru.kubectl get service <service-name>Layanan Internal
Masuk ke Alibaba Cloud DNS-Private Zone. Pada tab , klik Add Zone. Jika Anda telah menambahkan zona, lewati ke langkah c.
Pada bidang Authoritative Zone, masukkan nama domain. Pertahankan pengaturan default untuk opsi lainnya, lalu klik OK.
Klik zona target. Pada tab Settings, klik Add Record. Masukkan nilai dari tabel berikut, pertahankan pengaturan default untuk parameter lainnya, lalu klik OK.
Parameter
Nilai
Record Type
A
Hostname
Masukkan awalan subdomain sesuai kebutuhan.
Record Value
Alamat IP Layanan baru.
Kembali ke daftar User Defined Zones. Pada kolom Actions untuk zona target, klik Effective Scope. Di bawah opsi Effective in VPCs, pilih virtual private cloud (VPC) tempat kluster Container Service for Kubernetes (ACK) Anda berada, lalu klik OK.
Layanan Publik
Masuk ke Alibaba Cloud DNS-Public Zone. Klik zona target untuk membuka halaman Settings. Klik tombol Add Record.
Masukkan nilai dari tabel berikut. Pertahankan pengaturan default untuk parameter lainnya, lalu klik OK.
Parameter
Nilai
Record Type
A
Hostname
Masukkan awalan subdomain sesuai kebutuhan.
Record Value
Alamat IP Layanan baru.
Mengubah jenis jaringan
Prosedur ini melibatkan penghapusan dan pembuatan ulang Layanan, yang akan mengganti instance SLB yang mendasarinya. Hal ini akan mengganggu sementara trafik ke NGINX Ingress. Instance SLB asli dan alamat IP-nya tidak dapat dipulihkan.
Konfirmasi bahwa instance SLB yang ada tidak memiliki trafik:
Masuk ke Konsol ACK, lalu klik kluster target. Di panel navigasi kiri, pilih . Temukan Layanan
nginx-ingress-lbdi namespacekube-systemdan catat External IP-nya.Masuk ke Konsol Classic Load Balancer (CLB). Di bagian atas halaman, pilih wilayah yang sama dengan kluster Anda. Temukan instance CLB dengan IP Address yang sesuai dengan alamat IP dari langkah sebelumnya. Klik instance CLB tersebut, buka tab Monitoring, dan pastikan instance tersebut tidak memiliki koneksi aktif sebelum melanjutkan.
Hapus Layanan saat ini yang digunakan oleh NGINX Ingress Controller.
kubectl delete svc -n kube-system nginx-ingress-lbBuat Layanan baru. Simpan manifes yang sesuai di bawah ini sebagai
nginx-ingress-lb.yamldan terapkan dengan menjalankan perintahkubectl apply -f nginx-ingress-lb.yaml.PentingLayanan baru harus diberi nama
nginx-ingress-lb.Layanan Internal
apiVersion: v1 kind: Service metadata: name: nginx-ingress-lb namespace: kube-system labels: app: nginx-ingress-lb annotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: intranet # Menentukan bahwa jenis alamat instance SLB bersifat internal. spec: type: LoadBalancer externalTrafficPolicy: "Cluster" ports: - port: 80 name: http targetPort: 80 - port: 443 name: https targetPort: 443 selector: app: ingress-nginxLayanan Publik
apiVersion: v1 kind: Service metadata: name: nginx-ingress-lb namespace: kube-system labels: app: nginx-ingress-lb spec: type: LoadBalancer externalTrafficPolicy: "Cluster" ports: - port: 80 name: http targetPort: 80 - port: 443 name: https targetPort: 443 selector: app: ingress-nginxUji Layanan baru. Kode tanggapan
200menunjukkan bahwa Layanan tersebut berfungsi dengan benar.curl -s -o /dev/null -w "%{http_code}\n" http://$(kubectl get service -n kube-system nginx-ingress-lb -o jsonpath='{.status.loadBalancer.ingress[0].ip}')Jalankan
kubectl get service nginx-ingress-lb, lalu catat IP eksternal Layanan tersebut. Kemudian, konfigurasikan resolusi DNS berdasarkan jenis Layanan baru:Layanan Internal
Masuk ke Alibaba Cloud DNS-Private Zone. Pada tab , klik Add Zone. Jika Anda telah menambahkan zona, lewati ke langkah c.
Pada bidang Authoritative Zone, masukkan nama domain. Pertahankan pengaturan default untuk opsi lainnya, lalu klik OK.
Klik zona target. Pada tab Settings, klik Add Record. Masukkan nilai dari tabel berikut, pertahankan pengaturan default untuk parameter lainnya, lalu klik OK.
Parameter
Nilai
Record Type
A
Hostname
Masukkan awalan subdomain sesuai kebutuhan.
Record Value
Alamat IP Layanan baru.
Kembali ke daftar User Defined Zones. Pada kolom Actions untuk zona target, klik Effective Scope. Di bawah opsi Effective in VPCs, pilih virtual private cloud (VPC) tempat kluster Container Service for Kubernetes (ACK) Anda berada, lalu klik OK.
Layanan Publik
Masuk ke Alibaba Cloud DNS-Public Zone. Klik zona target untuk membuka halaman Settings. Klik tombol Add Record.
Masukkan nilai dari tabel berikut. Pertahankan pengaturan default untuk parameter lainnya, lalu klik OK.
Parameter
Nilai
Record Type
A
Hostname
Masukkan awalan subdomain sesuai kebutuhan.
Record Value
Alamat IP Layanan baru.
FAQ
Mengapa saya tidak dapat membuat Layanan baru sebelum menghapus yang lama?
Hal ini tidak dimungkinkan karena NGINX Ingress Controller mengharapkan untuk menemukan Layanan dengan nama default tertentu nginx-ingress-lb selama peningkatan atau rekonsiliasi. Karena nama Layanan harus unik dalam suatu namespace, Anda tidak dapat membuat Layanan baru dengan nama tersebut selama Layanan lama masih ada. Hapus terlebih dahulu Layanan lama tersebut.
Mengapa alamat IP akses klien berbeda dari titik akhir yang ditampilkan di konsol?
Endpoint yang ditampilkan pada halaman Ingresses di Konsol ACK adalah alamat IP instance SLB yang hanya dikaitkan dengan Layanan bernama nginx-ingress-lb. Jika Anda telah mengonfigurasi beberapa Layanan LoadBalancer, konsol tidak akan menampilkan alamat IP-nya, meskipun Ingress Controller akan meneruskan trafik dari semuanya dengan benar. Alamat IP yang sebenarnya digunakan klien bergantung pada konfigurasi DNS Anda, yang mungkin mengarah ke instance SLB yang berbeda dari yang ditampilkan di konsol.
Jika Anda menghapus dan membuat ulang Layanan nginx-ingress-lb, Anda harus memperbarui sumber daya Ingress untuk memicu penyegaran titik akhir yang ditampilkan di konsol.Bagaimana cara melakukan rollback jika operasi perubahan gagal?
Jika perubahan jenis jaringan gagal, ikuti langkah-langkah berikut untuk memulihkan titik masuk Ingress:
Hapus Layanan yang gagal: Hapus Layanan baru yang Anda buat untuk menghilangkan konflik nama yang dapat mencegah pembuatan ulang Layanan default.
Instal ulang komponen: Di Konsol ACK, uninstall dan reinstall NGINX Ingress Controller. Tindakan ini akan membuat ulang Layanan default
nginx-ingress-lbdan memulihkan titik masuk Ingress.Perbarui DNS: Konfigurasikan resolusi DNS untuk Layanan
nginx-ingress-lbyang baru. Arahkan domain Anda ke IP eksternal barunya dan verifikasi bahwa trafik dialihkan dengan benar.
Referensi
Untuk mempelajari lebih lanjut tentang mengonfigurasi anotasi untuk instance SLB yang sudah ada, lihat Gunakan instance SLB yang sudah ada.