All Products
Search
Document Center

Container Service for Kubernetes:Penggunaan ALB Ingress tingkat lanjut

Last Updated:Jun 16, 2026

Konfigurasikan fitur ALB Ingress tingkat lanjut seperti aturan routing, pengalihan HTTPS, penulisan ulang (rewrite), rilis canary, dan persistensi sesi.

Meneruskan permintaan berdasarkan nama domain

Buat Ingress untuk meneruskan permintaan berdasarkan nama domain atau nama domain kosong.

Nama domain

Contoh ini menetapkan jalur routing ke /hello. Permintaan ke demo.domain.ingress.top/hello diteruskan ke layanan backend.

  1. Deploy manifes berikut untuk membuat Service, Deployment, dan Ingress yang meneruskan permintaan berdasarkan nama domain yang ditentukan.

    Contoh YAML

    Kubernetes 1.19 atau lebih baru

    apiVersion: v1
    kind: Service
    metadata:
      name: demo-service
      namespace: default
    spec:
      ports:
        - name: port1
          port: 80
          protocol: TCP
          targetPort: 8080
      selector:
        app: demo
      sessionAffinity: None
      type: 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

    Kubernetes 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 kubectl get ing untuk mendapatkan alamat instans ALB. Kemudian, jalankan perintah berikut, ganti ADDRESS dengan alamat instans tersebut.

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

    Output yang diharapkan:

    {"hello":"coffee"}

Nama domain kosong

Dengan nama domain kosong dan jalur routing /hello, permintaan ke ADDRESS/hello diteruskan ke layanan backend.

  1. Deploy manifes berikut untuk membuat Service, Deployment, dan Ingress.

    Contoh YAML

    Kubernetes 1.19 atau lebih baru

    apiVersion: v1
    kind: Service
    metadata:
      name: demo-service
      namespace: default
    spec:
      ports:
        - name: port1
          port: 80
          protocol: TCP
          targetPort: 8080
      selector:
        app: demo
      sessionAffinity: None
      type: 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

    Kubernetes 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 kubectl get ing untuk mendapatkan alamat instans ALB. Kemudian, jalankan perintah berikut, ganti ADDRESS dengan alamat instans tersebut.

    curl ADDRESS/hello

    Output yang diharapkan:

    {"hello":"coffee"}

Penerusan berbasis jalur

ALB Ingress meneruskan permintaan berdasarkan jalur URL. Tentukan mode pencocokan di bidang pathType. pathType mendukung tiga mode.

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

  • Bawaan (ImplementationSpecific): Controller ALB Ingress memperlakukan ini sebagai pencocokan eksak. Jika jalur tidak ditentukan, nilai bawaannya adalah /.

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

Penting
  • Saat pathType bernilai Exact atau Prefix, jalur harus merupakan jalur mutlak yang tidak kosong. Jika tidak, validasi akan gagal.

  • Jika terjadi konflik pada kebijakan pencocokan URL, permintaan diteruskan berdasarkan prioritas aturan pengalihan.

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

    Mode pencocokan

    Jalur aturan

    Jalur permintaan

    Cocok?

    Pencocokan awalan (Prefix)

    /

    / (mencocokkan semua jalur)

    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/)

    Mode pencocokan

    Jalur aturan

    Jalur permintaan

    Cocok?

    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. Garis miring di akhir pada jalur permintaan dicocokkan.

    /aaa/bbb/ccc

    Ya. Jalur aturan merupakan awalan dari jalur permintaan.

  • Dua jalur aturan

    Mode pencocokan

    Jalur aturan

    Jalur permintaan

    Cocok?

    Pencocokan awalan (Prefix)

    • /

    • /aaa

    /aaa/ccc

    Ya. Jalur permintaan mencocokkan jalur aturan /aaa.

    • /aaa

    • /

    /aaa/ccc

    Ya. Jalur permintaan mencocokkan jalur aturan /aaa.

    /ccc

    Ya. Jalur permintaan mencocokkan jalur aturan /.

    • /aaa

    • /bbb

    /ccc

    Tidak. Awalan tidak cocok.

Contoh untuk setiap mode pencocokan:

Pencocokan awalan (Prefix)

Mode ini melakukan pencocokan awalan peka huruf besar/kecil pada elemen jalur URL yang dipisahkan oleh /.

Jalur aturan / mencocokkan semua jalur yang dimulai dengan /, seperti /hello.

  1. Deploy manifes berikut untuk membuat resource ingress.

    Contoh YAML

    Kubernetes 1.19 atau lebih baru

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

    Kubernetes 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 kubectl get ing untuk mendapatkan alamat instans ALB. Kemudian, jalankan perintah berikut, ganti ADDRESS dengan alamat yang didapat.

    curl ADDRESS/hello

    Output yang diharapkan:

    {"hello":"coffee"}

Pencocokan eksak atau bawaan

Jalur aturan /hello hanya mencocokkan permintaan ke /hello.

  1. Deploy manifes berikut untuk membuat resource ingress.

    Contoh YAML

    Kubernetes 1.19 atau lebih baru

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

    Kubernetes 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 kubectl get ing untuk mendapatkan alamat instans ALB. Kemudian, jalankan perintah berikut, ganti ADDRESS dengan alamat yang didapat.

    curl ADDRESS/hello

    Output yang diharapkan:

    {"hello":"coffee"}

Konfigurasi pemeriksaan kesehatan

Gunakan anotasi untuk mengonfigurasi pemeriksaan kesehatan untuk ALB Ingress.

Klik untuk melihat contoh YAML lengkap

Kubernetes 1.19 dan lebih baru

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

Kubernetes 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:
      # Konfigurasikan jalur konteks.
      - path: /tea
        backend:
          serviceName: tea-svc
          servicePort: 80
      # Konfigurasikan jalur konteks.
      - 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

Bawaan

alb.ingress.kubernetes.io/healthcheck-enabled

Menentukan apakah akan mengaktifkan pemeriksaan kesehatan untuk grup server backend.

  • true: mengaktifkan pemeriksaan kesehatan.

  • false: menonaktifkan pemeriksaan kesehatan.

false

alb.ingress.kubernetes.io/healthcheck-path

Jalur yang digunakan untuk pemeriksaan kesehatan.

/

alb.ingress.kubernetes.io/healthcheck-protocol

Protokol yang digunakan untuk pemeriksaan kesehatan.

  • HTTP: Mengirim permintaan HEAD atau GET untuk memverifikasi kesehatan server.

  • HTTPS: Mengirim permintaan HEAD atau GET untuk memverifikasi kesehatan server.

  • TCP: Mengirim paket handshake SYN untuk memverifikasi ketersediaan port.

  • GRPC: Mengirim permintaan POST atau GET untuk memverifikasi kesehatan server.

HTTP

alb.ingress.kubernetes.io/healthcheck-httpversion

Versi protokol HTTP. Hanya berlaku saat healthcheck-protocol diatur ke HTTP atau HTTPS.

  • HTTP1.0

  • HTTP1.1

HTTP1.1

alb.ingress.kubernetes.io/healthcheck-method

Metode yang digunakan untuk pemeriksaan kesehatan.

  • HEAD

  • POST

  • GET

Penting

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

HEAD

alb.ingress.kubernetes.io/healthcheck-httpcode

Kode status yang menunjukkan server backend dalam kondisi sehat.

Tentukan satu atau beberapa opsi, dipisahkan koma.

  • http_2xx

  • http_3xx

  • http_4xx

  • http_5xx

http_2xx

alb.ingress.kubernetes.io/healthcheck-code

Kode status yang menunjukkan server backend dalam kondisi sehat. Memiliki prioritas lebih tinggi daripada healthcheck-httpcode jika keduanya ditentukan.

Nilai yang valid bergantung pada healthcheck-protocol:

  • HTTP atau HTTPS:

    Tentukan satu atau beberapa opsi, dipisahkan koma.

    • http_2xx

    • http_3xx

    • http_4xx

    • http_5xx

  • GRPC: Nilainya harus berupa bilangan bulat dari 0 hingga 99.

    Tentukan hingga 20 rentang nilai, dipisahkan koma.

  • HTTP atau HTTPS

    http_2xx

  • GRPC

    0

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

Waktu tunggu pemeriksaan kesehatan dalam detik. Nilai valid: 1 hingga 300.

5

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

Interval pemeriksaan kesehatan dalam detik. Nilai valid: 1 hingga 50.

2

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

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

3

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

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

3

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

Port yang digunakan untuk pemeriksaan kesehatan.

0

Catatan

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

Mengalihkan permintaan HTTP ke HTTPS

Tambahkan anotasi berikut untuk mengalihkan permintaan HTTP ke Port HTTPS 443.

Penting
  • Fitur ini hanya berlaku untuk aturan penerusan HTTP pada port listener 80.

  • Anotasi ini harus digunakan bersama anotasi untuk aksi penerusan kustom, seperti RemoveHeader, InsertHeader, dan Cors.

  • Sebelum menggunakan anotasi ini, pastikan listener HTTPS telah dikonfigurasi pada port 443 di AlbConfig. Lihat Menggunakan AlbConfig untuk mengonfigurasi listener ALB.

Contoh YAML

Kubernetes 1.19 atau lebih baru

apiVersion: v1
kind: Service
metadata:
  name: demo-service-ssl
  namespace: default
spec:
  ports:
    - name: port1
      port: 80
      protocol: TCP
      targetPort: 8080
  selector:
    app: demo-ssl
  sessionAffinity: None
  type: 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

Kubernetes versi 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: 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"

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

Konfigurasi backend HTTPS atau gRPC

Tambahkan anotasi berikut untuk menggunakan HTTPS atau gRPC sebagai protokol backend.

Contoh YAML

Kubernetes 1.19 dan 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

Kubernetes 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

Protokol backend tidak dapat diubah setelah ingress dibuat. Hapus dan buat ulang ingress untuk mengubahnya.

Parameter

Deskripsi

Contoh YAML

alb.ingress.kubernetes.io/backend-protocol

  • https: Menentukan HTTPS sebagai protokol backend.

  • grpc: Menentukan gRPC sebagai protokol backend.

    Saat meneruskan permintaan ke layanan gRPC melalui ingress, Anda harus mengonfigurasi sertifikat SSL untuk nama domain dan menggunakan protokol TLS.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/backend-protocol: "grpc"
  name: demo-alb-ingress
... ...

Konfigurasi ekspresi reguler

Gunakan anotasi alb.ingress.kubernetes.io/use-regex: "true" untuk mengaktifkan pencocokan ekspresi reguler untuk aturan jalur di spec.rules dengan pathType: Prefix.

Penting
  • Hanya berlaku untuk aturan jalur dengan pathType: Prefix. Mengaktifkan sintaks regex di bidang path dari spec.rules, terlepas dari kondisi penerusan kustom.

  • Anotasi ini mengaktifkan pencocokan regex terlepas dari nilainya (true atau false). Hapus anotasi untuk menonaktifkan.

  • Tanpa anotasi ini, pembuatan Ingress gagal jika jalur berisi karakter khusus seperti =^()[]|, dll..

  • Nilai jalur dalam kondisi penerusan kustom (alb.ingress.kubernetes.io/conditions.YOUR-SVC-NAME) diteruskan langsung ke ALB dan tidak memerlukan anotasi use-regex. Untuk mengaktifkan pencocokan regex, tambahkan awalan ~* atau ~ ke nilai jalur. Anotasi use-regex hanya memengaruhi bidang path di spec.rules.

Aturan penerusan kustom

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/conditions.YOUR-SVC-NAME: | ## Ganti YOUR-SVC-NAME dengan nama Service yang sebenarnya. Harus sesuai dengan backend.service.name di bawah ini.
     [{
       "type": "Path",
       "pathConfig": {
           "values": [
              "~*/pathvalue1", ## Tambahkan awalan ~* atau ~ ke ekspresi reguler. Teks setelah awalan adalah ekspresi reguler itu sendiri. ~* menunjukkan pencocokan peka huruf besar/kecil, dan ~ menunjukkan pencocokan tidak peka huruf besar/kecil.
              "/pathvalue2"    ## Pencocokan eksak tidak memerlukan awalan.
           ]
       }
      }]
  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 di sini harus sesuai dengan nama Service yang ditentukan dalam anotasi kondisi penerusan kustom untuk menentukan asosiasi.
            port:
              number: 88

Spec.rules

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/use-regex: "true"  ## Memungkinkan jalur di spec.rules menggunakan ekspresi reguler.
  name: ingress-example
spec:
  ingressClassName: alb
  rules:
   - http:
      paths:
      - path: /test-[a-z]-alb[()^]*
        pathType: Prefix
        backend:
          service:
            name: tea-svc
            port:
              number: 88

Parameter

Deskripsi

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

Mengaktifkan ekspresi reguler untuk aturan jalur di spec.rules dengan pathType: Prefix.

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

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

Mengonfigurasi kondisi penerusan kustom. Lihat Menyesuaikan aturan penerusan untuk ALB Ingress.

Ganti YOUR-SVC-NAME dengan nama Service yang sebenarnya. Nama ini harus sesuai dengan backend.service.name di bawah ini.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/conditions.YOUR-SVC-NAME: | ## Ganti YOUR-SVC-NAME dengan nama Service yang sebenarnya. Harus sesuai dengan backend.service.name di bawah ini.
     [{
       "type": "Path",
       "pathConfig": {
           "values": [
              "~*/pathvalue1", ## Tambahkan awalan ~* atau ~ ke ekspresi reguler. Teks setelah awalan adalah ekspresi reguler itu sendiri. ~* menunjukkan pencocokan peka huruf besar/kecil, dan ~ menunjukkan pencocokan tidak peka huruf besar/kecil.
              "/pathvalue2"    ## Pencocokan eksak tidak memerlukan awalan.
           ]
       }
      }]
  name: ingress-example
... ...

Tabel berikut menjelaskan aturan pencocokan ekspresi reguler.

Objek

Awalan

Contoh aturan

Jalur klien

Cocok?

Deskripsi

Nama domain

Dimulai dengan ~

~test.example.com

test.EXAMPLE.com

Ya

Nama domain mendukung pencocokan ekspresi reguler tidak peka huruf besar/kecil.

Jalur

Dimulai dengan ~

~/api

/API

Ya

Jalur mendukung pencocokan ekspresi reguler tidak peka huruf besar/kecil.

Dimulai dengan ~*

~*/api

/Api

Tidak

Jalur mendukung pencocokan ekspresi reguler peka huruf besar/kecil.

Pencocokan awalan regex

Pencocokan regex secara bawaan menggunakan 'pencocokan mengandung'. Untuk mencocokkan hanya jalur yang dimulai dengan konten tertentu, tambahkan ^ di awal ekspresi. Misalnya, ^/api hanya mencocokkan jalur yang dimulai dengan /api.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-example
  annotations:
    alb.ingress.kubernetes.io/use-regex: "true"  ## Aktifkan pencocokan regex.
    alb.ingress.kubernetes.io/conditions.YOUR-SVC-NAME: |     ## Ganti YOUR-SVC-NAME dengan nama layanan yang sebenarnya. Harus sesuai dengan backend.service.name di bawah ini.
      [
        {
          "type": "Path",
          "pathConfig": {
            "values": [
              "~*^/pathvalue1",  # Jalur yang dimulai dengan ~* atau ~ menunjukkan pencocokan regex. Tanda sisipan (^) menunjukkan "dimulai dengan /pathvalue1".
              "/pathvalue2"     # Untuk pencocokan awalan atau eksak standar, jangan tambahkan ~* atau ~.
            ]
          }
        }
      ]
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
          - path: /test-path-for-alb
            pathType: Prefix
            backend:
              service:
                name: YOUR-SVC-NAME   # Ganti dengan nama layanan yang sebenarnya, yang harus sesuai dengan anotasi.
                port:
                  number: 88

Konfigurasi penulisan ulang

ALB Ingress menulis ulang jalur permintaan sebelum meneruskannya ke layanan backend. Gunakan dua anotasi berikut:

  • alb.ingress.kubernetes.io/rewrite-target: /path/${number}: Menentukan jalur tujuan penulisan ulang permintaan.

    Penting
    • Gunakan variabel ${number} untuk mereferensikan grup tangkapan dari ekspresi reguler di jalur Ingress. Hingga tiga grup tangkapan dapat direferensikan menggunakan ${1}, ${2}, dan ${3}.

    • pathType dari Ingress harus diatur ke Prefix.

  • alb.ingress.kubernetes.io/use-regex: true: Mengaktifkan penggunaan ekspresi reguler di jalur. Ini diaktifkan secara bawaan saat Anda mengonfigurasi rewrite-target.

    Penting
    • Anotasi ini mengaktifkan pencocokan regex terlepas dari nilainya (true atau false). Hapus anotasi untuk menonaktifkan.

    • Tanpa anotasi ini, pembuatan Ingress gagal jika jalur berisi karakter khusus seperti "%#;!()[]^,"\"".

Contoh konfigurasi

Contoh 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 tangkapan pertama, yang mencocokkan garis miring / setelah /something atau akhir jalur ($).

  • (.*): Grup tangkapan kedua, yang mencocokkan semua karakter setelah /something/ dan direferensikan sebagai ${2} dalam jalur yang ditulis ulang.

Anotasi alb.ingress.kubernetes.io/rewrite-target menentukan jalur yang ditulis ulang sebagai / diikuti oleh ${2}. Tabel berikut menunjukkan hasil penulisan ulang.

Jalur klien asli

Pencocokan regex jalur

Jalur yang ditulis ulang

/something

Cocok. Grup tangkapan kedua kosong.

/

/something/

Cocok. Grup tangkapan kedua kosong.

/

/something/new

Cocok. Grup tangkapan kedua adalah new.

/new

/something-new/item

Tidak cocok. Dalam contoh ini, karena permintaan tidak cocok dengan aturan routing apa pun, 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" # Memungkinkan bidang path menggunakan ekspresi reguler.
    alb.ingress.kubernetes.io/rewrite-target: /${2} # Anotasi ini mendukung penggantian ekspresi reguler.
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 menyusun ulang beberapa bagian

Contoh berikut menangkap dan menyusun ulang beberapa bagian dari jalur /items/(.*)/(.*)/(.*). Contoh ini juga mengonversi segmen jalur menjadi parameter kueri, yang tidak memerlukan perubahan di sisi klien. Jalur yang ditulis ulang dibuat sebagai /, diikuti oleh grup tangkapan kedua ${2}, string ?code=, dan grup tangkapan ketiga ${3}. Tabel berikut menunjukkan hasil penulisan ulang.

Contoh ini mengharuskan klien menggunakan format jalur tetap dengan empat segmen.

Jalur klien asli

Pencocokan regex jalur

Jalur yang ditulis ulang

/items/electronics/computers/554

Cocok. Grup tangkapan kedua adalah computers, dan yang ketiga adalah 554.

/computers?code=554

/items/produce/fruits/12

Cocok. Grup tangkapan kedua adalah fruits, dan yang ketiga adalah 12.

/fruits?code=12

/items/headphones/5

Tidak cocok. Dalam contoh ini, karena permintaan tidak cocok dengan aturan routing apa pun, ALB Ingress mengembalikan kode status 503.

/drinks/41

Tidak cocok. Dalam contoh ini, karena permintaan tidak cocok dengan aturan routing apa pun, 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" # Memungkinkan bidang path menggunakan ekspresi reguler.
    alb.ingress.kubernetes.io/rewrite-target: /${2}?code=${3} # Anotasi ini mendukung penggantian ekspresi reguler.
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 ekspresi reguler untuk mencocokkan beberapa jalur (/app-a(/|$)(.*) dan /app-b(/|$)(.*)) dan menulis ulangnya ke satu jalur. Jalur yang ditulis ulang adalah /app-c/ diikuti oleh ${2}. Tabel berikut menunjukkan hasil penulisan ulang.

Jalur klien asli

Pencocokan regex jalur

Jalur yang ditulis ulang

/app-a/item1

Cocok. Grup tangkapan kedua adalah item1.

/app-c/item1

/app-a/item2

Cocok. Grup tangkapan kedua adalah item2.

/app-c/item2

/app-a atau /app-a/

Cocok. Grup tangkapan kedua kosong.

/app-c/

/drinks/41

Tidak cocok. Dalam contoh ini, karena permintaan tidak cocok dengan aturan routing apa pun, 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" # memungkinkan bidang path 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

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 kueri, gunakan aturan penerusan kustom.

Menguji aturan penulisan ulang

Gunakan perintah sed untuk menguji apakah jalur klien cocok dengan ekspresi reguler jalur dan untuk melihat pratinjau jalur yang ditulis ulang.

Contoh ini menggunakan jalur tangkapan /items/(.*)/(.*)/(.*) dan aturan penulisan ulang /${2}?code=${3} dari Contoh 2: Menangkap dan menyusun ulang beberapa bagian.

  1. Simpan jalur contoh berikut ke file bernama 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:

    Perintah berikut menyesuaikan ekspresi reguler jalur contoh (/items/(.*)/(.*)/(.*)) dan jalur yang ditulis ulang (/${2}?code=${3}) untuk sed. Saat menggunakan sed, karakter khusus seperti / harus di-escape dengan garis miring terbalik (\), dan referensi grup tangkapan ditulis sebagai \2 bukan ${2}.
    sed -E 's#\/items\/(.*)\/(.*)\/(.*)#Matched: []  ---  Rewritten: [/\2?code=\3]#' path2.txt

    Output berikut diharapkan. Dua jalur pertama cocok dengan aturan dan ditulis ulang, sedangkan dua jalur terakhir tidak cocok dan tetap tidak berubah.

    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

Tambahkan anotasi untuk mengekspos layanan pada port 80 (HTTP) dan port 443 (HTTPS).

Contoh YAML lengkap

Kubernetes 1.19 atau lebih baru

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]'
spec:
  ingressClassName: alb
  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

Kubernetes 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 langsung di Ingress. Pertama-tama buat port dan protokol listener yang diperlukan di AlbConfig, lalu referensikan di Ingress. Lihat Menggunakan AlbConfig untuk mengonfigurasi listener ALB.

Parameter

Deskripsi

Contoh YAML

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

Mengekspos layanan pada port 80 dan 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 penerusan

Secara bawaan, ALB memprioritaskan aturan penerusan berdasarkan kriteria berikut:

  • Sistem mengurutkan resource Ingress secara leksikografis berdasarkan namespace/name. Ingress dengan nilai leksikografis lebih kecil memiliki prioritas lebih tinggi.

    Namespace dibandingkan terlebih dahulu, kemudian nama karakter per karakter.
  • Dalam satu Ingress, aturan diprioritaskan berdasarkan urutannya di bidang rules. Aturan yang tercantum lebih dulu memiliki prioritas lebih tinggi.

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

Untuk menentukan prioritas aturan penerusan ALB tanpa mengubah namespace/name dari Ingress, tambahkan anotasi Ingress berikut:

Klik untuk melihat contoh YAML lengkap

Kubernetes 1.19 atau lebih baru

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

Kubernetes 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

Nilai

Contoh YAML

alb.ingress.kubernetes.io/order

Menentukan prioritas aturan penerusan ALB. Nilai lebih rendah menunjukkan prioritas lebih tinggi.

Prioritas setiap aturan harus unik dalam listener yang sama.

[1, 1000]

Bawaan: 10

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

Menerapkan rilis canary dengan anotasi

ALB mendukung rilis canary berdasarkan header, cookie, dan bobot. Lihat Menerapkan rilis canary menggunakan ALB Ingress untuk praktik terbaik.

Parameter

Deskripsi

Deskripsi

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

Mengaktifkan fitur rilis canary.

  • Trafik canary dapat didistribusikan berdasarkan header, cookie, atau bobot.

    ALB menerapkan aturan ini dalam urutan prioritas berikut (dari tertinggi ke terendah): header > cookie > bobot.
  • Jangan hapus Ingress asli selama rilis canary. Setelah memverifikasi versi canary stabil, perbarui Ingress asli untuk menggunakan layanan baru, lalu hapus Ingress canary.

  • Distribusikan trafik canary berdasarkan header tertentu

    Parameter

    Deskripsi

    Contoh YAML

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

    Anotasi ini menentukan header permintaan kustom dan nilainya untuk routing trafik. Kedua anotasi ini wajib.

    • Saat header dan header-value dalam permintaan sesuai dengan nilai yang dikonfigurasi, trafik permintaan diarahkan ke titik masuk layanan canary.

    • Permintaan yang tidak cocok dievaluasi terhadap aturan prioritas lebih rendah.

    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 permintaan berisi header location: hz, ALB mengarahkan trafik ke layanan canary. Permintaan lain dievaluasi terhadap aturan prioritas lebih rendah, seperti berdasarkan cookie atau bobot.

    Contoh YAML lengkap

    Kubernetes 1.19 atau lebih baru

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

    Kubernetes 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
  • Distribusikan trafik canary berdasarkan cookie tertentu

    Parameter

    Nilai cookie

    Contoh YAML

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

    • always: Mengarahkan semua permintaan ke layanan canary.

    • never: Tidak pernah mengarahkan permintaan ke layanan canary.

    Rilis canary berbasis cookie tidak mendukung nilai 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 permintaan berisi header Cookie: demo=always, ALB mengarahkan trafik ke layanan canary. Jika header berisi Cookie: demo=never, ALB tidak mengarahkan trafik ke layanan canary.

    Contoh YAML lengkap

    Kubernetes 1.19 atau lebih baru

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

    Kubernetes 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
  • Distribusikan trafik berdasarkan bobot

    Parameter

    Deskripsi

    Contoh YAML

    alb.ingress.kubernetes.io/canary-weight

    Persentase trafik yang diarahkan ke layanan canary. Nilai valid: 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 YAML lengkap

    Kubernetes 1.19 atau lebih baru

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

    Kubernetes 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

Konfigurasi persistensi sesi dengan anotasi

Gunakan anotasi berikut untuk mengonfigurasi persistensi sesi untuk ALB Ingress.

Contoh YAML

Kubernetes 1.19 atau 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"   # Untuk menggunakan cookie kustom, atur anotasi ini ke 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

Kubernetes 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"  # Untuk menggunakan cookie kustom, atur anotasi ini ke Server.
    alb.ingress.kubernetes.io/cookie-timeout: "1800"
    alb.ingress.kubernetes.io/cookie: "test"
spec:
  ingressClassName: alb
  rules:
  - http:
      paths:
      # Konfigurasikan jalur konteks.
      - path: /tea2
        pathType: ImplementationSpecific
        backend:
          serviceName: tea-svc
          servicePort: 80
      # Konfigurasikan jalur konteks.
      - 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"   # Untuk menggunakan cookie kustom, atur anotasi ini ke Server.
    alb.ingress.kubernetes.io/cookie-timeout: "1800"
    alb.ingress.kubernetes.io/cookie: "test"
spec:
... ...

Parameter

Deskripsi

Bawaan

alb.ingress.kubernetes.io/sticky-session

Menentukan apakah akan mengaktifkan persistensi sesi.

  • true: Mengaktifkan persistensi sesi.

  • false: Menonaktifkan persistensi sesi.

false

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

Menentukan cara load balancer menangani cookie.

  • Insert: Load balancer menyisipkan cookie SERVERID ke respons pertama. Permintaan berikutnya dengan cookie ini diarahkan ke server backend yang sama.

  • Server: Load balancer menulis ulang cookie asli dengan cookie kustom. Permintaan berikutnya dengan cookie baru ini diarahkan ke server backend yang sama.

Catatan

Hanya berlaku saat alb.ingress.kubernetes.io/sticky-session diatur ke "true". Lihat Membuat grup server untuk parameter grup server.

Insert

alb.ingress.kubernetes.io/cookie-timeout

Waktu tunggu cookie dalam detik. Nilai valid: 1 hingga 86400.

Hanya berlaku saat alb.ingress.kubernetes.io/sticky-session-type diatur ke Insert.

1000

alb.ingress.kubernetes.io/cookie

Nilai cookie kustom.

Wajib (tidak boleh kosong) saat alb.ingress.kubernetes.io/sticky-session-type diatur ke Server.

""

Tentukan algoritma penyeimbangan beban

Gunakan anotasi untuk menentukan algoritma penyeimbangan beban untuk grup server backend.

Contoh YAML

Kubernetes 1.19 dan lebih baru

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

Kubernetes versi sebelum 1.19

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/backend-scheduler: "uch" # Atur ini ke wrr, sch, atau wlc sesuai kebutuhan.
    alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # Parameter ini wajib hanya saat algoritma penyeimbangan beban adalah uch. Tidak diperlukan untuk 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 dengan bobot lebih tinggi menerima lebih banyak permintaan. (Bawaan)

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

wlc

Mendistribusikan permintaan berdasarkan bobot dan jumlah koneksi saat ini. Jika bobot sama, server dengan koneksi paling sedikit dipilih.

sch

Mengarahkan permintaan dari IP sumber yang sama ke server backend yang sama.

uch

Mengarahkan permintaan berdasarkan hash dari parameter URL tertentu.

Gunakan anotasi alb.ingress.kubernetes.io/backend-scheduler-uch-value untuk menentukan parameter URL mana yang digunakan untuk hash.

Konfigurasi CORS

Gunakan anotasi berikut untuk mengonfigurasi Cross-Origin Resource Sharing (CORS) untuk ALB Ingress.

Klik 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 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 origin yang diizinkan"
spec:
... ...

Parameter

Deskripsi

Bawaan

alb.ingress.kubernetes.io/enable-cors

Mengaktifkan Cross-Origin Resource Sharing (CORS).

Nilai bawaan: "false"

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

Menentukan origin mana yang dapat mengakses sumber daya di server.

Gunakan koma (,) untuk memisahkan beberapa origin. Setiap nilai harus dimulai dengan http:// atau https:// diikuti nama domain yang valid atau nama domain wildcard. 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

Menentukan metode HTTP yang diizinkan untuk permintaan lintas asal.

Nilainya tidak peka huruf besar/kecil. Gunakan koma (,) untuk memisahkan beberapa metode HTTP.
  • 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

Menentukan header permintaan yang diizinkan untuk permintaan lintas asal.

Atur parameter ini ke * atau daftar nilai header yang dipisahkan koma. Setiap nilai hanya boleh berisi huruf besar, huruf kecil, dan angka. Nilai tidak boleh diawali atau diakhiri dengan garis bawah (_) atau tanda hubung (-). Panjang maksimum satu nilai adalah 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

Menentukan header respons mana yang diekspos ke klien.

Atur parameter ini ke * atau daftar nilai header yang dipisahkan koma. Setiap nilai hanya boleh berisi huruf besar, huruf kecil, dan angka. Nilai tidak boleh diawali atau diakhiri dengan garis bawah (_) atau tanda hubung (-). Panjang maksimum satu nilai adalah 32 karakter.
  • Nilai bawaan: ""

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

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

Menentukan apakah akan menyertakan kredensial dalam permintaan lintas asal.

  • Nilai bawaan: true

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

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

Durasi cache untuk respons preflight, dalam detik. Nilai valid: 0 hingga 172.800.

Nilai bawaan: 172800

Koneksi persisten backend

Koneksi persisten backend memungkinkan ALB menggunakan kembali koneksi TCP ke server backend, mengurangi overhead koneksi dalam skenario throughput tinggi.

Contoh YAML

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 untuk mengurangi overhead koneksi TCP.

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

Lampiran backend IPv6 untuk grup server

Lampiran backend IPv6 memungkinkan Pod IPv4 dan IPv6 dalam satu grup server, tetapi memerlukan kluster dual-stack. Lihat Membuat Kluster ACK yang dikelola.

Catatan

Batasan berikut berlaku saat lampiran backend IPv6 diaktifkan:

  • Untuk mengaktifkan lampiran backend IPv6 untuk grup server, IPv6 harus diaktifkan untuk VPC grup server tersebut.

  • Lampiran backend IPv6 tidak didukung untuk grup server bertipe IP atau Function Compute saat dilampirkan menggunakan aksi penerusan kustom.

  • Jika Ingress dikaitkan dengan instans ALB IPv4 saja, Anda tidak dapat mengaktifkan lampiran backend IPv6 untuk grup servernya.

Contoh YAML

apiVersion: v1
kind: Service
metadata:
  name: tea-svc
spec:
  # Untuk mengonfigurasi dual-stack, atur ipFamilyPolicy ke RequireDualStack atau PreferDualStack dan tentukan IPv4 serta IPv6 di ipFamilies.
  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
Konfigurasikan Service dan ALB Ingress untuk dual-stack. Setelah Anda membuat instans ALB dual-stack, Anda dapat melampirkan server backend IPv4 dan IPv6 ke grup server.

Objek konfigurasi

Parameter

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:
  # Untuk mengonfigurasi dual-stack, atur ipFamilyPolicy ke RequireDualStack atau PreferDualStack dan tentukan IPv4 serta IPv6 di ipFamilies.
  ipFamilyPolicy: RequireDualStack
  ipFamilies:
  - IPv4
  - IPv6
... ...

ipFamilyPolicy

  • RequireDualStack

  • PreferDualStack

Menetapkan kebijakan IP untuk Service, mengaktifkan jaringan dual-stack.

ALB Ingress

alb.ingress.kubernetes.io/enable-ipv6

"true"

Mengaktifkan lampiran backend IPv6 untuk grup server.

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

Konfigurasi pembatasan kecepatan QPS

Tambahkan anotasi berikut untuk mengaktifkan pembatasan kecepatan QPS untuk aturan penerusan.

Lihat 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

Menentukan batas QPS untuk aturan penerusan. Nilai valid: 1 hingga 1.000.000.

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

Mulai lambat

Mulai lambat secara bertahap meningkatkan trafik ke Pod yang baru ditambahkan, mencegah kelebihan beban akibat lonjakan trafik mendadak.

Contoh 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 akan mengaktifkan mulai lambat. Dinonaktifkan secara bawaan.

  • 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

Durasi peningkatan bertahap mulai lambat dalam detik. Nilai valid: 30–900. Bawaan: 30.

Pengurasan koneksi

Saat Pod memasuki status Terminating, ALB Ingress menghapusnya dari grup server tetapi tidak segera menutup koneksi yang ada, yang dapat menyebabkan error permintaan atau mencegah shutdown yang mulus. Pengurasan koneksi menjaga koneksi yang ada tetap terbuka selama waktu tunggu yang dapat dikonfigurasi sebelum menutupnya. Lihat Menggunakan pengurasan koneksi dengan ALB Ingress untuk shutdown layanan yang mulus.

Penting

ALB Ingress tidak menjamin Pod tetap berjalan hingga pengurasan koneksi selesai. Untuk mengontrol ketersediaan Pod selama terminasi, konfigurasikan spec.terminationGracePeriodSeconds atau gunakan preStop Hook.

Contoh 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 akan mengaktifkan pengurasan koneksi.

  • true: Mengaktifkan pengurasan koneksi.

  • false: Menonaktifkan pengurasan koneksi. (Bawaan)

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

Menentukan waktu tunggu pengurasan koneksi dalam detik. Nilai valid: [0, 900]. Bawaan: 300.

Nonaktifkan penyeimbangan beban lintas zona

ALB mendistribusikan trafik di seluruh zona ketersediaan secara bawaan. Menonaktifkan penyeimbangan beban lintas zona membatasi trafik ke layanan backend di zona yang sama.

Penting

Jika Anda menonaktifkan penyeimbangan beban lintas zona, pastikan setiap zona ketersediaan memiliki sumber daya backend yang cukup.

Gunakan contoh berikut untuk menonaktifkan penyeimbangan beban lintas zona:

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 akan mengaktifkan penyeimbangan beban lintas zona. Diaktifkan secara bawaan.

  • true: Mengaktifkan penyeimbangan beban lintas zona.

  • false: Menonaktifkan penyeimbangan beban lintas zona.

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