コンテンツにスキップ

ミラーリング対象のパケットの選択

# ミラーリングのソース選択

[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 wallarm-mirror=enabled
## アノテーションを使用した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のトラフィックミラーリングを有効にするには:

config:
  agent:
    mirror:
      filters:
        - namespace: 'my-namespace'

Podの選択

podのラベルおよびアノテーションによってトラフィックミラーリング対象のpodを選択できます。以下はその方法です:

特定のラベルを持つpodのトラフィックミラーリングを有効にするには、pod_labelsパラメータを使用します。

例えば、environment: productionラベルを持つpodのトラフィックミラーリングを有効にするには:

config:
  agent:
    mirror:
      filters:
        - pod_labels:
            environment: 'production'

複数のラベルが必要な場合は、いくつかのラベルを指定できます。例えば、以下の構成では、environment: production AND (team: backend OR team: ops)のラベルを持つpodのトラフィックをWallarm eBPFがミラーリングおよび解析します:

config:
  agent:
    mirror:
      filters:
        - pod_labels:
            environment: 'production'
            team: 'backend,ops'

特定のアノテーションを持つpodのトラフィックミラーリングを有効にするには、pod_annotationsパラメータを使用します。

例えば、app.kubernetes.io/name: myappアノテーションを持つpodのトラフィックミラーリングを有効にするには:

config:
  agent:
    mirror:
      filters:
        - pod_annotations:
            app.kubernetes.io/name: 'myapp'

複数のアノテーションが必要な場合は、いくつかのアノテーションを指定できます。例えば、以下の構成では、次のアノテーションを持つpodのトラフィックをWallarm eBPFがミラーリングおよび解析します:

app.kubernetes.io/name: myapp AND (app.kubernetes.io/instance: myapp-instance-main OR
app.kubernetes.io/instance: myapp-instance-reserve)
config:
  agent:
    mirror:
      filters:
        - pod_annotations:
            app.kubernetes.io/name: 'myapp'
            app.kubernetes.io/instance: 'myapp-instance-main,myapp-instance-reserve'

ノードの選択

特定のKubernetesノードのトラフィックミラーリングを有効にするには、filters.node_nameパラメータにノード名を指定します。例えば、my-nodeというKubernetesノードのトラフィックミラーリングを有効にするには:

config:
  agent:
    mirror:
      filters:
        - node_name: 'my-node'

コンテナの選択

特定のKubernetesコンテナのトラフィックミラーリングを有効にするには、filters.container_nameパラメータにコンテナ名を指定します。例えば、my-containerというKubernetesコンテナのトラフィックミラーリングを有効にするには:

config:
  agent:
    mirror:
      filters:
        - container_name: 'my-container'

変更の適用

values.yamlファイルを変更してデプロイ済みのチャートをアップグレードする場合は、以下のコマンドを使用します:

helm upgrade <RELEASE_NAME> wallarm/wallarm-oob -n wallarm-ebpf -f <PATH_TO_VALUES>

ラベル、アノテーション、フィルターの優先順位

複数の選択方法が使用され、上位のレベルでミラーリングが有効になっている場合、下位の設定が優先されます。

上位のレベルでミラーリングが無効化されている場合、下位の設定は一切適用されません。上位のレベルがトラフィックミラーリングの無効化において優先されるためです。

同じ対象が異なる手段(例: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フィルターの併用

構成 結果
  • values.yamlの値→config.agent.mirror.allNamespacestrueに設定され、
  • namespaceラベルがwallarm-mirror=disabled
namespaceはミラーリングされません
  • namespaceラベルがwallarm-mirror=enabledで、
  • podアノテーションがmirror.wallarm.com/enabled=false
podはミラーリングされません
  • namespaceラベルがwallarm-mirror=disabledで、
  • podアノテーションがmirror.wallarm.com/enabled=trueまたはその他の下位設定が選択されていても
podはミラーリングされません
  • namespaceラベルがwallarm-mirror=disabledで、
  • 同じnamespaceがvalues.yamlconfig.agent.mirror.filtersで選択されている
namespaceはミラーリングされません
  • podアノテーションがmirror.wallarm.com/enabled=falseで、
  • 同じpodがvalues.yamlconfig.agent.mirror.filtersで選択されている
podはミラーリングされません
```