全部产品
Search
文档中心

Container Service for Kubernetes:Deploy multiple Ingress controllers for traffic isolation

更新时间:Feb 10, 2026

Nginx Ingress Controller dapat dikonfigurasi untuk mendukung tiga mode akses secara bersamaan: jaringan publik dan pribadi, jaringan publik saja, serta jaringan pribadi saja, sehingga memenuhi kebutuhan akses klien di berbagai lingkungan jaringan.

Di dalam kluster, instans SLB menerima permintaan klien dan meneruskannya ke workload Nginx Ingress Controller, yang kemudian meneruskan permintaan tersebut ke layanan lainnya.

Konfigurasikan Nginx Ingress untuk mendukung jaringan publik dan pribadi

Untuk mengaktifkan dukungan simultan terhadap akses jaringan publik dan pribadi, deploy dua Service untuk backend Pods dari Nginx Ingress Controller, lalu kaitkan masing-masing dengan instans SLB bertipe jaringan publik dan pribadi.

  1. Periksa jenis jaringan load balancer saat ini.

    kubectl describe service -n kube-system nginx-ingress-lb | grep "service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type"
  2. Buat dan simpan file bernama nginx-ingress-lb-new.yaml, lalu jalankan kubectl apply -f nginx-ingress-lb-new.yaml untuk membuat Service tersebut.

    Contoh Service jaringan pribadi

    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
    spec:
      type: LoadBalancer
      externalTrafficPolicy: "Cluster"
      ports:
      - port: 80
        name: http
        targetPort: 80
      - port: 443
        name: https
        targetPort: 443
      selector:
        app: ingress-nginx
  3. Verifikasi status Service yang baru dibuat. Jika responsnya adalah 200, Service tersebut berfungsi dengan baik.

    curl -s -o /dev/null -w "%{http_code}\n" http://$(kubectl get service -n kube-system nginx-ingress-lb-intranet -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
  4. Jalankan kubectl get service nginx-ingress-lb-intranet, catat External IP Service tersebut, lalu konfigurasikan DNS sesuai dengan tipe Service baru:

    1. Login ke DNS console.

    2. Tambahkan rekaman DNS:

      Field

      Value

      Record Type

      A

      Host Record

      Masukkan subdomain yang diinginkan (misalnya, intranet)

      Record Value

      Alamat IP dari Service baru.

Ubah tipe jaringan

Penting

Operasi ini memerlukan penghapusan dan pembuatan ulang Service untuk mengganti instans SLB, yang akan menyebabkan gangguan sementara pada Nginx Ingress. Instans SLB yang dihapus beserta alamat IP-nya tidak dapat dipulihkan.

  1. Hapus Service yang ada.

    kubectl delete service nginx-ingress-lb -n kube-system
  2. Buat Service baru dengan tipe jaringan yang diinginkan:

    Service jaringan pribadi

    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
    spec:
      type: LoadBalancer
      externalTrafficPolicy: "Cluster"
      ports:
      - port: 80
        name: http
        targetPort: 80
      - port: 443
        name: https
        targetPort: 443
      selector:
        app: ingress-nginx

    Service jaringan 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
  3. Uji status Service baru. Jika responsnya adalah 200, Service tersebut berfungsi dengan baik.

    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}')
  4. Jalankan kubectl get service nginx-ingress-lb, catat External IP Service tersebut, lalu konfigurasikan DNS sesuai dengan tipe Service baru:

Pemecahan Masalah

Mengapa Anda tidak bisa membuat Service baru terlebih dahulu lalu menghapus yang lama?

Saat mengubah tipe jaringan Nginx Ingress Controller, Anda tidak dapat membuat Service baru terlebih dahulu lalu menghapus Service lama. Anda harus menghapus Service lama terlebih dahulu, lalu membuat Service baru. Hal ini karena saat komponen Nginx Ingress Controller ditingkatkan (upgrade), workload harus sesuai dengan nama default Service (nginx-ingress-lb). Karena Service tidak boleh memiliki nama duplikat, membuat Service baru terlebih dahulu lalu menghapus yang lama akan menyebabkan workload tidak dapat mencocokkan instans SLB, sehingga proses upgrade gagal.

Mengapa IP yang diakses oleh client tidak konsisten dengan endpoint yang ditampilkan di konsol?

endpoint yang ditampilkan di halaman Ingress konsol merujuk pada alamat IP instans SLB milik Service bernama nginx-ingress-lb. Saat beberapa Service bertipe LoadBalancer dikonfigurasi, Nginx Ingress tetap dapat meneruskan semua permintaan secara normal, tetapi konsol tidak akan menampilkan IP SLB dari Service lainnya. IP yang sebenarnya diakses oleh klien bergantung pada instans SLB yang digunakan (yang dapat dikonfirmasi melalui pengujian resolusi nama domain), sehingga mungkin tidak konsisten dengan endpoint yang ditampilkan di konsol.

Jika Anda menghapus nginx-ingress-lb dan membuat ulang Service dengan nama yang sama, endpoint yang ditampilkan oleh Ingress perlu diperbarui dengan memperbarui resource Ingress.

Langkah pemulihan jika konfigurasi gagal

Jika konfigurasi gagal, segera lakukan langkah-langkah berikut secara berurutan:

  1. Hapus Service yang baru dibuat untuk menghindari kegagalan pembuatan komponen akibat nama duplikat.

  2. Uninstall dan install ulang komponen Nginx Ingress Controller melalui konsol untuk membuat Service default baru di kluster dan memulihkan titik masuk Nginx Ingress.

  3. Konfigurasikan DNS untuk menambahkan resolusi nama domain bagi Service default baru (nginx-ingress-lb), lalu uji apakah penerusan berfungsi dengan baik.