マイクロサービスアーキテクチャでは、単一のユーザー要求が複数のサービスにまたがることがよくあります。トラフィックレーンのルーティング、カナリアリリース、分散トレーシングなどは、すべて、特定のリクエストヘッダーが呼び出しチェーン全体を通過することを必要とします。デフォルトでは、Envoy サイドカープロキシはサービス間でカスタムヘッダーを転送しません。この機能を有効にするには、アプリケーション側で W3C Baggage ヘッダー を明示的に伝搬する必要があります。
ASMHeaderPropagation カスタムリソース定義 (CRD) は、呼び出しチェーンを通じてバゲージヘッダーを介して伝搬するリクエストヘッダーを宣言します。このリソースを適用すると、サービスメッシュ内のサイドカープロキシが、該当するワークロードごとに自動的にヘッダーの伝搬を処理します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
Service Mesh (ASM) のバージョンが 1.21.6.54 以降であること
アプリケーションで、自動インストルメンテーションまたはコード変更によりバゲージヘッダーのサポートが有効化されていること
ASMHeaderPropagation CRD は、ヘッダーの伝搬に W3C Baggage ヘッダーに依存しています。サービスがバゲージヘッダーを転送しない場合、この CRD は一切の効果を発揮しません。設定手順については、「許容モードでトラフィックレーンを実装するための ASMHeaderPropagation CRD の設定」をご参照ください。
構成例
名前空間内のすべてのワークロードに特定のヘッダーを伝搬
以下の例では、version ヘッダーを default 名前空間内のすべてのサイドカーコンテナ注入済みワークロードに対して伝搬します。
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMHeaderPropagation
metadata:
name: version-propagation
namespace: default # スコープ:この名前空間内のすべてのサイドカーコンテナ注入済みワークロード
spec:
headers:
- version # 伝搬対象となる正確なヘッダー名プレフィックスによるヘッダーの伝搬
共通プレフィックスを持つすべてのリクエストヘッダーを伝播させるには、headerPrefix を使用します。 次の例では、名前が x-custom- で始まるヘッダーを伝播させます。
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMHeaderPropagation
metadata:
name: custom-header-propagation
namespace: default
spec:
headerPrefix:
- x-custom- # x-custom-env、x-custom-region などをマッチworkloadSelector を用いた特定ワークロードへのターゲティング
ヘッダーの伝搬を特定の Pod に限定するには、workloadSelector を追加します。以下の例では、ラベル app: reviews が付与された Pod のみに対して、version および env ヘッダーを伝搬します。
apiVersion: istio.alibabacloud.com/v1beta1
kind: ASMHeaderPropagation
metadata:
name: reviews-header-propagation
namespace: default
spec:
workloadSelector:
labels:
app: reviews # このラベルを持つ Pod にのみ適用
headers:
- version
- envフィールドリファレンス
構成階層
ASMHeaderPropagation
spec
workloadSelector (任意)特定の Pod を対象とする
labels キーと値のペア
headers 伝搬対象となる正確なヘッダー名
headerPrefix 伝搬対象となるヘッダー名のプレフィックスspec
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
workloadSelector | WorkloadSelector | いいえ | ラベルを用いて特定の Pod セットを対象とします。ラベルは、ASMHeaderPropagation リソースが作成された名前空間内でのみ一致します。省略した場合、伝搬ルールはその名前空間内のすべてのサイドカーコンテナ注入済みワークロードに適用されます。 |
headers | []string | headerPrefix が設定されていない場合に必須 | 呼び出しチェーンを通じて伝搬するリクエストヘッダー名のリストです。ヘッダー名がこのリスト内のいずれかのエントリと完全一致した場合に伝搬されます。 |
headerPrefix | []string | headers が設定されていない場合に必須 | リクエストヘッダー名のプレフィックスのリストです。ヘッダー名がこのリスト内のいずれかのプレフィックスで始まる場合に伝搬されます。 |
headersまたはheaderPrefixの少なくとも一方を指定する必要があります。両方を同一リソース内で併用することも可能です。
WorkloadSelector
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
labels | map<string, string> | はい | 対象となる Pod を識別するキーと値のペア(1つ以上)。指定されたすべてのペアと完全に一致するラベルを持つ Pod のみが、この伝搬ルールの対象となります。 |