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

Container Compute Service:Advanced ALB Ingress configurations

最終更新日:Mar 26, 2026

Application Load Balancer (ALB) イングレスは、ACS クラスター内のサービスへの外部アクセスに対してレイヤー 7 負荷分散を提供する Kubernetes API オブジェクトです。このトピックでは、ドメインベースおよびパスベースのリクエスト転送、ヘルスチェック、HTTPS リダイレクト、カナリアリリースなど、ALB イングレスの高度な構成について説明します。

前提条件

開始する前に、以下を確認してください。

アノテーション クイックリファレンス

すべての ALB イングレス構成では、Kubernetes アノテーションを使用します。次の表に、このトピックで説明するアノテーションを示します。

アノテーションタイプデフォルトクラスターバージョンセクション
alb.ingress.kubernetes.io/healthcheck-enabled"true" | "false""false"ヘルスチェックの構成
alb.ingress.kubernetes.io/healthcheck-pathstring"/"ヘルスチェックの構成
alb.ingress.kubernetes.io/healthcheck-protocol"HTTP" | "TCP""HTTP"ヘルスチェックの構成
alb.ingress.kubernetes.io/healthcheck-method"HEAD" | "GET""HEAD"ヘルスチェックの構成
alb.ingress.kubernetes.io/healthcheck-httpcode"http_2xx" | "http_3xx" | "http_4xx" | "http_5xx""http_2xx"ヘルスチェックの構成
alb.ingress.kubernetes.io/healthcheck-timeout-secondsinteger, 1–3005ヘルスチェックの構成
alb.ingress.kubernetes.io/healthcheck-interval-secondsinteger, 1–502ヘルスチェックの構成
alb.ingress.kubernetes.io/healthy-threshold-countinteger, 2–103ヘルスチェックの構成
alb.ingress.kubernetes.io/unhealthy-threshold-countinteger, 2–103ヘルスチェックの構成
alb.ingress.kubernetes.io/ssl-redirect"true" | "false"HTTP から HTTPS へのリダイレクト
alb.ingress.kubernetes.io/backend-protocol"https" | "grpc"バックエンドプロトコルの設定
alb.ingress.kubernetes.io/use-regex"true" | "false"正規表現の使用
alb.ingress.kubernetes.io/conditions.<service-name>JSON正規表現の使用
alb.ingress.kubernetes.io/rewrite-targetstring書き換えルールの構成
alb.ingress.kubernetes.io/listen-portsJSONカスタムリスニングポートの構成
alb.ingress.kubernetes.io/orderinteger, 1–1,00010転送ルール優先度の設定
alb.ingress.kubernetes.io/canary"true" | "false"カナリアリリース
alb.ingress.kubernetes.io/canary-by-headerstringカナリアリリース
alb.ingress.kubernetes.io/canary-by-header-valuestringカナリアリリース
alb.ingress.kubernetes.io/canary-by-cookiestringカナリアリリース
alb.ingress.kubernetes.io/canary-weightinteger, 0–100カナリアリリース
alb.ingress.kubernetes.io/sticky-session"true" | "false""false"セッション維持の構成
alb.ingress.kubernetes.io/sticky-session-type"Insert" | "Server""Insert"セッション維持の構成
alb.ingress.kubernetes.io/cookie-timeoutinteger, 1–86,4001000セッション維持の構成
alb.ingress.kubernetes.io/backend-scheduler"wrr" | "wlc" | "sch" | "uch""wrr"1.19+負荷分散アルゴリズムの設定
alb.ingress.kubernetes.io/backend-scheduler-uch-valuestring1.19+負荷分散アルゴリズムの設定
alb.ingress.kubernetes.io/enable-cors"true" | "false"CORS の構成
alb.ingress.kubernetes.io/cors-allow-originstring"*"CORS の構成
alb.ingress.kubernetes.io/cors-allow-methodsstring"GET, PUT, POST, DELETE, PATCH, OPTIONS"CORS の構成
alb.ingress.kubernetes.io/cors-allow-headersstring"DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization"CORS の構成
alb.ingress.kubernetes.io/cors-expose-headersstringemptyCORS の構成
alb.ingress.kubernetes.io/cors-allow-credentials"true" | "false""true"CORS の構成
alb.ingress.kubernetes.io/cors-max-ageinteger, -1–172,800172800CORS の構成
alb.ingress.kubernetes.io/backend-keepalive"true" | "false"バックエンド接続保持の有効化
alb.ingress.kubernetes.io/traffic-limit-qpsinteger, 1–100,000QPS 速度制限の構成

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

ALB イングレスは、Ingress ルールの host フィールドに基づいて、受信リクエストをサービスにルーティングします。このセクションでは、指定ドメインとドメインなしでリクエストを転送する方法について説明します。

指定ドメインへのリクエスト転送

  1. 次のマニフェストを適用して、Deployment、Service、および Ingress を作成します。demo.domain.ingress.top へのリクエストは demo-service に転送されます。

    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
  2. kubectl get ing を実行して ALB インスタンスアドレスを取得し、テストリクエストを送信します。<ADDRESS> を ALB インスタンスドメイン名に置き換えてください。

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

    期待される出力:

    {"hello":"coffee"}

ドメインなしのリクエスト転送

host を空の文字列に設定すると、Host ヘッダーに関係なくリクエストに一致します。

  1. 次の Ingress マニフェストを適用します。

    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
  2. kubectl get ing を実行して ALB インスタンスアドレスを取得し、テストリクエストを送信します。<ADDRESS> を ALB インスタンスドメイン名に置き換えてください。

    curl <ADDRESS>/hello

    期待される出力:

    {"hello":"coffee"}

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

pathType フィールドを設定して、ALB イングレスが URL パスに一致する方法を制御します。3 つの一致タイプがサポートされています: ExactImplementationSpecific (デフォルト)、および Prefix

URL 一致ポリシーは互いに競合する可能性があります。競合が存在する場合、リクエストはポリシー優先度の降順で一致されます。詳細については、「転送ルール優先度の設定」をご参照ください。

パス一致動作

一致モードルールURL パス一致?
Prefix/(すべてのパス)はい
Prefix/foo/fooはい
Prefix/foo/foo/はい
Prefix/aaa/bb/aaa/bbbいいえ
Prefix/aaa/bbb/aaa/bbbはい
Prefix/aaa/bbb//aaa/bbbはい — ルール内の末尾の / は無視されます
Prefix/aaa/bbb/aaa/bbb/はい — URL パス内の末尾の / は一致します
Prefix/aaa/bbb/aaa/bbb/cccはい — サブパスが一致します
Prefix//aaa/aaa/cccはい — /aaa プレフィックスに一致します
Prefix/aaa//aaa/cccはい — /aaa プレフィックスに一致します
Prefix/aaa//cccはい — / プレフィックスに一致します
Prefix/aaa/cccいいえ
Exact または ImplementationSpecific/foo/fooはい
Exact または ImplementationSpecific/foo/barいいえ
Exact または ImplementationSpecific/foo/foo/いいえ
Exact または ImplementationSpecific/foo//fooいいえ

Exact

リクエストはパスと完全に一致する必要があります。

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

ImplementationSpecific

ALB イングレスでは、ImplementationSpecificExact と同じように動作します。

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

Prefix

Prefix は、/ で区切られたパス要素に対して大文字と小文字を区別する一致を実行します。path: / を設定すると、すべての受信リクエストに一致します。

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

上記を検証するには、kubectl get ing を実行して <ADDRESS> を取得し、次に以下を実行します。

curl <ADDRESS>/hello

期待される出力:

{"hello":"coffee"}

ヘルスチェックの構成

ヘルスチェックアノテーションを Ingress に追加すると、ALB はバックエンドサーバーをプローブし、異常なものをローテーションから自動的に削除します。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: cafe-ingress
  annotations:
    alb.ingress.kubernetes.io/backend-scheduler: "uch"
    alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test"
spec:
  ingressClassName: alb
  rules:
  - host: demo.alb.ingress.top
    http:
      paths:
      - path: /tea
        pathType: ImplementationSpecific
        backend:
          service:
            name: tea-svc
            port:
              number: 80
アノテーション説明
alb.ingress.kubernetes.io/healthcheck-enabled(オプション) ヘルスチェックを有効にします。デフォルト: false
alb.ingress.kubernetes.io/healthcheck-path(オプション) ヘルスチェックの URL パス。/ で始まり、1~80 文字である必要があります。URL には、文字、数字、ハイフン (-)、スラッシュ (/)、ピリオド (.)、パーセント記号 (%)、疑問符 (?)、シャープ記号 (#)、アンパサンド (&) を含めることができます。URL には、次の拡張文字も含まれます: _ ; ~ ! ( ) * [ ] @ $ ^ : ' , +。デフォルト: /。デフォルトでは、ALB インスタンスはバックエンドの Elastic Compute Service (ECS) インスタンスに構成された既定のアプリケーションのホームページに HTTP HEAD リクエストを送信してヘルスチェックを実行します。ALB インスタンスは、ECS インスタンスのプライベート IP アドレスにリクエストを送信します。ヘルスチェックに既定のアプリケーションのホームページを使用しない場合は、URL パスを指定する必要があります。
alb.ingress.kubernetes.io/healthcheck-protocol

(オプション) ヘルスチェックのプロトコル。HTTP (デフォルト): ALB は HEAD または GET リクエストを送信してブラウザアクセスをシミュレートします。TCP: ALB は TCP SYN パケットを送信してポートの可用性をチェックします。

    alb.ingress.kubernetes.io/healthcheck-method

    (オプション) ヘルスチェックの HTTP メソッド。HEAD (デフォルト): バックエンドが HEAD リクエストをサポートしている場合に使用します。GET: HEAD がサポートされていないか無効になっている場合に使用します。8 KB を超える応答はフラグメント化されますが、ヘルスチェック結果には影響しません。

      alb.ingress.kubernetes.io/healthcheck-httpcode正常なバックエンドを示すステータスコード。有効な値: http_2xx (デフォルト)、http_3xxhttp_4xxhttp_5xx
      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

      HTTP から HTTPS へのリダイレクト

      alb.ingress.kubernetes.io/ssl-redirect: "true" を設定すると、すべての HTTP リクエストが HTTPS ポート 443 にリダイレクトされます。

      重要

      ALB イングレスは、リスナーを直接作成できません。AlbConfig オブジェクトでリスナーのポートとプロトコルを指定し、Ingress でサービスにリスナーを関連付けます。詳細については、「AlbConfig を使用して ALB リスナーを設定する」をご参照ください。

      apiVersion: v1
      kind: Service
      metadata:
        name: demo-service-ssl
        namespace: default
      spec:
        ports:
          - name: port1
            port: 80
            protocol: TCP
            targetPort: 8080
        selector:
          app: demo-ssl
        sessionAffinity: None
        type: ClusterIP
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: demo-ssl
        namespace: default
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: demo-ssl
        template:
          metadata:
            labels:
              app: demo-ssl
          spec:
            containers:
              - image: registry.cn-hangzhou.aliyuncs.com/alb-sample/cafe:v1
                imagePullPolicy: IfNotPresent
                name: demo-ssl
                ports:
                  - containerPort: 8080
                    protocol: TCP
      ---
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        annotations:
          alb.ingress.kubernetes.io/ssl-redirect: "true"
        name: demo-ssl
        namespace: default
      spec:
        ingressClassName: alb
        tls:
        - hosts:
          - ssl.alb.ingress.top
        rules:
          - host: ssl.alb.ingress.top
            http:
              paths:
                - backend:
                    service:
                      name: demo-service-ssl
                      port:
                        number: 80
                  path: /
                  pathType: Prefix

      バックエンドプロトコルの設定

      ALB は、バックエンドプロトコルとして HTTPS と gRPC をサポートしています。alb.ingress.kubernetes.io/backend-protocol アノテーションを "https" または "grpc" に設定します。

      Ingress 作成後にバックエンドプロトコルを変更することはできません。プロトコルを変更するには、Ingress を削除して再作成してください。

      gRPC の場合、ドメインは SSL 証明書を持ち、TLS を使用する必要があります。次の例は、gRPC バックエンドを構成します。

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

      正規表現の使用

      alb.ingress.kubernetes.io/use-regex: "true" を設定すると、path フィールドで正規表現マッチングが有効になります。alb.ingress.kubernetes.io/conditions.<service-name> アノテーションを使用して、カスタムパス条件を定義します。

      アノテーションで指定されたサービスはクラスターに存在し、ルールの backend フィールドのサービス名と一致する必要があります。

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        annotations:
         alb.ingress.kubernetes.io/use-regex: "true"
         alb.ingress.kubernetes.io/conditions.service-a: |
           [{
             "type": "Path",
             "pathConfig": {
                 "values": [
                    "~*^/pathvalue1",
                    "/pathvalue2"
                 ]
             }
            }]
        name: ingress-example
      spec:
        ingressClassName: alb
        rules:
         - http:
            paths:
            - path: /test
              pathType: Prefix
              backend:
                service:
                  name: service-a
                  port:
                    number: 88
      正規表現パターンは ~* フラグプレフィックスを使用する必要があります (例: ~*^/pathvalue1)。完全一致パスには ~* プレフィックスは必要ありません。

      書き換えルールの構成

      alb.ingress.kubernetes.io/rewrite-targetalb.ingress.kubernetes.io/use-regex: "true" と組み合わせて使用すると、リクエストがバックエンドに到達する前にリクエストパスを書き換えることができます。

      ルール:

      • ${number} 形式の変数は、pathTypePrefix である path で使用する必要があります。

      • 最大 3 つのキャプチャグループ変数 (${1}${2}${3}) がサポートされています。

      • path/ で始まる必要があります。

      • デフォルトでは、*?path フィールドでは許可されていません。これらを使用するには use-regex を有効にしてください。

      次の例は、/something(/|$)(.*) に一致するパスを書き換えます。

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

      ${2} 変数は /something/ の後のパスセグメントをキャプチャします。バックエンドは次のパスを受信します。

      クライアントリクエストバックエンドが受信
      /something/path/
      /something//path/
      /something/new/path/new

      複数グループの書き換えの場合、次の例を検討してください: path/sys/(.*)/(.*)/aaa に設定し、rewrite-target/${1}/${2} に設定します。/sys/ccc/bbb/aaa へのリクエストはパターンに一致し、${1}ccc に、${2}bbb に置き換えられるため、バックエンドは /ccc/bbb を受信します。

      カスタムリスニングポートの構成

      alb.ingress.kubernetes.io/listen-ports を設定すると、サービスを複数のポートで同時に公開できます (例: ポート 80 で HTTP、ポート 443 で HTTPS)。

      重要

      ALB イングレスは、リスナーを直接作成できません。AlbConfig オブジェクトでリスナーのポートとプロトコルを指定し、その後、Ingress のサービスとリスナーを関連付けます。詳細については、「AlbConfigs を使用して ALB リスナーを設定する」をご参照ください。

      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

      転送ルール優先度の設定

      デフォルトでは、ALB イングレスは次の順序で転送ルールを優先します。

      • Ingress は namespace/name の辞書順でランク付けされます。値が小さいほど優先度が高くなります。

      • 同じ Ingress 内では、ルールは rules フィールドに表示される順序で上から下へ一致されます。

      Ingress の名前を変更せずにデフォルトのランキングをオーバーライドするには、alb.ingress.kubernetes.io/order アノテーションを使用します。

      優先度は同じリスナー内で一意である必要があります。値は 1 から 1,000 までの整数である必要があります。値が小さいほど優先度が高くなります。デフォルトは 10 です。
      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

      カナリアリリース

      ALB イングレスは、トラフィックのサブセットをサービスの新しいバージョンにルーティングするカナリアリリースをサポートしています。ヘッダーベース、Cookie ベース、重みベースの 3 つのトラフィック分割方法が利用可能です。

      alb.ingress.kubernetes.io/canary: "true" を設定して Ingress でカナリアリリースを有効にし、適切なルーティングアノテーションを追加します。

      カナリアルール優先度: ヘッダーベース > Cookie ベース > 重みベース。

      カナリアテスト中は、元の Ingress ルールを変更しないでください。変更するとトラフィックが中断される可能性があります。新しいバージョンがテストに合格したら、元の Ingress のバックエンドサービスを更新し、カナリア Ingress を削除してください。

      ヘッダーベースのカナリア

      canary-by-header は、一致させるリクエストヘッダー名を指定します。canary-by-header-value は、必要なヘッダー値を指定し、canary-by-header と組み合わせて使用する必要があります。ヘッダーが一致するリクエストはカナリアサービスにルーティングされ、他のすべてのリクエストは優先度に従って次のカナリアルールにフォールスルーします。

      次の例では、ヘッダー location: hz を持つリクエストはカナリアサービスに送信されます。

      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

      Cookie ベースのカナリア

      canary-by-cookie は、Cookie 名に基づいてトラフィックを分割します。Cookie を always に設定するとリクエストがカナリアサービスにルーティングされ、never に設定すると除外されます。

      alwaysnever のみがサポートされています。カスタム Cookie 値はサポートされていません。

      次の例では、Cookie demo=always を持つリクエストはカナリアサービスに送信されます。

      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

      重みベースのカナリア

      canary-weight は、カナリアサービスにルーティングされるリクエストの割合を設定します。値は 0 から 100 までの整数である必要があります。

      次の例では、リクエストの 50% がカナリアサービスに送信されます。

      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

      セッション維持の構成

      ALB イングレスは、同じクライアントからのリクエストを複数の接続にわたって同じバックエンドサーバーにルーティングします。次のアノテーションを使用してセッション維持を構成します。

      アノテーション説明
      alb.ingress.kubernetes.io/sticky-sessionセッション維持を有効にします。有効な値: truefalse。デフォルト: false
      alb.ingress.kubernetes.io/sticky-session-typeCookie 処理方法。Insert (デフォルト): Server Load Balancer は SERVERID Cookie を応答に挿入し、それを使用して後続のリクエストを同じバックエンドに固定します。Server: Server Load Balancer は、同じ目的でユーザー定義の Cookie を書き換えます。StickySessionEnabled がサーバーグループで true の場合にのみ有効です。
      alb.ingress.kubernetes.io/cookie-timeoutCookie タイムアウト (秒)。有効な値: 1~86,400。デフォルト: 1000
      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"
          alb.ingress.kubernetes.io/cookie-timeout: "1800"
      spec:
        ingressClassName: alb
        rules:
        - http:
            paths:
            - path: /tea2
              backend:
                service:
                  name: tea-svc
                  port:
                    number: 80
            - path: /coffee2
              backend:
                service:
                  name: coffee-svc
                  port:
                    number: 80

      負荷分散アルゴリズムの設定

      alb.ingress.kubernetes.io/backend-scheduler を使用して、バックエンドサーバーグループの負荷分散アルゴリズムを設定します。クラスターバージョンは 1.19 以降である必要があります。

      4 つのアルゴリズムがサポートされています。

      アルゴリズム動作原理
      wrr (デフォルト)重み付きラウンドロビン各サーバーの重みに比例してリクエストを分散します。
      wlc重み付き最小接続バックエンドサーバーの重みと既存の接続数に基づいてリクエストを分散します。バックエンドサーバーが同じ重みを持つ場合、接続数が最も少ないサーバーが選択されます。
      schソース IP ハッシュ化同じソース IP からのリクエストを同じバックエンドサーバーにルーティングします。
      uchURL ベースの一貫したハッシュ同じ URL パラメーターを持つリクエストを同じバックエンドサーバーにルーティングします。パラメーター名を指定するには alb.ingress.kubernetes.io/backend-scheduler-uch-value が必要です。
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: cafe-ingress
        annotations:
          alb.ingress.kubernetes.io/backend-scheduler: "uch"
          alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test"
      spec:
        ingressClassName: alb
        rules:
        - host: demo.alb.ingress.top
          http:
            paths:
            - path: /tea
              pathType: ImplementationSpecific
              backend:
                service:
                  name: tea-svc
                  port:
                    number: 80

      CORS の構成

      alb.ingress.kubernetes.io/enable-cors: "true" を設定すると、ALB イングレスで Cross-Origin Resource Sharing (CORS) が有効になります。

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: alb-ingress
        annotations:
          alb.ingress.kubernetes.io/enable-cors: "true"
          alb.ingress.kubernetes.io/cors-expose-headers: ""
          alb.ingress.kubernetes.io/cors-allow-methods: "GET,POST"
          alb.ingress.kubernetes.io/cors-allow-credentials: "true"
          alb.ingress.kubernetes.io/cors-max-age: "600"
      spec:
        ingressClassName: alb
        rules:
        - host: demo.alb.ingress.top
          http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: cloud-nodeport
                  port:
                    number: 80
      アノテーション説明デフォルト
      alb.ingress.kubernetes.io/cors-allow-originブラウザ経由でリソースへのアクセスが許可されている URL。各 URL は http:// または https:// で始まり、有効なドメインまたはトップレベルのワイルドカードを使用する必要があります。複数の URL はカンマで区切ります。例: "https://example.com:4443, http://aliyundoc.com"*
      alb.ingress.kubernetes.io/cors-allow-methodsCORS リクエストに許可される HTTP メソッド。値は大文字と小文字を区別しません。複数のメソッドはカンマで区切ります。例: "PUT, GET, POST, OPTIONS"GET, PUT, POST, DELETE, PATCH, OPTIONS
      alb.ingress.kubernetes.io/cors-allow-headersCORS リクエストで許可されるリクエストヘッダー。ヘッダーには、文字、数字、アンダースコア、ハイフンを含めることができます。複数のヘッダーはカンマで区切ります。例: "X-Forwarded-For, X-app123-XPTO"DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization
      alb.ingress.kubernetes.io/cors-expose-headersクライアントが応答でアクセスできるヘッダー。ヘッダーには、文字、数字、アンダースコア、ハイフン、アスタリスクを含めることができます。複数のヘッダーはカンマで区切ります。例: "*, X-CustomResponseHeader"empty
      alb.ingress.kubernetes.io/cors-allow-credentialsCORS リクエストに認証情報を含めるかどうか。true
      alb.ingress.kubernetes.io/cors-max-ageプリフライト OPTIONS リクエスト結果の最大キャッシュ持続時間。有効な値: -1~172,800。単位: 秒。172800

      バックエンド接続保持の有効化

      デフォルトでは、ALB はバックエンドサーバーグループへの短時間接続を使用します。各リクエストは TCP 接続を開いてから閉じます。接続保持は、複数のリクエストにわたって既存の TCP 接続を再利用し、接続オーバーヘッドを削減し、高負荷時のスループットを向上させます。

      alb.ingress.kubernetes.io/backend-keepalive: "true" を設定してこの機能を有効にします。

      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

      QPS 速度制限の構成

      alb.ingress.kubernetes.io/traffic-limit-qps を設定すると、転送ルールの秒間クエリ数 (QPS) を制限できます。値は 1 から 100,000 までの整数である必要があります。

      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

      次のステップ