全部产品
Search
文档中心

Container Service for Kubernetes:Buat dan gunakan Nginx Ingress untuk mengekspos layanan

更新时间:Nov 11, 2025

Nginx Ingress merupakan gerbang masuk untuk lalu lintas dalam Kluster ACK yang dikelola. Gerbang ini menggunakan aturan routing fleksibel untuk meneruskan permintaan eksternal ke layanan internal. Nginx Ingress mendukung enkripsi HTTPS, rilis bertahap, serta konfigurasi kustom melalui anotasi, sehingga membantu Anda membangun jaringan Lapisan 7 yang aman, sangat tersedia, dan dapat diskalakan.

Penting

Metode penagihan langganan untuk Classic Load Balancer (CLB) tidak lagi tersedia. Mulai 28 Agustus 2025, saat Anda menginstal Controller Nginx Ingress baru di konsol Container Service for Kubernetes, instance Network Load Balancer (NLB) akan dibuat secara default. Penggunaan instance CLB dibatasi hanya untuk daftar putih. Untuk membuat instance CLB, metode penagihan bayar sesuai pemakaian digunakan secara default. Untuk informasi selengkapnya, lihat [Perubahan Produk] Pengumuman tentang Perubahan Jenis Load Balancer Default dan Metode Penagihan untuk Layanan Baru serta Controller Nginx Ingress.

Peringatan

  • Jangan menghapus layanan default yang digunakan oleh Controller Nginx Ingress. Setelah instalasi, layanan bernama nginx-ingress-lb akan dibuat secara default di namespace kube-system. Menghapus layanan ini dapat menyebabkan komponen menjadi tidak stabil atau bahkan crash.

  • Konfigurasikan parameter komponen kustom pada halaman Manajemen Komponen atau dengan memanggil OpenAPI. Jika Anda mengubah konfigurasi komponen melalui saluran lain, komponen mungkin tidak berfungsi sebagaimana mestinya dan peningkatan di masa depan dapat gagal.

  • Gunakan kamus konfigurasi Nginx Ingress untuk mengimplementasikan fitur yang diperlukan. Jika Anda menggunakan cuplikan (snippet) atau kode Lua untuk menambahkan konfigurasi kustom ke komponen, dukungan teknis tidak mencakup masalah yang timbul, seperti perilaku yang tidak diharapkan.

  • Tingkatkan komponen Controller Nginx Ingress secara tepat waktu untuk mencegah masalah yang disebabkan oleh bug atau kerentanan pada versi komunitas hulu.

Prasyarat

  • Komponen Controller Nginx Ingress telah diinstal. Setelah instalasi, komponen tersebut dikaitkan dengan instance Classic Load Balancer (CLB) yang berfungsi sebagai titik masuk lalu lintas untuk Nginx Ingress.

    Instal saat membuat kluster

    1. Pilih komponen

    1. Masuk ke Konsol ACK dan klik Create Cluster.

    2. Pada langkah Component Configurations, temukan bagian Ingress dan pilih Nginx Ingress.

    image

    2. Pilih sumber load balancer

    • Create: Secara otomatis membuat instance CLB publik atau akses internal yang dibayar berdasarkan spesifikasi, multi-zona, dengan tipe instans yang ditentukan di VPC kluster.

    • Use Existing: Pilih instance CLB publik yang ada di wilayah yang sama dengan kluster atau instance CLB akses internal di VPC yang sama dengan kluster. Instance CLB tersebut tidak boleh dikaitkan dengan kluster lain.

    image

    Instal dan konfigurasi dari halaman Manajemen Komponen

    Saat Anda menginstal komponen dari halaman Manajemen Komponen, instance CLB publik yang dibayar berdasarkan spesifikasi, kecil I (slb.s1.small) akan dibuat secara otomatis untuk berfungsi sebagai titik masuk lalu lintas untuk Nginx Ingress.

    1. Pilih dan konfigurasi komponen

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

    2. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.

    3. Gunakan bilah pencarian atau klik tab Network untuk menemukan komponen tersebut. Di pojok kanan bawah kartu Nginx Ingress Controller, klik Install.

    4. Di kotak dialog Install Component Nginx Ingress Controller, konfigurasikan parameter dan klik OK untuk menyelesaikan instalasi.

    image

  • Anda telah mendapatkan file kubeconfig kluster dan menggunakan kubectl untuk terhubung ke kluster.

  • Anda telah mendaftarkan nama domain.

  • Anda telah membeli sertifikat komersial, mengajukan sertifikat tersebut, dan memastikan bahwa sertifikat yang akan digunakan berada dalam status Issued.

Buat aplikasi contoh

Aplikasi contoh ini men-deploy dua beban kerja tanpa status (deployment) bernama coffee dan tea, serta layanan terkaitnya bernama coffee-svc dan tea-svc.

Konsol

1. Buat sumber daya

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

  2. Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, pilih Workloads > Deployments.

  3. Klik Create From YAML. Pilih Custom dari daftar drop-down Sample Template. Kemudian, salin konten berikut ke editor templat dan klik Create.

image

YAML aplikasi contoh

apiVersion: apps/v1
kind: Deployment
metadata:
  name: coffee
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: coffee
  template:
    metadata:
      labels:
        app: coffee
    spec:
      containers:
      - name: coffee
        image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: coffee-svc
  namespace: default
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: coffee
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tea
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tea
  template:
    metadata:
      labels:
        app: tea
    spec:
      containers:
      - name: tea
        image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: tea-svc
  namespace: default
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: tea
  type: ClusterIP

2. Lihat hasil pembuatan

Di kotak dialog YAML Resource Creation Result, klik View di kolom Actions untuk sumber daya guna mengonfirmasi hasil pembuatan. 

image

kubectl

  1. Buat file bernama test-deployment-service.yaml yang berisi konten berikut.

    File YAML contoh

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tea
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: tea
      template:
        metadata:
          labels:
            app: tea
        spec:
          containers:
          - name: tea
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tea-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: tea
      type: ClusterIP
  2. Jalankan perintah berikut untuk membuat deployment dan layanan.

    kubectl apply -f test-deployment-service.yaml
  3. Jalankan perintah berikut untuk memeriksa progres pembuatan deployment coffee dan tea.

    kubectl get deployment coffee tea

    Output yang diharapkan:

    NAME     READY   UP-TO-DATE   AVAILABLE   AGE
    coffee   2/2     2            2           14m
    tea      2/2     2            2           14m
  4. Jalankan perintah berikut untuk melihat layanan coffee-svc dan tea-svc.

    kubectl get service coffee-svc tea-svc

    Output yang diharapkan:

    NAME         TYPE        CLUSTER-IP        EXTERNAL-IP   PORT(S)   AGE
    coffee-svc   ClusterIP   192.168.xxx.xxx   <none>        80/TCP    15m
    tea-svc      ClusterIP   192.168.xxx.xxx   <none>        80/TCP    15m

Buat Nginx Ingress

Pada contoh berikut, nama domain (host) dalam aturan adalah test-nginx-ingress.com. Gantilah dengan nama domain yang telah Anda daftarkan. Pemetaan path (paths) dalam aturan menggunakan aplikasi contoh yang dibuat sebelumnya. Sesuaikan sesuai kebutuhan.

Konsol

1. Buat sumber daya

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

  2. Di halaman Clusters, klik nama kluster target. Di panel navigasi kiri, pilih Network > Ingresses. Pilih namespace default dan klik Create Ingress. Konfigurasikan Ingress berdasarkan contoh berikut.

    • Gateway Type: Nginx Ingress

    • Name: test-nginx-ingress

    • Domain Name: test-nginx-ingress.com (Ganti ini dengan nama domain yang telah Anda daftarkan)

    • Path Mapping:

      • Path: /coffee

      • Matching Rule: Default (ImplementationSpecific)

      • Service Name: coffee-svc

      • Port: 80

  3. Klik + Add Path untuk mengonfigurasi rute untuk layanan tea-svc.

    • Path Mapping:

      • Path: /tea

      • Matching Rule: Default (ImplementationSpecific)

      • Service Name: tea-svc

      • Port: 80

  4. Ikuti langkah-langkah sebelumnya dan klik + Add Rule untuk menambahkan nama domain www.test-nginx-ingress.com (ganti ini dengan nama domain yang telah Anda daftarkan) dan pemetaan path terkaitnya. Kemudian, klik OK.

image

2. Dapatkan titik akhir

Setelah Ingress dibuat, tunggu sekitar satu menit dan klik tombol segarkan di pojok kanan atas. Jika kolom Endpoint menampilkan Alamat IP Elastis yang sesuai (titik akhir instance CLB publik terkait), berarti Nginx Ingress berhasil dibuat.

Jika informasi titik akhir tidak diperbarui setelah waktu yang lama, klik nama Ingress dan buka tab Events untuk memecahkan masalah apa pun.

image

kubectl

  1. Buat file bernama test-ingress.yaml yang berisi konten berikut.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: test-nginx-ingress
      namespace: default
    spec:
      ingressClassName: nginx
      rules:
      - host: test-nginx-ingress.com # Ganti ini dengan nama domain yang telah Anda daftarkan
        http:
          paths:
          - path: /coffee
            backend:
              service: 
                name: coffee-svc
                port:
                  number: 80
            pathType: ImplementationSpecific
          - path: /tea
            backend:
              service: 
                name: tea-svc
                port:
                  number: 80
            pathType: ImplementationSpecific
      - host: www.test-nginx-ingress.com # Ganti ini dengan nama domain yang telah Anda daftarkan
        http:
          paths:
          - path: /coffee
            backend:
              service: 
                name: coffee-svc
                port:
                  number: 80
            pathType: ImplementationSpecific
          - path: /tea
            backend:
              service: 
                name: tea-svc
                port:
                  number: 80
            pathType: ImplementationSpecific

    Deskripsi parameter utama:

    • name: Nama Ingress. Pada contoh ini, namanya adalah test-nginx-ingress.

    • host: Nama domain untuk mengakses layanan. Pada contoh ini, nama domainnya adalah test-nginx-ingress.com. Gantilah dengan nama domain yang telah Anda daftarkan.

    • path: Path URL. Instance CLB hanya meneruskan permintaan arah masuk ke backend jika permintaan tersebut cocok dengan host dan path yang ditentukan. Pada contoh ini, path-nya adalah /coffee dan /tea.

    • backend: Terdiri dari nama layanan dan port layanan.

      • Nama layanan: Nama layanan backend tempat Ingress meneruskan lalu lintas. Pada contoh ini, nama layanannya adalah coffee-svc dan tea-svc.

      • Port layanan: Port yang diekspos oleh layanan. Pada contoh ini, port-nya adalah 80.

  2. Jalankan perintah berikut untuk membuat Ingress.

    kubectl apply -f test-ingress.yaml
  3. Jalankan perintah berikut untuk melihat Ingress dan mendapatkan Alamat IP Elastis-nya, misalnya 8.xxx.xxx.117.

    kubectl get ingress

    Output yang diharapkan:

    NAME                 CLASS   HOSTS                                               ADDRESS         PORTS   AGE
    test-nginx-ingress   nginx   test-nginx-ingress.com,www.test-nginx-ingress.com   8.xxx.xxx.117   80      2m39s
  4. Jalankan perintah berikut untuk memverifikasi bahwa Nginx Ingress berfungsi. Gunakan Alamat IP Elastis yang telah Anda peroleh.

    curl http://8.xxx.xxx.117/coffee -H "Host: test-nginx-ingress.com"

    Output yang diharapkan:

    ...
    <title>Hello World</title>
    ...
    <p>Server&nbsp;address:10.xxx.xxx.19:80Server&nbsp;name:coffee-96d4bc87-l29dhDate:08/Aug/2025:02:21:02 +0000URI:/coffee

Konfigurasi resolusi nama domain

Prosedur ini hanya berlaku untuk nama domain yang tidak didaftarkan di Alibaba Cloud. Jika Anda membeli nama domain dari Alibaba Cloud Domain Names, nama domain tersebut akan disinkronkan secara otomatis dengan DNS otoritatif publik, dan Anda dapat langsung menambahkan rekaman DNS.

1. Tambahkan nama domain

  1. Buka DNS Alibaba Cloud - Zona Otoritatif Publik.

    Di halaman Authoritative Domain Names, klik Add Domain Name.

  2. Di kotak dialog Add Domain Name, masukkan nama domain yang ingin Anda kelola dan pilih instance zona otoritatif publik yang telah Anda beli.

image

2. Tambahkan rekaman DNS

  1. Temukan nama domain target dan klik DNS Settings di kolom Actions. Klik Add Record. Tambahkan rekaman DNS dengan tipe rekaman diatur ke A dan rekaman host diatur ke @. Atur Record Value ke titik akhir Nginx Ingress.

  2. Ikuti langkah-langkah sebelumnya untuk menambahkan rekaman DNS lain dengan rekaman host diatur ke www.

  3. Klik Check Status di sebelah rekaman DNS yang baru saja Anda buat untuk melihat hasil resolusi.

Untuk informasi selengkapnya, lihat Tambahkan rekaman resolusi situs web.

image

3. Verifikasi bahwa nama domain dan path berfungsi

Di browser, akses http://test-nginx-ingress.com/coffee (ganti ini dengan nama domain yang telah Anda daftarkan) untuk memverifikasi bahwa Anda dapat mengakses path bisnis melalui nama domain tersebut.

Anda juga dapat merujuk ke Metode untuk menguji resolusi DNS guna mengonfirmasi hasilnya. Jika resolusi tidak berfungsi, lihat Memecahkan kegagalan resolusi DNS dengan cepat.

image

Konfigurasi enkripsi HTTPS (konfigurasi TLS)

Pertama, beli dan ajukan sertifikat seperti yang dijelaskan di bagian Prasyarat. Kemudian, ikuti langkah-langkah berikut untuk mengunduh sertifikat dan menambahkan konfigurasi TLS. Hal ini memungkinkan akses ke nama domain Anda melalui koneksi HTTPS terenkripsi.

Konsol

1. Unduh sertifikat

  1. Masuk ke Konsol Layanan Manajemen Sertifikat Digital. Di panel navigasi kiri, pilih Certificate Management > SSL Certificates.

  2. Di tab Official Certificate, pilih sertifikat yang ingin Anda unduh, lalu klik Download di pojok kiri bawah daftar sertifikat.

  3. Di kotak dialog yang muncul, pilih Nginx sebagai tipe server, lalu unduh dan ekstrak paket sertifikat.

Untuk informasi selengkapnya, lihat Unduh sertifikat SSL.

image

2. Buat rahasia

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

  2. Di halaman Clusters, klik nama kluster yang ingin Anda ubah. Di panel navigasi kiri, pilih Configurations > Secrets.

  3. Di halaman Secrets, pilih namespace default dan klik Create di pojok kiri atas. Di panel yang muncul, konfigurasikan rahasia baru. Setelah konfigurasi selesai, klik OK.

    • Name: nginx-ingress-tls

    • Type: TLS Certificate

    • Certificate: Konten lengkap file sertifikat (.pem) yang telah diunduh dan diekstrak.

    • Key: Konten lengkap file kunci privat (.key) yang telah diunduh dan diekstrak.

image

3. Tambahkan konfigurasi TLS

  1. Di panel navigasi kiri, pilih Network > Ingresses. Di kolom Actions untuk Ingress target, klik Update.

  2. Di halaman Edit Ingress, tambahkan konfigurasi TLS berikut dan klik OK.

    • TLS Configuration: Diaktifkan

    • Domain Name: test-nginx-ingress.com (Ganti ini dengan nama domain yang telah Anda daftarkan)

    • Secret: nginx-ingress-tls

image

4. Verifikasi akses HTTPS

Di browser, akses https://test-nginx-ingress.com/coffee (ganti ini dengan nama domain yang telah Anda daftarkan) untuk memverifikasi bahwa Anda dapat mengakses nama domain dan path bisnis melalui koneksi HTTPS terenkripsi.

image

kubectl

  1. Masuk ke Konsol Layanan Manajemen Sertifikat Digital. Di panel navigasi kiri, pilih Certificate Management > SSL Certificates.

  2. Di tab Official Certificate, pilih sertifikat yang ingin Anda unduh, lalu klik Download di pojok kiri bawah daftar sertifikat.

  3. Di kotak dialog yang muncul, pilih Nginx sebagai tipe server, lalu unduh dan ekstrak paket sertifikat.

  4. Jalankan perintah berikut untuk membuat rahasia menggunakan file sertifikat (.pem) dan file kunci privat (.key) yang telah diunduh.

    kubectl create secret tls nginx-ingress-tls --cert test-nginx-ingress.com.pem --key test-nginx-ingress.com.key -n default
  5. Jalankan perintah berikut untuk menambahkan konfigurasi TLS ke Ingress test-nginx-ingress. Ganti test-nginx-ingress.com dalam perintah dengan nama domain yang telah Anda daftarkan.

    kubectl patch ingress test-nginx-ingress -p '{"spec":{"tls":[{"hosts":["test-nginx-ingress.com"],"secretName":"nginx-ingress-tls"}]}}'
  6. Jalankan perintah berikut untuk memverifikasi bahwa Anda dapat mengakses nama domain dan path layanan melalui koneksi HTTPS terenkripsi. Gunakan Alamat IP Elastis Anda.

    curl -v -k https://8.xxx.xxx.117/coffee -H "Host: test-nginx-ingress.com"
    • Deskripsi parameter:

      • -v: Menampilkan proses komunikasi terperinci, termasuk informasi Proses jabat tangan TLS.

      • -k (atau --insecure): Jika Anda menggunakan sertifikat tanda tangan sendiri, Anda dapat menggunakan parameter ini untuk mengabaikan validasi sertifikat.

    • Output yang diharapkan:

      ...
      *   Trying 8.xxx.xxx.117:443...
      * Connected to 8.xxx.xxx.117 (8.xxx.xxx.117) port 443
      * ALPN: curl offers h2,http/1.1
      * (304) (OUT), TLS handshake, Client hello (1):
      * (304) (IN), TLS handshake, Server hello (2):
      * (304) (IN), TLS handshake, Unknown (8):
      * (304) (IN), TLS handshake, Certificate (11):
      * (304) (IN), TLS handshake, CERT verify (15):
      * (304) (IN), TLS handshake, Finished (20):
      * (304) (OUT), TLS handshake, Finished (20):
      ...
      <title>Hello World</title>
      ...
      <p>Server&nbsp;address:10.xxx.xxx.159:80Server&nbsp;name:coffee-96d4bc87-6cstvDate:14/Aug/2025:09:27:42 +0000URI:/coffee

Konfigurasi lanjutan

Rilis bertahap

Saat memperbarui layanan, Anda dapat menggunakan metode rilis seperti peningkatan bergulir, rilis bertahap, dan penyebaran biru-hijau. Untuk informasi selengkapnya, lihat Gunakan Nginx Ingress untuk mengimplementasikan rilis bertahap dan penyebaran biru-hijau.

Protokol layanan backend

Anda dapat menentukan protokol layanan backend dengan menambahkan anotasi nginx.ingress.kubernetes.io/backend-protocol. Protokol yang didukung adalah HTTP, HTTPS, gRPC, dan gRPCS. Untuk contoh konfigurasi, lihat Sebarkan layanan gRPC di backend Controller Nginx Ingress.

Menulis ulang path

Saat menggunakan controller NGINX Ingress, NGINX meneruskan path lengkap ke backend. Misalnya, permintaan ke path Ingress /service1/api diteruskan ke pod backend di /service1/api/. Jika path layanan backend Anda adalah /api, terjadi ketidakcocokan path dan kesalahan 404 dikembalikan. Dalam kasus ini, Anda dapat menggunakan anotasi nginx.ingress.kubernetes.io/rewrite-target untuk menulis ulang path ke direktori yang benar.

Untuk informasi selengkapnya, lihat Konfigurasikan layanan routing untuk pengalihan URL.

Tambahkan anotasi

Nginx Ingress mendukung penambahan anotasi untuk mengaktifkan lebih banyak fitur. Untuk informasi selengkapnya, lihat Kamus konfigurasi Nginx Ingress dan Konfigurasi lanjutan Nginx Ingress.

Observabilitas

Aktifkan Simple Log Service (SLS) saat membuat kluster. Kemudian, Anda dapat melihat laporan analisis log akses Nginx Ingress dan memantau status real-time Nginx Ingress di konsol SLS. Untuk informasi selengkapnya, lihat Analisis dan pantau log akses Nginx Ingress.

Skenario muatan tinggi

Untuk informasi tentang cara meningkatkan kinerja dan stabilitas Controller Nginx Ingress dalam skenario muatan tinggi, lihat Konfigurasikan Controller Nginx Ingress untuk skenario muatan tinggi dan Saran untuk menggunakan Controller Nginx Ingress.

FAQ

Mengapa saya tidak dapat mengakses titik akhir eksternal instance Server Load Balancer dari dalam kluster?

Gejala

Pod di beberapa node dalam kluster tidak dapat mengakses pod backend melalui titik akhir eksternal (alamat IP instance SLB) Controller Nginx Ingress, sedangkan pod di node lain dapat.

Penyebab

Masalah ini disebabkan oleh konfigurasi externalTrafficPolicy layanan Controller Nginx Ingress, yang menentukan cara lalu lintas eksternal diproses. Saat diatur ke local, hanya pod backend di node yang sama dengan pod controller yang dapat menerima permintaan. Saat diatur ke cluster, akses berjalan normal. Permintaan dari dalam kluster ke titik akhir eksternal instance SLB juga diproses sebagai lalu lintas eksternal.

Solusi

  • (Direkomendasikan) Akses Nginx Ingress melalui ClusterIP atau nama layanannya dari dalam kluster Kubernetes. Nama layanan Nginx Ingress adalah nginx-ingress-lb.kube-system.

  • Jalankan perintah kubectl edit svc nginx-ingress-lb -n kube-system untuk memodifikasi layanan Nginx Ingress. Ubah nilai externalTrafficPolicy dalam konfigurasi layanan menjadi Cluster. Jika plugin jaringan kontainer kluster Anda adalah Flannel, alamat IP asal klien akan hilang. Jika Anda menggunakan Terway, alamat IP asal dipertahankan.

    Contoh:

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/backend-type: eni   # Transmisi langsung ke ENI.
      labels:
        app: nginx-ingress-lb
      name: nginx-ingress-lb
      namespace: kube-system
    spec:
      externalTrafficPolicy: Cluster

Untuk informasi selengkapnya tentang anotasi layanan, lihat Gunakan anotasi untuk mengonfigurasi instance Classic Load Balancer (CLB).

Bagaimana cara mengizinkan permintaan dengan header atau cookie klien yang besar?

Jika permintaan klien memiliki header atau cookie yang besar, Anda mungkin menemui pesan kesalahan serupa dengan "400 Request Header Or Cookie Too Large /Bad request" saat mengakses Nginx Ingress. Dalam kasus ini, Anda perlu menyesuaikan konfigurasi ukuran buffer terkait. Dua parameter konfigurasi berikut tersedia:

Anda dapat menjalankan perintah kubectl edit cm -n kube-system nginx-configuration untuk mengedit ConfigMap dan memodifikasi kedua parameter ini. Contohnya:

client-header-buffer-size: "16k"
large-client-header-buffers: "4 32k" 

Setelah konfigurasi selesai, verifikasi bahwa konfigurasi telah diterapkan ke bidang data Nginx. Anda dapat menjalankan perintah kubectl exec <nginx-ingress-pod> -n kube-system -- cat /etc/nginx/nginx.conf untuk melihat file nginx.conf dan memastikan bahwa perubahan pada ConfigMap telah diterapkan.

Bagaimana cara mengonfigurasi akses lintas domain untuk Nginx Ingress?

Anda dapat mengaktifkan akses lintas domain dengan menambahkan anotasi tertentu ke bagian metadata.annotations sumber daya Ingress. Untuk informasi selengkapnya, lihat Konfigurasikan akses lintas domain untuk Nginx Ingress.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/enable-cors: "true"     # Aktifkan CORS.
    nginx.ingress.kubernetes.io/cors-allow-origin: "*"  # Izinkan akses dari semua domain.
    nginx.ingress.kubernetes.io/cors-allow-methods: "GET, PUT, POST, DELETE, PATCH, OPTIONS"  # Metode HTTP yang diizinkan.
     # Header permintaan kustom yang diizinkan.
    nginx.ingress.kubernetes.io/cors-allow-headers: "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range" 
    nginx.ingress.kubernetes.io/cors-expose-headers: "Content-Length,Content-Range"  # Header respons yang diekspos.
    nginx.ingress.kubernetes.io/cors-max-age: "86400"  # Durasi cache permintaan preflight.
spec:
  ingressClassName: nginx
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: example-service
            port:
              number: 80

Bagaimana cara mengonfigurasi transmisi alamat IP klien?

Secara default, Nginx Ingress meneruskan alamat IP klien dalam header X-Forwarded-For dan X-Real-IP. Namun, jika klien secara eksplisit menyertakan header ini dalam permintaan, server tidak dapat memperoleh alamat IP klien yang sebenarnya.

Anda dapat menjalankan perintah kubectl edit cm -n kube-system nginx-configuration untuk menambahkan konfigurasi ke ConfigMap guna mengaktifkan transmisi alamat IP klien Lapisan 7 untuk Ingress.

compute-full-forwarded-for: "true"
forwarded-for-header: "X-Forwarded-For"
use-forwarded-headers: "true"

Jika terdapat beberapa lapisan proxy di depan Nginx Ingress, Anda perlu menyesuaikan konfigurasi berdasarkan parameter proxy-real-ip-cidr. Tambahkan alamat IP proxy hulu ke proxy-real-ip-cidr dalam format CIDR. Pisahkan beberapa blok CIDR dengan koma. Untuk informasi selengkapnya, lihat Gunakan WAF.

proxy-real-ip-cidr:  "0.0.0.0/0,::/0"  

Dalam skenario IPv6, jika header X-Forwarded-For yang diterima oleh Nginx Ingress kosong dan terdapat instance CLB hulu, Anda dapat mengaktifkan Proxy Protocol untuk instance CLB guna memperoleh alamat IP klien. Untuk informasi selengkapnya tentang Proxy Protocol, lihat Peroleh alamat IP klien yang sebenarnya melalui pendengar Lapisan 4 instance CLB.

Referensi