Service Mesh (ASM) のアンビエントモードでは、Ztunnel コンポーネントは istio-system namespace の ztunnel-config ConfigMap からランタイム構成を読み込みます。この ConfigMap 内の config.yaml フィールドで、エグレスポリシー、L7 オブザーバビリティ、およびその他の構成の設定を定義します。Ztunnel はファイル監視メカニズムを使用して構成の変更を検出し、再起動を必要とせずに自動的に適用します。このドキュメントでは、ztunnel-config の YAML の例とフィールドの説明を示します。
構成
ztunnel-config ConfigMap の構造は次のとおりです:
apiVersion: v1
kind: ConfigMap
metadata:
name: ztunnel-config
namespace: istio-system
data:
ztunnel-config.yaml: |
l7Config:
enabled: false
egressPolicies: [ ]
フィールド | タイプ | 必須 | 説明 |
|
| いいえ | L7 オブザーバビリティの構成です。指定しない場合は、デフォルト値が使用されます。 |
|
| いいえ | クラスター外のサービスへのエグレストラフィックに対する、エグレスポリシールールのリストです。リストが空または指定されていない場合、デフォルトではすべてのエグレストラフィックが許可されます。 |
EgressPolicy の構成は、クラスター外のサービスにのみ適用されます。Service および ServiceEntry リソースなど、クラスター内に登録されているサービスは影響を受けません。
構成例
例 1:L7 アクセスログの有効化
L7 アクセスログの生成を有効にします。Ztunnel は HTTP および TLS トラフィックを解析し、アクセスログを出力します。
l7Config:
enabled: true例 2:プライベート CIDR ブロックへのアクセスの拒否
この例では L7 オブザーバビリティを構成しません。エグレスポリシーを使用して、すべての namespace からプライベート CIDR ブロックへのアクセスを拒否します。
egressPolicies:
- matchCidrs:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
policy: Deny例 3:L7 アクセスログと多層エグレス制御の有効化
この例では、L7 アクセスログの生成とエグレスポリシーを有効にします。このポリシーは、特定の namespace に対してパススルーを許可し、特定のポートでのメタデータサービスへのアクセスを拒否し、さらにプライベート CIDR ブロックへのアクセスを拒否します。
l7Config:
enabled: true
egressPolicies:
# egress-gateway namespace ではパススルーを許可し、フォールバックルールによってエグレスプロキシ自体がブロックされないようにします。
- namespaces:
- egress-gateway
policy: Passthrough
# ポート 80 と 443 でのクラウドプロバイダーのメタデータサービスへのアクセスを拒否します。
- matchCidrs:
- 169.254.169.254/32
- fd00:ec2::254/128
matchPorts:
- 80
- 443
policy: Deny
# プライベート CIDR ブロックへのアクセスを拒否します。
- matchCidrs:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
- fc00::/7
policy: Denyフィールドの詳細
L7Config
フィールド | タイプ | 必須 | 説明 |
|
| いいえ | L7 トラフィックのオブザーバビリティを有効にするかどうかを指定します。デフォルト値は |
現在、L7 オブザーバビリティがサポートしているのはアクセスログの生成のみです。リクエストレベルのメトリクス収集と分散トレーシングは、まだサポートされていません。
サポートされるプロトコルは HTTP と TLS です。
この機能により、約 5% のパフォーマンスオーバーヘッドが発生する可能性があります。有効化する前に、ビジネス要件を評価してください。
追加の HTTP フィールド
L7 オブザーバビリティを有効にすると、各 HTTP リクエスト/レスポンスのトランザクションごとに、個別のアクセスログエントリが生成されます。エントリには、基本フィールドに加えて次のフィールドが含まれます:
フィールド | 説明 | 値の例 |
| HTTP リクエストメソッド |
|
| リクエストパス |
|
| プロトコルバージョン |
|
| リクエストホスト |
|
| HTTP レスポンスのステータスコード |
|
|
|
|
| リクエストごとのレスポンスボディサイズ (バイト) |
|
| リクエストごとのリクエストボディサイズ (バイト) |
|
| 単一リクエストの合計時間。送信からレスポンス受信までの時間 |
|
追加の TLS フィールド
TLS トラフィック (HTTP over TLS ではない) に対して L7 オブザーバビリティを有効にすると、Ztunnel は ClientHello ハンドシェイクメッセージを解析し、次のフィールドをログエントリに追加します:
フィールド | 説明 | 値の例 |
| 固定値 |
|
| ClientHello メッセージの Server Name Indication (SNI) |
|
| ClientHello メッセージの最初のアプリケーション層プロトコルネゴシエーション (ALPN) プロトコルです。ALPN が指定されていない場合、値は |
|
EgressPolicy
各 EgressPolicy ルールは、3 つの一致条件 (namespaces、matchCidrs、matchPorts) と policy アクションで構成されます。Ztunnel はリスト内のルールを上から順に評価します。すべての条件を満たした最初のルールが有効になります。
フィールド | タイプ | 必須 | 説明 |
|
| いいえ | ルールが適用されるクライアント namespace のリストです。空の場合は、すべての namespace に一致します。 |
|
| いいえ | CIDR 形式の宛先 IP アドレス範囲のリストです。空の場合は、すべての宛先 IP アドレスに一致します。IPv4 と IPv6 の両方のトラフィックを制御するには、それぞれの CIDR 範囲を個別に構成する必要があります。 |
|
| いいえ | 宛先ポートのリストです。空の場合は、すべてのポートに一致します。 |
|
| はい | 実行するアクションです。有効な値は次のとおりです:
|
EgressPolicyAction
policy フィールドには、次の値を指定できます:
値 | 説明 |
| メッシュプロキシをバイパスし、宛先 IP アドレスに対して TCP でトラフィックを直接転送します。 |
| リクエストを直ちに破棄し、宛先に到達しないようにします。 |
構成の制約
Ztunnel は
egressPoliciesのルールを順番に評価します。namespaces、matchCidrs、matchPortsのすべての条件を満たした最初のルールを適用し、それ以降のルールは無視されます。namespacesフィールドは、宛先サービスの namespace ではなく、クライアント (リクエストの送信元) の namespace に一致します。matchCidrsフィールドは、ドメイン名ではなく宛先 IP アドレスに一致します。ドメイン名に基づいてトラフィックを制御するには、外部サービスをメッシュ内のServiceEntryとして登録する必要があります。matchPortsフィールドは、クライアントの送信元ポートではなく、宛先ポート (リクエストのリモートポート) に一致します。リクエストが
egressPoliciesのいずれのルールにも一致しない場合、デフォルトのアクションはPassthroughです。Ztunnel は、Ztunnel Pod の再起動を必要とせず、ファイル監視メカニズムを通じて構成の変更を自動的に読み込みます。構成フォーマットが無効な場合、Ztunnel は最後に正常だった構成を保持します。