すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ALB イングレスの高度な使用方法

最終更新日:Mar 19, 2026

ACK クラスターにおいて、ALB イングレスはサービス向けにレイヤー 7 負荷分散を提供します。このトピックでは、ALB イングレスを使用して、異なるドメイン名または URL パスからのリクエストを異なるバックエンドサーバーグループに転送する方法、HTTP トラフィックを HTTPS にリダイレクトする方法、および段階的リリースを実装する方法について説明します。

ドメイン名に基づくリクエストの転送

指定されたドメイン名または空のドメイン名に基づいてリクエストを転送するためのシンプルな Ingress を作成できます。以下の例でその方法を示します。

通常のドメイン名に基づくリクエストの転送

以下の YAML 例では、ルーティングパスが /hello に設定されています。demo.domain.ingress.top/hello へのリクエストはバックエンドサービスに転送されます。

  1. 以下のテンプレートをデプロイして、Service、Deployment、および Ingress を作成できます。Ingress はドメイン名に基づいて Service にリクエストを転送します。

    サンプル YAML を表示するには展開してください

    バージョン 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/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

    バージョン 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. kubectl get ing コマンドを実行して ALB インスタンスのアドレスを取得します。以下のコマンド内の ADDRESS を ALB インスタンスのアドレスに置き換えて、コマンドを実行します。

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

    期待される出力:

    {"hello":"coffee"}

空のドメイン名に基づくリクエストの転送

以下の YAML 例では、空のドメイン名が設定され、ルーティングパスが /hello に設定されています。<ADDRESS>/hello へのリクエストはバックエンドサービスに転送されます。

  1. 以下のテンプレートをデプロイして Ingress を作成できます。

    サンプル YAML を表示するには展開してください

    バージョン 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/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

    バージョン 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. kubectl get ing コマンドを実行して ALB インスタンスのアドレスを取得します。以下のコマンド内の ADDRESS を ALB インスタンスのアドレスに置き換えて、コマンドを実行します。

    curl <ADDRESS>/hello

    期待される出力:

    {"hello":"coffee"}

URL パスに基づくリクエストの転送

ALB イングレスは URL パスに基づくリクエストの転送をサポートしています。pathType フィールドを使用して、さまざまな URL マッチングポリシーを設定できます。pathType フィールドは以下の 3 つのマッチング方法をサポートしています。

  • 完全一致 (Exact):リクエスト URL パスと完全に一致するかどうかを確認します。

  • デフォルト (ImplementationSpecific):Ingress コントローラーで定義されたロジックを使用します。ALB イングレスコントローラーはこれを完全一致 (Exact) として扱います。パスが指定されていない場合、ALB イングレスはデフォルトパスとして / を使用します。

  • プレフィックス一致 (Prefix):リクエスト URL パスのプレフィックスと一致するかどうかを確認します。

重要
  • pathTypeExact または Prefix に設定する場合は、パスに空でない絶対パスを指定する必要があります。指定しない場合、Ingress リソースの検証に失敗し、作成できません。

  • URL マッチングポリシーが競合する可能性があります。その場合、リクエストを転送する前に転送ルールが優先度順にソートされます。詳細については、「転送ルールの優先度を設定する」をご参照ください。

  • シンプルなパス (/、/foo、/foo/)

    マッチング方法

    ルールパス (ルーティングルール)

    リクエストパス (ユーザーによるアクセス)

    このルールに一致しますか?

    プレフィックス一致 (Prefix)

    /

    / (すべてのルールに一致)

    はい

    /foo

    • /foo

    • /foo/

    はい

    /foo/

    • /foo

    • /foo/

    はい

    /aaa

    /ccc

    いいえ、プレフィックスが一致しません。

    完全一致 (Exact) またはデフォルト (ImplementationSpecific)

    /foo

    /foo

    はい

    /bar

    いいえ

    /foo/

    いいえ

    /foo/

    /foo

    いいえ

  • 階層的なパス (/aaa/bb、/aaa/bbb、/aaa/bbb/)

    マッチング方法

    ルールパス (ルーティングルール)

    リクエストパス (ユーザーによるアクセス)

    このルールに一致しますか?

    プレフィックス一致 (Prefix)

    /aaa/bb

    /aaa/bbb

    いいえ

    /aaa/bbb

    /aaa/bbb

    はい

    /aaa/bbb/

    /aaa/bbb

    はい、ルールパスの末尾のスラッシュは無視されます。

    /aaa/bbb

    /aaa/bbb/

    はい、リクエストパスの末尾のスラッシュに一致します。

    /aaa/bbb/ccc

    はい、リクエストパスのサブパスに一致します。

  • 2 つのルールパスを同時に設定する

    マッチング方法

    ルールパス (ルーティングルール)

    リクエストパス (ユーザーによるアクセス)

    このルールに一致しますか?

    プレフィックス一致 (Prefix)

    • /

    • /aaa

    /aaa/ccc

    はい、リクエストパスがルールパスの / プレフィックスに一致します。

    • /aaa

    • /

    /aaa/ccc

    はい、リクエストパスがルールパスの /aaa プレフィックスに一致します。

    /ccc

    はい、リクエストパスがルールパスの / プレフィックスに一致します。

    • /aaa

    • /bbb

    /ccc

    いいえ、プレフィックスが一致しません。

以下の例で 3 つのマッチング方法を示します。

プレフィックス一致 (Prefix)

URL パスは / で区切られたプレフィックス一致を使用します。マッチングは大文字と小文字を区別し、パス内の各要素を階層的に比較します。

以下の YAML 例では、ルーティングルールが / に設定されています。/ で始まるすべてのパス(例:/hello)が一致し、アクセス可能です。

  1. 以下のテンプレートをデプロイして Ingress を作成できます。

    サンプル YAML を表示するには展開してください

    バージョン 1.19 以降のクラスター

    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

    バージョン 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. kubectl get ing コマンドを実行して ALB インスタンスのアドレスを取得します。以下のコマンド内の ADDRESS を ALB インスタンスのアドレスに置き換えて、コマンドを実行します。

    curl <ADDRESS>/hello

    期待される出力:

    {"hello":"coffee"}

完全一致 (Exact) またはデフォルト (ImplementationSpecific)

以下の YAML 例では、ルーティングルールが /hello に設定されています。/hello パスのみが一致し、アクセス可能です。

  1. 以下のテンプレートをデプロイして Ingress を作成できます。

    サンプル YAML を表示するには展開してください

    バージョン 1.19 以降のクラスター

    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

    バージョン 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. kubectl get ing コマンドを実行して ALB インスタンスのアドレスを取得します。以下のコマンド内の ADDRESS を ALB インスタンスのアドレスに置き換えて、コマンドを実行します。

    curl <ADDRESS>/hello

    期待される出力:

    {"hello":"coffee"}

ヘルスチェックの設定

ALB イングレスは、以下のアノテーションを使用したヘルスチェック設定をサポートしています。

完全な YAML 例を表示するには展開してください

バージョン 1.19 以降のクラスター

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:
      # Context Path を設定
      - path: /tea
        pathType: ImplementationSpecific
        backend:
          service:
            name: tea-svc
            port:
              number: 80
      # Context Path を設定
      - path: /coffee
        pathType: ImplementationSpecific
        backend:
          service:
            name: coffee-svc
            port:
              number: 80

バージョン 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:
      # Context Path を設定。
      - path: /tea
        backend:
          serviceName: tea-svc
          servicePort: 80
      # Context Path を設定。
      - path: /coffee
        backend:
          serviceName: coffee-svc
          servicePort: 80

アノテーションの例:

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

パラメーター

説明

デフォルト値

alb.ingress.kubernetes.io/healthcheck-enabled

バックエンドサーバーグループのヘルスチェックを有効にするかどうかを指定します。

  • true:ヘルスチェックを有効にします。

  • false:ヘルスチェックを無効にします。

false

alb.ingress.kubernetes.io/healthcheck-path

ヘルスチェックパス。

/

alb.ingress.kubernetes.io/healthcheck-protocol

ヘルスチェックに使用するプロトコル。

  • HTTP:HTTP プロトコルを使用します。HEAD または GET リクエストを送信してブラウザアクセスをシミュレートし、サーバーアプリケーションが正常かどうかを確認します。

  • HTTPS:HTTPS プロトコルを使用します。HEAD または GET リクエストを送信してブラウザアクセスをシミュレートし、サーバーアプリケーションが正常かどうかを確認します。

  • TCP:TCP プロトコルを使用します。SYN ハンドシェイクメッセージを送信してサーバーポートがアクティブかどうかを確認します。

  • GRPC:gRPC プロトコルを使用します。POST または GET リクエストを送信してサーバーアプリケーションが正常かどうかを確認します。

HTTP

alb.ingress.kubernetes.io/healthcheck-httpversion

HTTP プロトコルバージョン。healthcheck-protocolHTTP または HTTPS に設定されている場合にのみ有効になります。

  • HTTP1.0

  • HTTP1.1

HTTP1.1

alb.ingress.kubernetes.io/healthcheck-method

ヘルスチェックメソッド。

  • HEAD

  • POST

  • GET

重要

healthcheck-protocolGRPC に設定されている場合、POST または GET を選択します。

HEAD

alb.ingress.kubernetes.io/healthcheck-httpcode

ヘルスチェックの状態コード。プローブリクエストが成功し、指定された状態コードを返した場合にのみ、バックエンドサーバーは正常とみなされます。

以下のオプションを 1 つ以上指定できます。複数の状態コードを指定する場合は、カンマ (,) で区切ります。

  • http_2xx

  • http_3xx

  • http_4xx

  • http_5xx

http_2xx

alb.ingress.kubernetes.io/healthcheck-code

ヘルスチェックの状態コード。プローブリクエストが成功し、指定された状態コードを返した場合にのみ、バックエンドサーバーは正常とみなされます。healthcheck-httpcode とこのパラメーターの両方が指定されている場合、このパラメーターが優先されます。

有効値は healthcheck-protocol の値によって異なります。

  • HTTP または HTTPS

    以下のオプションを 1 つ以上指定できます。複数の状態コードを指定する場合は、カンマ (,) で区切ります。

    • http_2xx

    • http_3xx

    • http_4xx

    • http_5xx

  • GRPC:有効値:[0, 99]。

    範囲入力がサポートされています。最大 20 個の範囲を指定できます。複数の範囲を指定する場合は、カンマ (,) で区切ります。

  • HTTP または HTTPS

    デフォルト値:http_2xx

  • GRPC

    デフォルト値:0

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

ヘルスチェックのタイムアウト期間(秒単位)。有効値:[1, 300]。

5

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

ヘルスチェックの間隔(秒単位)。有効値:[1, 50]。

2

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

バックエンドサーバーを正常とマークするために必要な、連続するヘルスチェック成功回数。有効値:[2, 10]。

3

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

バックエンドサーバーを異常とマークするために必要な、連続するヘルスチェック失敗回数。有効値:[2, 10]。

3

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

ヘルスチェックに使用するポート。

0

説明

0 は、バックエンドサーバーポートをヘルスチェックに使用することを示します。

HTTP トラフィックを HTTPS にリダイレクトする

ALB イングレスは、以下のアノテーションを使用して HTTP リクエストを HTTPS ポート 443 にリダイレクトできます。

重要
  • このアノテーションは、リスニングポート 80 で設定された HTTP 転送ルールにのみ適用されます。

  • このアノテーションは、RemoveHeaderInsertHeader などのカスタム転送アクションや、CORS 関連のアノテーション Cors とのみ連携します。

  • このアノテーションを使用するには、AlbConfig でポート 443 の HTTPS リスナーが設定されていることを確認する必要があります。詳細については、「AlbConfig を使用して ALB リスナーを設定する」をご参照ください。

完全な YAML 例を表示するには展開してください

バージョン 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/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

バージョン 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

パラメーター

説明

アノテーション例

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

HTTP リクエストを HTTPS ポート 443 にリダイレクトします。

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

バックエンドの HTTPS および gRPC プロトコルのサポート

ALB は、バックエンドプロトコルとして HTTPS および gRPC をサポートしています。Ingress に以下のアノテーションを追加できます。

完全な YAML 例を表示するには展開してください

バージョン 1.19 以降のクラスター

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

バージョン 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
説明

Ingress 作成後は、バックエンドプロトコルを変更できません。プロトコルを変更するには、Ingress を削除して再作成する必要があります。

パラメーター

説明

YAML 例

alb.ingress.kubernetes.io/backend-protocol

  • HTTPS:バックエンドサービスが HTTPS を使用します。

  • grpc:バックエンドサービスが gRPC プロトコルを使用します。

    Ingress 経由で gRPC サービスを転送するには、対応するドメイン名の SSL 証明書を設定し、TLS プロトコルを使用して通信する必要があります。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/backend-protocol: "grpc"
  name: demo-alb-ingress
... ...

正規表現の設定

alb.ingress.kubernetes.io/use-regex: "true" アノテーションを使用して、正規表現モードを有効にできます。その後、カスタム転送条件またはアクションで対応する正規表現を設定できます。

重要
  • このアノテーションは、pathType が Prefix に設定されたパスルールに対してのみ有効です。

  • このアノテーションが存在する場合、その値が true または false のいずれであっても、正規表現マッチングが有効になります。正規表現マッチングを無効にするには、このアノテーションを削除する必要があります。

  • このアノテーションが設定されておらず、パスに “%#;!()[]^,”\" などの特殊文字が含まれている場合、Ingress リソースを作成できません。

完全な YAML 例を表示するには展開してください

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/use-regex: "true"  ## 正規表現の使用を許可します。
   alb.ingress.kubernetes.io/conditions.<YOUR-SVC-NAME>: | ## <YOUR-SVC-NAME> を実際のサービス名に置き換えます。以下にある backend.service.name と一致している必要があります。
     [{
       "type": "Path",
       "pathConfig": {
           "values": [
              "~*/pathvalue1", ## 正規表現の前に ~* または ~ を正規表現フラグとして追加します。~* または ~ の後の内容が有効な正規表現となります。~* は大文字と小文字を区別するマッチングを示し、~ は大文字と小文字を区別しないマッチングを示します。
              "/pathvalue2"    ## 完全一致の場合は ~* は不要です。
           ]
       }
      }]
  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> を実際のサービス名に置き換えます。アノテーションで指定されたカスタム転送条件のサービス名と一致している必要があります。
            port:
              number: 88

パラメーター

説明

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

正規表現を有効にします。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
   alb.ingress.kubernetes.io/use-regex: "true"  ## 正規表現の使用を許可します。
   alb.ingress.kubernetes.io/conditions.<YOUR-SVC-NAME>: | ## <YOUR-SVC-NAME> を実際のサービス名に置き換えます。以下にある backend.service.name と一致している必要があります。
     [{
       "type": "Path",         ## Host もサポートされています。
       "pathConfig": {
           "values": [
              "~*/pathvalue1", ## 正規表現の前に ~* または ~ を正規表現フラグとして追加します。~* または ~ の後の内容が有効な正規表現となります。~* は大文字と小文字を区別するマッチングを示し、~ は大文字と小文字を区別しないマッチングを示します。
              "/pathvalue2"    ## 完全一致の場合は ~* は不要です。
           ]
       }
      }]
... ...

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

カスタム転送条件を設定します。詳細については、「ALB イングレス転送ルールをカスタマイズする」をご参照ください。

<YOUR-SVC-NAME> を実際のサービス名に置き換えます。以下にある backend.service.name と一致している必要があります。

正規表現マッチングルール:

マッチング対象

プレフィックス

ルール例

クライアントパス

一致しますか?

説明

ドメイン名

~ で始まる

~test.example.com

test.EXAMPLE.com

はい

ドメイン名は大文字と小文字を区別しない正規表現マッチングをサポートしています。

パス

~ で始まる

~/api

/API

はい

パスは大文字と小文字を区別しない正規表現マッチングをサポートしています。

~* で始まる

~*/api

/Api

いいえ

パスは大文字と小文字を区別する正規表現マッチングをサポートしています。

正規表現のプレフィックスマッチングを設定する

デフォルトでは、正規表現マッチングは「部分一致」を使用します。つまり、リクエストに正規表現に一致する内容が含まれている場合、ルールが一致します。特定の内容で始まるパスのみを一致させるには、正規表現の先頭に ^ を追加します。これにより、指定された内容で始まるパスのみが一致します。たとえば、^/api は /api で始まるリクエストパスのみに一致します。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-example
  annotations:
    alb.ingress.kubernetes.io/use-regex: "true"  ## 正規表現マッチングを有効にします。
    alb.ingress.kubernetes.io/conditions.<YOUR-SVC-NAME>: |     ## <YOUR-SVC-NAME> を実際のサービス名に置き換えます。以下にある backend.service.name と一致している必要があります。
      [
        {
          "type": "Path",
          "pathConfig": {
            "values": [
              "~*^/pathvalue1",  # ~* または ~ は正規表現マッチングを示します。^ は「/pathvalue1 で始まる」ことを示します。
              "/pathvalue2"     # 通常のプレフィックスまたは完全一致。~* または ~ は不要です。
            ]
          }
        }
      ]
spec:
  ingressClassName: alb
  rules:
    - http:
        paths:
          - path: /test-path-for-alb
            pathType: Prefix
            backend:
              service:
                name: <YOUR-SVC-NAME>   # 実際のサービス名に置き換えます。アノテーションと一致している必要があります。
                port:
                  number: 88

書き換えの設定

ALB イングレスは、書き換え機能をサポートしています。ALB イングレスがクライアントリクエストを受信すると、バックエンド Service にリクエストを送信する前にリクエストのパスを変更します。書き換え機能は、以下の 2 つのアノテーションを使用して実装されます。

  • alb.ingress.kubernetes.io/rewrite-target: /<path>/${number}:書き換えを有効にして、書き換え後のパスを指定します。

    重要
    • ${number} 形式を使用して、元のパスから正規表現でキャプチャされた変数を表します。${1}${2}、または ${3} を設定できます。元のパスから最大 3 つの変数をキャプチャできます。

    • Ingress で pathTypePrefix に設定する必要があります。

  • alb.ingress.kubernetes.io/use-regex: true:パスで正規表現を使用します。rewrite-target が設定されている場合、デフォルトで有効になります。

    重要
    • このアノテーションが存在する場合、その値が true または false のいずれであっても、正規表現マッチングが有効になります。正規表現マッチングを無効にするには、このアノテーションを削除する必要があります。

    • このアノテーションが設定されておらず、パスに “%#;!()[]^,”\" などの特殊文字が含まれている場合、Ingress リソースを作成できません。

設定例

例 1:プレフィックスの削除

以下の YAML 例では、path: /something(/|$)(.*) が正規表現を使用してクライアントリクエストパスを 3 つの部分に分割します。

  • /something:削除したいプレフィックスに一致します。

  • (/|$):最初のキャプチャグループ。このグループは、/something の後に続く / または $(パスの末尾)に一致します。

  • (.*):2 番目のキャプチャグループ。このグループは /something/ の後のすべての内容に一致します。書き換え後のパスでは ${2} を使用できます。

alb.ingress.kubernetes.io/rewrite-target アノテーションで設定された書き換えパスは、/(標準パスプレフィックス)+ ${2}(2 番目のキャプチャグループの内容)です。以下の表にパス書き換えの効果を示します。

元のクライアントパス

パス正規表現に一致しますか?

書き換え後のパス

/something

一致します。2 番目のキャプチャグループは空です。

/

/something/

一致します。2 番目のキャプチャグループは空です。

/

/something/new

一致します。2 番目のキャプチャグループは new です。

/new

/something-new/item

一致しません。この例では、どのルーティングルールにも一致せず、ALB イングレスはステータスコード 503 を返します。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rewrite-ingress
  annotations:
    alb.ingress.kubernetes.io/use-regex: "true" # path フィールドで正規表現を使用できるようにします。
    alb.ingress.kubernetes.io/rewrite-target: /${2} # このアノテーションは正規表現の置き換えをサポートします。
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /something(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: rewrite-svc
            port:
              number: 9080

例 2:複数の部分をキャプチャして並べ替える

以下の例では、パス /items/(.*)/(.*)/(.*) から複数の部分をキャプチャして並べ替えます。これにより、ユーザーが意識することなく URL 形式を POST のような形式に変更します。書き換えパスは、/(標準パスプレフィックス)+ ${2}(2 番目のキャプチャグループの内容)+ ?code= + ${3}(3 番目のキャプチャグループの内容)です。以下の表にパス書き換えの効果を示します。

この例では、パスに正確に 4 つのセグメントが必要です。クライアントが固定のパス形式を使用する場合にのみ、この方法を使用できます。

元のクライアントパス

パス正規表現に一致しますか?

書き換え後のパス

/items/electronics/computers/554

一致します。2 番目のキャプチャグループは computers、3 番目のキャプチャグループは 554 です。

/computers?code=554

/items/produce/fruits/12

一致します。2 番目のキャプチャグループは fruits、3 番目のキャプチャグループは 12 です。

/fruits?code=12

/items/headphones/5

一致しません。この例では、どのルーティングルールにも一致せず、ALB イングレスはステータスコード 503 を返します。

/drinks/41

一致しません。この例では、どのルーティングルールにも一致せず、ALB イングレスはステータスコード 503 を返します。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rewrite-ingress
  annotations:
    alb.ingress.kubernetes.io/use-regex: "true" # path フィールドで正規表現を使用できるようにします。
    alb.ingress.kubernetes.io/rewrite-target: /${2}?code=${3} # このアノテーションは正規表現の置き換えをサポートします。
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /items/(.*)/(.*)/(.*)
        pathType: Prefix
        backend:
          service:
            name: rewrite-svc
            port:
              number: 9080

例 3:複数のパスを単一のパスに書き換える

以下の例では、複数のパス /app-a(/|$)(.*) および /app-b(/|$)(.*) の正規表現マッチングを使用して、それらを単一のパスに書き換えます。書き換えパスは、/app-c/ + ${2}(2 番目のキャプチャグループの内容)です。以下の表にパス書き換えの効果を示します。

元のクライアントパス

パス正規表現に一致しますか?

書き換え後のパス

/app-a/item1

一致します。2 番目のキャプチャグループは item1 です。

/app-c/item1

/app-a/item2

一致します。2 番目のキャプチャグループは item2 です。

/app-c/item2

/app-a または /app-a/

一致します。2 番目のキャプチャグループは空です。

/app-c/

/drinks/41

一致しません。この例では、どのルーティングルールにも一致せず、ALB イングレスはステータスコード 503 を返します。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: rewrite-ingress
  annotations:
    alb.ingress.kubernetes.io/use-regex: "true" # path フィールドで正規表現を使用できるようにします。
    alb.ingress.kubernetes.io/rewrite-target: /app-c/${2} # このアノテーションは正規表現の置き換えをサポートします。
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

例 4:ドメイン名の書き換え

alb.ingress.kubernetes.io/rewrite-target アノテーションはパスのみを変更することをサポートしています。ドメイン名やパラメーターなど、URL の他の部分を変更するには、カスタム転送ルールを使用できます。

書き換えルールの一致を検証する

sed コマンドを使用して、特定のクライアントパスがパスに設定された正規表現に一致するかどうかを事前にテストし、書き換え後のパスを確認できます。

例 2:複数の部分をキャプチャして並べ替える のキャプチャパス /items/(.*)/(.*)/(.*) および書き換えルール /${2}?code=${3} を例に挙げます。

  1. 以下のサンプルコマンドを path2.txt に保存します。

    /items/electronics/computers/554
    /items/produce/fruits/12
    /items/headphones/5
    /drinks/41
  2. パスが一致するかどうかを確認し、書き換え後のパスを表示します。

    以下のコマンドでは、例のパス正規表現 (/items/(.*)/(.*)/(.*)) および書き換えパス (/${2}?code=${3}) を使用しています。`sed` コマンドでは、特殊文字 /\ でエスケープされ、キャプチャグループ表記は ${2} から \2 に変更されています。
    sed -E 's#\/items\/(.*)\/(.*)\/(.*)#Matched: [&]  --->  Rewritten: [/\2?code=\3]#' path2.txt

    期待される出力:最初の 2 つのパスは書き換えルールに一致し、新しいパスに書き換えられます。最後の 2 つのパスは一致せず、書き換えられません。

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

カスタムリスニングポートの設定

ALB イングレスは、アノテーションを使用したカスタムリスニングポートをサポートしています。これにより、サービスがポート 80 (HTTP) とポート 443 (HTTPS) の両方を同時に公開できます。

完全な YAML 例を表示するには展開してください

バージョン 1.19 以降のクラスター

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

バージョン 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
重要

ALB は Ingress 内で直接新しいリスナーを作成することをサポートしていません。Ingress が期待通りに動作するようにするには、まず AlbConfig で必要なリスナーポートとプロトコルを作成する必要があります。その後、これらのリスナーを Ingress のサービスに関連付けます。ALB リスナーの作成方法の詳細については、「AlbConfig を使用して ALB リスナーを設定する」をご参照ください。

パラメーター

説明

YAML 例

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

サービスがポート 80 とポート 443 の両方でリッスンできるようにします。

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

転送ルールの優先度を設定する

デフォルトでは、ALB 転送ルールの優先度は以下の順序でソートされます。

  • 異なる Ingress リソースは、namespace/name の辞書式順序でソートされます。辞書式順序が小さいほど、優先度が高くなります。

    まず名前空間を比較します。名前空間が同じ場合は、名前を 1 文字ずつ比較します。
  • 同じ Ingress 内では、ルールは rule フィールド内の順序でソートされます。先に設定されたルールほど、優先度が高くなります。

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

Ingress の namespace/name フィールドを変更したくない場合は、以下の Ingress アノテーションを設定して ALB 転送ルールの優先度を定義できます。

完全な YAML 例を表示するには展開してください

バージョン 1.19 以降のクラスター

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

バージョン 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

パラメーター

説明

有効値

YAML 例

alb.ingress.kubernetes.io/order

ALB 転送ルールの優先度を定義します。値が小さいほど、優先度が高くなります。

ルールの優先度は、同じリスナー内で一意である必要があります。

[1,1000]

デフォルト値:10

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

アノテーションによる段階的リリースの実装

ALB は、ヘッダー、Cookie、重みに基づく複雑なルーティングおよび段階的リリースをサポートしています。以下のアノテーションを設定して、さまざまな段階的リリース戦略を柔軟に実装できます。段階的リリースのベストプラクティスの詳細については、「ALB イングレスを使用して段階的リリースを実装する」をご参照ください。

パラメーター

説明

注記

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

段階的リリースを有効にします。

  • 段階的トラフィックは、ヘッダー、Cookie、または重みに基づいて割り当てられます。

    割り当ての優先度:ヘッダー > Cookie > 重み(高い順)。
  • 段階的リリース中は、元のルールを削除しないでください。そうしないと、サービス例外が発生する可能性があります。段階的リリースを検証した後、元の Ingress のバックエンドサービスを新しいサービスに更新し、段階的 Ingress を削除します。

  • 指定されたヘッダーに基づいて段階的リリースのトラフィックを割り当てる

    パラメーター

    説明

    YAML 例

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

    このルールでは、リクエストヘッダーとその値をカスタマイズできます。両方のアノテーションを設定する必要があります。

    • リクエスト内の header および header-value が設定値と一致する場合、リクエストトラフィックは段階的サービスエンドポイントにルーティングされます。

    • 一致しない他のリクエストは、段階的優先度に基づいて後続の段階的サービスに割り当てられます。

    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

    リクエストヘッダーに location: hz が含まれている場合、トラフィックは段階的サービスにルーティングされます。他のリクエストは、重みベースの戦略に基づいて対応する段階的サービスに割り当てられます。以下のサンプル構成を使用します。

    完全な YAML 例を表示するには展開してください

    バージョン 1.19 以降のクラスター

    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

    バージョン 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
  • 指定された Cookie に基づいて段階的リリースのトラフィックを割り当てる

    パラメーター

    Cookie 値

    YAML 例

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

    • always:すべてのリクエストトラフィックが段階的サービスエンドポイントにルーティングされます。

    • never:リクエストトラフィックが段階的サービスエンドポイントにルーティングされません。

    Cookie ベースの段階的リリースは、always および 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
      ... ... 

    リクエストヘッダーに Cookie: demo=always が含まれている場合、トラフィックは段階的サービスにルーティングされます。リクエストヘッダーに Cookie: demo=never が含まれている場合、トラフィックは段階的サービスにルーティングされません。以下のサンプル構成を使用します。

    完全な YAML 例を表示するには展開してください

    バージョン 1.19 以降のクラスター

    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

    バージョン 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
  • 重みに基づいてトラフィックを割り当てる

    パラメーター

    説明

    YAML 例

    alb.ingress.kubernetes.io/canary-weight

    指定されたサービスにルーティングされるリクエストの割合を設定します。有効値:0 ~ 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

    段階的サービスの重みを 50% に設定できます。以下のサンプル構成を使用します。

    完全な YAML 例を表示するには展開してください

    バージョン 1.19 以降のクラスター

    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

    バージョン 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

アノテーションによるセッション維持の実装

ALB イングレスは、以下のアノテーションを使用したセッション維持をサポートしています。

完全な YAML 例を表示するには展開してください

バージョン 1.19 以降のクラスター

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"   # カスタム Cookie がサポートされている場合、Cookie 挿入タイプは 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

バージョン 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"  # カスタム Cookie がサポートされている場合、Cookie 挿入タイプは Server である必要があります。
    alb.ingress.kubernetes.io/cookie-timeout: "1800"
    alb.ingress.kubernetes.io/cookie: "test"
spec:
  ingressClassName: alb
  rules:
  - http:
      paths:
      # Context Path を設定。
      - path: /tea2
        pathType: ImplementationSpecific
        backend:
          serviceName: tea-svc
          servicePort: 80
      # Context Path を設定。
      - path: /coffee2
        pathType: ImplementationSpecific
        backend:
          serviceName: coffee-svc
          servicePort: 80

アノテーションの例:

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"   # カスタム Cookie がサポートされている場合、Cookie 挿入タイプは Server である必要があります。
    alb.ingress.kubernetes.io/cookie-timeout: "1800"
    alb.ingress.kubernetes.io/cookie: "test"
spec:
... ...

パラメーター

説明

デフォルト値

alb.ingress.kubernetes.io/sticky-session

セッション維持を有効にするかどうかを指定します。

  • true:有効

  • false:無効

false

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

Cookie 処理方法。

  • Insert:Cookie を挿入します。クライアントが初めてサービスにアクセスすると、ロードバランサーは HTTP または HTTPS 応答に Cookie (SERVERID) を挿入します。後続のリクエストでは、クライアントがこの Cookie を送信し、ロードバランサーはリクエストを以前に記録されたバックエンドサーバーに転送します。

  • Server:Cookie を書き換えます。ロードバランサーがユーザー定義の Cookie を検出すると、元の Cookie を書き換えます。後続のリクエストでは、クライアントが新しい Cookie を送信し、ロードバランサーはリクエストを以前に記録されたバックエンドサーバーに転送します。

説明

このパラメーターは、サーバーグループの StickySessionEnabledtrue に設定されている場合にのみ有効になります。サーバーグループパラメーターの詳細については、「サーバーグループの作成」をご参照ください。

Insert

alb.ingress.kubernetes.io/cookie-timeout

Cookie のタイムアウト期間(秒単位)。有効値:1~86400。

このアノテーションは、sticky-session-typeInsert に設定されている場合にのみ有効になります。

1000

alb.ingress.kubernetes.io/cookie

カスタム Cookie 値。

このアノテーションは、sticky-session-typeServer に設定されている場合に必須であり、空にすることはできません。

""

サーバーグループの負荷分散アルゴリズムの指定

ALB イングレスは、以下のアノテーションを使用してサーバーグループの負荷分散アルゴリズムを指定することをサポートしています。以下の表に、有効値とその説明を示します。

完全な YAML 例を表示するには展開してください

バージョン 1.19 以降のクラスター

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/backend-scheduler: "uch" # 必要に応じて、このパラメーターを wrr、sch、または wlc に設定することもできます。
    alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # このパラメーターは、負荷分散アルゴリズムが uch の場合にのみ必要です。アルゴリズムが wrr、sch、または wlc の場合は必要ありません。
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /tea
        pathType: ImplementationSpecific
        backend:
          service:
            name: tea-svc
            port:
              number: 80

バージョン 1.19 より前のクラスター

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  annotations:
    alb.ingress.kubernetes.io/backend-scheduler: "uch" # 必要に応じて、このパラメーターを wrr、sch、または wlc に設定することもできます。
    alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # このパラメーターは、負荷分散アルゴリズムが uch の場合にのみ必要です。アルゴリズムが wrr、sch、または 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

パラメーター

説明

alb.ingress.kubernetes.io/backend-scheduler

wrr

加重ラウンドロビン。重みが高いバックエンドサーバーほど、より多くのリクエストを受け取ります(デフォルト値)。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/backend-scheduler: "uch" # 必要に応じて、このパラメーターを wrr、sch、または wlc に設定することもできます。
    alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test" # このパラメーターは、負荷分散アルゴリズムが uch の場合にのみ必要です。アルゴリズムが wrr、sch、または wlc の場合は必要ありません。
spec:
... ... 

wlc

各バックエンドサーバーの重みと現在の負荷(接続数)に基づいてリクエストを分散します。重みが等しい場合、接続数が少ないサーバーが優先されます。

sch

ソース IP 一貫したハッシュ。同じクライアント IP アドレスからのリクエストは、常に同じバックエンドサーバーにルーティングされます。

uch

URL パラメーターの一貫性ハッシュ。

一貫したハッシュに使用する URL パラメーターを指定するには、アノテーション alb.ingress.kubernetes.io/backend-scheduler-uch-value を使用します。

クロスオリジン設定

ALB イングレスは、以下のアノテーションパラメーターを使用してクロスオリジン動作を制御することをサポートしています。許可されたサイト、リクエストメソッド、リクエストおよびレスポンスヘッダー、認証情報の送信、プリフライト (OPTIONS) キャッシュの継続時間を指定して、さまざまなセキュリティおよびビジネスシナリオのクロスオリジンアクセス要件を満たすことができます。

完全な YAML 例を表示するには展開してください

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: "Allowed cross-origin domain names"
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: cloud-nodeport
            port:
              number: 80

アノテーションの例:

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: "Allowed cross-origin domain names"
spec:
... ...

パラメーター

説明

デフォルト値

alb.ingress.kubernetes.io/enable-cors

CORS クロスオリジン設定を有効にします。

デフォルト値:"false"

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

ブラウザを通じてサーバーリソースにアクセスできるサイト。

サイトはカンマ (,) で区切ります。各値は http:// または https:// で始まり、有効なドメイン名またはトップレベルのワイルドカードドメイン名が続く必要があります。IP アドレスはサポートされていません。
  • デフォルト値:*

  • 例: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

許可されたクロスオリジンメソッド。

大文字と小文字を区別しません。メソッドはカンマ (,) で区切ります。
  • デフォルト値:GET, PUT, POST, DELETE, PATCH, OPTIONS

  • 例:alb.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS"

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

クロスオリジン伝播を許可するリクエストヘッダー。

* またはカンマ (,) で区切られた 1 つ以上の値に設定できます。各値は英数字のみを含み、アンダースコア (_) またはハイフン (-) で始まったり終わったりすることはできず、32 文字を超えることはできません。
  • デフォルト値:DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization

  • 例:alb.ingress.kubernetes.io/cors-allow-headers: "X-Forwarded-For, X-app123-XPTO"

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

公開を許可するヘッダーのリスト。

* またはカンマ (,) で区切られた 1 つ以上の値に設定できます。各値は英数字のみを含み、アンダースコア (_) またはハイフン (-) で始まったり終わったりすることはできず、32 文字を超えることはできません。
  • デフォルト値:""

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

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

クロスオリジンアクセス中に認証情報の送信を許可するかどうかを指定します。

  • デフォルト値:true

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

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

単純ではないリクエストの場合、ブラウザでの OPTIONS プリフライトリクエストの最大キャッシュ継続時間(秒単位)を設定します。有効値:[0, 172800]。

デフォルト値:172800

バックエンドの接続保持

従来のロードバランサーは、バックエンドサーバーグループにアクセスする際に短時間接続を使用します。各リクエストごとに TCP 接続を確立してから切断するため、ネットワーク接続が高性能システムのボトルネックになります。バックエンドの接続保持により、接続レベルでのリソース消費が大幅に削減され、処理パフォーマンスが大きく向上します。以下のサンプル構成を使用します。

完全な 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

パラメーター

説明

YAML 例

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

バックエンドの接続保持を有効にします。これにより、各リクエストごとの TCP 接続の確立と切断が削減され、リソース消費が低下し、高性能システムのパフォーマンスが向上します。

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

サーバーグループの IPv6 アタッチメントのサポート

サーバーグループの IPv6 アタッチメントを有効にした後は、クラスターのデュアルスタック機能が有効になっていることを確認して、IPv4 および IPv6 の両方の Pod をサーバーグループにアタッチする必要があります。詳細については、「ACK マネージドクラスターの作成」をご参照ください。

説明

IPv6 アタッチメントを有効にした場合、以下の制限が適用されます。

  • サーバーグループが配置されている VPC で IPv6 が有効になっていない場合、サーバーグループの IPv6 アタッチメントを有効にすることはできません。

  • カスタム転送アクションを使用して IP ベースまたは Function Compute ベースのサーバーグループをアタッチする場合、IPv6 アタッチメントはサポートされていません。

  • IPv4 ALB インスタンスに関連付けられた Ingress は、サーバーグループの IPv6 アタッチメントをサポートしていません。

完全な YAML 例を表示するには展開してください

apiVersion: v1
kind: Service
metadata:
  name: tea-svc
spec:
  # デュアルスタックを設定する場合、ipFamilies は IPv4 または IPv6 に設定し、ipFamilyPolicy は RequireDualStack または PreferDualStack に設定する必要があります。
  ipFamilyPolicy: RequireDualStack
  ipFamilies:
  - IPv4
  - IPv6
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: tea
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tea
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tea
  template:
    metadata:
      labels:
        app: tea
    spec:
      containers:
      - name: tea
        image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
        ports:
        - containerPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/enable-ipv6: "true"
spec:
  ingressClassName: alb
  rules:
   - host: demo.alb.ingress.top
     http:
      paths:
      - path: /tea
        pathType: Prefix
        backend:
          service:
            name: tea-svc
            port:
              number: 80
Service と ALB イングレスの両方をデュアルスタック要件に基づいて設定する必要があります。デュアルスタック ALB インスタンスを作成した後、サーバーグループは IPv4 および IPv6 の両方のバックエンドサーバーをアタッチできます。

設定オブジェクト

設定パラメーター

説明

YAML 例

Service

ipFamilies

  • IPv4

  • IPv6

Service で使用可能な IP アドレスタイプを指定します。

apiVersion: v1
kind: Service
metadata:
  name: tea-svc
spec:
  # デュアルスタックを設定する場合、ipFamilies は IPv4 または IPv6 に設定し、ipFamilyPolicy は RequireDualStack または PreferDualStack に設定する必要があります。
  ipFamilyPolicy: RequireDualStack
  ipFamilies:
  - IPv4
  - IPv6
... ...

ipFamilyPolicy

  • RequireDualStack

  • PreferDualStack

Service の IP ポリシーをデュアルスタックをサポートするように設定します。

ALB イングレス

alb.ingress.kubernetes.io/enable-ipv6

"true"

サーバーグループの IPv6 アタッチメントを有効にします。

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

QPS レート制限のサポート

ALB は、転送ルールに対する秒間クエリ数 (QPS) レート制限をサポートしています。以下のアノテーションを設定して QPS レート制限を実装できます。

完全な YAML 例を表示するには展開してください

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

アノテーション

説明

YAML 例

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

転送ルールの QPS レート制限を設定します。有効値:[1,1000000]。

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

バックエンドのスロースタート

Service のバックエンドに新しい Pod が追加されると、ALB イングレスはすぐに新しい Pod にトラフィックをルーティングします。これにより、CPU またはメモリ使用量が急激に増加し、アクセスエラーが発生する可能性があります。スロースタート機能により、ALB イングレスは新しい Pod に徐々にトラフィックをシフトできます。これにより、トラフィックの急増による影響を軽減できます。以下のサンプル構成を使用します。

完全な 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

パラメーター

説明

YAML 例

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

スロースタートを有効にするかどうかを指定します。デフォルトでは無効です。

  • true:スロースタートを有効にします。

  • false:スロースタートを無効にします。

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

スロースタート完了後の継続時間が長いほど、トラフィックの増加が遅くなります。単位:秒。有効値:[30, 900]。デフォルト値:30 秒。

接続ドレイン

Pod が Terminating 状態になると、ALB イングレスはその Pod をバックエンドサーバーグループから削除します。ただし、ALB と Pod 間の既存の接続は直ちに終了しません。クライアントはこれらのバックエンドサーバーに引き続きリクエストを送信する可能性があります。これにより、Pod が長時間オンラインのままになったり、リクエストエラーが発生したりする可能性があります。この問題を回避するために、ALB の接続ドレイン機能を使用できます。Pod が削除された場合やヘルスチェックに失敗した場合、ALB イングレスは指定された継続時間の間、通常の送信を維持した後、接続を積極的に閉じて、サービスのスムーズなシャットダウンを保証します。詳細については、「ALB 接続ドレインによるスムーズなサービスシャットダウンの実現」をご参照ください。

重要

ALB イングレスは、接続ドレインの継続時間が終了する前に Pod が実行され続けることを保証できません。Pod の Terminating 状態中の可用性を制御するには、Pod の spec.terminationGracePeriodSeconds を設定するか、preStop フックを使用することができます。

完全な 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

パラメーター

説明

YAML 例

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

接続ドレインを有効にするかどうかを指定します。デフォルトでは無効です。

  • true:接続のグレースフルな終了を有効にします。

  • false:接続のグレースフルな終了を無効にします。

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

グレースフルな終了のタイムアウト期間(秒単位)。有効値:[0, 900]。デフォルト値:300 秒。

ゾーン間 (AZ) 無効化

デフォルトでは、ALB はゾーン間 (AZ) 負荷分散を有効にしています。この機能により、同一リージョン内の異なるゾーンにあるバックエンドサービス間でトラフィックが均等に分散されます。ALB サーバーグループのゾーン間負荷分散を無効にすると、同一リージョン内の同じゾーンにあるバックエンドサービス間でのみトラフィックが分散されます。

重要

ゾーン間負荷分散を無効にする場合は、各ゾーンに利用可能なバックエンドサービスが設定されており、これらのサーバーに十分なリソースがあることを確認する必要があります。サービス中断を避けるために、慎重にこの操作を実行してください。

以下の手順を実行して、ゾーン間負荷分散を無効にできます。

完全な YAML 例を表示するには展開してください

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

パラメーター

説明

YAML 例

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

ゾーン間転送を無効にするかどうかを指定します。デフォルトでは有効です。

  • true:ゾーン間転送を有効にします。

  • false:ゾーン間転送を無効にします。

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