ミラーリング対象のパケットの選択
# ミラーリングのソース選択
[Wallarm eBPF solution](deployment.md)はトラフィックミラーを用いて動作し、トラフィックミラーのスコープを制御することを提供します。Kubernetesのnamespace、pod、およびコンテナごとにパケットミラーを生成できるようにします。このガイドでは、選択プロセスの管理方法について説明します。
パケットをミラーリングするための選択方法はいくつかあります:
* namespaceに`wallarm-mirror`ラベルを適用して、そのnamespace内のすべてのpodのトラフィックをミラーリングします。
* 特定のpodに`mirror.wallarm.com/enabled`アノテーションを適用して、そのトラフィックをミラーリングします。
* Wallarm Helmチャートの`values.yaml`ファイル内の`config.agent.mirror.filters`設定を構成します。この構成では、namespace、pod、コンテナ、またはノードレベルでミラーリングを有効にできます。
## ラベルを使用したnamespaceのミラーリング
namespaceレベルでミラーリングを制御するには、対象のKubernetes namespaceに`wallarm-mirror`ラベルを適用し、その値を`enabled`または`disabled`に設定します。例:
kubectl label ns
## アノテーションを使用したpodのミラーリング
podレベルでミラーリングを制御するには、`mirror.wallarm.com/enabled`アノテーションを使用し、その値を`true`または`false`に設定します。例:
```bash
kubectl patch deployment <DEPLOYMENT_NAME> -n <NAMESPACE> -p '{"spec": {"template":{"metadata":{"annotations":{"mirror.wallarm.com/enabled":"true"}}}} }'
values.yaml
を使用したnamespace、pod、コンテナ、またはノードのミラーリング¶
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のトラフィックミラーリングを有効にするには:
複数のラベルが必要な場合は、いくつかのラベルを指定できます。例えば、以下の構成では、environment: production AND (team: backend OR team: ops)
のラベルを持つpodのトラフィックをWallarm eBPFがミラーリングおよび解析します:
特定のアノテーションを持つpodのトラフィックミラーリングを有効にするには、pod_annotations
パラメータを使用します。
例えば、app.kubernetes.io/name: myapp
アノテーションを持つpodのトラフィックミラーリングを有効にするには:
複数のアノテーションが必要な場合は、いくつかのアノテーションを指定できます。例えば、以下の構成では、次のアノテーションを持つpodのトラフィックをWallarm eBPFがミラーリングおよび解析します:
ノードの選択¶
特定のKubernetesノードのトラフィックミラーリングを有効にするには、filters.node_name
パラメータにノード名を指定します。例えば、my-node
というKubernetesノードのトラフィックミラーリングを有効にするには:
コンテナの選択¶
特定のKubernetesコンテナのトラフィックミラーリングを有効にするには、filters.container_name
パラメータにコンテナ名を指定します。例えば、my-container
というKubernetesコンテナのトラフィックミラーリングを有効にするには:
変更の適用¶
values.yaml
ファイルを変更してデプロイ済みのチャートをアップグレードする場合は、以下のコマンドを使用します:
ラベル、アノテーション、フィルターの優先順位¶
複数の選択方法が使用され、上位のレベルでミラーリングが有効になっている場合、下位の設定が優先されます。
上位のレベルでミラーリングが無効化されている場合、下位の設定は一切適用されません。上位のレベルがトラフィックミラーリングの無効化において優先されるためです。
同じ対象が異なる手段(例:Wallarm podのアノテーションおよびvalues.yaml
フィルターブロック)を通じてミラーリング対象として選択された場合、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はミラーリングされません |
``` |