ここでは、Alibaba Cloud Container Service for Kubernetes により提供される Ingress 機能を用いたグレーリリースの実装時に使われるアノテーションについて解説します。

グレーリリースをサポートするために、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: サービス名です。 ルーティングの一致ルールの要件を満たすリクエストがこのサービスに転送されます。

match-rule: ルーティングのマッチングルールです。
  • 一致タイプ
    • 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 設定

このアノテーションは、最新バージョンのサービスおよび以前のバージョンのサービスに関するトラフィックの 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 になります。