ここでは、Alibaba Cloud Container Service for Kubernetes により提供される Ingress 機能を用いたグレーリリースの実装時に使われるアノテーションについて解説します。
nginx.ingress.kubernetes.io/service-match
を利用したルーティングルールの設定、および nginx.ingress.kubernetes.io/service-weight
を利用したサービス weight 設定。
nginx.ingress.kubernetes.io/service-match
を用いたルーティングルールの設定、および nginx.ingress.kubernetes.io/service-weight
を用いたサービス weight 設定を行う場合、システムはリクエストを受信した際に nginx.ingress.kubernetes.io/service-match
を用いて設定されたルーティングルールが一致するかどうかを最初に判断します。
- 一致したルーティングルールがない場合、システムによって以前のバージョンのアプリケーションにリクエストが転送されます。
- 一致したルーティングルールがある場合、システムにより、
nginx.ingress.kubernetes.io/service-weight
を利用して設定されたサービス weight に応じてリクエストが転送されます。
nginx.ingress.kubernetes.io/service-match
を用いたルーティングルールの設定
このアノテーションは、最新バージョンのサービスに対するルーティングルールの設定に使用されます。 アノテーションの形式は以下のようになります。
nginx.ingress.kubernetes.io/service-match: |
<service-name>: <match-rule>
パラメーターの説明
service-name: サービス名です。 ルーティングの一致ルールの要件を満たすリクエストがこのサービスに転送されます。
- 一致タイプ
header
: リクエストヘッダーに基づきます。 この一致タイプは、正規表現一致および完全一致をサポートします。cookie
: Cookie に基づきます。 この一致タイプは、正規表現一致および完全一致をサポートします。query
: 照会されたパラメーターに基づきます。 この一致タイプは、正規表現一致および完全一致をサポートします。
- 一致方法
- 正規表現一致の形式は、
/{Regular Expression }/
となります。 - 完全一致の形式は、
"{exact expression}"
となります。
- 正規表現一致の形式は、
設定例
# リクエストのリクエストヘッダーが正規表現 "foo" および "^bar$" の要件を満たす場合、リクエストが "new-nginx" サービスに転送されます。
new-nginx: header("foo", /^bar$/)
# リクエストのリクエストヘッダーで、"foo" が "bar" に完全に一致する場合、リクエストが "new-nginx" サービスに転送されます。
new-nginx: header("foo", "bar")
# リクエストの Cookie で、"foo" が正規表現 "^sticky-.+$" に一致する場合、リクエストが "new-nginx" サービスに転送されます。
new-nginx: cookie("foo", /^sticky-.+$/)
# リクエストの照会パラメーターで、"foo" が "bar" に完全一致する場合、リクエストが "new-nginx" サービスに転送されます。
new-nginx: query("foo", "bar")
nginx.ingress.kubernetes.io/service-weight
を利用したサービス weight 設定
nginx.ingress.kubernetes.io/service-weight: |
<new-svc-name>:<new-svc-weight>, <old-svc-name>:<old-svc-weight>
パラメーターの説明
new-svc-name: 最新バージョンのサービス名です。
new-svc-weight: 最新バージョンのサービスの weight です。
old-svc-name: 以前のバージョンのサービス名です。
old-svc-weight: 以前のバージョンのサービスの weight です。
設定例
nginx.ingress.kubernetes.io/service-weight: |
new-nginx: 20, old-nginx: 60
- サービスのweight は、関連する値により算出されます。 上記の例において、最新バージョンのサービスは 20 の weight が設定されていて、以前のバージョンのサービスは 60 の weight が設定されています。 そのため、最新バージョンの weight のパーセンテージは 25% で、以前のバージョンの weight のパーセンテージは 75% となります。
- Ingress YAML で、同じホストおよび同じパスを持つサービスから構成されたサービスグループでは、デフォルトのサービスの weight は 100 になります。