ミラーリング対象の選択¶
Wallarm eBPFソリューションはトラフィックミラー上で動作し、トラフィックミラーのスコープを制御できます。Kubernetesのnamespace、pod、container単位でパケットのミラーリングを行うことができます。本ガイドでは、選択プロセスの管理方法を説明します。
バージョン4.10に限定
Wallarm eBPFベースのソリューションは現在、Wallarm Node 4.10で利用可能な機能のみをサポートしています。
ミラーリング対象のパケットを選択する方法はいくつかあります。
-
namespaceに
wallarm-mirrorラベルを付与すると、そのnamespace内のpodのすべてのトラフィックをミラーリングできます。 -
特定のpodに
mirror.wallarm.com/enabledアノテーションを付与すると、そのpodのトラフィックをミラーリングできます。 -
Wallarm Helmチャートの
values.yamlファイルでconfig.agent.mirror.filters設定を構成します。この設定により、namespace、pod、container、またはnodeレベルでミラーリングを有効化できます。
ラベルを使用したnamespaceのミラーリング¶
namespaceレベルでミラーリングを制御するには、対象のKubernetesのnamespaceにwallarm-mirrorラベルを付与し、値をenabledまたはdisabledに設定します。例:
アノテーションを使用したpodのミラーリング¶
podレベルでミラーリングを制御するには、mirror.wallarm.com/enabledアノテーションを使用し、値をtrueまたはfalseに設定します。例:
kubectl patch deployment <DEPLOYMENT_NAME> -n <NAMESPACE> -p '{"spec": {"template":{"metadata":{"annotations":{"mirror.wallarm.com/enabled":"true"}}}} }'
values.yamlを使用したnamespace、pod、container、またはnodeのミラーリング¶
values.yamlファイル内のconfig.agent.mirror.filtersブロックにより、トラフィックミラーリングのレベルをきめ細かく制御できます。この方法では、次の対象のミラーリングを制御できます。
-
namespace -
filters.namespaceパラメータを使用します -
pod - podのラベルに
filters.pod_labels、またはpodのアノテーションにfilters.pod_annotationsを使用します -
node -
filters.node_nameパラメータを使用します -
container -
filters.container_nameパラメータを使用します
namespaceの選択¶
特定のnamespaceでトラフィックミラーリングを有効化するには、filters.namespaceパラメータにその名前を指定します。例えば、my-namespaceというKubernetesのnamespaceでトラフィックミラーリングを有効化するには次のとおりです:
podの選択¶
podのラベルやアノテーションによって、トラフィックミラーリング対象のpodを選択できます。方法は次のとおりです。
特定のラベルを持つpodでトラフィックミラーリングを有効化するには、pod_labelsパラメータを使用します。
例えば、environment: productionラベルを持つpodでトラフィックミラーリングを有効化するには次のとおりです:
podの特定に複数のラベルが必要な場合は、複数のラベルを指定できます。例えば、次の構成では、environment: production AND (team: backend OR team: ops)というラベル条件に一致するpodのトラフィックをWallarm eBPFがミラーリングして解析します:
特定のアノテーションを持つpodでトラフィックミラーリングを有効化するには、pod_annotationsパラメータを使用します。
例えば、app.kubernetes.io/name: myappアノテーションを持つpodでトラフィックミラーリングを有効化するには次のとおりです:
podの特定に複数のアノテーションが必要な場合は、複数のアノテーションを指定できます。例えば、次の構成では、以下のアノテーション条件を満たすpodのトラフィックをWallarm eBPFがミラーリングして解析します:
nodeの選択¶
特定のKubernetesのnodeでトラフィックミラーリングを有効化するには、filters.node_nameパラメータにnode名を指定します。例えば、my-nodeというKubernetesのnodeでトラフィックミラーリングを有効化するには次のとおりです:
containerの選択¶
特定のKubernetesのcontainerでトラフィックミラーリングを有効化するには、filters.container_nameパラメータにcontainer名を指定します。例えば、my-containerというKubernetesのcontainerでトラフィックミラーリングを有効化するには次のとおりです:
変更の適用¶
values.yamlファイルを変更し、デプロイ済みのチャートをアップグレードしたい場合は、次のコマンドを使用します:
ラベル、アノテーション、フィルター間の優先順位¶
複数の選択方法を併用し、上位レベルでミラーリングが有効化されている場合は、下位の設定レベルが優先されます。
上位レベルでミラーリングが無効化されている場合は、上位レベルが無効化に関して優先されるため、下位の設定は一切適用されません。
同一のオブジェクトが異なる手段(例: Wallarmのpodアノテーションとvalues.yamlのfiltersブロック)でミラーリング対象に選択されている場合は、Wallarmのpodアノテーションが優先されます。
例¶
ラベル、アノテーション、フィルターは、トラフィックのミラーリングと解析のレベル設定に高い柔軟性を提供します。しかし、これらは互いに重複する場合があります。どのように組み合わせて動作するかを理解するための構成例を以下に示します。
values.yamlにおける多層の構成¶
次のvalues.yaml構成の例です:
config:
agent:
mirror:
filters:
- namespace: "default"
- namespace: 'my-namespace'
pod_labels:
environment: 'production'
team: 'backend,ops'
pod_annotations:
app.kubernetes.io/name: 'myapp'
設定したフィルターは次のように適用されます:
namespace: default OR (namespace: my-namespace AND environment: production AND (team: backend
OR team: ops) AND app.kubernetes.io/name: myapp)
namespaceラベル、podアノテーション、values.yamlフィルターの組み合わせ¶
| 構成 | 結果 |
|---|---|
| そのnamespaceはミラーリングされません |
| そのpodはミラーリングされません |
| そのpodはミラーリングされません |
| そのnamespaceはミラーリングされません |
| そのpodはミラーリングされません |