All Products
Search
Document Center

Container Service for Kubernetes:Penggunaan lanjutan ALB Ingress

Last Updated:Mar 19, 2026

Dalam kluster ACK, ALB Ingress menyediakan load balancing lapisan 7 untuk layanan. Topik ini menjelaskan cara menggunakan ALB Ingress untuk mengalihkan permintaan dari nama domain atau jalur URL yang berbeda ke grup server backend yang berbeda, mengarahkan trafik HTTP ke HTTPS, serta menerapkan rilis bertahap.

Mengalihkan permintaan berdasarkan nama domain

Anda dapat membuat Ingress sederhana untuk mengalihkan permintaan berdasarkan nama domain tertentu atau nama domain kosong. Contoh berikut menunjukkan cara melakukannya.

Mengalihkan permintaan berdasarkan nama domain normal

Contoh YAML berikut mengonfigurasi jalur routing ke /hello. Permintaan ke demo.domain.ingress.top/hello dialihkan ke layanan backend.

  1. Anda dapat menerapkan templat berikut untuk membuat Service, deployment, dan Ingress. Ingress mengalihkan permintaan ke Service berdasarkan nama domain.

    Perluas untuk melihat contoh YAML

    Kluster versi 1.19 dan yang 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: 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

    Kluster sebelum versi 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: 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/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 kubectl get ing untuk mendapatkan alamat instans ALB. Ganti ADDRESS dalam perintah berikut dengan alamat instans ALB, lalu jalankan perintah tersebut.

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

    Output yang diharapkan:

    {"hello":"coffee"}

Mengalihkan permintaan berdasarkan nama domain kosong

Contoh YAML berikut mengonfigurasi nama domain kosong dan menetapkan jalur routing ke /hello. Permintaan ke <ADDRESS>/hello dialihkan ke layanan backend.

  1. Anda dapat menerapkan templat berikut untuk membuat Ingress.

    Perluas untuk melihat contoh YAML

    Kluster versi 1.19 dan yang 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: 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: ""
          http:
            paths:
              - backend:
                  service:
                    name: demo-service
                    port: 
                      number: 80
                path: /hello
                pathType: ImplementationSpecific

    Kluster sebelum versi 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: 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/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 kubectl get ing untuk mendapatkan alamat instans ALB. Ganti ADDRESS dalam perintah berikut dengan alamat instans ALB, lalu jalankan perintah tersebut.

    curl <ADDRESS>/hello

    Output yang diharapkan:

    {"hello":"coffee"}

Mengalihkan permintaan berdasarkan jalur URL

ALB Ingress dapat mengalihkan permintaan berdasarkan jalur URL. Anda dapat menggunakan bidang pathType untuk mengonfigurasi kebijakan pencocokan URL yang berbeda. Bidang pathType mendukung tiga metode pencocokan berikut.

  • Pencocokan eksak (Exact): Opsi ini melakukan pencocokan eksak terhadap jalur URL permintaan.

  • Bawaan (ImplementationSpecific): Menggunakan logika yang ditentukan oleh controller Ingress. Controller ALB Ingress memperlakukan ini sebagai pencocokan eksak (Exact). Jika jalur tidak ditentukan, ALB Ingress menggunakan / sebagai jalur bawaan.

  • Pencocokan awalan (Prefix): Mencocokkan awalan dari jalur URL permintaan.

Penting
  • Jika Anda menetapkan pathType ke Exact atau Prefix, Anda harus menentukan jalur mutlak non-kosong untuk path tersebut. Jika tidak, resource Ingress gagal divalidasi dan tidak dapat dibuat.

  • Kebijakan pencocokan URL dapat saling bertentangan. Dalam kasus ini, aturan pengalihan diurutkan berdasarkan prioritas sebelum permintaan dialihkan. Untuk informasi lebih lanjut, lihat Mengonfigurasi prioritas aturan pengalihan.

  • Jalur sederhana (/、/foo、/foo/)

    Metode pencocokan

    Jalur aturan (aturan routing)

    Jalur permintaan (akses pengguna)

    Cocok dengan aturan ini?

    Pencocokan awalan (Prefix)

    /

    / (mencocokkan semua aturan)

    Ya

    /foo

    • /foo

    • /foo/

    Ya

    /foo/

    • /foo

    • /foo/

    Ya

    /aaa

    /ccc

    Tidak, awalan tidak cocok.

    Pencocokan eksak (Exact) atau bawaan (ImplementationSpecific)

    /foo

    /foo

    Ya

    /bar

    Tidak

    /foo/

    Tidak

    /foo/

    /foo

    Tidak

  • Jalur hierarkis (/aaa/bb、/aaa/bbb、/aaa/bbb/)

    Metode pencocokan

    Jalur aturan (aturan routing)

    Jalur permintaan (akses pengguna)

    Cocok dengan aturan ini?

    Pencocokan awalan (Prefix)

    /aaa/bb

    /aaa/bbb

    Tidak

    /aaa/bbb

    /aaa/bbb

    Ya

    /aaa/bbb/

    /aaa/bbb

    Ya, garis miring di akhir pada jalur aturan diabaikan.

    /aaa/bbb

    /aaa/bbb/

    Ya, mencocokkan garis miring di akhir pada jalur permintaan.

    /aaa/bbb/ccc

    Ya, mencocokkan subjalur dari jalur permintaan.

  • Mengonfigurasi dua jalur aturan secara bersamaan

    Metode pencocokan

    Jalur aturan (aturan routing)

    Jalur permintaan (akses pengguna)

    Cocok dengan aturan ini?

    Pencocokan awalan (Prefix)

    • /

    • /aaa

    /aaa/ccc

    Ya, jalur permintaan mencocokkan awalan / dalam jalur aturan.

    • /aaa

    • /

    /aaa/ccc

    Ya, jalur permintaan mencocokkan awalan /aaa dalam jalur aturan.

    /ccc

    Ya, jalur permintaan mencocokkan awalan / dalam jalur aturan.

    • /aaa

    • /bbb

    /ccc

    Tidak, awalan tidak cocok.

Contoh berikut menunjukkan ketiga metode pencocokan tersebut:

Pencocokan awalan (Prefix)

Jalur URL menggunakan pencocokan awalan, yang dipisahkan oleh /. Pencocokan bersifat case-sensitive dan membandingkan setiap elemen dalam jalur secara hierarkis.

Dalam contoh YAML berikut, aturan routing dikonfigurasi sebagai /. Semua jalur yang dimulai dengan /, seperti /hello, akan dicocokkan dan dapat diakses.

  1. Anda dapat menerapkan templat berikut untuk membuat Ingress.

    Perluas untuk melihat contoh YAML

    Kluster versi 1.19 dan yang 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

    Kluster sebelum versi 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
  2. Jalankan perintah kubectl get ing untuk mendapatkan alamat instans ALB. Ganti ADDRESS dalam perintah berikut dengan alamat instans ALB, lalu jalankan perintah tersebut.

    curl <ADDRESS>/hello

    Output yang diharapkan:

    {"hello":"coffee"}

Pencocokan eksak (Exact) atau bawaan (ImplementationSpecific)

Dalam contoh YAML berikut, aturan routing dikonfigurasi sebagai /hello. Hanya jalur /hello yang dicocokkan dan dapat diakses.

  1. Anda dapat menerapkan templat berikut untuk membuat Ingress.

    Perluas untuk melihat contoh YAML

    Kluster versi 1.19 dan yang 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

    Kluster sebelum versi 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 kubectl get ing untuk mendapatkan alamat instans ALB. Ganti ADDRESS dalam perintah berikut dengan alamat instans ALB, lalu jalankan perintah tersebut.

    curl <ADDRESS>/hello

    Output yang diharapkan:

    {"hello":"coffee"}

Mengonfigurasi pemeriksaan kesehatan

ALB Ingress mendukung konfigurasi pemeriksaan kesehatan yang menggunakan anotasi berikut.

Perluas untuk melihat contoh YAML lengkap

Kluster versi 1.19 dan yang 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:
      # Configure Context Path
      - path: /tea
        pathType: ImplementationSpecific
        backend:
          service:
            name: tea-svc
            port:
              number: 80
      # Configure Context Path
      - path: /coffee
        pathType: ImplementationSpecific
        backend:
          service:
            name: coffee-svc
            port:
              number: 80

Kluster sebelum versi 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:
      # Configure Context Path.
      - path: /tea
        backend:
          serviceName: tea-svc
          servicePort: 80
      # Configure Context Path.
      - path: /coffee
        backend:
          serviceName: coffee-svc
          servicePort: 80

Contoh anotasi:

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

Parameter

Deskripsi

Nilai bawaan

alb.ingress.kubernetes.io/healthcheck-enabled

Menentukan apakah pemeriksaan kesehatan diaktifkan untuk grup server backend.

  • true: Mengaktifkan pemeriksaan kesehatan.

  • false: Menonaktifkan pemeriksaan kesehatan.

false

alb.ingress.kubernetes.io/healthcheck-path

Jalur pemeriksaan kesehatan.

/

alb.ingress.kubernetes.io/healthcheck-protocol

Protokol yang digunakan untuk pemeriksaan kesehatan.

  • HTTP: Menggunakan protokol HTTP. Mengirim permintaan HEAD atau GET untuk mensimulasikan akses browser dan memeriksa apakah aplikasi server dalam kondisi sehat.

  • HTTPS: Menggunakan protokol HTTPS. Mengirim permintaan HEAD atau GET untuk mensimulasikan akses browser dan memeriksa apakah aplikasi server dalam kondisi sehat.

  • TCP: Menggunakan protokol TCP. Mengirim pesan jabat tangan SYN untuk memeriksa apakah port server aktif.

  • GRPC: Menggunakan protokol gRPC. Mengirim permintaan POST atau GET untuk memeriksa apakah aplikasi server dalam kondisi sehat.

HTTP

alb.ingress.kubernetes.io/healthcheck-httpversion

Versi protokol HTTP. Berlaku hanya ketika healthcheck-protocol diatur ke HTTP atau HTTPS.

  • HTTP1.0

  • HTTP1.1

HTTP1.1

alb.ingress.kubernetes.io/healthcheck-method

Metode pemeriksaan kesehatan.

  • HEAD

  • POST

  • GET

Penting

Ketika healthcheck-protocol diatur ke GRPC, pilih POST atau GET.

HEAD

alb.ingress.kubernetes.io/healthcheck-httpcode

Kode status pemeriksaan kesehatan. Server backend dianggap sehat hanya jika permintaan probe berhasil dan mengembalikan kode status yang ditentukan.

Anda dapat menentukan satu atau beberapa opsi berikut. Pisahkan beberapa kode status dengan koma (,):

  • http_2xx

  • http_3xx

  • http_4xx

  • http_5xx

http_2xx

alb.ingress.kubernetes.io/healthcheck-code

Kode status pemeriksaan kesehatan. Server backend dianggap sehat hanya jika permintaan probe berhasil dan mengembalikan kode status yang ditentukan. Jika parameter healthcheck-httpcode dan parameter ini keduanya ditentukan, parameter ini memiliki prioritas lebih tinggi.

Nilai yang valid bergantung pada nilai healthcheck-protocol:

  • HTTP atau HTTPS:

    Anda dapat menentukan satu atau beberapa opsi berikut. Pisahkan beberapa kode status dengan koma (,):

    • http_2xx

    • http_3xx

    • http_4xx

    • http_5xx

  • GRPC: Nilai yang valid: [0, 99].

    Input rentang didukung. Anda dapat menentukan hingga 20 rentang. Pisahkan beberapa rentang dengan koma (,).

  • HTTP atau HTTPS

    Nilai bawaan: http_2xx

  • GRPC

    Nilai bawaan: 0

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

Periode timeout pemeriksaan kesehatan, dalam detik. Nilai yang valid: [1, 300].

5

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

Interval pemeriksaan kesehatan, dalam detik. Nilai yang valid: [1, 50].

2

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

Jumlah pemeriksaan kesehatan berturut-turut yang berhasil yang diperlukan untuk menandai server backend sebagai sehat. Nilai yang valid: [2, 10].

3

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

Jumlah pemeriksaan kesehatan berturut-turut yang gagal yang diperlukan untuk menandai server backend sebagai tidak sehat. Nilai yang valid: [2, 10].

3

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

Port yang digunakan untuk pemeriksaan kesehatan.

0

Catatan

0 menunjukkan bahwa port server backend digunakan untuk pemeriksaan kesehatan.

Mengarahkan trafik HTTP ke HTTPS

ALB Ingress dapat mengarahkan permintaan HTTP ke Port HTTPS 443 menggunakan anotasi berikut.

Penting
  • Anotasi ini hanya berlaku untuk aturan pengalihan HTTP yang dikonfigurasi pada port pendengar 80.

  • Anotasi ini hanya berfungsi dengan aksi pengalihan kustom, seperti RemoveHeader dan InsertHeader, serta anotasi terkait CORS Cors.

  • Untuk menggunakan anotasi ini, Anda harus memastikan bahwa pendengar HTTPS pada port 443 dikonfigurasi dalam AlbConfig. Untuk informasi lebih lanjut, lihat Mengonfigurasi pendengar ALB menggunakan AlbConfig.

Perluas untuk melihat contoh YAML lengkap

Kluster versi 1.19 dan yang 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: NodePort
---
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

Kluster sebelum versi 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: NodePort
---
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

Parameter

Deskripsi

Contoh anotasi

alb.ingress.kubernetes.io/ssl-redirect: "true"

Mengarahkan permintaan HTTP ke Port HTTPS 443.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/ssl-redirect: "true"
  name: demo-ssl
 ... ...

Dukungan protokol backend HTTPS dan gRPC

ALB mendukung HTTPS dan gRPC sebagai protokol backend. Anda dapat menambahkan anotasi berikut ke Ingress Anda.

Perluas untuk melihat contoh YAML lengkap

Kluster versi 1.19 dan yang lebih baru

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/backend-protocol: "grpc"
  name: demo-alb-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

Kluster sebelum versi 1.19

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/backend-protocol: "grpc"
  name: demo-alb-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
Catatan

Setelah Ingress dibuat, Anda tidak dapat mengubah protokol backend. Untuk mengubah protokol, Anda harus menghapus lalu membuat ulang Ingress.

Parameter

Deskripsi

Contoh YAML

alb.ingress.kubernetes.io/backend-protocol

  • Layanan backend menggunakan HTTPS.

  • grpc: Layanan backend menggunakan protokol gRPC.

    Untuk mengalihkan layanan gRPC melalui Ingress, konfigurasikan sertifikat SSL untuk nama domain yang sesuai dan gunakan protokol TLS untuk komunikasi.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/backend-protocol: "grpc"
  name: demo-alb-ingress
... ...

Mengonfigurasi ekspresi reguler

Anda dapat menggunakan anotasi alb.ingress.kubernetes.io/use-regex: "true" untuk mengaktifkan mode regex. Kemudian, Anda dapat mengonfigurasi ekspresi reguler yang sesuai dalam kondisi atau aksi pengalihan kustom.

Penting
  • Anotasi ini hanya berlaku untuk aturan jalur yang memiliki pathType diatur ke Prefix.

  • Jika anotasi ini ada, terlepas dari apakah nilainya true atau false, pencocokan regex diaktifkan. Pencocokan regex dinonaktifkan hanya jika Anda menghapus anotasi ini.

  • Jika anotasi ini tidak dikonfigurasi dan jalur berisi karakter khusus, seperti “%#;!()[]^,”\", resource Ingress tidak dapat dibuat.

Perluas untuk melihat contoh YAML lengkap

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/use-regex: "true"  ## Mengizinkan penggunaan ekspresi reguler.
   alb.ingress.kubernetes.io/conditions.<YOUR-SVC-NAME>: | ## Ganti <YOUR-SVC-NAME> dengan nama layanan aktual. Harus sesuai dengan backend.service.name di bawah ini.
     [{
       "type": "Path",
       "pathConfig": {
           "values": [
              "~*/pathvalue1", ## Tambahkan ~* atau ~ sebagai flag regex sebelum ekspresi reguler. Konten setelah ~* atau ~ adalah regex yang efektif. ~* menunjukkan pencocokan case-sensitive, dan ~ menunjukkan pencocokan case-insensitive.
              "/pathvalue2"    ## Tidak perlu ~* untuk pencocokan eksak.
           ]
       }
      }]
  name: ingress-example
spec:
  ingressClassName: alb
  rules:
   - http:
      paths:
      - path: /test-path-for-alb
        pathType: Prefix
        backend:
          service:
            name: <YOUR-SVC-NAME> ## Ganti <YOUR-SVC-NAME> dengan nama layanan aktual. Harus sesuai dengan nama layanan yang ditentukan dalam kondisi pengalihan kustom dalam anotasi.
            port:
              number: 88

Parameter

Deskripsi

alb.ingress.kubernetes.io/use-regex: "true"

Mengaktifkan ekspresi reguler.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/use-regex: "true"  ## Mengizinkan penggunaan ekspresi reguler.
   alb.ingress.kubernetes.io/conditions.<YOUR-SVC-NAME>: | ## Ganti <YOUR-SVC-NAME> dengan nama layanan aktual. Harus sesuai dengan backend.service.name di bawah ini.
     [{
       "type": "Path",         ## Host juga didukung.
       "pathConfig": {
           "values": [
              "~*/pathvalue1", ## Tambahkan ~* atau ~ sebagai flag regex sebelum ekspresi reguler. Konten setelah ~* atau ~ adalah regex yang efektif. ~* menunjukkan pencocokan case-sensitive, dan ~ menunjukkan pencocokan case-insensitive.
              "/pathvalue2"    ## Tidak perlu ~* untuk pencocokan eksak.
           ]
       }
      }]
... ...

alb.ingress.kubernetes.io/conditions.<YOUR-SVC-NAME>

Mengonfigurasi kondisi pengalihan kustom. Untuk informasi lebih lanjut, lihat Menyesuaikan aturan pengalihan ALB Ingress.

<YOUR-SVC-NAME> dengan nama layanan aktual. Harus sesuai dengan backend.service.name di bawah ini.

Aturan pencocokan ekspresi reguler:

Objek pencocokan

Awalan

Contoh aturan

Jalur klien

Cocok?

Deskripsi

Nama domain

Dimulai dengan ~

~test.example.com

test.EXAMPLE.com

Ya

Nama domain mendukung pencocokan regex case-insensitive.

Jalur

Dimulai dengan ~

~/api

/API

Ya

Jalur mendukung pencocokan regex case-insensitive.

Dimulai dengan ~*

~*/api

/Api

Tidak

Jalur mendukung pencocokan regex case-sensitive.

Mengonfigurasi pencocokan awalan regex

Secara bawaan, pencocokan regex menggunakan "pencocokan berisi". Artinya, aturan dicocokkan jika permintaan berisi konten yang sesuai dengan ekspresi reguler. Untuk mencocokkan jalur yang dimulai dengan konten tertentu, tambahkan ^ di awal ekspresi reguler. Ini menunjukkan bahwa hanya jalur yang dimulai dengan konten yang ditentukan yang dicocokkan. Misalnya, ^/api hanya mencocokkan jalur permintaan yang dimulai dengan /api.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-example
  annotations:
    alb.ingress.kubernetes.io/use-regex: "true"  ## Mengaktifkan pencocokan regex.
    alb.ingress.kubernetes.io/conditions.<YOUR-SVC-NAME>: |     ## Ganti <YOUR-SVC-NAME> dengan nama layanan aktual. Harus sesuai dengan backend.service.name di bawah ini.
      [
        {
          "type": "Path",
          "pathConfig": {
            "values": [
              "~*^/pathvalue1",  # ~* atau ~ menunjukkan pencocokan regex; ^ menunjukkan "dimulai dengan /pathvalue1".
              "/pathvalue2"     # Pencocokan awalan atau eksak biasa. Tidak perlu ~* atau ~.
            ]
          }
        }
      ]
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
          - path: /test-path-for-alb
            pathType: Prefix
            backend:
              service:
                name: <YOUR-SVC-NAME>   # Ganti dengan nama layanan aktual. Harus sesuai dengan anotasi.
                port:
                  number: 88

Mengonfigurasi penulisan ulang

ALB Ingress mendukung fitur rewrite. Setelah ALB Ingress menerima permintaan klien, fitur ini memodifikasi jalur permintaan sebelum mengirim permintaan ke Service backend. Fitur rewrite diimplementasikan menggunakan dua anotasi berikut:

  • alb.ingress.kubernetes.io/rewrite-target: /<path>/${number}: Mengaktifkan rewrite dan menentukan jalur yang ditulis ulang.

    Penting
    • Gunakan format ${number} untuk merepresentasikan variabel yang ditangkap dari jalur asli menggunakan ekspresi reguler. Anda dapat mengonfigurasi ${1}, ${2}, atau ${3}. Anda dapat menangkap hingga tiga variabel dari jalur asli.

    • Anda harus mengatur pathType ke Prefix dalam Ingress.

  • alb.ingress.kubernetes.io/use-regex: true: Menggunakan ekspresi reguler dalam jalur. Ini diaktifkan secara bawaan ketika rewrite-target dikonfigurasi.

    Penting
    • Jika anotasi ini ada, terlepas dari apakah nilainya true atau false, pencocokan regex diaktifkan. Pencocokan regex dinonaktifkan hanya jika Anda menghapus anotasi ini.

    • Jika anotasi ini tidak dikonfigurasi dan jalur berisi karakter khusus, seperti “%#;!()[]^,”\", resource Ingress tidak dapat dibuat.

Contoh konfigurasi

Contoh 1: Menghapus awalan

Dalam contoh YAML berikut, path: /something(/|$)(.*) membagi jalur permintaan klien menjadi tiga bagian menggunakan ekspresi reguler:

  • /something: Mencocokkan awalan yang ingin Anda hapus.

  • (/|$): Grup penangkapan pertama. Grup ini mencocokkan /something yang diikuti oleh / atau $ (akhir jalur).

  • (.*): Grup penangkapan kedua. Grup ini mencocokkan semua konten setelah /something/. Anda dapat menggunakan ${2} dalam jalur yang ditulis ulang.

Jalur rewrite yang dikonfigurasi dalam anotasi alb.ingress.kubernetes.io/rewrite-target adalah / (awalan jalur standar) + ${2} (konten grup penangkapan kedua). Tabel berikut menjelaskan efek penulisan ulang jalur.

Jalur klien asli

Cocok dengan regex Jalur?

Jalur yang ditulis ulang

/something

Cocok. Grup penangkapan kedua kosong.

/

/something/

Cocok. Grup penangkapan kedua kosong.

/

/something/new

Cocok. Grup penangkapan kedua adalah new.

/new

/something-new/item

Tidak cocok. Dalam contoh ini, tidak ada aturan routing yang cocok, dan ALB Ingress mengembalikan kode status 503.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rewrite-ingress
  annotations:
    alb.ingress.kubernetes.io/use-regex: "true" # Mengizinkan bidang path menggunakan ekspresi reguler.
    alb.ingress.kubernetes.io/rewrite-target: /${2} # Anotasi ini mendukung penggantian regex.
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /something(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: rewrite-svc
            port:
              number: 9080

Contoh 2: Menangkap dan mengatur ulang beberapa bagian

Contoh berikut menangkap beberapa bagian dari jalur /items/(.*)/(.*)/(.*) dan mengaturnya ulang. Hal ini mengubah format URL menjadi bentuk seperti POST tanpa sepengetahuan pengguna. Jalur rewrite adalah / (awalan jalur standar) + ${2} (konten grup penangkapan kedua) + ?code= + ${3} (konten grup penangkapan ketiga). Tabel berikut menjelaskan efek penulisan ulang jalur.

Contoh ini memerlukan tepat empat segmen dalam jalur. Anda hanya dapat menggunakan metode ini jika klien menggunakan format jalur tetap.

Jalur klien asli

Cocok dengan regex Jalur?

Jalur yang ditulis ulang

/items/electronics/computers/554

Cocok. Grup penangkapan kedua adalah computers, dan grup penangkapan ketiga adalah 554.

/computers?code=554

/items/produce/fruits/12

Cocok. Grup penangkapan kedua adalah fruits, dan grup penangkapan ketiga adalah 12.

/fruits?code=12

/items/headphones/5

Tidak cocok. Dalam contoh ini, tidak ada aturan routing yang cocok, dan ALB Ingress mengembalikan kode status 503.

/drinks/41

Tidak cocok. Dalam contoh ini, tidak ada aturan routing yang cocok, dan ALB Ingress mengembalikan kode status 503.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rewrite-ingress
  annotations:
    alb.ingress.kubernetes.io/use-regex: "true" # Mengizinkan bidang path menggunakan ekspresi reguler.
    alb.ingress.kubernetes.io/rewrite-target: /${2}?code=${3} # Anotasi ini mendukung penggantian regex.
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /items/(.*)/(.*)/(.*)
        pathType: Prefix
        backend:
          service:
            name: rewrite-svc
            port:
              number: 9080

Contoh 3: Menulis ulang beberapa jalur ke satu jalur

Contoh berikut menggunakan pencocokan regex untuk beberapa jalur, /app-a(/|$)(.*) dan /app-b(/|$)(.*), dan menulis ulangnya ke satu jalur. Jalur rewrite adalah /app-c/ + ${2} (konten grup penangkapan kedua). Tabel berikut menjelaskan efek penulisan ulang jalur.

Jalur klien asli

Cocok dengan regex Jalur?

Jalur yang ditulis ulang

/app-a/item1

Cocok. Grup penangkapan kedua adalah item1.

/app-c/item1

/app-a/item2

Cocok. Grup penangkapan kedua adalah item2.

/app-c/item2

/app-a atau /app-a/

Cocok. Grup penangkapan kedua kosong.

/app-c/

/drinks/41

Tidak cocok. Dalam contoh ini, tidak ada aturan routing yang cocok, dan ALB Ingress mengembalikan kode status 503.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rewrite-ingress
  annotations:
    alb.ingress.kubernetes.io/use-regex: "true" # Mengizinkan bidang path menggunakan ekspresi reguler.
    alb.ingress.kubernetes.io/rewrite-target: /app-c/${2} # Anotasi ini mendukung penggantian regex.
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /app-a(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: rewrite-svc
            port:
              number: 9080
      - path: /app-b(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: rewrite-svc
            port:
              number: 9080

Contoh 4: Menulis ulang nama domain

Anotasi alb.ingress.kubernetes.io/rewrite-target hanya mendukung perubahan jalur. Untuk mengubah bagian lain dari URL, seperti nama domain atau parameter, Anda dapat menggunakan aturan pengalihan kustom.

Memverifikasi pencocokan aturan penulisan ulang

Anda dapat menggunakan perintah sed untuk menguji terlebih dahulu apakah jalur klien tertentu cocok dengan ekspresi reguler yang dikonfigurasi dalam path dan untuk melihat jalur yang ditulis ulang.

Ambil jalur penangkapan /items/(.*)/(.*)/(.*) dan aturan penulisan ulang /${2}?code=${3} dari Contoh 2: Menangkap dan mengatur ulang beberapa bagian sebagai contoh:

  1. Simpan perintah contoh berikut ke path2.txt:

    /items/electronics/computers/554
    /items/produce/fruits/12
    /items/headphones/5
    /drinks/41
  2. Periksa apakah jalur-jalur tersebut cocok dan lihat jalur yang ditulis ulang:

    Dalam perintah berikut, ekspresi reguler jalur (/items/(.*)/(.*)/(.*)) dan jalur yang ditulis ulang (/${2}?code=${3}) dari contoh digunakan. Dalam perintah `sed`, karakter khusus / di-escape dengan \, dan notasi grup penangkapan diubah dari ${2} menjadi \2.
    sed -E 's#\/items\/(.*)\/(.*)\/(.*)#Matched: [&]  --->  Rewritten: [/\2?code=\3]#' path2.txt

    Output yang diharapkan: Dua jalur pertama cocok dengan aturan penulisan ulang dan ditulis ulang ke jalur baru. Dua jalur terakhir tidak cocok dan tidak ditulis ulang.

    Matched: [/items/electronics/computers/554]  --->  Rewritten: [/computers?code=554]
    Matched: [/items/produce/fruits/12]  --->  Rewritten: [/fruits?code=12]
    /items/headphones/5
    /drinks/41

Mengonfigurasi port pendengar kustom

ALB Ingress mendukung port pendengar kustom yang menggunakan anotasi. Hal ini memungkinkan layanan untuk mengekspos port 80 (HTTP) dan port 443 (HTTPS) secara bersamaan.

Perluas untuk melihat contoh YAML lengkap

Kluster versi 1.19 dan yang 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
  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

Kluster sebelum versi 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
  tls:
  - hosts:
    - demo.alb.ingress.top
  rules:
    - host: demo.alb.ingress.top
      http:
        paths:
          - backend:
              serviceName: tea-svc
              servicePort: 80
            path: /tea
            pathType: ImplementationSpecific
Penting

ALB tidak mendukung pembuatan pendengar baru secara langsung dalam Ingress. Untuk memastikan Ingress berfungsi sebagaimana mestinya, Anda harus terlebih dahulu membuat port dan protokol pendengar yang diperlukan dalam AlbConfig. Kemudian, Anda dapat mengaitkan pendengar ini dengan layanan dalam Ingress. Untuk informasi lebih lanjut tentang cara membuat pendengar ALB, lihat Mengonfigurasi pendengar ALB menggunakan AlbConfig.

Parameter

Deskripsi

Contoh YAML

alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'

Mengaktifkan layanan untuk mendengarkan pada port 80 dan port 443.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'
... ...

Mengonfigurasi prioritas aturan pengalihan

Secara bawaan, prioritas aturan pengalihan ALB diurutkan dalam urutan berikut:

  • Resource Ingress yang berbeda diurutkan berdasarkan urutan leksikografis namespace/name. Urutan leksikografis yang lebih kecil menunjukkan prioritas yang lebih tinggi.

    Namespace dibandingkan terlebih dahulu. Jika namespace sama, nama dibandingkan karakter per karakter.
  • Dalam Ingress yang sama, aturan diurutkan berdasarkan urutannya dalam bidang rule. Aturan yang dikonfigurasi lebih awal memiliki prioritas lebih tinggi.

    rules:
      - host: www.example.com
        http: ...
      - host: www.test.com
        http: ...

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

Perluas untuk melihat contoh YAML lengkap

Kluster versi 1.19 dan yang 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

Kluster sebelum versi 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
            pathType: ImplementationSpecific

Parameter

Deskripsi

Nilai yang valid

Contoh YAML

alb.ingress.kubernetes.io/order

Menentukan prioritas aturan pengalihan ALB. Nilai yang lebih kecil menunjukkan prioritas yang lebih tinggi.

Prioritas aturan harus unik dalam pendengar yang sama.

[1,1000]

Nilai bawaan: 10

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/order: "2"
spec:
... ...

Menerapkan rilis bertahap melalui anotasi

ALB mendukung routing kompleks dan rilis bertahap berdasarkan header, cookie, dan bobot. Anda dapat mengonfigurasi anotasi berikut untuk secara fleksibel menerapkan berbagai strategi rilis bertahap. Untuk informasi lebih lanjut tentang praktik terbaik rilis bertahap, lihat Menerapkan rilis bertahap menggunakan ALB Ingress.

Parameter

Deskripsi

Catatan

alb.ingress.kubernetes.io/canary: "true"

Mengaktifkan rilis bertahap.

  • Trafik bertahap dapat dialokasikan berdasarkan header, cookie, atau bobot.

    Prioritas alokasi: Header > Cookie > Bobot (dari yang tertinggi ke terendah).
  • Jangan menghapus aturan asli selama rilis bertahap. Jika tidak, dapat terjadi gangguan layanan. Setelah memverifikasi rilis bertahap, perbarui layanan backend dalam Ingress asli ke layanan baru, lalu hapus Ingress bertahap.

  • Mengalokasikan trafik untuk rilis bertahap berdasarkan header tertentu

    Parameter

    Deskripsi

    Contoh YAML

    alb.ingress.kubernetes.io/canary-by-header

    Aturan ini memungkinkan Anda menyesuaikan header permintaan dan nilainya. Anda harus mengonfigurasi kedua anotasi tersebut.

    • Ketika header dan header-value dalam permintaan cocok dengan nilai yang dikonfigurasi, trafik permintaan diarahkan ke titik akhir layanan bertahap.

    • Permintaan lain yang tidak cocok dialokasikan ke layanan bertahap berikutnya berdasarkan prioritas bertahap.

    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
    spec:
    ... ...

    alb.ingress.kubernetes.io/canary-by-header-value

    Jika header permintaan berisi location: hz, trafik diarahkan ke layanan bertahap. Permintaan lain dialokasikan ke layanan bertahap yang sesuai berdasarkan strategi berbasis bobot. Konfigurasi contoh berikut digunakan:

    Perluas untuk melihat contoh YAML lengkap

    Kluster versi 1.19 dan yang 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

    Kluster sebelum versi 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
  • Mengalokasikan trafik untuk rilis bertahap berdasarkan cookie tertentu

    Parameter

    Nilai cookie

    Contoh YAML

    alb.ingress.kubernetes.io/canary-by-cookie

    • always: Semua trafik permintaan diarahkan ke titik akhir layanan bertahap.

    • never: Tidak ada trafik permintaan yang diarahkan ke titik akhir layanan bertahap.

    Rilis bertahap berbasis cookie hanya mendukung always dan never.

    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
      ... ... 

    Jika header permintaan berisi Cookie: demo=always, trafik diarahkan ke layanan bertahap. Jika header permintaan berisi Cookie: demo=never, trafik tidak diarahkan ke layanan bertahap. Konfigurasi contoh berikut digunakan:

    Perluas untuk melihat contoh YAML lengkap

    Kluster versi 1.19 dan yang 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

    Kluster sebelum versi 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
  • Mengalokasikan trafik berdasarkan bobot

    Parameter

    Deskripsi

    Contoh YAML

    alb.ingress.kubernetes.io/canary-weight

    Menetapkan persentase permintaan yang diarahkan ke layanan tertentu. Nilai yang valid: bilangan bulat dari 0 hingga 100.

    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

    Anda dapat mengonfigurasi bobot layanan bertahap menjadi 50%. Konfigurasi contoh berikut digunakan:

    Perluas untuk melihat contoh YAML lengkap

    Kluster versi 1.19 dan yang 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

    Kluster sebelum versi 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

Menerapkan persistensi sesi melalui anotasi

ALB Ingress mendukung persistensi sesi yang menggunakan anotasi berikut.

Perluas untuk melihat contoh YAML lengkap

Kluster versi 1.19 dan yang lebih baru

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"   # Ketika cookie kustom didukung, jenis penyisipan cookie harus Server.
    alb.ingress.kubernetes.io/cookie-timeout: "1800"
    alb.ingress.kubernetes.io/cookie: "test"
spec:
  ingressClassName: alb
  rules:
  - http:
      paths:
      - backend:
          service:
            name: tea-svc
            port:
              number: 80
        path: /tea2
        pathType: ImplementationSpecific
      - backend:
          service:
            name: coffee-svc
            port:
              number: 80
        path: /coffee2
        pathType: ImplementationSpecific

Kluster sebelum versi 1.19

apiVersion: 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"  # Ketika cookie kustom didukung, jenis penyisipan cookie harus Server.
    alb.ingress.kubernetes.io/cookie-timeout: "1800"
    alb.ingress.kubernetes.io/cookie: "test"
spec:
  ingressClassName: alb
  rules:
  - http:
      paths:
      # Configure Context Path.
      - path: /tea2
        pathType: ImplementationSpecific
        backend:
          serviceName: tea-svc
          servicePort: 80
      # Configure Context Path.
      - path: /coffee2
        pathType: ImplementationSpecific
        backend:
          serviceName: coffee-svc
          servicePort: 80

Contoh anotasi:

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: "Server"   # Ketika cookie kustom didukung, jenis penyisipan cookie harus Server.
    alb.ingress.kubernetes.io/cookie-timeout: "1800"
    alb.ingress.kubernetes.io/cookie: "test"
spec:
... ...

Parameter

Deskripsi

Nilai bawaan

alb.ingress.kubernetes.io/sticky-session

Menentukan apakah persistensi sesi diaktifkan.

  • true: Diaktifkan

  • false: Dimatikan

false

alb.ingress.kubernetes.io/sticky-session-type

Metode pemrosesan cookie.

  • Insert: Menyisipkan cookie. Ketika klien mengakses layanan untuk pertama kali, load balancer menyisipkan cookie (SERVERID) ke respons HTTP atau HTTPS. Pada permintaan berikutnya, klien mengirim cookie ini, dan load balancer mengarahkan permintaan ke server backend yang sebelumnya direkam.

  • Server: Menulis ulang cookie. Jika load balancer mendeteksi cookie yang ditentukan pengguna, load balancer menulis ulang cookie asli. Pada permintaan berikutnya, klien mengirim cookie baru, dan load balancer mengarahkan permintaan ke server backend yang sebelumnya direkam.

Catatan

Parameter ini hanya berlaku ketika StickySessionEnabled diatur ke true untuk grup server. Untuk informasi lebih lanjut tentang parameter grup server, lihat Membuat grup server.

Insert

alb.ingress.kubernetes.io/cookie-timeout

Periode timeout cookie, dalam detik. Nilai yang valid: 1–86400.

Anotasi ini hanya berlaku ketika sticky-session-type diatur ke Insert.

1000

alb.ingress.kubernetes.io/cookie

Nilai cookie kustom.

Anotasi ini wajib dan tidak boleh kosong ketika sticky-session-type diatur ke Server.

""

Menentukan algoritma penyeimbangan beban untuk grup server

ALB Ingress mendukung penentuan algoritma penyeimbangan beban untuk grup server menggunakan anotasi berikut. Tabel berikut mencantumkan nilai yang valid dan deskripsinya.

Perluas untuk melihat contoh YAML lengkap

Kluster versi 1.19 dan yang lebih baru

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/backend-scheduler: "uch" # Anda juga dapat mengatur parameter ini ke wrr, sch, atau wlc sesuai kebutuhan.
    alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # Parameter ini wajib hanya ketika algoritma penyeimbangan beban adalah uch. Tidak diperlukan ketika algoritma 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

Kluster sebelum versi 1.19

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/backend-scheduler: "uch" # Anda juga dapat mengatur parameter ini ke wrr, sch, atau wlc sesuai kebutuhan.
    alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # Parameter ini wajib hanya ketika algoritma penyeimbangan beban adalah uch. Tidak diperlukan ketika algoritma 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
            pathType: ImplementationSpecific

Parameter

Nilai

Deskripsi

alb.ingress.kubernetes.io/backend-scheduler

wrr

Weighted round-robin. Server backend dengan bobot lebih tinggi menerima lebih banyak permintaan (nilai bawaan).

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/backend-scheduler: "uch" # Anda juga dapat mengatur parameter ini ke wrr, sch, atau wlc sesuai kebutuhan.
    alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # Parameter ini wajib hanya ketika algoritma penyeimbangan beban adalah uch. Tidak diperlukan ketika algoritma adalah wrr, sch, atau wlc.
spec:
... ... 

wlc

Mendistribusikan permintaan berdasarkan bobot dan beban saat ini (jumlah koneksi) setiap server backend. Jika bobot sama, server dengan koneksi lebih sedikit lebih disukai.

sch

Hash konsisten IP sumber. Permintaan dari alamat IP klien yang sama secara konsisten diarahkan ke server backend yang sama.

uch

Hash konsisten parameter URL.

Gunakan anotasi alb.ingress.kubernetes.io/backend-scheduler-uch-value untuk menentukan parameter URL untuk hashing konsisten.

Konfigurasi lintas-origin

ALB Ingress mendukung pengendalian perilaku lintas-origin menggunakan parameter anotasi berikut. Anda dapat menentukan situs yang diizinkan, metode permintaan, header permintaan dan respons, transmisi kredensial, serta durasi cache preflight (OPTIONS) untuk memenuhi persyaratan akses lintas-origin yang berbeda dalam skenario keamanan dan bisnis.

Perluas untuk melihat contoh YAML lengkap

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"
    alb.ingress.kubernetes.io/cors-allow-origin: "Nama domain lintas-origin yang diizinkan"
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: cloud-nodeport
            port:
              number: 80

Contoh anotasi:

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"
    alb.ingress.kubernetes.io/cors-allow-origin: "Nama domain lintas-origin yang diizinkan"
spec:
... ...

Parameter

Deskripsi

Nilai bawaan

alb.ingress.kubernetes.io/enable-cors

Mengaktifkan konfigurasi lintas-origin CORS.

Nilai bawaan: "false"

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

Situs yang diizinkan mengakses sumber daya server melalui browser.

Pisahkan situs dengan koma (,). Setiap nilai harus dimulai dengan http:// atau https:// diikuti oleh nama domain yang valid atau nama domain wildcard tingkat atas. Alamat IP tidak didukung.
  • Nilai bawaan: *

  • 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 lintas-origin yang diizinkan.

Tidak case-sensitive. Pisahkan metode dengan koma (,).
  • Nilai bawaan: 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 untuk propagasi lintas-origin.

Dapat diatur ke * atau satu atau beberapa nilai yang dipisahkan koma (,). Setiap nilai hanya dapat berisi huruf dan angka, tidak boleh diawali atau diakhiri dengan garis bawah (_) atau tanda hubung (-), dan tidak boleh melebihi 32 karakter.
  • Nilai bawaan: 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

Daftar header yang diizinkan untuk diekspos.

Dapat diatur ke * atau satu atau beberapa nilai yang dipisahkan koma (,). Setiap nilai hanya dapat berisi huruf dan angka, tidak boleh diawali atau diakhiri dengan garis bawah (_) atau tanda hubung (-), dan tidak boleh melebihi 32 karakter.
  • Nilai bawaan: ""

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

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

Menentukan apakah transmisi kredensial diizinkan selama akses lintas-origin.

  • Nilai bawaan: true

  • Contoh: alb.ingress.kubernetes.io/cors-allow-credentials: "false"

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

Untuk permintaan tidak sederhana, menetapkan durasi cache maksimum (dalam detik) untuk permintaan preflight OPTIONS di browser. Nilai yang valid: [0, 172800].

Nilai bawaan: 172800

Koneksi persisten backend

Load balancer tradisional menggunakan koneksi singkat untuk mengakses grup server backend. Setiap permintaan memerlukan koneksi TCP yang dibuat lalu ditutup. Hal ini menjadikan koneksi jaringan sebagai bottleneck untuk sistem berkinerja tinggi. Koneksi persisten backend secara signifikan mengurangi konsumsi sumber daya pada tingkat koneksi dan sangat meningkatkan kinerja pemrosesan. Konfigurasi contoh berikut digunakan:

Perluas untuk melihat contoh YAML lengkap

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

Parameter

Deskripsi

Contoh YAML

alb.ingress.kubernetes.io/backend-keepalive: "true"

Mengaktifkan koneksi persisten backend. Hal ini mengurangi pembuatan dan penutupan koneksi TCP untuk setiap permintaan, menurunkan konsumsi sumber daya dan meningkatkan kinerja untuk sistem berkinerja-tinggi.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: alb-ingress
  annotations:
    alb.ingress.kubernetes.io/backend-keepalive: "true"
spec:

Dukungan lampiran IPv6 untuk grup server

Setelah Anda mengaktifkan lampiran IPv6 untuk grup server, Anda harus memastikan bahwa fitur dual-stack diaktifkan untuk kluster agar dapat melampirkan pod IPv4 dan IPv6 ke grup server. Untuk informasi lebih lanjut, lihat Membuat kluster ACK yang dikelola.

Catatan

Batasan berikut berlaku saat Anda mengaktifkan lampiran IPv6:

  • Jika IPv6 tidak diaktifkan untuk VPC tempat grup server berada, Anda tidak dapat mengaktifkan lampiran IPv6 untuk grup server tersebut.

  • Lampiran IPv6 tidak didukung saat Anda melampirkan grup server berbasis IP atau berbasis Function Compute menggunakan aksi pengalihan kustom.

  • Ingress yang dikaitkan dengan instans ALB IPv4 tidak mendukung lampiran IPv6 untuk grup server.

Perluas untuk melihat contoh YAML lengkap

apiVersion: v1
kind: Service
metadata:
  name: tea-svc
spec:
  # Saat mengonfigurasi dual-stack, ipFamilies harus diatur ke IPv4 atau IPv6, dan ipFamilyPolicy harus diatur ke RequireDualStack atau PreferDualStack.
  ipFamilyPolicy: RequireDualStack
  ipFamilies:
  - IPv4
  - IPv6
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: tea
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tea
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: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/enable-ipv6: "true"
spec:
  ingressClassName: alb
  rules:
   - host: demo.alb.ingress.top
     http:
      paths:
      - path: /tea
        pathType: Prefix
        backend:
          service:
            name: tea-svc
            port:
              number: 80
Anda harus mengonfigurasi baik Service maupun ALB Ingress berdasarkan persyaratan dual-stack. Setelah Anda membuat instans ALB dual-stack, grup server dapat melampirkan server backend IPv4 dan IPv6.

Objek konfigurasi

Parameter konfigurasi

Nilai

Deskripsi

Contoh YAML

Service

ipFamilies

  • IPv4

  • IPv6

Menentukan jenis alamat IP yang tersedia untuk Service.

apiVersion: v1
kind: Service
metadata:
  name: tea-svc
spec:
  # Saat mengonfigurasi dual-stack, ipFamilies harus diatur ke IPv4 atau IPv6, dan ipFamilyPolicy harus diatur ke RequireDualStack atau PreferDualStack.
  ipFamilyPolicy: RequireDualStack
  ipFamilies:
  - IPv4
  - IPv6
... ...

ipFamilyPolicy

  • RequireDualStack

  • PreferDualStack

Menetapkan kebijakan IP untuk Service guna mendukung dual-stack.

ALB Ingress

alb.ingress.kubernetes.io/enable-ipv6

"true"

Mengaktifkan lampiran IPv6 untuk grup server.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/enable-ipv6: "true"
spec:
... ...

Dukungan pembatasan laju QPS

ALB mendukung pembatasan laju queries-per-second (QPS) untuk aturan pengalihan. Anda dapat mengonfigurasi anotasi berikut untuk menerapkan pembatasan laju QPS.

Perluas untuk melihat contoh YAML lengkap

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

Anotasi

Deskripsi

Contoh YAML

alb.ingress.kubernetes.io/traffic-limit-qps

Menetapkan batas laju QPS untuk aturan pengalihan. Nilai yang valid: [1,1000000].

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/traffic-limit-qps: "50"
spec:
... ...

Mulai lambat backend

Ketika pod baru ditambahkan ke backend Service, ALB Ingress segera mengarahkan trafik ke pod baru tersebut. Hal ini dapat menyebabkan lonjakan tiba-tiba pada penggunaan CPU atau memori dan mengakibatkan kesalahan akses. Fitur mulai lambat memungkinkan ALB Ingress secara bertahap mengalihkan trafik ke pod baru. Hal ini mengurangi dampak lonjakan trafik tiba-tiba. Konfigurasi contoh berikut digunakan:

Perluas untuk melihat contoh YAML lengkap

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

Contoh YAML

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

Menentukan apakah mulai lambat diaktifkan. Secara bawaan dinonaktifkan.

  • true: Mengaktifkan mulai lambat.

  • false: Menonaktifkan mulai lambat.

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
... ...

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

Semakin lama durasi setelah mulai lambat selesai, semakin lambat peningkatan trafik. Satuan: detik. Nilai yang valid: [30, 900]. Nilai bawaan: 30 detik.

Pengurasan koneksi

Ketika pod memasuki status Terminating, ALB Ingress menghapus pod tersebut dari grup server backend. Namun, koneksi yang sudah ada antara ALB dan pod tidak segera diputus. Klien mungkin terus mengirim permintaan ke server backend ini. Hal ini dapat menyebabkan pod tetap online dalam waktu lama atau mengakibatkan kesalahan permintaan. Untuk menghindari masalah ini, Anda dapat menggunakan fitur pengurasan koneksi ALB. Ketika pod dihapus atau gagal dalam pemeriksaan kesehatan, ALB Ingress mempertahankan transmisi normal selama durasi tertentu lalu secara aktif menutup koneksi untuk memastikan shutdown layanan yang lancar. Untuk informasi lebih lanjut, lihat Mencapai shutdown layanan lancar melalui pengurasan koneksi ALB.

Penting

ALB Ingress tidak dapat menjamin bahwa pod tetap berjalan sebelum durasi pengurasan koneksi berakhir. Anda dapat mengonfigurasi spec.terminationGracePeriodSeconds untuk pod atau menggunakan panggilan balik preStop untuk mengontrol ketersediaan pod selama status Terminating.

Perluas untuk melihat contoh YAML lengkap

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

Contoh YAML

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

Menentukan apakah pengurasan koneksi diaktifkan. Secara bawaan dinonaktifkan.

  • true: Mengaktifkan terminasi koneksi yang lancar.

  • false: Menonaktifkan terminasi koneksi yang lancar.

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
... ...

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

Periode timeout terminasi yang lancar, dalam detik. Nilai yang valid: [0, 900]. Nilai bawaan: 300 detik.

Menonaktifkan cross-zone (AZ)

Secara bawaan, ALB mengaktifkan load balancing cross-zone (AZ). Fitur ini mendistribusikan trafik secara merata di seluruh layanan backend di zona yang berbeda dalam wilayah yang sama. Jika Anda menonaktifkan load balancing cross-zone untuk grup server ALB, trafik hanya didistribusikan di antara layanan backend dalam zona yang sama dalam wilayah yang sama.

Penting

Jika Anda menonaktifkan load balancing cross-zone, Anda harus memastikan bahwa ALB memiliki layanan backend yang tersedia yang dikonfigurasi di setiap zona dan server tersebut memiliki sumber daya yang cukup. Lakukan operasi ini dengan hati-hati untuk menghindari gangguan layanan.

Anda dapat melakukan langkah-langkah berikut untuk menonaktifkan load balancing cross-zone:

Perluas untuk melihat contoh YAML lengkap

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: alb-ingress
  namespace: default
  annotations:
    alb.ingress.kubernetes.io/cross-zone-enabled: "false"
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

Contoh YAML

alb.ingress.kubernetes.io/cross-zone-enabled

Menentukan apakah pengalihan cross-zone dinonaktifkan. Secara bawaan diaktifkan.

  • true: Mengaktifkan pengalihan cross-zone.

  • false: Menonaktifkan pengalihan cross-zone.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: alb-ingress
  namespace: default
  annotations:
    alb.ingress.kubernetes.io/cross-zone-enabled: "false"
... ...