全部产品
Search
文档中心

Container Service for Kubernetes:Konfigurasi ALB Ingress Tingkat Lanjut

更新时间:Jun 26, 2025

Ingress adalah objek API yang digunakan untuk menyediakan layanan penyeimbangan beban lapisan 7 guna mengelola akses eksternal ke Layanan di dalam ACK Serverless cluster. Topik ini menjelaskan cara menggunakan Application Load Balancer (ALB) Ingresses untuk meneruskan permintaan ke grup server backend berdasarkan nama domain dan jalur URL, mengarahkan ulang permintaan HTTP ke HTTPS, serta melaksanakan rilis canary.

Daftar isi

Prasyarat

  • Sebuah ACK Serverless cluster telah dibuat. Anda harus mengonfigurasi NAT gateway untuk virtual private cloud (VPC) tempat klaster dibuat agar klaster dapat mengunduh gambar kontainer dari Internet. Untuk informasi lebih lanjut, lihat Panduan Cepat ACK Serverless.

  • Klien kubectl terhubung ke klaster ASK. Untuk informasi lebih lanjut, lihat Hubungkan ke Klaster ACK Menggunakan kubectl.

  • Sebuah AlbConfig telah dibuat. Untuk informasi lebih lanjut, lihat Buat Sebuah AlbConfig.

Teruskan permintaan berdasarkan nama domain

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

Nama domain valid

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

    Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

    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: NodePort
    ---
    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

    Klaster yang menjalankan versi Kubernetes sebelum 1.19

    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: NodePort
    ---
    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/v1beta1
    kind: Ingress
    metadata:
      name: demo
      namespace: default
    spec:
      ingressClassName: alb
      rules:
        - host: demo.domain.ingress.top
          http:
            paths:
              - backend:
                  serviceName: demo-service
                  servicePort: 80
                path: /hello
                pathType: ImplementationSpecific
  2. Jalankan perintah berikut untuk mengakses aplikasi menggunakan nama domain tertentu.

    Ganti ADDRESS dengan alamat IP instance ALB terkait. Anda dapat memeriksa alamat IP dengan menjalankan perintah kubectl get ing.

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

    Output yang Diharapkan:

    {"hello":"coffee"}

Nama domain kosong

  1. Template berikut menunjukkan konfigurasi Ingress:

    Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

    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
                pathType: ImplementationSpecific

    Klaster yang menjalankan versi Kubernetes sebelum 1.19

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

    Ganti ADDRESS dengan alamat IP instance ALB terkait. Anda dapat memeriksa alamat IP dengan menjalankan perintah kubectl get ing.

    curl <ADDRESS>/hello

    Output yang Diharapkan:

    {"hello":"coffee"}

Teruskan permintaan berdasarkan jalur URL

ALB Ingresses dapat meneruskan permintaan berdasarkan jalur URL. Anda dapat menggunakan parameter pathType untuk mengonfigurasi kebijakan pencocokan URL yang berbeda. Nilai valid dari pathType adalah Exact, ImplementationSpecific, dan Prefix.

Catatan

Kebijakan pencocokan URL mungkin bertentangan satu sama lain. Saat kebijakan pencocokan URL yang bertentangan ada, permintaan dicocokkan dengan kebijakan dalam urutan prioritas kebijakan 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 URL cocok dengan aturan /.

Prefix

Konfigurasikan dua aturan secara bersamaan:

  • /aaa

  • /

/aaa/ccc

Ya. Jalur URL cocok dengan aturan /aaa.

Prefix

Konfigurasikan dua aturan secara bersamaan:

  • /aaa

  • /

/ccc

Ya. Jalur URL cocok dengan 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

Anda dapat melakukan langkah-langkah berikut untuk mengonfigurasi kebijakan pencocokan URL yang berbeda.

Exact

  1. Template berikut menunjukkan konfigurasi Ingress:

    Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

    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

    Klaster yang menjalankan versi Kubernetes sebelum 1.19

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

    Ganti ADDRESS dengan alamat IP instance ALB terkait. Anda dapat memeriksa alamat IP dengan menjalankan perintah kubectl get ing.

    curl <ADDRESS>/hello

    Output yang Diharapkan:

    {"hello":"coffee"}

ImplementationSpecific: kebijakan pencocokan default

Konfigurasi ALB Ingress sama dengan kebijakan pencocokan Exact.

  1. Template berikut menunjukkan konfigurasi Ingress:

  2. Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

    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

    Klaster yang menjalankan versi Kubernetes sebelum 1.19

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

  4. Ganti ADDRESS dengan alamat IP instance ALB terkait. Anda dapat memeriksa alamat IP dengan menjalankan perintah kubectl get ing.

  5. curl <ADDRESS>/hello

    Output yang Diharapkan:

    {"hello":"coffee"}

Prefix

Cocokkan awalan tertentu dengan jalur URL. Elemen dalam jalur URL dipisahkan oleh garis miring (/). Awalan bersifat peka huruf besar-kecil dan dicocokkan dengan setiap elemen dari jalur.

  1. Template berikut menunjukkan konfigurasi Ingress:

  2. Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

    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

    Klaster yang menjalankan versi Kubernetes sebelum 1.19

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

  4. Ganti ADDRESS dengan alamat IP instance ALB terkait. Anda dapat memeriksa alamat IP dengan menjalankan perintah kubectl get ing.

  5. curl <ADDRESS>/hello

    Output yang Diharapkan:

    {"hello":"coffee"}

Konfigurasikan pemeriksaan kesehatan

Anda dapat mengonfigurasi pemeriksaan kesehatan untuk ALB Ingresses menggunakan anotasi berikut.

Template YAML berikut memberikan contoh cara membuat Ingress dengan pemeriksaan kesehatan yang diaktifkan.

Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

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-httpversion: "HTTP1.1"
    alb.ingress.kubernetes.io/healthcheck-method: "HEAD"
    alb.ingress.kubernetes.io/healthcheck-code: "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

Klaster yang menjalankan versi Kubernetes sebelum 1.19

apiVersion: networking.k8s.io/v1beta1
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:
          serviceName: tea-svc
          servicePort: 80
      # Konfigurasikan jalur konteks. 
      - path: /coffee
        backend:
          serviceName: coffee-svc
          servicePort: 80

Parameter

Deskripsi

alb.ingress.kubernetes.io/healthcheck-enabled

Menentukan apakah akan mengaktifkan pemeriksaan kesehatan untuk grup server backend.

  • true: mengaktifkan pemeriksaan kesehatan.

  • false: menonaktifkan pemeriksaan kesehatan.

Nilai default: false.

alb.ingress.kubernetes.io/healthcheck-path

Jalur URL berdasarkan mana pemeriksaan kesehatan dilakukan.

Nilai default: /.

alb.ingress.kubernetes.io/healthcheck-protocol

Protokol yang digunakan untuk pemeriksaan kesehatan.

  • HTTP: melakukan pemeriksaan kesehatan HTTP dengan mengirim permintaan HEAD atau GET ke server backend untuk memeriksa apakah server backend sehat.

  • HTTPS: melakukan pemeriksaan kesehatan HTTPS dengan mengirim permintaan HEAD atau GET ke server backend untuk memeriksa apakah server backend sehat.

  • TCP: melakukan pemeriksaan kesehatan TCP dengan mengirim paket SYN ke server backend untuk memeriksa apakah port server backend tersedia untuk menerima permintaan.

  • GRPC: melakukan pemeriksaan kesehatan gRPC dengan mengirim permintaan POST atau GET ke server backend untuk memeriksa apakah server backend sehat.

Nilai default: HTTP.

alb.ingress.kubernetes.io/healthcheck-httpversion

Versi protokol HTTP. Parameter ini berlaku hanya ketika healthcheck-protocol disetel ke HTTP atau HTTPS.

  • HTTP1.0

  • HTTP1.1

Nilai default: HTTP1.1.

alb.ingress.kubernetes.io/healthcheck-method

Metode permintaan yang digunakan untuk pemeriksaan kesehatan.

  • HEAD

  • POST

  • GET

Nilai default: HEAD.

Penting

Jika Anda menyetel healthcheck-protocol ke GRPC, Anda harus menyetel parameter ini ke POST atau GET.

alb.ingress.kubernetes.io/healthcheck-httpcode

Kode status yang dikembalikan untuk pemeriksaan kesehatan. Server backend dianggap sehat hanya jika permintaan pemeriksaan kesehatan berhasil dan salah satu kode status yang ditentukan dikembalikan.

Anda dapat memilih satu atau lebih kode status berikut, dan pisahkan beberapa kode status dengan koma (,):

  • http_2xx

  • http_3xx

  • http_4xx

  • http_5xx

Nilai default: http_2xx.

alb.ingress.kubernetes.io/healthcheck-code

Kode status yang dikembalikan untuk pemeriksaan kesehatan. Server backend dianggap sehat hanya jika permintaan pemeriksaan kesehatan berhasil dan salah satu kode status yang ditentukan dikembalikan.

Jika Anda menentukan parameter ini dan healthcheck-httpcode, parameter ini memiliki prioritas lebih tinggi.

Nilai untuk parameter ini bergantung pada nilai yang ditentukan dalam healthcheck-protocol:

  • HTTP atau HTTPS: Anda dapat memilih satu atau lebih kode status berikut, dan pisahkan beberapa kode status dengan koma (,):

    • http_2xx

    • http_3xx

    • http_4xx

    • http_5xx

    Nilai default: http_2xx.

  • GRPC:

    Nilai valid: 0 hingga 99.

    Nilai default: 0.

    Rentang nilai didukung. Anda dapat memasukkan hingga 20 rentang nilai dan harus memisahkan setiap rentang dengan koma (,).

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

Periode timeout untuk pemeriksaan kesehatan.

Satuan: detik.

Nilai valid: 1 hingga 300.

Nilai default: 5.

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

Interval antara dua pemeriksaan kesehatan berturut-turut.

Satuan: detik.

Nilai valid: 1 hingga 50.

Nilai default: 2.

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

Jumlah kali server backend harus lulus pemeriksaan kesehatan berturut-turut sebelum server dianggap sehat.

Nilai valid: 2 hingga 10.

Nilai default: 3.

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

Jumlah kali server backend harus gagal pemeriksaan kesehatan berturut-turut sebelum server dianggap tidak sehat.

Nilai valid: 2 hingga 10.

Nilai default: 3.

alb.ingress.kubernetes.io/healthcheck-connect-port

Port yang digunakan untuk pemeriksaan kesehatan.

Nilai default: 0.

Catatan

Nilai 0 menunjukkan bahwa port pada server backend digunakan untuk pemeriksaan kesehatan.

Arahkan ulang permintaan HTTP ke HTTPS

Anda dapat mengonfigurasi ALB Ingress untuk mengarahkan ulang permintaan HTTP ke port HTTPS 443 dengan menambahkan anotasi alb.ingress.kubernetes.io/ssl-redirect: "true".

Penting

Anda tidak dapat membuat pendengar menggunakan ALB Ingress. Untuk memastikan bahwa ALB Ingress dapat bekerja sesuai harapan, Anda perlu menentukan port dan protokol pendengar dalam AlbConfig, lalu asosiasikan pendengar dengan Layanan dalam ALB Ingress.

Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

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: Deployment
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

Klaster yang menjalankan versi Kubernetes sebelum 1.19

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: Deployment
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/v1beta1
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:
              serviceName: demo-service-ssl
              servicePort: 80
            path: /
            pathType: Prefix

Konfigurasikan HTTPS atau gRPC sebagai protokol backend

ALB Ingresses mendukung HTTPS atau gRPC sebagai protokol backend. Untuk mengonfigurasi HTTPS atau gRPC, tambahkan anotasi alb.ingress.kubernetes.io/backend-protocol: "grpc" atau alb.ingress.kubernetes.io/backend-protocol: "https". Jika Anda ingin menggunakan Ingress untuk mendistribusikan permintaan ke layanan gRPC, Anda harus mengonfigurasi sertifikat SSL untuk layanan gRPC dan menggunakan protokol TLS untuk berkomunikasi dengan layanan gRPC. Contoh:

Catatan

Setelah membuat Ingress, Anda tidak dapat memodifikasi protokol backend. Hapus dan buat ulang Ingress untuk memodifikasi protokol.

Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

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

Klaster yang menjalankan versi Kubernetes sebelum 1.19

apiVersion: networking.k8s.io/v1beta1
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:
          - backend:
              serviceName: grpc-demo-svc
              servicePort: 9080
            path: /
            pathType: Prefix

Konfigurasikan ekspresi reguler

Anda dapat menentukan ekspresi reguler sebagai kondisi pengarahan di bidang path. Contoh:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/use-regex: "true" # Mendukung ekspresi reguler di bidang path. 
   alb.ingress.kubernetes.io/conditions.service-a: | # Layanan yang ditentukan dalam anotasi harus merupakan Layanan yang ada di klaster, dan nama Layanan harus sama dengan nama Layanan di backend dari bidang rule. 
     [{
       "type": "Path",
       "pathConfig": {
           "values": [
              "~*^/pathvalue1", # Ekspresi reguler harus diikuti oleh flag ekspresi reguler ~*.
              "/pathvalue2" # Tidak perlu menambahkan ~* sebelum jalur untuk pencocokan tepat.
           ]
       }
      }]
  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 Ingresses mendukung aturan penulisan ulang. Untuk mengonfigurasi aturan penulisan ulang, tambahkan anotasi alb.ingress.kubernetes.io/rewrite-target: /path/${2}. Aturan berikut berlaku:

  • Dalam anotasi rewrite-target, Anda harus menyetel bidang pathType ke Prefix untuk variabel tipe ${number}.

  • Secara default, parameter path tidak mendukung karakter yang didukung oleh ekspresi reguler, seperti tanda bintang (*) dan tanda tanya (?). Untuk menentukan karakter yang digunakan oleh ekspresi reguler di parameter path, Anda harus menambahkan anotasi alb.ingress.kubernetes.io/use-regex: "true".

  • Nilai parameter path harus dimulai dengan garis miring (/).

Catatan

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

  • Anda dapat menentukan satu atau lebih ekspresi reguler di bidang path dari ALB Ingress dan menggunakan tanda kurung () untuk mengelilingi ekspresi reguler. Namun, Anda hanya dapat menggunakan hingga tiga variabel (${1}, ${2}, dan ${3}) dalam anotasi rewrite-target untuk membentuk jalur yang menimpa jalur asli.

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

  • Jalur asli hanya ditimpa oleh variabel yang cocok dengan ekspresi reguler jika persyaratan berikut terpenuhi: Beberapa ekspresi reguler yang dikelilingi oleh tanda kurung () ditentukan dan anotasi rewrite-target disetel ke satu atau lebih variabel berikut: ${1}, ${2}, dan ${3}.

Misalkan parameter path dari ALB Ingress disetel ke /sys/(.*)/(.*)/aaa dan anotasi rewrite-target disetel ke /${1}/${2}. Jika klien mengirim permintaan ke /sys/ccc/bbb/aaa path, permintaan tersebut cocok dengan ekspresi reguler /sys/(.*)/(.*)/aaa. Anotasi rewrite-target berlaku dan mengganti ${1} dengan ccc dan ${2} dengan bbb. Akibatnya, permintaan dialihkan ke /ccc/bbb.

Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/use-regex: "true" # Mendukung ekspresi reguler di bidang path. 
    alb.ingress.kubernetes.io/rewrite-target: /path/${2} # Variabel yang cocok dengan ekspresi reguler digabungkan untuk membentuk jalur yang menimpa jalur asli. 
  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

Klaster yang menjalankan versi Kubernetes sebelum 1.19

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

Konfigurasikan port pendengar kustom

ALB Ingresses memungkinkan Anda mengonfigurasi port pendengar 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 berfungsi sesuai harapan, Anda perlu menentukan port dan protokol pendengar dalam AlbConfig, lalu mengasosiasikan pendengar dengan Layanan dalam ALB Ingress.

Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

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

Klaster yang menjalankan versi Kubernetes sebelum 1.19

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'
  name: cafe-ingress
spec:
  ingressClassName: alb
  rules:
    - host: demo.alb.ingress.top
      http:
        paths:
          - backend:
              serviceName: tea-svc
              servicePort: 80
            path: /tea-svc
            pathType: ImplementationSpecific

Konfigurasikan prioritas aturan pengalihan

Secara default, aturan pengalihan diprioritaskan berdasarkan aturan berikut:

  • Aturan pengalihan dari ALB Ingress yang berbeda diprioritaskan dalam urutan leksikografis nilai parameter namespace/name. Aturan pengalihan yang nilainya muncul pertama kali di antara semua aturan pengalihan dalam urutan leksikografis memiliki prioritas tertinggi.

  • Aturan pengalihan dari ALB Ingress ditampilkan dalam urutan prioritas menurun di parameter rule.

Untuk memprioritaskan aturan pengalihan tanpa memodifikasi bidang namespace/name dari ALB Ingress, konfigurasikan anotasi berikut:

Catatan

Prioritas setiap aturan pengalihan dalam pendengar harus unik. Anda dapat menggunakan anotasi alb.ingress.kubernetes.io/order untuk menentukan prioritas aturan pengalihan dari ALB Ingress. Nilai valid: 1 hingga 1000. Nilai yang lebih kecil menunjukkan prioritas lebih tinggi. Nilai default adalah 10.

Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

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

Klaster yang menjalankan versi Kubernetes sebelum 1.19

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

Gunakan anotasi untuk melakukan rilis bertahap

ALB memungkinkan Anda mengonfigurasi rilis canary berdasarkan header permintaan, cookie, dan bobot untuk menangani pengalihan lalu lintas yang kompleks. Anda dapat menambahkan anotasi alb.ingress.kubernetes.io/canary: "true" untuk mengaktifkan fitur rilis canary. Kemudian, Anda dapat menggunakan anotasi berikut untuk mengonfigurasi aturan 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 modifikasi aturan Ingress asli. Jika tidak, akses ke aplikasi mungkin terganggu. Setelah versi aplikasi baru lulus pengujian, ganti Layanan backend yang digunakan oleh versi aplikasi sebelumnya dengan Layanan backend yang digunakan oleh versi aplikasi baru. Lalu, hapus aturan Ingress untuk melaksanakan rilis canary.

  • alb.ingress.kubernetes.io/canary-by-header dan alb.ingress.kubernetes.io/canary-by-header-value: Aturan ini mencocokkan header dan nilai header dari permintaan. Anda harus menambahkan kedua annotations jika ingin menggunakan aturan ini.

    • Jika header dan nilai header dari permintaan cocok dengan aturan, permintaan tersebut akan dirutekan ke versi aplikasi baru.

    • Jika header dari permintaan tidak cocok dengan aturan berbasis header, permintaan tersebut akan dicocokkan dengan jenis aturan lain berdasarkan prioritas aturan.

    Jika Anda menyetel alb.ingress.kubernetes.io/canary-by-header menjadi location: hz, permintaan yang cocok dengan aturan akan dirutekan ke versi aplikasi baru. Permintaan yang gagal cocok dengan aturan akan dirutekan berdasarkan aturan berbasis bobot. Contoh:

    Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

    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

    Klaster yang menjalankan versi Kubernetes sebelum 1.19

    apiVersion: networking.k8s.io/v1beta1
    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:
                  serviceName:demo-service-hello
                  servicePort: 80
                path: /hello
                pathType: ImplementationSpecific
  • alb.ingress.kubernetes.io/canary-by-cookie: Aturan ini mencocokkan cookie dari permintaan.

    • Jika Anda menyetel cookie ke always, permintaan yang cocok dengan aturan akan dirutekan ke versi aplikasi baru.

    • Jika Anda menyetel cookie ke never, permintaan yang cocok dengan aturan akan dirutekan ke versi aplikasi lama.

    Catatan

    Aturan rilis canary berbasis cookie tidak mendukung pengaturan lainnya. Nilai cookie harus always atau never.

    Permintaan yang berisi cookie demo=always akan dirutekan ke versi aplikasi baru. Contoh:

    Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

    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

    Klaster yang menjalankan versi Kubernetes sebelum 1.19

    apiVersion: networking.k8s.io/v1beta1
    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:
                  serviceName:demo-service-hello
                  servicePort: 80
                path: /hello
                pathType: ImplementationSpecific
  • alb.ingress.kubernetes.io/canary-weight: Aturan ini memungkinkan Anda menetapkan persentase permintaan yang dikirim ke Layanan tertentu. Anda dapat memasukkan bilangan bulat dari 0 hingga 100.

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

    Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

    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

    Klaster yang menjalankan versi Kubernetes sebelum 1.19

    apiVersion: networking.k8s.io/v1beta1
    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:
                  serviceName: demo-service-hello
                  servicePort: 80
                path: /hello
                pathType: ImplementationSpecific

Konfigurasikan persistensi sesi menggunakan anotasi

ALB Ingresses memungkinkan Anda mengonfigurasi persistensi sesi menggunakan anotasi berikut:

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

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

    • Insert: Menyisipkan cookie. ALB menyisipkan cookie (SERVERID) ke dalam paket respons HTTP atau HTTPS pertama yang dikirim ke klien. Permintaan berikutnya dari klien akan berisi cookie ini dan pendengar akan mendistribusikan permintaan ini ke server backend yang direkam.

    • Server: Menulis ulang cookie. Saat ALB mendeteksi cookie yang ditentukan pengguna, ia menimpa cookie asli dengan cookie yang ditentukan pengguna. Permintaan berikutnya dari klien akan berisi cookie yang ditentukan pengguna, dan pendengar akan mendistribusikan permintaan ini ke server backend yang direkam.

    Catatan

    Parameter ini berlaku saat parameter StickySessionEnabled disetel ke true untuk grup server.

  • alb.ingress.kubernetes.io/cookie-timeout: Menentukan periode timeout cookie. Nilai valid: 1 hingga 86400. Nilai default: 1000. Satuan: detik.

  • alb.ingress.kubernetes.io/cookie: Menentukan cookie kustom. Tipe: string. Nilai default: "".

Klaster yang menjalankan Kubernetes 1.19 atau lebih baru

ServerapiVersion: 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" # Untuk mendukung cookie kustom, tipe cookie yang disisipkan harus disetel ke <code data-tag="code">Server

Klaster yang menjalankan versi Kubernetes sebelum 1.19

ServerapiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: cafe-ingress-v3
  annotations:
    alb.ingress.kubernetes.io/sticky-session: "true"
    alb.ingress.kubernetes.io/sticky-session-type: "Insert" # Untuk mendukung cookie kustom, tipe cookie yang disisipkan harus disetel ke <code data-tag="code">Server

Tentukan algoritma penyeimbangan beban untuk grup server backend

ALB Ingresses memungkinkan Anda menentukan algoritma penyeimbangan beban untuk grup server backend menggunakan anotasi alb.ingress.kubernetes.io/backend-scheduler. Contoh:

Klaster yang menjalankan Kubernetes 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 berdasarkan kebutuhan bisnis Anda. 
    alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # Parameter ini diperlukan hanya jika algoritma penyeimbangan beban adalah uch. Anda tidak perlu mengonfigurasi parameter ini jika algoritma penjadwalan adalah wrr, sch, atau wlc. 
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /tea
        pathType: ImplementationSpecific
        backend:
          service:
            name: tea-svc
            port:
              number: 80

Klaster yang menjalankan versi Kubernetes sebelum 1.19

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

Setel anotasi alb.ingress.kubernetes.io/backend-scheduler berdasarkan deskripsi berikut:

  • wrr: Server backend dengan bobot lebih tinggi menerima lebih banyak permintaan daripada yang memiliki bobot lebih rendah. Ini adalah nilai default.

  • wlc: Permintaan didistribusikan berdasarkan bobot dan beban setiap server backend. Beban merujuk pada jumlah koneksi ke server backend. Jika beberapa server backend memiliki bobot yang sama, permintaan akan diteruskan ke server backend dengan koneksi paling sedikit.

  • sch: hashing konsisten berdasarkan alamat IP sumber.

  • uch: hashing konsisten berdasarkan parameter URL. Anda dapat menambahkan anotasi alb.ingress.kubernetes.io/backend-scheduler-uch-value ke ALB Ingress untuk menentukan parameter URL untuk hashing konsisten ketika algoritma penyeimbangan beban untuk grup server backend adalah uch.

Konfigurasikan CORS

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

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 domain yang valid atau nama domain tingkat atas dengan wildcard.

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

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 membawa kredensial dalam permintaan CORS.

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

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

Periode maksimum untuk mana permintaan preflight yang menggunakan metode OPTIONS dapat di-cache. Tentukan parameter ini untuk permintaan kompleks. Nilai valid: -1 hingga 172800. Satuan: detik.

Nilai default: 172800.

Konfigurasikan koneksi TCP persisten

Load balancer tradisional mengakses server backend melalui koneksi singkat. Setiap permintaan membuat dan menutup koneksi TCP, yang menjadi hambatan bagi sistem berperforma tinggi. Untuk mengurangi jumlah sumber daya yang digunakan untuk membangun koneksi jaringan dan meningkatkan performa pengalihan, Anda dapat mengaktifkan koneksi persisten dengan menambahkan anotasi alb.ingress.kubernetes.io/backend-keepalive ke file konfigurasi ALB Ingress. Contoh:

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 QPS berdasarkan aturan pengalihan. Anda dapat membatasi QPS dalam rentang 1 hingga 100000. Anda dapat menambahkan anotasi alb.ingress.kubernetes.io/traffic-limit-qps ke ALB Ingress untuk mengaktifkan fitur pembatasan QPS. Contoh:

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

Startup lambat backend

Setelah pod baru ditambahkan ke backend Layanan, jika ALB Ingress segera mendistribusikan lalu lintas ke pod baru tersebut, hal itu dapat menyebabkan lonjakan tiba-tiba dalam penggunaan CPU atau memori, yang mengakibatkan masalah akses. Dalam mode startup lambat, ALB Ingress secara bertahap mengalihkan lalu lintas ke pod baru untuk mengurangi dampak dari lonjakan lalu lintas mendadak. Blok kode sampel berikut menunjukkan contohnya:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/slow-start-enabled: "true"
    alb.ingress.kubernetes.io/slow-start-duration: "100"
  name: alb-ingress
spec:
  ingressClassName: alb
  rules:
  - host: alb.ingress.alibaba.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: tea-svc
            port:
              number: 80

Parameter

Deskripsi

alb.ingress.kubernetes.io/slow-start-enabled

Menentukan apakah akan mengaktifkan mode startup lambat.

  • true: mengaktifkan mode startup lambat.

  • false: menonaktifkan mode startup lambat.

Secara default, mode ini dinonaktifkan.

alb.ingress.kubernetes.io/slow-start-duration

Durasi peningkatan lalu lintas setelah startup lambat dalam detik. Memperpanjang durasi mengurangi laju pertumbuhan lalu lintas.

Nilai valid: 30 hingga 900.

Nilai default: 30.

Pengurasan koneksi

Jika sebuah pod memasuki status Terminating, ALB Ingress akan menghapusnya dari backend. Namun, permintaan yang sedang berlangsung mungkin masih ada dalam koneksi yang telah dibuat, dan kesalahan mungkin terjadi jika ALB Ingress segera menutup semua koneksi. Dengan pengurasan koneksi diaktifkan, ALB Ingress menjaga koneksi tetap terbuka selama periode tertentu setelah pod dihapus, memastikan shutdown yang lancar setelah permintaan saat ini selesai. Mode pengurasan koneksi adalah:

  • Nonaktif: Saat pod memasuki status Terminating, ALB Ingress menghapus pod dari backend dan segera menutup semua koneksi.

  • Aktif: Saat pod memasuki status Terminating, ALB Ingress mempertahankan permintaan yang sedang berlangsung tetap terbuka tetapi tidak menerima yang baru:

    • Jika ada permintaan yang sedang berlangsung, ALB Ingress menutup semua koneksi dan menghapus pod ketika timeout tercapai.

    • Jika pod menyelesaikan semua permintaan sebelum timeout, ALB Ingress segera menghapusnya.

Penting

Sebelum akhir pengurasan koneksi, ALB Ingress tidak akan mengakhiri koneksi dengan pod, tetapi tidak dapat menjamin pod tetap berjalan. Anda dapat mengontrol ketersediaan pod dalam status Terminating dengan mengonfigurasi spec.terminationGracePeriodSeconds atau menggunakan hook preStop.

Blok kode sampel berikut menunjukkan contoh untuk mengonfigurasi pengurasan koneksi:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/connection-drain-enabled: "true"
    alb.ingress.kubernetes.io/connection-drain-timeout: "199"
  name: alb-ingress
spec:
  ingressClassName: alb
  rules:
  - host: alb.ingress.alibaba.com
    http:
      paths:
      - path: /test
        pathType: Prefix
        backend:
          service:
            name: tea-svc
            port:
              number: 80

Parameter

Deskripsi

alb.ingress.kubernetes.io/connection-drain-enabled

Menentukan apakah akan mengaktifkan pengurasan koneksi.

  • true: mengaktifkan pengurasan koneksi.

  • false: menonaktifkan pengurasan koneksi.

Secara default, pengurasan koneksi dinonaktifkan.

alb.ingress.kubernetes.io/connection-drain-timeout

Periode timeout untuk pengurasan koneksi. Satuan: detik.

Nilai valid: 0 hingga 900.

Nilai default: 300.