コンテンツにスキップ

ミラーリング対象の選択

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に設定します。例:

kubectl label ns <NAMESPACE> wallarm-mirror=enabled

アノテーションを使用した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でトラフィックミラーリングを有効化するには次のとおりです:

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

podの選択

podのラベルやアノテーションによって、トラフィックミラーリング対象のpodを選択できます。方法は次のとおりです。

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

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

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

podの特定に複数のラベルが必要な場合は、複数のラベルを指定できます。例えば、次の構成では、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の特定に複数のアノテーションが必要な場合は、複数のアノテーションを指定できます。例えば、次の構成では、以下のアノテーション条件を満たす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'

nodeの選択

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

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

containerの選択

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

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の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フィルターの組み合わせ

構成 結果
  • values.yamlconfig.agent.mirror.allNamespacesの値がtrueに設定されており
  • 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はミラーリングされません