全部产品
Search
文档中心

:Menyebarkan beberapa pengontrol Ingress dalam kluster

更新时间:Jul 02, 2025

Topik ini menjelaskan cara menyebarkan beberapa pengontrol NGINX Ingress yang independen di dalam kluster Container Service for Kubernetes (ACK) untuk menyediakan layanan Internet-facing yang berbeda.

Informasi latar belakang

Anda dapat mengonfigurasi pengontrol NGINX Ingress yang menghadap internet atau akses internal untuk menyesuaikan konfigurasi default dari pengontrol NGINX Ingress pada kluster ACK. Ini memungkinkan Anda menggunakan instance SLB dengan akses internal. Mode yang disebutkan dalam topik ini dapat memenuhi sebagian besar kebutuhan. Dalam skenario tertentu, beberapa layanan Internet-facing harus dapat diakses oleh pengguna eksternal, tetapi layanan lainnya hanya mengizinkan permintaan dari beban kerja non-kluster dalam virtual private cloud (VPC) yang sama. Dalam hal ini, Anda dapat menyebarkan dua pengontrol NGINX Ingress yang independen dan mengaitkannya dengan instance SLB dari tipe jaringan yang berbeda.

Catatan Penggunaan

Berikut adalah catatan penggunaan untuk mengonfigurasi beberapa pengontrol Ingress, termasuk mengonfigurasi IngressClass yang unik dan menentukan batasan panjang untuk nama Layanan.

  • Konfigurasikan IngressClass yang Unik

    Saat menggunakan beberapa pengontrol Ingress, Anda harus mengonfigurasi IngressClass yang unik untuk setiap pengontrol guna memastikan operasi normal dan mencegah konflik. Modifikasi parameter berikut:

  • Tentukan Batasan Panjang untuk Nama Layanan

    Saat Anda menyebarkan aplikasi Helm bernama ack-ingress-nginx-v1, Layanan dengan nama dalam format berikut akan dibuat secara otomatis: <Nama Aplikasi>-ack-ingress-nginx-v1-controller. Jika jenis Layanan LoadBalancer adalah internal, namanya dalam format <nama aplikasi>-ack-ingress-nginx-v1-controller-internal. Pastikan nama Layanan tidak melebihi 63 karakter. Jika tidak, pembuatan sumber daya mungkin gagal dan pesan kesalahan berikut ditampilkan:

    tidak ada layanan dengan nama xxx-open-api-test-inter-ack-ingress-nginx-v1-controller-internal ditemukan di namespace open-api-test-inter: services "xxx-open-api-test-inter-ack-ingress-nginx-v1-controller-internal" tidak ditemukan   ,

    Jika kesalahan ini terjadi, periksa dan perpendek nama aplikasi Helm, lalu sebarkan ulang aplikasi tersebut.

Menyebarkan pengontrol NGINX Ingress baru

Setelah kluster ACK dibuat, pengontrol NGINX Ingress dengan dua replika pod akan disebarkan secara otomatis. Instance SLB yang menghadap internet juga dibuat sebagai layanan load balancing frontend.

Untuk menyebarkan pengontrol NGINX Ingress lain yang independen di dalam kluster, ikuti langkah-langkah berikut:

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, pilih grup sumber daya dan wilayah, temukan kluster yang ingin Anda kelola, lalu klik nama kluster. Di panel navigasi kiri, pilih Applications > Helm.

  3. Di halaman Helm, klik Deploy. Pada langkah Basic Information, konfigurasikan parameter berdasarkan tabel berikut.

    Parameter

    Contoh

    Application Name

    ack-ingress-nginx

    Catatan

    Anda dapat mengonfigurasi nama aplikasi kustom. Perhatikan batasan panjang untuk nama Layanan.

    Namespace

    kube-system

    Source

    Sumber aplikasi. Nilai default: Marketplace.

    Chart

    • Atur parameter Use Scenarios ke All.

    • Atur parameter Supported Architecture ke amd64.

    • Masukkan ack-ingress-nginx di kotak pencarian.

      • Jika kluster Anda menjalankan Kubernetes 1.20 atau lebih lama, klik ack-ingress-nginx.

      • Jika kluster Anda menjalankan Kubernetes 1.22 atau lebih baru, klik ack-ingress-nginx-v1.

    Klik Next.

  4. Pada langkah Parameters, konfigurasikan parameter Chart Version dan klik OK.

    Catatan

    Anda hanya dapat memilih versi chart 4.0.17 atau lebih baru (ack-ingress-nginx-v1 1.8.0-aliyun.1 atau lebih baru) jika kluster ACK Anda menjalankan Kubernetes 1.22 atau lebih baru. Jika kluster ACK Anda menjalankan Kubernetes 1.20, pilih versi chart 4.0.16 (ack-ingress-nginx-v1 1.2.1-aliyun.1).

    Tabel berikut menjelaskan parameter-parameter dari ack-ingress-nginx-v1.

    Parameter

    Deskripsi

    controller.image.repository

    Registry gambar ingress-nginx.

    controller.image.tag

    Versi gambar ingress-nginx. Untuk informasi lebih lanjut, lihat Pengontrol Ingress NGINX.

    controller.ingressClassResource.name

    Kelas Ingress dari pengontrol Ingress. Pengontrol Ingress hanya menangani Ingress yang diberi anotasi dengan kelas Ingress.

    Penting

    Parameter ini berfungsi sebagai alternatif untuk parameter controller.ingressClass untuk kluster ACK yang menjalankan versi Kubernetes lebih lama dari 1.22. Anda juga dapat menentukan parameter ini dalam anotasi kubernetes.io/ingress.class. Kelas Ingress setiap pengontrol Ingress harus unik dalam satu kluster. Kelas Ingress dari pengontrol Ingress default dalam kluster adalah nginx. Oleh karena itu, jangan atur parameter ini ke nginx.

    controller.ingressClassResource.controllerValue

    Kelas pengontrol dari pengontrol Ingress.

    Penting

    Kelas pengontrol setiap pengontrol Ingress harus unik dalam satu kluster. Kelas pengontrol dari pengontrol Ingress default dalam kluster adalah k8s.io/ingress-nginx. Oleh karena itu, jangan atur parameter ini ke k8s.io/ingress-nginx.

    controller.replicaCount

    Jumlah pod yang disediakan untuk pengontrol Ingress.

    controller.service.enabled

    Menentukan apakah akan menggunakan instance SLB yang menghadap internet dan instance SLB akses internal untuk load balancing.

    controller.service.external.enabled

    Menentukan apakah akan menggunakan instance SLB yang menghadap internet untuk load balancing. Jika Anda tidak ingin menggunakan instance SLB yang menghadap internet, atur parameter ini ke false.

    controller.service.internal.enabled

    Menentukan apakah akan menggunakan instance SLB akses internal untuk load balancing. Jika Anda ingin menggunakan instance SLB akses internal, atur parameter ini ke true.

    controller.kind

    Mode penyebaran pengontrol Ingress. Nilai valid: Deployment dan DaemonSet.

    controller.electionID

    ID yang digunakan untuk memperbarui status Ingress selama pemilihan pengontrol Ingress utama.

    Penting

    Saat Anda menyebarkan beberapa pengontrol Ingress yang termasuk dalam namespace yang sama dari marketplace Konsol ACK, Anda harus mengatur parameter electionID ke nilai yang berbeda untuk pengontrol Ingress yang berbeda. Ini membantu mencegah konflik selama pemilihan pengontrol Ingress utama.

    controller.metrics.enabled

    Menentukan apakah akan mengaktifkan metrik ingress-nginx.

    controller.metrics.serviceMonitor.enabled

    Menentukan apakah akan mengaktifkan ServiceMonitor, yang digunakan untuk mengonfigurasi aturan untuk mengumpulkan metrik.

    Catatan

    Setelah Anda mengaktifkan metrik ingress-nginx, kami sarankan Anda mengaktifkan ServiceMonitor. Kemudian, sistem secara otomatis mengonfigurasi Managed Service for Prometheus untuk mengumpulkan metrik.

    controller.service.internal.loadBalancerClass

    Menentukan apakah Layanan menggunakan instance Classic Load Balancer (CLB) atau Network Load Balancer (NLB). Nilai valid:

    • "alibabacloud.com/clb": Layanan menggunakan instance CLB.

    • "alibabacloud.com/nlb": Layanan menggunakan instance NLB.

    Secara default, Layanan menggunakan instance CLB.

  5. Lihat pengontrol Ingress NGINX yang telah disebarkan.

    Di halaman Helm, Anda dapat melihat bahwa pengontrol Ingress NGINX baru telah disebarkan.

Menguji konektivitas jaringan

Dalam contoh berikut, sebuah aplikasi dibuat dan menggunakan pengontrol Ingress NGINX baru untuk mengekspos layanan Internet-facing.

  1. Sebarkan aplikasi 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: NodePort
  2. Gunakan pengontrol Ingress NGINX untuk menyediakan layanan Internet-facing.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: nginx
    spec:
      # Atur nilainya menjadi kelas Ingress dari pengontrol Ingress NGINX baru.
      ingressClassName: "<YOUR_INGRESS_CLASS>"
      rules:
      - host: foo.bar.com
        http:
          paths:
          - path: /
            backend:
              service: 
                name: nginx
                port:
                  number: 80
            pathType: ImplementationSpecific
    Catatan

    Anda harus mengonfigurasi anotasi kubernetes.io/spec.ingressClassName.

    Setelah menyebarkan aplikasi, lakukan langkah-langkah berikut untuk menanyakan alamat IP Ingress dan alamat IP dari pengontrol Ingress NGINX baru:

    • Jalankan perintah berikut untuk menanyakan alamat IP dari instance SLB yang menghadap internet yang terkait dengan pengontrol Ingress NGINX default:

       kubectl -n kube-system get svc nginx-ingress-lb

      Output yang diharapkan:

      NAME               TYPE           CLUSTER-IP    EXTERNAL-IP    PORT(S)                      AGE
      nginx-ingress-lb   LoadBalancer   172.19.XX.XX   192.0.XX.XX   80:31429/TCP,443:32553/TCP   2d
    • Jalankan perintah berikut untuk menanyakan alamat IP dari instance SLB yang menghadap internet yang terkait dengan pengontrol Ingress NGINX baru:

      kubectl -n <YOUR_NAMESPACE> get svc nginx-ingress-lb

      Output yang diharapkan:

      NAME               TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)                      AGE
      nginx-ingress-lb   LoadBalancer   172.19.XX.XX   198.51.XX.XX   80:30969/TCP,443:31325/TCP   39m
    • Jalankan perintah berikut untuk menanyakan konfigurasi Ingress:

      kubectl get ing

      Output yang diharapkan:

      NAME      HOSTS         ADDRESS         PORTS     AGE
      nginx     foo.bar.com   198.51.XX.XX   80        5m

    Output menunjukkan bahwa alamat IP Ingress sama dengan alamat IP dari pengontrol Ingress NGINX baru.

  3. Akses aplikasi menggunakan pengontrol Ingress NGINX default dan pengontrol Ingress NGINX baru.

    curl -H "Host: foo.bar.com" http://192.0.XX.XX

    Output yang diharapkan:

    <html>
    <head><title>404 Not Found</title></head>
    <body>
    <center><h1>404 Not Found</h1></center>
    <hr><center>nginx</center>
    </body>
    </html>

    Gunakan pengontrol Ingress NGINX baru untuk mengakses aplikasi.

    curl -H "Host: foo.bar.com" http://198.51.XX.XX

    Output yang diharapkan:

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p></p>
    </body>
    </html>

Uji coba sebelumnya menunjukkan bahwa Layanan yang diekspos menggunakan pengontrol NGINX Ingress yang berbeda tidak saling mengganggu. Solusi ini cocok untuk skenario di mana beberapa Layanan harus dapat diakses oleh pengguna eksternal, sedangkan yang lain hanya mengizinkan permintaan dari beban kerja non-Kubernetes dalam VPC yang sama.