全部产品
Search
文档中心

:Mengonfigurasi jenis jaringan NGINX Ingress Controller

更新时间:Nov 15, 2025

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).

  1. 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.

  2. Buat Layanan baru untuk memastikan tersedianya kedua jenis akses, yaitu publik dan internal.

    Buat file bernama nginx-ingress-lb-new.yaml. Lalu, jalankan kubectl apply -f nginx-ingress-lb-new.yaml untuk 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-nginx

    Layanan 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-nginx
  3. Verifikasi bahwa Layanan baru berfungsi dengan benar. Ganti <service-name> dalam perintah berikut dengan nama Layanan baru. Tanggapan 200 menunjukkan 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}')
  4. 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

    1. Masuk ke Alibaba Cloud DNS-Private Zone. Pada tab Authoritative Zone > User Defined Zones, klik Add Zone. Jika Anda telah menambahkan zona, lewati ke langkah c.

    2. Pada bidang Authoritative Zone, masukkan nama domain. Pertahankan pengaturan default untuk opsi lainnya, lalu klik OK.

    3. 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.

    4. 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

    1. Masuk ke Alibaba Cloud DNS-Public Zone. Klik zona target untuk membuka halaman Settings. Klik tombol Add Record.

    2. 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

Penting

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.

  1. Konfirmasi bahwa instance SLB yang ada tidak memiliki trafik:

    1. Masuk ke Konsol ACK, lalu klik kluster target. Di panel navigasi kiri, pilih Network > Services. Temukan Layanan nginx-ingress-lb di namespace kube-system dan catat External IP-nya.

    2. 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.

  2. Hapus Layanan saat ini yang digunakan oleh NGINX Ingress Controller.

    kubectl delete svc -n kube-system nginx-ingress-lb
  3. Buat Layanan baru. Simpan manifes yang sesuai di bawah ini sebagai nginx-ingress-lb.yaml dan terapkan dengan menjalankan perintah kubectl apply -f nginx-ingress-lb.yaml.

    Penting

    Layanan 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-nginx

    Layanan 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-nginx
  4. Uji Layanan baru. Kode tanggapan 200 menunjukkan 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}')
  5. Jalankan kubectl get service nginx-ingress-lb, lalu catat IP eksternal Layanan tersebut. Kemudian, konfigurasikan resolusi DNS berdasarkan jenis Layanan baru:

    Layanan Internal

    1. Masuk ke Alibaba Cloud DNS-Private Zone. Pada tab Authoritative Zone > User Defined Zones, klik Add Zone. Jika Anda telah menambahkan zona, lewati ke langkah c.

    2. Pada bidang Authoritative Zone, masukkan nama domain. Pertahankan pengaturan default untuk opsi lainnya, lalu klik OK.

    3. 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.

    4. 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

    1. Masuk ke Alibaba Cloud DNS-Public Zone. Klik zona target untuk membuka halaman Settings. Klik tombol Add Record.

    2. 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:

  1. Hapus Layanan yang gagal: Hapus Layanan baru yang Anda buat untuk menghilangkan konflik nama yang dapat mencegah pembuatan ulang Layanan default.

  2. Instal ulang komponen: Di Konsol ACK, uninstall dan reinstall NGINX Ingress Controller. Tindakan ini akan membuat ulang Layanan default nginx-ingress-lb dan memulihkan titik masuk Ingress.

  3. Perbarui DNS: Konfigurasikan resolusi DNS untuk Layanan nginx-ingress-lb yang 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.