ACK クラスターにおいて、ALB イングレスはサービス向けにレイヤー 7 負荷分散を提供します。このトピックでは、ALB イングレスを使用して、異なるドメイン名または URL パスからのリクエストを異なるバックエンドサーバーグループに転送する方法、HTTP トラフィックを HTTPS にリダイレクトする方法、および段階的リリースを実装する方法について説明します。
ドメイン名に基づくリクエストの転送
指定されたドメイン名または空のドメイン名に基づいてリクエストを転送するためのシンプルな Ingress を作成できます。以下の例でその方法を示します。
通常のドメイン名に基づくリクエストの転送
以下の YAML 例では、ルーティングパスが /hello に設定されています。demo.domain.ingress.top/hello へのリクエストはバックエンドサービスに転送されます。
以下のテンプレートをデプロイして、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
kubectl get ing コマンドを実行して ALB インスタンスのアドレスを取得します。以下のコマンド内の ADDRESS を ALB インスタンスのアドレスに置き換えて、コマンドを実行します。
curl -H "host: demo.domain.ingress.top" <ADDRESS>/hello
期待される出力:
{"hello":"coffee"}
空のドメイン名に基づくリクエストの転送
以下の YAML 例では、空のドメイン名が設定され、ルーティングパスが /hello に設定されています。<ADDRESS>/hello へのリクエストはバックエンドサービスに転送されます。
以下のテンプレートをデプロイして 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
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 パスのプレフィックスと一致するかどうかを確認します。
以下の例で 3 つのマッチング方法を示します。
プレフィックス一致 (Prefix)
URL パスは / で区切られたプレフィックス一致を使用します。マッチングは大文字と小文字を区別し、パス内の各要素を階層的に比較します。
以下の YAML 例では、ルーティングルールが / に設定されています。/ で始まるすべてのパス(例:/hello)が一致し、アクセス可能です。
以下のテンプレートをデプロイして 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
kubectl get ing コマンドを実行して ALB インスタンスのアドレスを取得します。以下のコマンド内の ADDRESS を ALB インスタンスのアドレスに置き換えて、コマンドを実行します。
curl <ADDRESS>/hello
期待される出力:
{"hello":"coffee"}
完全一致 (Exact) またはデフォルト (ImplementationSpecific)
以下の YAML 例では、ルーティングルールが /hello に設定されています。/hello パスのみが一致し、アクセス可能です。
以下のテンプレートをデプロイして 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
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-protocol が HTTP または HTTPS に設定されている場合にのみ有効になります。 | HTTP1.1
|
alb.ingress.kubernetes.io/healthcheck-method
| ヘルスチェックメソッド。
重要 healthcheck-protocol が GRPC に設定されている場合、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 転送ルールにのみ適用されます。
このアノテーションは、RemoveHeader や InsertHeader などのカスタム転送アクションや、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
| | 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 つのアノテーションを使用して実装されます。
設定例
例 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} を例に挙げます。
以下のサンプルコマンドを path2.txt に保存します。
/items/electronics/computers/554
/items/produce/fruits/12
/items/headphones/5
/drinks/41
パスが一致するかどうかを確認し、書き換え後のパスを表示します。
以下のコマンドでは、例のパス正規表現 (/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"
| 段階的リリースを有効にします。 | |
指定されたヘッダーに基づいて段階的リリースのトラフィックを割り当てる
パラメーター | 説明 | YAML 例 |
alb.ingress.kubernetes.io/canary-by-header
| このルールでは、リクエストヘッダーとその値をカスタマイズできます。両方のアノテーションを設定する必要があります。 | 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
| 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
| セッション維持を有効にするかどうかを指定します。 | false
|
alb.ingress.kubernetes.io/sticky-session-type
| Cookie 処理方法。 Insert:Cookie を挿入します。クライアントが初めてサービスにアクセスすると、ロードバランサーは HTTP または HTTPS 応答に Cookie (SERVERID) を挿入します。後続のリクエストでは、クライアントがこの Cookie を送信し、ロードバランサーはリクエストを以前に記録されたバックエンドサーバーに転送します。
Server:Cookie を書き換えます。ロードバランサーがユーザー定義の Cookie を検出すると、元の Cookie を書き換えます。後続のリクエストでは、クライアントが新しい Cookie を送信し、ロードバランサーはリクエストを以前に記録されたバックエンドサーバーに転送します。
説明 このパラメーターは、サーバーグループの StickySessionEnabled が true に設定されている場合にのみ有効になります。サーバーグループパラメーターの詳細については、「サーバーグループの作成」をご参照ください。 | Insert
|
alb.ingress.kubernetes.io/cookie-timeout
| Cookie のタイムアウト期間(秒単位)。有効値:1~86400。 このアノテーションは、sticky-session-type が Insert に設定されている場合にのみ有効になります。 | 1000 |
alb.ingress.kubernetes.io/cookie
| カスタム Cookie 値。 このアノテーションは、sticky-session-type が Server に設定されている場合に必須であり、空にすることはできません。 | "" |
サーバーグループの負荷分散アルゴリズムの指定
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-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-allow-credentials
| クロスオリジンアクセス中に認証情報の送信を許可するかどうかを指定します。 | |
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
| | 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
| 接続ドレインを有効にするかどうかを指定します。デフォルトでは無効です。 | 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"
... ...
|