全部产品
Search
文档中心

Container Service for Kubernetes:Konfigurasi ALB Ingress lanjutan

更新时间:Jan 01, 2026

Dalam kluster ACK serverless, Application Load Balancer (ALB) Ingress menyediakan load balancing lapisan 7 dengan mengelola objek API yang dapat diakses secara eksternal dalam layanan kluster. Topik ini menjelaskan cara menggunakan ALB Ingress untuk meneruskan permintaan dari nama domain atau jalur URL berbeda ke kelompok server backend yang berbeda, mengalihkan permintaan HTTP ke HTTPS, serta menerapkan rilis canary.

Prasyarat

  • Kluster ACK serverless telah dibuat. Virtual private cloud (VPC) kluster harus dikonfigurasi dengan NAT Gateway agar kluster dapat mengakses internet dan mengunduh gambar kontainer. Untuk informasi selengkapnya, lihat Quick Start for ACK Serverless.

  • AlbConfig telah dibuat. Untuk informasi selengkapnya, lihat Create an AlbConfig.

Meneruskan permintaan berdasarkan nama domain

Anda dapat membuat Ingress sederhana untuk meneruskan permintaan berdasarkan nama domain standar tertentu atau nama domain kosong. Bagian berikut memberikan contohnya.

Meneruskan permintaan berdasarkan nama domain standar

Pada contoh YAML berikut, jalur routing diatur ke /hello. Permintaan ke demo.domain.ingress.top/hello diteruskan ke layanan backend.

  1. Terapkan templat berikut untuk membuat Service, deployment, dan Ingress. Permintaan diteruskan ke Service melalui nama domain yang ditentukan dalam Ingress.

    Expand to view the sample YAML

    Untuk 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

    Untuk kluster versi 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: 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 berikut untuk mengakses layanan menggunakan nama domain standar yang ditentukan.

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

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

    Output yang diharapkan:

    {"hello":"coffee"}

Meneruskan permintaan berdasarkan nama domain kosong

Pada contoh YAML berikut, nama domain kosong dan jalur routing diatur ke /hello. Permintaan ke <ADDRESS>/hello diteruskan ke layanan backend.

  1. Terapkan templat berikut untuk membuat Ingress.

    Expand to view the sample YAML

    Untuk 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

    Untuk kluster versi 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: 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 berikut untuk mengakses layanan menggunakan nama domain kosong.

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

    curl <ADDRESS>/hello

    Output yang diharapkan:

    {"hello":"coffee"}

Meneruskan permintaan berdasarkan jalur URL

ALB Ingress mendukung penerusan permintaan berdasarkan URL. Anda dapat mengatur kebijakan pencocokan URL berbeda menggunakan bidang pathType. Bidang pathType mendukung tiga jenis pencocokan berikut.

  • Pencocokan eksak (Exact): Mencocokkan secara tepat jalur URL permintaan.

  • Bawaan (ImplementationSpecific): Logika spesifik ditentukan oleh pengontrol Ingress. Dalam ALB Ingress Controller, ini merupakan pencocokan eksak (Exact). Jika bidang path tidak ditentukan, ALB Ingress menggunakan / sebagai jalur bawaan.

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

Penting
  • Jika pathType diatur ke Exact atau Prefix, Anda harus mengatur path ke jalur mutlak non-kosong. Jika tidak, resource Ingress tidak dapat dibuat karena kegagalan validasi.

  • Kebijakan pencocokan URL dapat saling bertentangan. Dalam kasus ini, aturan pengalihan diurutkan berdasarkan prioritas sebelum permintaan diteruskan. Untuk informasi selengkapnya, lihat Configure forwarding rule priority.

  • Jalur sederhana (/ /foo, /foo/)

    Jenis pencocokan

    Jalur aturan (aturan routing)

    Jalur permintaan (akses pengguna)

    Apakah aturan cocok?

    Pencocokan awalan (Prefix)

    /

    / (mencocokkan semua aturan)

    Ya

    /foo

    • /foo

    • /foo/

    Ya

    /foo/

    • /foo

    • /foo/

    Ya

    /aaa

    /ccc

    Tidak, awalannya 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/)

    Jenis pencocokan

    Jalur aturan (aturan routing)

    Jalur permintaan (akses pengguna)

    Apakah aturan cocok?

    Pencocokan awalan (Prefix)

    /aaa/bb

    /aaa/bbb

    Tidak

    /aaa/bbb

    /aaa/bbb

    Ya

    /aaa/bbb/

    /aaa/bbb

    Ya, garis miring di akhir jalur aturan diabaikan.

    /aaa/bbb

    /aaa/bbb/

    Ya, garis miring di akhir jalur permintaan dicocokkan.

    /aaa/bbb/ccc

    Ya, subjalur dari jalur permintaan dicocokkan.

  • Mengatur dua jalur aturan sekaligus

    Jenis pencocokan

    Jalur aturan (aturan routing)

    Jalur permintaan (akses pengguna)

    Apakah aturan cocok?

    Pencocokan awalan (Prefix)

    • /

    • /aaa

    /aaa/ccc

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

    • /aaa

    • /

    /aaa/ccc

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

    /ccc

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

    • /aaa

    • /bbb

    /ccc

    Tidak, awalannya tidak cocok.

Bagian berikut memberikan contoh ketiga metode pencocokan tersebut:

Pencocokan awalan (Prefix)

Jalur URL menggunakan metode pencocokan awalan di mana segmen jalur dipisahkan oleh /. Pencocokan bersifat case-sensitive dan membandingkan setiap elemen dalam segmen jalur secara berurutan.

Pada contoh YAML berikut, aturan routing dikonfigurasi sebagai /. Semua jalur yang dimulai dengan /, seperti /hello, akan dicocokkan.

  1. Terapkan templat berikut untuk membuat Ingress.

    Expand to view the sample YAML

    Untuk 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

    Untuk kluster versi 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
  2. Jalankan perintah berikut untuk mengakses layanan.

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

    curl <ADDRESS>/hello
  3. Output yang diharapkan:

    {"hello":"coffee"}

Pencocokan eksak (Exact) atau Bawaan (ImplementationSpecific)

Pada contoh YAML berikut, aturan routing dikonfigurasi sebagai /hello. Hanya jalur /hello yang dicocokkan.

  1. Terapkan templat berikut untuk membuat Ingress.

    Expand to view the sample YAML

    Untuk 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

    Untuk kluster versi 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 layanan.

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

    curl <ADDRESS>/hello

    Output yang diharapkan:

    {"hello":"coffee"}

Konfigurasi pemeriksaan kesehatan

ALB Ingress mendukung pemeriksaan kesehatan. Anda dapat mengonfigurasi pemeriksaan kesehatan dengan menyetel anotasi berikut.

Expand to view the full sample YAML

Untuk 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 the context path
      - path: /tea
        pathType: ImplementationSpecific
        backend:
          service:
            name: tea-svc
            port:
              number: 80
      # Configure the context path
      - path: /coffee
        pathType: ImplementationSpecific
        backend:
          service:
            name: coffee-svc
            port:
              number: 80

Untuk kluster versi 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:
      # Configure the context path.
      - path: /tea
        backend:
          serviceName: tea-svc
          servicePort: 80
      # Configure the context path.
      - path: /coffee
        backend:
          serviceName: coffee-svc
          servicePort: 80

Blok kode berikut menunjukkan 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 kelompok 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. Parameter ini berlaku 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

Jika 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 memasukkan 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 Anda menggunakan parameter ini bersama dengan healthcheck-httpcode, parameter ini memiliki prioritas lebih tinggi.

Opsi yang tersedia bergantung pada nilai healthcheck-protocol:

  • HTTP atau HTTPS:

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

    • http_2xx

    • http_3xx

    • http_4xx

    • http_5xx

  • GRPC: Rentang nilai adalah [0, 99].

    Anda dapat memasukkan rentang nilai. Anda dapat memasukkan 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 (s). Rentang nilai adalah [1, 300].

5

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

Interval pemeriksaan kesehatan dalam detik (s). Rentang nilai adalah [1, 50].

2

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

Jumlah pemeriksaan kesehatan berturut-turut yang berhasil yang diperlukan untuk menyatakan server backend dalam kondisi sehat. Rentang nilai adalah [2, 10].

3

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

Jumlah pemeriksaan kesehatan berturut-turut yang gagal yang diperlukan untuk menyatakan server backend dalam kondisi tidak sehat. Rentang nilai adalah [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.

Mengalihkan permintaan HTTP ke HTTPS

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

Penting
  • Fitur ini hanya dapat dikonfigurasi pada aturan pengalihan HTTP yang menggunakan port listener 80.

  • Fitur ini hanya dapat digunakan bersama anotasi yang terkait dengan aksi pengalihan kustom RemoveHeader, InsertHeader, dan Cors lintas domain.

  • Untuk mengonfigurasi anotasi ini, pastikan listener HTTPS untuk port 443 telah dikonfigurasi dalam AlbConfig. Untuk informasi selengkapnya, lihat Configure ALB listeners through an AlbConfig.

Kluster yang menjalankan Kubernetes 1.19 atau 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: 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

Kluster 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

Dukungan protokol HTTPS dan gRPC untuk backend

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

Expand to view the full sample YAML

Untuk 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

Untuk kluster versi sebelum 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, protokol backend tidak dapat diubah. Untuk mengubah protokol, Anda harus menghapus Ingress dan membuat yang baru.

Parameter

Deskripsi

Contoh YAML

alb.ingress.kubernetes.io/backend-protocol

  • https: Layanan backend menggunakan protokol HTTPS.

  • grpc: Layanan backend menggunakan protokol gRPC.

    Saat Anda menggunakan Ingress untuk meneruskan layanan gRPC, konfigurasikan sertifikat SSL untuk nama domain 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
... ...

Konfigurasi ekspresi reguler

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

Penting

Anotasi ini hanya berlaku untuk aturan jalur dengan pathType: Prefix.

Expand to view the full sample YAML

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/use-regex: "true"  ## Allows the use of regular expressions.
   alb.ingress.kubernetes.io/conditions.<YOUR-SVC-NAME>: | ## Replace <YOUR-SVC-NAME> with the actual Service name. It must be the same as backend.service.name below.
     [{
       "type": "Path",
       "pathConfig": {
           "values": [
              "~*/pathvalue1", ## Add ~* or ~ before the regular expression as a flag. The content after ~* or ~ is the effective regular expression. ~* indicates a case-sensitive regular expression match, and ~ indicates a case-insensitive regular expression match.
              "/pathvalue2"    ## No ~* is needed for an exact match.
           ]
       }
      }]
  name: ingress-example
spec:
  ingressClassName: alb
  rules:
   - http:
      paths:
      - path: /test-path-for-alb
        pathType: Prefix
        backend:
          service:
            name: <YOUR-SVC-NAME> ## <YOUR-SVC-NAME> here must be the same as the service name specified in the custom forwarding condition annotation to indicate the relationship.
            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"  ## Allows the use of regular expressions.
   alb.ingress.kubernetes.io/conditions.<YOUR-SVC-NAME>: | ## Replace <YOUR-SVC-NAME> with the actual Service name. It must be the same as backend.service.name below.
     [{
       "type": "Path",         ## Supports Host
       "pathConfig": {
           "values": [
              "~*/pathvalue1", ## Add ~* or ~ before the regular expression as a flag. The content after ~* or ~ is the effective regular expression. ~* indicates a case-sensitive regular expression match, and ~ indicates a case-insensitive regular expression match.
              "/pathvalue2"    ## No ~* is needed for an exact match.
           ]
       }
      }]
... ...

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

Mengonfigurasi kondisi pengalihan kustom. Untuk informasi selengkapnya, lihat Forwarding conditions.

<YOUR-SVC-NAME> dengan nama Service yang sebenarnya. Harus sama 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 ekspresi reguler case-insensitive.

Jalur

Dimulai dengan ~

~/api

/API

Ya

Jalur mendukung pencocokan ekspresi reguler case-insensitive.

Dimulai dengan ~*

~*/api

/Api

Tidak

Jalur mendukung pencocokan ekspresi reguler case-sensitive.

Konfigurasi penulisan ulang

ALB Ingress mendukung fitur penulisan ulang. Setelah ALB Ingress menerima permintaan klien, ia memodifikasi jalur permintaan tersebut lalu mengirim permintaan ke Service backend. Penulisan ulang diimplementasikan menggunakan dua anotasi berikut:

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

    Penting
    • Gunakan format ${number} untuk merepresentasikan variabel yang diperoleh dari jalur asli menggunakan ekspresi reguler. Anda dapat mengonfigurasi satu atau beberapa variabel, seperti ${1}, ${2}, atau ${3}. Anda dapat memperoleh maksimal tiga variabel dari jalur asli.

    • pathType dari Ingress harus diatur ke Prefix.

  • alb.ingress.kubernetes.io/use-regex: Menentukan apakah akan menggunakan ekspresi reguler dalam jalur. Ini diaktifkan secara bawaan setelah Anda mengonfigurasi rewrite-target.

    • "true": Gunakan ekspresi reguler.

    • "false": Jangan gunakan ekspresi reguler. Jika jalur berisi karakter khusus, seperti “%#;!()[]^,”\", resource Ingress tidak dapat dibuat.

Contoh konfigurasi

Skenario 1: Menghapus awalan

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

  • /something: Mencocokkan awalan yang akan dihapus.

  • (/|$): Grup penangkap pertama, yang mencocokkan karakter / atau akhir jalur ($) yang mengikuti /something.

  • (.*): Grup penangkap kedua, yang mencocokkan semua konten yang mengikuti /something/. Digunakan dalam jalur yang ditulis ulang sebagai ${2}.

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

Jalur klien asli

Apakah cocok dengan ekspresi reguler jalur?

Rewritten Path

/something

Cocok. Grup penangkap kedua kosong.

/

/something/

Cocok. Grup penangkap kedua kosong.

/

/something/new

Cocok. Konten grup penangkap 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" # Allows the path field to use regular expressions.
    alb.ingress.kubernetes.io/rewrite-target: /${2} # This annotation supports regular expression replacement.
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /something(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: rewrite-svc
            port:
              number: 9080

Skenario 2: Menangkap dan menyusun ulang beberapa bagian

Contoh berikut menangkap dan menyusun ulang beberapa bagian dari jalur /items/(.*)/(.*)/(.*). Ini juga mengubah format URL menjadi format yang mirip permintaan POST tanpa diketahui pengguna. Jalur yang ditulis ulang adalah / (awalan jalur standar) + ${2} (konten grup penangkap kedua) + ?code= + ${3} (konten grup penangkap ketiga). Tabel berikut menjelaskan efek penulisan ulang jalur.

Contoh ini secara eksplisit memerlukan empat segmen dalam jalur. Metode ini mengharuskan klien menggunakan format jalur tetap.

Jalur klien asli

Apakah cocok dengan ekspresi reguler jalur?

Rewritten Path

/items/electronics/computers/554

Cocok. Konten grup penangkap kedua adalah computers, dan konten grup penangkap ketiga adalah 554.

/computers?code=554.

/items/produce/fruits/12

Cocok. Konten grup penangkap kedua adalah fruits, dan konten grup penangkap 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" # Allows the path field to use regular expressions.
    alb.ingress.kubernetes.io/rewrite-target: /${2}?code=${3} # This annotation supports regular expression replacement.
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /items/(.*)/(.*)/(.*)
        pathType: Prefix
        backend:
          service:
            name: rewrite-svc
            port:
              number: 9080

Skenario 3: Menulis ulang beberapa jalur ke satu jalur

Contoh berikut menulis ulang beberapa jalur ke satu jalur dengan mencocokkan beberapa jalur (/app-a(/|$)(.*) dan /app-b(/|$)(.*)) menggunakan ekspresi reguler. Jalur yang ditulis ulang adalah /app-c/ + ${2} (konten grup penangkap kedua). Tabel berikut menjelaskan efek penulisan ulang jalur.

Jalur klien asli

Apakah cocok dengan ekspresi reguler jalur?

Rewritten Path

/app-a/item1

Cocok. Konten grup penangkap kedua adalah item1.

/app-c/item1

/app-a/item2

Cocok. Konten grup penangkap kedua adalah item2.

/app-c/item2

/app-a atau /app-a/

Cocok. Grup penangkap 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 untuk menggunakan ekspresi reguler.
    alb.ingress.kubernetes.io/rewrite-target: /app-c/${2} # Anotasi ini mendukung penggantian ekspresi reguler.
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

Skenario 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 dan parameter, Anda dapat menggunakan aturan pengalihan kustom.

Verifikasi pencocokan aturan penulisan ulang

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

Bagian ini menggunakan jalur penangkapan /items/(.*)/(.*)/(.*) dan aturan penulisan ulang /${2}?code=${3} dari Skenario 2: Menangkap dan menyusun 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 cocok dan lihat jalur yang ditulis ulang:

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

    Output yang diharapkan adalah sebagai berikut. Dua jalur pertama cocok dengan aturan penulisan ulang dan ditulis ulang ke jalur baru. Dua jalur terakhir tidak cocok dengan aturan penulisan ulang 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

Konfigurasi port listener kustom

ALB Ingress mendukung port listener kustom melalui anotasi. Ini memungkinkan layanan mengekspos port 80 (HTTP) dan port 443 (HTTPS) secara bersamaan.

Expand to view the full sample YAML

Untuk 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

Untuk kluster versi 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
  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 listener baru secara langsung dalam Ingress. Untuk memastikan Ingress berfungsi sebagaimana mestinya, Anda harus terlebih dahulu membuat port listener dan protokol yang diperlukan dalam AlbConfig. Kemudian, Anda dapat mengaitkan listener ini dengan layanan dalam Ingress. Untuk informasi tentang cara membuat listener ALB, lihat Configure ALB listeners through an AlbConfig.

Parameter

Deskripsi

Contoh YAML

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

Memungkinkan layanan 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}]'
... ...

Konfigurasi prioritas aturan pengalihan

Secara bawaan, prioritas aturan pengalihan ALB diurutkan sebagai berikut:

  • 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 mengubah bidang namespace/name dari Ingress, Anda dapat mengonfigurasi anotasi Ingress berikut untuk menentukan prioritas aturan pengalihan ALB:

Expand to view the full sample YAML

Untuk 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

Untuk kluster versi 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
            pathType: ImplementationSpecific

Parameter

Deskripsi

Rentang nilai

Contoh YAML

alb.ingress.kubernetes.io/order

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

Prioritas aturan dalam listener yang sama harus unik.

[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 menggunakan anotasi

ALB mendukung routing kompleks dan menyediakan kemampuan rilis bertahap berdasarkan header, cookie, dan bobot. Anda dapat mengonfigurasi anotasi berikut untuk menerapkan berbagai kebijakan rilis bertahap secara fleksibel. Untuk informasi selengkapnya tentang praktik terbaik rilis bertahap, lihat Implement phased releases through ALB Ingress.

Parameter

Deskripsi

Deskripsi

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

Mengaktifkan kemampuan rilis bertahap.

  • Traffic canary dapat dialokasikan berdasarkan header, cookie, atau bobot.

    Prioritas alokasi: Header > Cookie > Bobot (dari tertinggi ke terendah).
  • Jangan menghapus aturan asli selama proses rilis bertahap. Hal ini dapat menyebabkan gangguan layanan. Setelah rilis bertahap diverifikasi, perbarui Service backend dalam Ingress asli ke Service baru, lalu hapus Ingress canary.

  • Alokasikan traffic canary berdasarkan header tertentu

    Parameter

    Deskripsi

    Contoh YAML

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

    Aturan ini memungkinkan Anda menyesuaikan header permintaan dan nilai yang sesuai. Anda harus mengonfigurasi kedua anotasi.

    • Ketika header dan header-value dalam permintaan cocok dengan nilai yang ditetapkan, traffic permintaan dialokasikan ke titik akhir layanan canary.

    • Permintaan lain yang tidak cocok dialokasikan ke layanan canary berikutnya sesuai prioritas canary.

    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, traffic diarahkan ke layanan canary. Permintaan lain dialokasikan ke layanan canary berdasarkan kebijakan bobot canary. Berikut adalah contoh konfigurasi.

    Expand to view the full sample YAML

    Untuk 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

    Untuk kluster versi 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
  • Alokasikan traffic canary berdasarkan cookie tertentu

    Parameter

    Nilai cookie

    Contoh YAML

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

    • always: Semua traffic permintaan dialokasikan ke titik akhir layanan canary.

    • never: Traffic permintaan tidak dialokasikan ke titik akhir layanan canary.

    Rilis canary berbasis cookie tidak mendukung pengaturan kustom, hanya 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, traffic diarahkan ke layanan canary. Jika header permintaan berisi Cookie: demo=never, traffic tidak diarahkan ke layanan canary. Berikut adalah contoh konfigurasi.

    Expand to view the full sample YAML

    Untuk 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

    Untuk kluster versi 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
  • Alokasikan traffic berdasarkan bobot

    Parameter

    Deskripsi

    Contoh YAML

    alb.ingress.kubernetes.io/canary-weight

    Menetapkan persentase permintaan ke layanan yang ditentukan. Nilainya adalah 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

    Contoh berikut mengonfigurasi bobot layanan canary menjadi 50%:

    Expand to view the full sample YAML

    Untuk 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

    Untuk kluster versi 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

Menerapkan persistensi sesi menggunakan anotasi

ALB Ingress mendukung persistensi sesi melalui anotasi berikut.

Expand to view the full sample YAML

Untuk 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"   # When using a custom cookie, the cookie insertion type must be 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

Untuk kluster versi sebelum 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"  # When using a custom cookie, the cookie insertion type must be Server.
    alb.ingress.kubernetes.io/cookie-timeout: "1800"
    alb.ingress.kubernetes.io/cookie: "test"
spec:
  ingressClassName: alb
  rules:
  - http:
      paths:
      #Configure the context path.
      - path: /tea2
        pathType: ImplementationSpecific
        backend:
          serviceName: tea-svc
          servicePort: 80
      #Configure the context path.
      - path: /coffee2
        pathType: ImplementationSpecific
        backend:
          serviceName: coffee-svc
          servicePort: 80

Blok kode berikut menunjukkan 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: "Insert"   # When using a custom cookie, the cookie insertion type must be 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: Instans dimatikan.

false

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

Metode penanganan cookie.

  • Insert: Menyisipkan cookie. Saat klien mengakses layanan untuk pertama kalinya, Server Load Balancer menyisipkan cookie (SERVERID) ke respons HTTP atau HTTPS. Saat klien mengakses layanan lagi dengan cookie ini, Server Load Balancer meneruskan permintaan ke server backend yang sebelumnya dicatat.

  • Server: Menulis ulang cookie. Jika Server Load Balancer mendeteksi cookie kustom, ia menulis ulang cookie asli. Saat klien mengakses layanan lagi dengan cookie baru ini, Server Load Balancer meneruskan permintaan ke server backend yang sebelumnya dicatat.

Catatan

Parameter ini berlaku saat StickySessionEnabled untuk kelompok server diatur ke true. Untuk informasi selengkapnya tentang parameter kelompok server, lihat Create a server group.

Insert

alb.ingress.kubernetes.io/cookie-timeout

Periode timeout cookie dalam detik. Rentang nilai adalah [1, 86400].

Anotasi ini berlaku saat sticky-session-type diatur ke Insert.

1000

alb.ingress.kubernetes.io/cookie

Nilai cookie kustom.

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

""

Menentukan algoritma penyeimbangan beban untuk kelompok server backend

ALB Ingress dapat menentukan algoritma penyeimbangan beban untuk kelompok server backend menggunakan anotasi berikut. Nilai yang mungkin dan deskripsinya ditunjukkan dalam tabel berikut.

Expand to view the full sample YAML

Untuk 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" # You can set this to wrr, sch, or wlc as needed.
    alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # This parameter is required only when the load balancing algorithm is uch. It is not needed for wrr, sch, or wlc.
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /tea
        pathType: ImplementationSpecific
        backend:
          service:
            name: tea-svc
            port:
              number: 80

Untuk kluster versi sebelum 1.19

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/backend-scheduler: "uch" # You can also set this to wrr, sch, or wlc as needed.
    alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # This parameter is required only when the load balancing algorithm is uch. It is not needed for wrr, sch, or 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 lebih mungkin dipilih (nilai bawaan).

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/backend-scheduler: "uch" # You can set this to wrr, sch, or wlc as needed.
    alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # This parameter is required only when the load balancing algorithm is uch. It is not needed for wrr, sch, or wlc.
spec:
... ... 

wlc

Pemilihan berdasarkan nilai bobot yang ditetapkan untuk setiap server backend dan beban aktual (jumlah koneksi) server backend. Jika bobot sama, server dengan koneksi lebih sedikit diprioritaskan.

sch

Penghashan konsisten berdasarkan IP sumber. Permintaan didistribusikan berdasarkan hash dari IP sumber klien. Permintaan dari alamat IP yang sama dialokasikan ke server backend yang sama.

uch

Penghashan konsisten berdasarkan parameter URL.

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

Konfigurasi akses lintas domain

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

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

Situs yang diizinkan mengakses resource menggunakan browser. Pisahkan beberapa situs dengan koma (,). Nilai harus dimulai dengan http:// atau https://, diikuti nama domain yang valid atau nama domain wildcard tingkat atas. 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

Metode lintas domain yang diizinkan. Nilainya tidak case-sensitive. Pisahkan beberapa 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 lintas domain yang diizinkan. Header hanya boleh berisi huruf, angka, garis bawah (_), dan tanda hubung (-). Pisahkan beberapa header dengan koma (,).

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 dapat diekspos. Header dapat berisi huruf, angka, garis bawah (_), tanda hubung (-), dan tanda bintang (*). Pisahkan beberapa header dengan koma (,).

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

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

Menentukan apakah kredensial diizinkan dibawa dalam permintaan lintas domain.

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

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

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

Nilai bawaan: 172800.

Konfigurasi koneksi backend persisten

Load balancer tradisional menggunakan koneksi singkat untuk mengakses kelompok server backend. Setiap permintaan membuat dan menutup koneksi TCP, yang dapat menjadi bottleneck untuk sistem berkinerja tinggi. Koneksi backend persisten sangat mengurangi konsumsi resource koneksi dan meningkatkan kinerja pemrosesan. Anda dapat mengaktifkan koneksi backend persisten dalam ALB Ingress dengan menambahkan anotasi alb.ingress.kubernetes.io/backend-keepalive. Berikut adalah contoh konfigurasi:

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

Dukungan pembatasan laju QPS

ALB mendukung throttling permintaan per detik (QPS) untuk aturan pengalihan. Batas QPS harus bernilai antara 1 hingga 100.000. Untuk mengaktifkan throttling QPS dalam ALB Ingress, tambahkan anotasi alb.ingress.kubernetes.io/traffic-limit-qps. Berikut adalah contoh konfigurasi:

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

Mulai lambat backend

Setelah pod baru ditambahkan ke backend Service, jika ALB Ingress langsung mengalokasikan traffic ke pod baru tersebut, hal ini dapat menyebabkan tekanan CPU atau memori tinggi sementara, yang mengakibatkan gangguan akses. Dengan mulai lambat, ALB Ingress dapat secara bertahap mentransfer traffic ke pod baru, sehingga mengurangi dampak lonjakan traffic mendadak. Blok kode berikut menunjukkan contoh konfigurasi:

Expand to view the full sample YAML

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 fitur mulai lambat diaktifkan. Secara bawaan dinonaktifkan.

  • true: Mengaktifkan fitur mulai lambat.

  • false: Menonaktifkan fitur 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 waktu untuk traffic meningkat secara bertahap setelah mulai lambat selesai, semakin lambat laju peningkatan traffic. Parameter ini dalam satuan detik (s). Rentang nilai adalah [30, 900], dan nilai bawaan adalah 30 detik.

Pengurasan koneksi

Saat pod memasuki status Terminating, ALB Ingress menghapusnya dari kelompok server backend. Koneksi yang sudah terbentuk antara ALB dan pod tidak langsung terputus. Akses klien terus meneruskan permintaan ke server backend ini. Hal ini dapat menyebabkan bisnis dalam pod tidak dapat offline dalam waktu lama atau menyebabkan error permintaan. Untuk menghindari masalah ini, Anda dapat menggunakan fitur pengurasan koneksi ALB. Saat pod dihapus atau pemeriksaan kesehatan abnormal, ALB Ingress mempertahankan transmisi normal untuk periode waktu tertentu lalu secara aktif memutus koneksi setelah waktu interupsi tercapai. Hal ini memastikan proses offline bisnis yang lancar. Untuk informasi selengkapnya, lihat Achieve smooth business offline through ALB connection draining.

Penting

Sebelum waktu pengurasan koneksi berakhir, ALB Ingress tidak dapat menjamin bahwa pod berada dalam status berjalan. Anda dapat mengonfigurasi spec.terminationGracePeriodSeconds untuk pod atau menggunakan preStop Hook untuk mengontrol ketersediaan pod dalam status Terminating.

Expand to view the full sample YAML

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

  • false: Menonaktifkan 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
... ...

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

Periode timeout pengurasan koneksi dalam detik (s). Rentang nilai adalah [0, 900], dan nilai bawaan adalah 300 detik.