Alibaba Cloud Service Mesh (ASM) は、アノテーションを使用してサイドカープロキシのリソースと構成を変更することをサポートしています。このトピックでは、リソースアノテーションの追加と ProxyConfig フィールドの使用によるサイドカープロキシの設定方法について説明します。
前提条件
イングレスゲートウェイがデプロイされていること。詳細については、「イングレスゲートウェイの作成」をご参照ください。
リソースアノテーションの追加
ASM は、Pod にアノテーションを追加することで、サイドカープロキシのリソースを変更することをサポートしています。この例では、サイドカープロキシのメモリリクエストを変更する方法を示します。その他のアノテーションの詳細については、「付録 A:Istio リソースアノテーション」をご参照ください。
-
default 名前空間に対してサイドカーメッシュプロキシの自動インジェクションを有効にします。詳細については、「自動インジェクションの有効化」をご参照ください。
-
default 名前空間にアプリケーションをデプロイします。詳細については、「ASM インスタンスに関連付けられたクラスターへのアプリケーションのデプロイ」をご参照ください。
-
サイドカープロキシの最小メモリリクエストを変更します。
Container Service for Kubernetes (ACK) コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
[クラスターリスト] ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
[デプロイメント] ページで、対象のアプリケーションを見つけ、[アクション] 列の をクリックします。
-
[YAML の編集] ダイアログボックスで、`template` パラメーターの下に次の内容を追加し、[更新] をクリックします。
annotations: sidecar.istio.io/proxyMemory: 14Mitemplate: metadata: annotations: sidecar.istio.io/proxyMemory: 14Mi labels: app: details version: v1
-
サイドカープロキシのメモリ変更が成功したことを確認します。
クラスター管理ページの左側のナビゲーションウィンドウで、 を選択します。
-
[ポッド] ページで、対象のアプリケーション Pod を見つけ、[アクション] 列の [詳細] をクリックします。
-
[コンテナー] タブで、[istio-proxy] をクリックします。
istio-proxy が 14 Mi のメモリをリクエストしていることがわかります。クリックすると、レジストリアドレス、イメージプルポリシー (IfNotPresent)、Istio サイドカー関連の環境変数など、istio-proxy コンテナの詳細を表示できます。[リクエストされたリソース] の下に、現在のメモリ設定が
Memory: 14Miと表示されます。
ProxyConfig フィールドの設定
ASM は、Pod の ProxyConfig フィールドを変更することで、サイドカープロキシの構成を定義することをサポートしています。ProxyConfig フィールドの使用に関する詳細については、「付録 B:ProxyConfig フィールド」をご参照ください。
proxy.istio.io/config の値は、YAML または JSON 形式を使用できます。
ProxyConfig フィールドを設定する手順は、リソースアノテーションの追加と同じです。このセクションでは、一般的な ProxyConfig フィールドの例を示します。手順については、前のセクションをご参照ください。
例 1:終了ドレイン期間の設定
terminationDrainDuration フィールドを使用して、終了ドレイン期間を変更します。この期間は、アプリケーションコンテナが終了した後に Istio プロキシが待機する最大時間を定義します。
アプリケーションの YAML ファイルに次の内容を追加して、アプリケーションコンテナの終了後、Istio プロキシが最大 3 秒間待機するようにします。
annotations:
proxy.istio.io/config: |
terminationDrainDuration: 3s
type: RollingUpdate
template:
metadata:
annotations:
proxy.istio.io/config: |
terminationDrainDuration: 3s
labels:
app: details
[Pod] ページで、対象のアプリケーション Pod を見つけ、[詳細] 列の [アクション] をクリックします。[コンテナー] タブで、istio-proxy をクリックします。終了ドレイン期間が 3 秒に設定されていることがわかります。構成が有効になった後、Pod のコンテナページで istio-proxy コンテナの詳細を表示します。PROXY_CONFIG 環境変数で、terminationDrainDuration が 3s に設定されています。
例 2:Istio プロキシの起動順序の設定
デフォルトでは、ASM はグローバルに holdApplicationUntilProxyStarts を true に設定します。これにより、アプリケーションコンテナが起動する前に Istio プロキシが正常に起動することが保証されます。Istio プロキシが準備完了になる前にアプリケーションコンテナが準備完了になると、Pod はトラフィックを受け入れることができません。
holdApplicationUntilProxyStarts は、サイドカープロキシのインジェクション後のアプリケーションコンテナの起動動作を制御する構成オプションです。holdApplicationUntilProxyStarts が true に設定されている場合、Istio CNI またはサイドカーインジェクターは、プロキシコンテナが準備完了になりトラフィックの受信を開始するまで、アプリケーションコンテナの起動を妨げるように Kubernetes Pod を構成します。これにより、Pod がトラフィックを受信する前にすべてのトラフィックがプロキシを通過することが保証され、トラフィック管理、モニタリング、およびセキュリティポリシーの即時適用が可能になります。ほとんどの場合、適切なトラフィック処理を保証するために holdApplicationUntilProxyStarts を true に設定します。特定のシナリオで適切な場合にのみ false に設定してください。
[Pod] ページで、対象のアプリケーション Pod を見つけ、[詳細] 列の [アクション] をクリックします。[イベント] タブをクリックします。アプリケーションコンテナが最初に起動し、その後に Istio プロキシが起動することがわかります。Pod の [イベント] タブでは、details-v1 Pod のイベントリストに、Pod のスケジューリング (Scheduled)、イメージのプル (Pulled)、コンテナの作成 (Created)、コンテナの起動 (Started) を含む完全なコンテナ起動シーケンスが表示されます。起動したコンテナは、init コンテナ istio-init、アプリケーションコンテナ details、サイドカーコンテナ istio-proxy の順に表示されます。Started コンテナのイベントがハイライト表示され、holdApplicationUntilProxyStarts 構成によって強制された起動順序が確認できます。
付録 A:Istio リソースアノテーション
|
アノテーション |
説明 |
|
proxy.istio.io/config |
このプロキシのプロキシ構成を上書きします。 |
|
readiness.status.sidecar.istio.io/applicationPorts |
アプリケーションコンテナによって公開されるポートのリストを指定します。サイドカープロキシの readiness プローブが、プロキシが構成されトラフィックを受信する準備ができたタイミングを判断するために使用します。 |
|
readiness.status.sidecar.istio.io/failureThreshold |
サイドカープロキシの readiness プローブの失敗しきい値を指定します。 |
|
readiness.status.sidecar.istio.io/initialDelaySeconds |
サイドカープロキシの readiness プローブの初期遅延 (秒単位) を指定します。 |
|
readiness.status.sidecar.istio.io/periodSeconds |
サイドカープロキシの readiness プローブの期間 (秒単位) を指定します。 |
|
sidecar.istio.io/componentLogLevel |
サイドカープロキシのコンポーネントのログレベルを指定します。 |
|
sidecar.istio.io/enableCoreDump |
サイドカープロキシがコアダンプを有効にするかどうかを指定します。 |
|
sidecar.istio.io/extraStatTags |
Istio プロキシのテレメトリから抽出された追加タグのリスト。各追加タグはこのリストに表示される必要があります。 |
|
sidecar.istio.io/inject |
サイドカーの自動インジェクションを使用するかどうかを指定します。 |
|
sidecar.istio.io/interceptionMode |
インバウンドトラフィックを Envoy にリダイレクトするために使用されるモード (REDIRECT または TPROXY) を指定します。 |
|
sidecar.istio.io/logLevel |
サイドカープロキシのログレベルを設定します。 |
|
sidecar.istio.io/proxyCPU |
サイドカープロキシにリクエストする CPU 設定を指定します。 |
|
sidecar.istio.io/proxyCPULimit |
サイドカープロキシの CPU 制限を指定します。 |
|
sidecar.istio.io/proxyMemory |
サイドカープロキシにリクエストするメモリ設定を指定します。 |
|
sidecar.istio.io/proxyMemoryLimit |
サイドカープロキシのメモリ制限を指定します。 |
|
sidecar.istio.io/rewriteAppHTTPProbers |
HTTP readiness および liveness プローブをサイドカープロキシにリダイレクトします。 |
|
status.sidecar.istio.io/port |
サイドカープロキシの HTTP ステータスポートを指定します。ゼロに設定した場合、サイドカーはステータスを提供しません。 |
|
traffic.sidecar.istio.io/excludeInboundPorts |
サイドカープロキシへのリダイレクトから除外されるインバウンドポートのカンマ区切りリスト。すべてのインバウンドトラフィック (つまり「*」) がリダイレクトされる場合にのみ適用されます。 |
|
traffic.sidecar.istio.io/excludeOutboundIPRanges |
リダイレクトから除外される CIDR 形式の IP 範囲のカンマ区切りリスト。すべてのアウトバウンドトラフィック (つまり「*」) がリダイレクトされる場合にのみ適用されます。 |
|
traffic.sidecar.istio.io/excludeOutboundPorts |
サイドカープロキシへのアウトバウンドトラフィックのリダイレクトを禁止する文字列ポートのカンマ区切りリスト。 |
|
traffic.sidecar.istio.io/includeInboundPorts |
トラフィックがサイドカープロキシにリダイレクトされるインバウンドポートのカンマ区切りリスト。ワイルドカード「*」を使用して、すべてのポートのリダイレクトを構成します。空のリストは、すべてのインバウンドトラフィックのリダイレクトを無効にします。 |
|
traffic.sidecar.istio.io/includeOutboundIPRanges |
サイドカープロキシにリダイレクトされる CIDR 形式の IP 範囲のカンマ区切りリスト。ワイルドカード「*」を使用して、すべてのアウトバウンドトラフィックをリダイレクトします。空のリストは、すべてのアウトバウンドトラフィックのリダイレクトを無効にします。 |
|
traffic.sidecar.istio.io/includeOutboundPorts |
宛先 IP に関係なく、トラフィックがサイドカープロキシにリダイレクトされるアウトバウンドトラフィックポート文字列のカンマ区切りリスト。 |
|
traffic.sidecar.istio.io/kubevirtInterfaces |
インバウンドトラフィックがアウトバウンドトラフィックとして扱われる仮想インターフェイスのカンマ区切りリスト。 |
付録 B:ProxyConfig フィールド
|
フィールド |
タイプ |
説明 |
|
configPath |
String |
生成された設定ファイルが保存されるディレクトリへのパス。プロキシエージェントは実際の設定を生成し、このディレクトリに保存します。 |
|
statsdUdpAddress |
String |
statsd UDP リスナーの IP アドレスとポート。 |
|
proxyAdminPort |
Int32 |
Envoy が管理コマンドをリッスンするポート。デフォルトポートは 15000 です。 |
|
controlPlaneAuthPolicy |
AuthenticationPolicy |
AuthenticationPolicy は、プロキシがコントロールプレーンに接続する際の認証方法を定義します。デフォルトは |
|
concurrency |
実行するワーカースレッドの数。設定されていない場合、CPU リクエストと制限に基づいて自動的に決定されます。0 に設定すると、マシン上のすべてのコアが使用されます。デフォルトは 2 ワーカースレッドです。 |
|
|
interceptionMode |
InboundInterceptionMode |
インバウンドトラフィックをサイドカープロキシにリダイレクトするモードを設定します。 |
|
tracing |
Tracing |
サイドカープロキシが使用するトレース構成。 |
|
sds |
SDS |
プロキシが使用する Secret Discovery Service (SDS) 構成。 |
|
proxyMetadata |
Map<string, string> |
プロキシの追加の環境変数。ISTIO_META_ で始まる名前は、生成されたブートストラップ構成に含まれ、XDS サーバーに送信されます。 |
|
statusPort |
Map<string, string> |
プロキシがリッスンする管理 (readiness プローブなど) ポート。デフォルトはポート 15020 です。 |
|
terminationDrainDuration |
プロキシのシャットダウン中に接続が完了するまでに許容される時間。SIGTERM または SIGINT を受信すると、istio-agent はアクティブなサイドカープロキシにドレインを開始するように指示します。これにより、新しい接続がブロックされ、既存の接続は完了できます。その後、termination_drain_duration の間スリープしてから、残りのすべてのアクティブな Envoy プロセスをシャットダウンします。設定されていない場合、デフォルト値の 5 秒が適用されます。 |
|
|
holdApplicationUntilProxyStarts |
holdApplicationUntilProxyStarts 動作を有効または無効にするブール値フラグ。この機能は、Pod プロキシがトラフィックを受け入れる準備ができるまでアプリケーションの起動を遅らせるフックを追加し、特定の起動時の競合状態を緩和します。 |