Application Load Balancer (ALB) イングレスは、ACS クラスター内のサービスへの外部アクセスに対してレイヤー 7 負荷分散を提供する Kubernetes API オブジェクトです。このトピックでは、ドメインベースおよびパスベースのリクエスト転送、ヘルスチェック、HTTPS リダイレクト、カナリアリリースなど、ALB イングレスの高度な構成について説明します。
前提条件
開始する前に、以下を確認してください。
ACS クラスター。詳細については、「ACS クラスターの作成」をご参照ください。
AlbConfig オブジェクト。詳細については、「ALB イングレスの開始」をご参照ください。
アノテーション クイックリファレンス
すべての ALB イングレス構成では、Kubernetes アノテーションを使用します。次の表に、このトピックで説明するアノテーションを示します。
| アノテーション | タイプ | デフォルト | クラスターバージョン | セクション |
|---|---|---|---|---|
alb.ingress.kubernetes.io/healthcheck-enabled | "true" | "false" | "false" | — | ヘルスチェックの構成 |
alb.ingress.kubernetes.io/healthcheck-path | string | "/" | — | ヘルスチェックの構成 |
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-seconds | integer, 1–300 | 5 | — | ヘルスチェックの構成 |
alb.ingress.kubernetes.io/healthcheck-interval-seconds | integer, 1–50 | 2 | — | ヘルスチェックの構成 |
alb.ingress.kubernetes.io/healthy-threshold-count | integer, 2–10 | 3 | — | ヘルスチェックの構成 |
alb.ingress.kubernetes.io/unhealthy-threshold-count | integer, 2–10 | 3 | — | ヘルスチェックの構成 |
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-target | string | — | — | 書き換えルールの構成 |
alb.ingress.kubernetes.io/listen-ports | JSON | — | — | カスタムリスニングポートの構成 |
alb.ingress.kubernetes.io/order | integer, 1–1,000 | 10 | — | 転送ルール優先度の設定 |
alb.ingress.kubernetes.io/canary | "true" | "false" | — | — | カナリアリリース |
alb.ingress.kubernetes.io/canary-by-header | string | — | — | カナリアリリース |
alb.ingress.kubernetes.io/canary-by-header-value | string | — | — | カナリアリリース |
alb.ingress.kubernetes.io/canary-by-cookie | string | — | — | カナリアリリース |
alb.ingress.kubernetes.io/canary-weight | integer, 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-timeout | integer, 1–86,400 | 1000 | — | セッション維持の構成 |
alb.ingress.kubernetes.io/backend-scheduler | "wrr" | "wlc" | "sch" | "uch" | "wrr" | 1.19+ | 負荷分散アルゴリズムの設定 |
alb.ingress.kubernetes.io/backend-scheduler-uch-value | string | — | 1.19+ | 負荷分散アルゴリズムの設定 |
alb.ingress.kubernetes.io/enable-cors | "true" | "false" | — | — | CORS の構成 |
alb.ingress.kubernetes.io/cors-allow-origin | string | "*" | — | CORS の構成 |
alb.ingress.kubernetes.io/cors-allow-methods | string | "GET, PUT, POST, DELETE, PATCH, OPTIONS" | — | CORS の構成 |
alb.ingress.kubernetes.io/cors-allow-headers | string | "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-headers | string | empty | — | CORS の構成 |
alb.ingress.kubernetes.io/cors-allow-credentials | "true" | "false" | "true" | — | CORS の構成 |
alb.ingress.kubernetes.io/cors-max-age | integer, -1–172,800 | 172800 | — | CORS の構成 |
alb.ingress.kubernetes.io/backend-keepalive | "true" | "false" | — | — | バックエンド接続保持の有効化 |
alb.ingress.kubernetes.io/traffic-limit-qps | integer, 1–100,000 | — | — | QPS 速度制限の構成 |
ドメイン名に基づくリクエスト転送
ALB イングレスは、Ingress ルールの host フィールドに基づいて、受信リクエストをサービスにルーティングします。このセクションでは、指定ドメインとドメインなしでリクエストを転送する方法について説明します。
指定ドメインへのリクエスト転送
次のマニフェストを適用して、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: ImplementationSpecifickubectl get ingを実行して ALB インスタンスアドレスを取得し、テストリクエストを送信します。<ADDRESS>を ALB インスタンスドメイン名に置き換えてください。curl -H "host: demo.domain.ingress.top" <ADDRESS>/hello期待される出力:
{"hello":"coffee"}
ドメインなしのリクエスト転送
host を空の文字列に設定すると、Host ヘッダーに関係なくリクエストに一致します。
次の 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: /hellokubectl get ingを実行して ALB インスタンスアドレスを取得し、テストリクエストを送信します。<ADDRESS>を ALB インスタンスドメイン名に置き換えてください。curl <ADDRESS>/hello期待される出力:
{"hello":"coffee"}
URL パスに基づくリクエスト転送
pathType フィールドを設定して、ALB イングレスが URL パスに一致する方法を制御します。3 つの一致タイプがサポートされています: Exact、ImplementationSpecific (デフォルト)、および 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: ExactImplementationSpecific
ALB イングレスでは、ImplementationSpecific は 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: ImplementationSpecificPrefix
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 | (オプション) ヘルスチェックのプロトコル。 |
alb.ingress.kubernetes.io/healthcheck-method | (オプション) ヘルスチェックの HTTP メソッド。 |
alb.ingress.kubernetes.io/healthcheck-httpcode | 正常なバックエンドを示すステータスコード。有効な値: http_2xx (デフォルト)、http_3xx、http_4xx、http_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-target を alb.ingress.kubernetes.io/use-regex: "true" と組み合わせて使用すると、リクエストがバックエンドに到達する前にリクエストパスを書き換えることができます。
ルール:
${number}形式の変数は、pathTypeがPrefixである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: ImplementationSpecificCookie ベースのカナリア
canary-by-cookie は、Cookie 名に基づいてトラフィックを分割します。Cookie を always に設定するとリクエストがカナリアサービスにルーティングされ、never に設定すると除外されます。
alwaysとneverのみがサポートされています。カスタム 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 | セッション維持を有効にします。有効な値: true、false。デフォルト: false。 |
alb.ingress.kubernetes.io/sticky-session-type | Cookie 処理方法。Insert (デフォルト): Server Load Balancer は SERVERID Cookie を応答に挿入し、それを使用して後続のリクエストを同じバックエンドに固定します。Server: Server Load Balancer は、同じ目的でユーザー定義の Cookie を書き換えます。StickySessionEnabled がサーバーグループで true の場合にのみ有効です。 |
alb.ingress.kubernetes.io/cookie-timeout | Cookie タイムアウト (秒)。有効な値: 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 からのリクエストを同じバックエンドサーバーにルーティングします。 |
uch | URL ベースの一貫したハッシュ | 同じ 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: 80CORS の構成
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-methods | CORS リクエストに許可される HTTP メソッド。値は大文字と小文字を区別しません。複数のメソッドはカンマで区切ります。例: "PUT, GET, POST, OPTIONS"。 | GET, PUT, POST, DELETE, PATCH, OPTIONS |
alb.ingress.kubernetes.io/cors-allow-headers | CORS リクエストで許可されるリクエストヘッダー。ヘッダーには、文字、数字、アンダースコア、ハイフンを含めることができます。複数のヘッダーはカンマで区切ります。例: "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-credentials | CORS リクエストに認証情報を含めるかどうか。 | 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: 80QPS 速度制限の構成
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