全部产品
Search
文档中心

Container Compute Service:Konfigurasi ALB Ingress Tingkat Lanjut

更新时间:Nov 09, 2025

Application Load Balancer (ALB) Ingress adalah objek API yang menyediakan load balancing lapisan 7 untuk mengelola akses eksternal ke Layanan dalam kluster Kubernetes. Topik ini menjelaskan cara menggunakan ALB Ingress di kluster Container Compute Service (ACS) Alibaba Cloud untuk meneruskan permintaan ke grup server backend berdasarkan nama domain dan jalur URL, mengarahkan permintaan HTTP ke HTTPS, serta melaksanakan rilis canary.

Prasyarat

Meneruskan permintaan berdasarkan nama domain

Ikuti langkah-langkah berikut untuk membuat Ingress dengan nama domain dan Ingress tanpa nama domain, lalu gunakan Ingress tersebut untuk meneruskan permintaan.

Penerusan Permintaan Berdasarkan Domain Normal

  1. Gunakan templat berikut untuk membuat Deployment, Service, dan Ingress. Permintaan ke nama domain dari Ingress akan diteruskan ke Service.

    apiVersion: v1
    kind: Service
    metadata:
      name: demo-service
      namespace: default
    spec:
      ports:
        - name: port1
          port: 80
          protocol: TCP
          targetPort: 8080
      selector:
        app: demo
      sessionAffinity: None
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: demo
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: demo
      template:
        metadata:
          labels:
            app: demo
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
              imagePullPolicy: IfNotPresent
              name: demo
              ports:
                - containerPort: 8080
                  protocol: TCP
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: demo
      namespace: default
    spec:
      ingressClassName: alb
      rules:
        - host: demo.domain.ingress.top
          http:
            paths:
              - backend:
                  service:
                    name: demo-service
                    port: 
                      number: 80
                path: /hello
                pathType: ImplementationSpecific
  2. Jalankan perintah berikut untuk mengakses aplikasi menggunakan nama domain yang ditentukan.

    Ganti ADDRESS dengan nama domain dari instans ALB, yang dapat Anda ambil dengan menjalankan perintah kubectl get ing.

    curl -H "host: demo.domain.ingress.top" <ADDRESS>/hello

    Keluaran yang diharapkan:

    {"hello":"coffee"}

Buat Ingress tanpa nama domain

  1. Templat berikut menunjukkan konfigurasi dari Ingress:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: demo
      namespace: default
    spec:
      ingressClassName: alb
      rules:
        - host: ""
          http:
            paths:
              - backend:
                  service:
                    name: demo-service
                    port: 
                      number: 80
                path: /hello
  2. Jalankan perintah berikut untuk mengakses aplikasi menggunakan nama domain.

    Ganti ADDRESS dengan nama domain dari instans ALB. Anda bisa mendapatkan nama domain ini dengan menjalankan perintah kubectl get ing.

    curl <ADDRESS>/hello

    Keluaran yang diharapkan:

    {"hello":"coffee"}

Meneruskan permintaan berdasarkan jalur URL

Ingress ALB dapat meneruskan permintaan berdasarkan jalur URL. Anda dapat mengatur bidang pathType untuk menentukan kebijakan pencocokan URL. pathType mendukung tiga jenis pencocokan: Exact, ImplementationSpecific (default), dan Prefix.

Catatan

Kebijakan pencocokan URL mungkin saling bertentangan. Saat terdapat kebijakan pencocokan URL yang bertentangan, permintaan akan dicocokkan dengan kebijakan-kebijakan tersebut berdasarkan urutan prioritas kebijakan secara menurun. Untuk informasi lebih lanjut, lihat Konfigurasikan prioritas aturan pengalihan.

Mode pencocokan

Aturan

Jalur URL

Apakah jalur URL cocok dengan aturan

Prefix

/

(Semua jalur)

Ya

Prefix

/foo

  • /foo

  • /foo/

Ya

Prefix

/foo/

  • /foo

  • /foo/

Ya

Prefix

/aaa/bb

/aaa/bbb

Tidak

Prefix

/aaa/bbb

/aaa/bbb

Ya

Prefix

/aaa/bbb/

/aaa/bbb

Ya. Jalur URL mengabaikan garis miring (/) di akhir aturan.

Prefix

/aaa/bbb

/aaa/bbb/

Ya. Aturan mencocokkan garis miring (/) di akhir jalur URL.

Prefix

/aaa/bbb

/aaa/bbb/ccc

Ya. Aturan mencocokkan subjalur dari jalur URL.

Prefix

Konfigurasikan dua aturan secara bersamaan:

  • /

  • /aaa

/aaa/ccc

Ya. Jalur permintaan cocok dengan awalan / dari jalur aturan.

Prefix

Konfigurasikan dua aturan secara bersamaan:

  • /aaa

  • /

/aaa/ccc

Ya. Jalur permintaan cocok dengan awalan /aaa dari jalur aturan.

Prefix

Konfigurasikan dua aturan secara bersamaan:

  • /aaa

  • /

/ccc

Ya. Jalur permintaan cocok dengan awalan / dari jalur aturan.

Prefix

/aaa

/ccc

Tidak

Exact atau ImplementationSpecific

/foo

/foo

Ya

Exact atau ImplementationSpecific

/foo

/bar

Tidak

Exact atau ImplementationSpecific

/foo

/foo/

Tidak

Exact atau ImplementationSpecific

/foo/

/foo

Tidak

Berikut adalah contoh dari ketiga metode pencocokan:

Exact

  1. Templat berikut menunjukkan konfigurasi Ingress:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: demo-path
      namespace: default
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
            - path: /hello
              backend:
                service:
                  name: demo-service
                  port: 
                    number: 80
              pathType: Exact
  2. Jalankan perintah berikut untuk mengakses aplikasi.

    Ganti ADDRESS dengan nama domain instans ALB. Anda dapat menjalankan perintah kubectl get ing untuk mendapatkan nama domain.

    curl <ADDRESS>/hello

    Output yang diharapkan:

    {"hello":"coffee"}

ImplementationSpecific: kebijakan pencocokan default

Dalam Ingress ALB, kebijakan ini ditangani dengan cara yang sama seperti kebijakan Exact.

  1. Templat berikut menunjukkan konfigurasi Ingress:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: demo-path
      namespace: default
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
            - path: /hello
              backend:
                service:
                  name: demo-service
                  port:
                    number: 80
              pathType: ImplementationSpecific
  2. Jalankan perintah berikut untuk mengakses aplikasi.

    Ganti ADDRESS dengan nama domain instans ALB, yang dapat Anda peroleh dengan menjalankan perintah kubectl get ing.

    curl <ADDRESS>/hello

    Output yang diharapkan:

    {"hello":"coffee"}

Prefix

Kebijakan ini melakukan pencocokan awalan yang sensitif terhadap huruf besar/kecil pada elemen jalur URL yang dibatasi oleh /.

  1. Templat berikut menunjukkan konfigurasi Ingress:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: demo-path-prefix
      namespace: default
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
            - path: /
              backend:
                service:
                  name: demo-service
                  port:
                    number: 80
              pathType: Prefix
  2. Jalankan perintah berikut untuk mengakses aplikasi.

    Ganti ADDRESS dengan nama domain instans ALB, yang dapat Anda peroleh dengan menjalankan perintah kubectl get ing.

    curl <ADDRESS>/hello

    Output yang diharapkan:

    {"hello":"coffee"}

Konfigurasi pemeriksaan kesehatan

Anda dapat mengonfigurasi pemeriksaan kesehatan untuk Ingress ALB menggunakan anotasi berikut. Templat YAML berikut memberikan contoh cara membuat Ingress dengan pemeriksaan kesehatan yang diaktifkan.

Tembakan YAML berikut memberikan contoh cara membuat Ingress yang memiliki pemeriksaan kesehatan diaktifkan:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/healthcheck-enabled: "true"
    alb.ingress.kubernetes.io/healthcheck-path: "/"
    alb.ingress.kubernetes.io/healthcheck-protocol: "HTTP"
    alb.ingress.kubernetes.io/healthcheck-method: "HEAD"
    alb.ingress.kubernetes.io/healthcheck-httpcode: "http_2xx"
    alb.ingress.kubernetes.io/healthcheck-timeout-seconds: "5"
    alb.ingress.kubernetes.io/healthcheck-interval-seconds: "2"
    alb.ingress.kubernetes.io/healthy-threshold-count: "3"
    alb.ingress.kubernetes.io/unhealthy-threshold-count: "3"
spec:
  ingressClassName: alb
  rules:
  - http:
      paths:
      # Konfigurasikan jalur konteks.
      - path: /tea
        backend:
          service:
            name: tea-svc
            port:
              number: 80
      # Konfigurasikan jalur konteks.
      - path: /coffee
        backend:
          service:
            name: coffee-svc
            port:
              number: 80

Tabel berikut menjelaskan parameter dalam templat YAML.

Parameter

Deskripsi

alb.ingress.kubernetes.io/healthcheck-enabled

(Opsional) Menentukan apakah akan mengaktifkan pemeriksaan kesehatan. Secara default, fitur ini dinonaktifkan (false).

alb.ingress.kubernetes.io/healthcheck-path

Opsional. Jalur URL berdasarkan mana pemeriksaan kesehatan dilakukan. Nilai default: /.

  • Masukkan URL halaman web tempat Anda ingin melakukan pemeriksaan kesehatan. Kami menyarankan Anda memasukkan URL halaman web statis. URL harus memiliki panjang 1 hingga 80 karakter, dan dapat berisi huruf, angka, tanda hubung (-), garis miring (/), titik (.), tanda persen (%), tanda tanya (?), tanda pagar (#), dan ampersand (&). URL juga dapat berisi karakter tambahan berikut: _ ; ~ ! ( ) * [ ] @ $ ^ : ' , +. URL harus dimulai dengan garis miring (/).

  • Secara default, instans ALB mengirim permintaan HTTP HEAD ke halaman aplikasi default yang dikonfigurasi pada instans Elastic Compute Service (ECS) backend untuk melakukan pemeriksaan kesehatan. Instans ALB mengirim permintaan tersebut ke Alamat IP pribadi dari instans ECS. Jika Anda tidak ingin menggunakan halaman aplikasi default untuk pemeriksaan kesehatan, Anda harus menentukan jalur URL.

alb.ingress.kubernetes.io/healthcheck-protocol

Opsional. Protokol yang digunakan untuk pemeriksaan kesehatan.

  • HTTP: Instans ALB mengirim permintaan HEAD atau GET ke server backend untuk mensimulasikan akses dari browser dan memeriksa apakah server backend sehat. Ini adalah protokol default.

  • TCP: Instans ALB mengirim paket TCP SYN ke server backend untuk memeriksa apakah port server backend tersedia untuk menerima permintaan.

alb.ingress.kubernetes.io/healthcheck-method

Opsional. Metode permintaan yang digunakan untuk pemeriksaan kesehatan.

  • HEAD: Secara default, instans ALB mengirim permintaan HEAD ke server backend untuk melakukan pemeriksaan kesehatan HTTP. Pastikan bahwa server backend Anda mendukung permintaan HEAD. Jika server backend Anda tidak mendukung metode HEAD atau jika metode HEAD dinonaktifkan, pemeriksaan kesehatan mungkin gagal. Dalam hal ini, Anda dapat menggunakan metode GET.

  • GET: Jika ukuran tanggapan melebihi 8 KB, tanggapan akan dipecah menjadi fragmen. Hal ini tidak mempengaruhi hasil pemeriksaan kesehatan.

alb.ingress.kubernetes.io/healthcheck-httpcode

Kode status yang dikembalikan ketika server backend lulus pemeriksaan kesehatan.

Nilai valid: http_2xx (default), http_3xx, http_4xx, dan http_5xx.

alb.ingress.kubernetes.io/healthcheck-timeout-seconds

Periode waktu habis untuk pemeriksaan kesehatan. Jika server backend tidak merespons dalam periode waktu habis yang ditentukan, server gagal melewati pemeriksaan kesehatan. Nilai valid: 1 hingga 300. Nilai default: 5. Unit: detik.

alb.ingress.kubernetes.io/healthcheck-interval-seconds

Interval antara dua pemeriksaan kesehatan berturut-turut. Unit: detik. Nilai valid: 1 hingga 50. Nilai default: 2. Unit: detik.

alb.ingress.kubernetes.io/healthy-threshold-count

Jumlah kali server backend yang tidak sehat harus secara berturut-turut lulus pemeriksaan kesehatan sebelum server dianggap sehat. Nilai valid: 2 hingga 10. Nilai default: 3.

alb.ingress.kubernetes.io/unhealthy-threshold-count

Jumlah kali server backend yang sehat harus secara berturut-turut gagal pemeriksaan kesehatan sebelum server dianggap tidak sehat. Nilai valid: 2 hingga 10. Nilai default: 3.

Konfigurasikan pengalihan dari permintaan HTTP ke permintaan HTTPS

Anda dapat menyetel anotasi alb.ingress.kubernetes.io/ssl-redirect: "true" dalam Ingress ALB untuk mengarahkan ulang permintaan HTTP ke Port HTTPS 443.

Penting

Anda tidak dapat membuat pendengar menggunakan Ingress ALB. Untuk memastikan bahwa Ingress ALB dapat bekerja sesuai harapan, Anda perlu menentukan port dan protokol pendengar dalam AlbConfig, lalu mengaitkan pendengar dengan Layanan di Ingress ALB. Untuk informasi lebih lanjut tentang cara membuat pendengar ALB, lihat Gunakan AlbConfigs untuk mengonfigurasi pendengar ALB.

Contoh:

apiVersion: v1
kind: Service
metadata:
  name: demo-service-ssl
  namespace: default
spec:
  ports:
    - name: port1
      port: 80
      protocol: TCP
      targetPort: 8080
  selector:
    app: demo-ssl
  sessionAffinity: None
  type: ClusterIP
---
apiVersion: apps/v1
kind: Penyebaran
metadata:
  name: demo-ssl
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo-ssl
  template:
    metadata:
      labels:
        app: demo-ssl
    spec:
      containers:
        - image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
          imagePullPolicy: IfNotPresent
          name: demo-ssl
          ports:
            - containerPort: 8080
              protocol: TCP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/ssl-redirect: "true"
  name: demo-ssl
  namespace: default
spec:
  ingressClassName: alb
  tls:
  - hosts:
    - ssl.alb.ingress.top
  rules:
    - host: ssl.alb.ingress.top
      http:
        paths:
          - backend:
              service:
                name: demo-service-ssl
                port: 
                  number: 80
            path: /
            pathType: Prefix

Konfigurasikan HTTPS atau gRPC sebagai protokol backend

ALB mendukung HTTPS dan gRPC sebagai protokol backend. Untuk mengonfigurasi protokol backend untuk Ingress ALB, Anda hanya perlu menyetel alb.ingress.kubernetes.io/backend-protocol: "grpc" atau alb.ingress.kubernetes.io/backend-protocol: "https" anotasi. Untuk menggunakan Ingress guna meneruskan layanan gRPC, nama domain yang sesuai harus memiliki Sertifikat SSL dan menggunakan protokol TLS. Contoh berikut menunjukkan konfigurasi sampel untuk protokol gRPC:

Catatan

Anda tidak dapat memodifikasi protokol backend. Untuk mengubah protokol, hapus dan bangun kembali Ingress.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/backend-protocol: "grpc"
  name: lxd-grpc-ingress
spec:
  ingressClassName: alb
  tls:
  - hosts:
    - demo.alb.ingress.top
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:  
      - path: /
        pathType: Prefix
        backend:
          service:
            name: grpc-demo-svc
            port:
              number: 9080

Konfigurasikan ekspresi reguler

Untuk mengonfigurasi kondisi penerusan kustom, Anda dapat menulis ekspresi reguler di dalam bidang path. Contoh berikut menunjukkan konfigurasi sampel:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/use-regex: "true" # Mendukung ekspresi reguler di dalam bidang path. 
   alb.ingress.kubernetes.io/conditions.service-a: | # Service yang ditentukan dalam anotasi harus merupakan Service yang ada di dalam kluster, dan nama Service harus sama dengan nama Service di backend dari bidang aturan. 
     [{
       "type": "Path",
       "pathConfig": {
           "values": [
              "~*^/pathvalue1", # Ekspresi reguler harus mengikuti tanda ekspresi reguler ~ *. 
              "/pathvalue2" # Tidak perlu menambahkan ~ * sebelum path untuk kecocokan eksak. 
           ]
       }
      }]
  name: ingress-example
spec:
  ingressClassName: alb
  rules:
   - http:
      paths:
      - path: /test
        pathType: Prefix
        backend:
          service:
            name: service-a
            port:
              number: 88

Konfigurasikan aturan penulisan ulang

ALB mendukung fitur penulisan ulang. Untuk mengonfigurasi fitur ini untuk Ingress ALB, tambahkan anotasi alb.ingress.kubernetes.io/rewrite-target: /path/${2}. Aturan berikut berlaku:

  • Dalam anotasi rewrite-target, variabel dalam format ${number} harus dikonfigurasi pada path yang pathType-nya diatur ke Prefix.

  • Secara default, Anda tidak dapat menggunakan simbol ekspresi reguler, seperti * dan ?, di dalam bidang path. Anda harus mengonfigurasi anotasi rewrite-target untuk menggunakan simbol ekspresi reguler.

  • path harus dimulai dengan /.

Catatan

Jika Anda ingin menentukan ekspresi reguler dalam aturan penulisan ulang, perhatikan hal-hal berikut:

  • Anda dapat menulis satu atau lebih ekspresi reguler yang berisi beberapa set tanda kurung () di dalam bidang path dari sebuah Ingress. Namun, jalur penulisan ulang dalam anotasi rewrite-target dapat menggunakan maksimal tiga variabel: ${1}, ${2}, dan ${3}.

  • Variabel yang cocok dengan ekspresi reguler digabungkan untuk membentuk jalur yang menimpa jalur aslinya.

  • Logika untuk menulis ulang dengan penggantian ekspresi reguler adalah sebagai berikut: Permintaan Klien cocok dengan ekspresi reguler yang berisi beberapa set tanda kurung (), dan anotasi rewrite-target berisi satu atau lebih dari variabel ${1}, ${2}, dan ${3}.

Sebagai contoh, jika path dari sebuah Ingress diatur ke /sys/(.*)/(.*)/aaa dan anotasi rewrite-target diatur ke /${1}/${2}, ketika Klien mengirim permintaan ke jalur /sys/ccc/bbb/aaa, path cocok dengan /sys/(.*)/(.*)/aaa. Anotasi rewrite-target mengganti ${1} dengan ccc dan ${2} dengan bbb. Jalur permintaan akhir yang diterima oleh server backend adalah /ccc/bbb.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/use-regex: "true" # Mendukung ekspresi reguler di dalam bidang path. 
    alb.ingress.kubernetes.io/rewrite-target: /path/${2} # Variabel yang cocok dengan ekspresi reguler digabungkan untuk membentuk jalur yang menimpa jalur aslinya. 
  name: rewrite-ingress
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /something(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: rewrite-svc
            port:
              number: 9080

Konfigurasikan port mendengarkan kustom

ALB Ingress memungkinkan Anda mengonfigurasi port mendengarkan kustom. Ini memungkinkan Anda mengekspos layanan melalui port 80 dan 443 secara bersamaan.

Penting

Anda tidak dapat membuat Pendengar menggunakan ALB Ingress. Untuk memastikan bahwa ALB Ingress dapat bekerja seperti yang diharapkan, Anda perlu menentukan port dan protokol dari Pendengar dalam AlbConfig, lalu mengaitkan Pendengar dengan Layanan di ALB Ingress. Untuk informasi lebih lanjut tentang cara membuat Pendengar ALB, lihat Gunakan AlbConfigs untuk mengonfigurasi Pendengar ALB.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
   alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'  # Mengonfigurasi port mendengarkan kustom
spec:
  ingressClassName: alb
  tls:
  - hosts:
    - demo.alb.ingress.top
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /tea
        pathType: ImplementationSpecific
        backend:
          service:
            name: tea-svc
            port:
              number: 80

Konfigurasikan prioritas aturan pengalihan

Secara default, aturan pengalihan diprioritaskan berdasarkan aturan berikut:

  • Ingress diurutkan berdasarkan urutan leksikografis dari namespace/name. Nilai yang lebih kecil menunjukkan prioritas yang lebih tinggi.

  • Di dalam Ingress yang sama, aturan diurutkan berdasarkan urutan mereka di dalam bidang rule. Aturan yang dikonfigurasi lebih awal memiliki prioritas yang lebih tinggi.

Jika Anda tidak ingin memodifikasi namespace/name dari Ingress, Anda dapat mengonfigurasi anotasi Ingress berikut untuk menentukan prioritas aturan pengalihan:

Catatan

Prioritas aturan harus unik di dalam Pendengar yang sama. Anda dapat menggunakan anotasi alb.ingress.kubernetes.io/order untuk menentukan prioritas sebuah Ingress. Nilainya harus berupa bilangan bulat dari 1 hingga 1.000. Nilai yang lebih kecil menunjukkan prioritas yang lebih tinggi. Prioritas default adalah 10. Untuk memberikan prioritas yang lebih tinggi, tentukan nilai yang lebih kecil.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
   alb.ingress.kubernetes.io/order: "2"
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /tea
        pathType: ImplementationSpecific
        backend:
          service:
            name: tea-svc
            port:
              number: 80

Gunakan anotasi untuk melakukan rilis bertahap

ALB menyediakan kemampuan pengarahan lalu lintas yang kompleks dan mendukung rilis canary berdasarkan header, cookie, dan bobot. Anda dapat mengimplementasikan rilis canary dengan menyetel anotasi. Untuk mengaktifkan rilis canary, Anda harus menyetel anotasi alb.ingress.kubernetes.io/canary: "true". Anda dapat menggunakan anotasi yang berbeda untuk mengimplementasikan fitur rilis canary yang berbeda:

Catatan
  • Rilis canary yang menggunakan aturan berbeda berlaku dalam urutan berikut: berbasis header > berbasis cookie > berbasis bobot.

  • Saat Anda melakukan rilis canary untuk menguji versi aplikasi baru, jangan ubah aturan Ingress asli. Jika tidak, akses ke aplikasi mungkin terganggu. Setelah versi aplikasi baru lolos uji, ganti layanan Backend yang digunakan oleh versi aplikasi sebelumnya dengan layanan Backend yang digunakan oleh versi aplikasi baru. Kemudian, hapus aturan Ingress untuk mengimplementasikan rilis canary.

  • alb.ingress.kubernetes.io/canary-by-header dan alb.ingress.kubernetes.io/canary-by-header-value: Aturan ini menentukan nilai dari header permintaan dan harus digunakan bersama dengan alb.ingress.kubernetes.io/canary-by-header.

    • Jika header dan header-value dalam permintaan cocok dengan nilai yang ditetapkan, permintaan dialokasikan ke titik akhir layanan rilis bertahap.

    • Untuk nilai header lainnya, header diabaikan, dan lalu lintas permintaan dialokasikan berdasarkan prioritas rilis bertahap ke layanan rilis bertahap yang ditetapkan oleh aturan lain.

    Jika header permintaan adalah location: hz, permintaan diarahkan ke layanan rilis canary. Permintaan dengan header lainnya diarahkan berdasarkan bobot rilis canary. Contoh berikut menunjukkan konfigurasi sampel:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        alb.ingress.kubernetes.io/order: "1"
        alb.ingress.kubernetes.io/canary: "true"
        alb.ingress.kubernetes.io/canary-by-header: "location"
        alb.ingress.kubernetes.io/canary-by-header-value: "hz"
      name: demo-canary
      namespace: default
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
              - backend:
                  service:
                    name: demo-service-hello
                    port: 
                      number: 80
                path: /hello
                pathType: ImplementationSpecific
  • alb.ingress.kubernetes.io/canary-by-cookie: Membagi lalu lintas berdasarkan cookie.

    • Jika nilai cookie disetel ke always, lalu lintas permintaan dialokasikan ke titik akhir layanan rilis bertahap.

    • Jika nilai cookie disetel ke never, lalu lintas permintaan tidak dialokasikan ke titik akhir layanan rilis bertahap.

    Catatan

    Rilis canary berbasis cookie hanya mendukung nilai always dan never. Nilai kustom tidak didukung.

    Jika cookie permintaan adalah demo=always, permintaan diarahkan ke layanan rilis canary. Contoh berikut menunjukkan konfigurasi sampel:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        alb.ingress.kubernetes.io/order: "2"
        alb.ingress.kubernetes.io/canary: "true"
        alb.ingress.kubernetes.io/canary-by-cookie: "demo"
      name: demo-canary-cookie
      namespace: default
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
              - backend:
                  service:
                    name: demo-service-hello
                    port: 
                      number: 80
                path: /hello
                pathType: ImplementationSpecific
  • alb.ingress.kubernetes.io/canary-weight: Menentukan persentase permintaan yang diarahkan ke layanan canary. Nilainya harus berupa bilangan bulat dari 0 hingga 100.

    Dalam contoh berikut, persentase permintaan yang diarahkan ke versi aplikasi baru disetel menjadi 50%:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        alb.ingress.kubernetes.io/order: "3"
        alb.ingress.kubernetes.io/canary: "true"
        alb.ingress.kubernetes.io/canary-weight: "50"
      name: demo-canary-weight
      namespace: default
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
              - backend:
                  service:
                    name: demo-service-hello
                    port: 
                      number: 80
                path: /hello
                pathType: ImplementationSpecific

Konfigurasikan persistensi sesi menggunakan anotasi

Ingress ALB memungkinkan Anda mengonfigurasi persistensi sesi menggunakan anotasi berikut:

  • alb.ingress.kubernetes.io/sticky-session: Menentukan apakah akan mengaktifkan persistensi sesi. Nilai yang valid: true atau false. Nilai default: false.

  • alb.ingress.kubernetes.io/sticky-session-type: Metode untuk menangani cookie. Nilai yang valid: Insert atau Server. Nilai default: Insert.

    • Insert: Menyisipkan cookie. Ketika klien mengirim permintaan pertama, Server Load Balancer menyisipkan cookie (SERVERID) ke dalam tanggapan. Ketika klien mengirim permintaan berikutnya dengan cookie ini, Server Load Balancer meneruskan permintaan ke server backend yang sebelumnya tercatat.

    • Server: Menulis ulang cookie. Ketika Server Load Balancer menemukan cookie yang ditentukan pengguna, ia menulis ulang cookie aslinya. Ketika klien mengirim permintaan berikutnya dengan cookie baru, Server Load Balancer meneruskan permintaan ke server backend yang sebelumnya tercatat.

    Catatan

    Parameter ini hanya berlaku ketika StickySessionEnabled diatur ke true untuk kelompok server.

  • alb.ingress.kubernetes.io/cookie-timeout: Periode waktu habis cookie dalam detik. Anda dapat menentukan bilangan bulat dari 1 hingga 86.400. Nilai default adalah 1000.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress-v3
  annotations:
    alb.ingress.kubernetes.io/sticky-session: "true"
    alb.ingress.kubernetes.io/sticky-session-type: "Insert"
    alb.ingress.kubernetes.io/cookie-timeout: "1800"
spec:
  ingressClassName: alb
  rules:
  - http:
      paths:
      # Konfigurasikan jalur konteks. 
      - path: /tea2
        backend:
          service:
            name: tea-svc
            port: 
             number: 80
      # Konfigurasikan jalur konteks. 
       - path: /coffee2
         backend:
           service:
              name: coffee-svc
              port: 
               number: 80

Tentukan algoritma penyeimbangan beban untuk kelompok server backend

Ingress ALB memungkinkan Anda menentukan algoritma penyeimbangan beban untuk sebuah kelompok server dengan mengatur anotasi Ingress alb.ingress.kubernetes.io/backend-scheduler. Contoh berikut menunjukkan konfigurasi sampel. Secara default, versi kluster harus 1.19 atau lebih baru:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/backend-scheduler: "uch" # Ganti uch dengan wrr, sch, atau wlc sesuai kebutuhan. 
    alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # Parameter ini hanya diperlukan jika algoritma penyeimbangan beban adalah uch. Anda tidak perlu mengonfigurasi parameter ini jika algoritma penjadwalan adalah wrr, sch, atau wlc. 
  name: cafe-ingress
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /tea
        pathType: ImplementationSpecific
        backend:
          service:
            name: tea-svc
            port:
              number: 80

Nilai-nilai berikut didukung untuk anotasi alb.ingress.kubernetes.io/backend-scheduler:

  • wrr: Ini adalah nilai default. Permintaan didistribusikan ke server backend berdasarkan bobotnya. Server backend dengan bobot lebih tinggi menerima lebih banyak permintaan.

  • wlc: Permintaan didistribusikan ke server backend berdasarkan bobot dan jumlah koneksi yang ada. Jika server backend memiliki bobot yang sama, server dengan koneksi paling sedikit akan dipilih.

  • sch: Permintaan dari alamat IP sumber yang sama diarahkan ke server backend yang sama.

  • uch: Permintaan yang berisi parameter URL yang sama diarahkan ke server backend yang sama. Jika Anda mengatur algoritma penjadwalan menjadi uch, Anda dapat menggunakan anotasi alb.ingress.kubernetes.io/backend-scheduler-uch-value untuk menentukan parameter URL untuk penghashan konsisten.

Konfigurasi CORS

Blok kode berikut menunjukkan contoh konfigurasi Cross-origin Resource Sharing (CORS) yang didukung oleh Ingress ALB:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: alb-ingress
  annotations:
    alb.ingress.kubernetes.io/enable-cors: "true"
    alb.ingress.kubernetes.io/cors-expose-headers: ""
    alb.ingress.kubernetes.io/cors-allow-methods: "GET,POST"
    alb.ingress.kubernetes.io/cors-allow-credentials: "true"
    alb.ingress.kubernetes.io/cors-max-age: "600"

spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: cloud-nodeport
            port:
              number: 80

Parameter

Deskripsi

alb.ingress.kubernetes.io/cors-allow-origin

URL yang dapat digunakan untuk mengakses sumber daya di server asal menggunakan browser. Pisahkan beberapa URL dengan koma (,). Setiap URL harus dimulai dengan http:// atau https:// dan berisi nama domain yang valid atau nama domain wildcard tingkat atas.

Nilai default: *. Contoh: alb.ingress.kubernetes.io/cors-allow-origin: "https://example.com:4443, http://aliyundoc.com, https://example.org:1199".

alb.ingress.kubernetes.io/cors-allow-methods

Metode HTTP yang diizinkan. Nilai tidak peka huruf besar/kecil. Pisahkan beberapa metode HTTP dengan koma (,).

Nilai default: GET, PUT, POST, DELETE, PATCH, OPTIONS. Contoh: alb.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS".

alb.ingress.kubernetes.io/cors-allow-headers

Header permintaan yang diizinkan. Header permintaan dapat berisi huruf, angka, garis bawah (_), dan tanda hubung (-). Pisahkan beberapa header permintaan dengan koma (,).

Nilai default: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization. Contoh: alb.ingress.kubernetes.io/cors-allow-headers: "X-Forwarded-For, X-app123-XPTO".

alb.ingress.kubernetes.io/cors-expose-headers

Header yang dapat diekspos. Header dapat berisi huruf, angka, garis bawah (_), tanda hubung (-), dan tanda bintang (*). Pisahkan beberapa header dengan koma (,).

Nilai default: empty. Contoh: alb.ingress.kubernetes.io/cors-expose-headers: "*, "X-CustomResponseHeader".

alb.ingress.kubernetes.io/cors-allow-credentials

Menentukan apakah akan menyertakan kredensial dalam permintaan CORS.

Nilai default: true. Contoh: alb.ingress.kubernetes.io/cors-allow-credentials: "false".

alb.ingress.kubernetes.io/cors-max-age

Jangka waktu maksimum selama permintaan preflight yang menggunakan metode OPTIONS dapat disimpan dalam cache. Konfigurasikan parameter ini untuk permintaan kompleks. Nilai valid: -1 hingga 172.800. Satuan: detik.

Nilai default: 172800.

Koneksi persisten Backend

Load balancer tradisional menggunakan koneksi singkat untuk mengakses kelompok server backend. Setiap permintaan memerlukan pembuatan koneksi TCP baru yang kemudian dihentikan. Hal ini dapat menciptakan hambatan konektivitas jaringan pada sistem berkinerja-tinggi. Server Load Balancer mendukung koneksi persisten ke server backend. Fitur ini mengurangi konsumsi sumber daya pada lapisan koneksi dan secara signifikan meningkatkan kinerja pemrosesan. Anda dapat menggunakan anotasi alb.ingress.kubernetes.io/backend-keepalive untuk mengaktifkan koneksi persisten pada Ingress ALB. Contoh berikut menunjukkan konfigurasi sampel:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: alb-ingress
  annotations:
    alb.ingress.kubernetes.io/backend-keepalive: "true"
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: cloud-nodeport
            port:
              number: 80

Konfigurasikan Pembatasan QPS

ALB mendukung pembatasan queries per second (QPS) untuk aturan pengalihan. Nilai pembatasan harus berupa bilangan bulat dari 1 hingga 100.000. Untuk Ingress ALB, Anda hanya perlu mengatur alb.ingress.kubernetes.io/traffic-limit-qps Anotasi. Contoh berikut menunjukkan konfigurasi sampel:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/traffic-limit-qps: "50"
spec:
  ingressClassName: alb
  rules:
   - host: demo.alb.ingress.top
     http:
      paths:
      - path: /tea
        pathType: ImplementationSpecific
        backend:
          service:
            name: tea-svc
            port:
              number: 80
      - path: /coffee
        pathType: ImplementationSpecific
        backend:
          service:
            name: coffee-svc
            port:
              number: 80