DockerとMirantis Kubernetes Engine

Mirantis Kubernetes Engine上でのKubernetesデプロイメント

Kubernetesセクションの指示に従ってください。

SUSE® Securityは混合Kubernetes / Swarmクラスターをサポートしていません。

DockerネイティブまたはUCP/Swarmを使用してSUSE® Securityコンテナをデプロイしてください

Mirantis Kubernetes Engine上でSwarmを使用したネイティブDockerデプロイメントは、特権モードでのコンテナを持つサービスのデプロイメントや、seccomp機能が追加されたサービスのデプロイメントをサポートしていないことに注意してください。この環境でデプロイするには、Docker ComposeまたはRunを使用してSUSE® Securityコンテナをデプロイしてください。リモートホストデプロイメント(docker-compose -H HOST)を使用すると、この作業が容易になります。

こちらがサンプルのdocker compose設定ファイル群です。ネイティブDockerを使用すると、コントローラーと同じノードにエンフォーサーをデプロイすることはサポートされていないため、ノード上でコントローラーとエンフォーサーの機能を希望する場合はAllinoneコンテナを使用する必要があります。

環境変数NV_PLATFORM_INFO=platform=Dockerは、プラットフォームがDocker/SwarmであることをSUSE® Securityに通知するために使用されますが、Docker EEデプロイメントでSUSE® Securityによって未使用のKubernetesコンテナが検出される場合があります。ネットワークアクティビティ→ビュー→システムを表示するには、エンフォーサーのための環境変数NV_SYSTEM_GROUPSを追加してください。

高可用性のためにAllinoneをデプロイする

本番のDockerネイティブまたはEE環境でのHAのために、最初の3つの本番ホストにAllinoneコンテナをデプロイしてください。各Allinoneは、すべてのAllinoneホストのIPアドレスを指す必要があります。例えば、3つのAllinoneコンテナがHAの最小数であり、CLUSTER_JOIN_ADDRは3つのIPアドレスをカンマで区切ってリストする必要があります。追加のHA Allinoneは奇数でデプロイできます。例:5、7。クラスター内の残りのホストにエンフォーサーをデプロイしてください。

docker-composeを使用してAllinoneをデプロイします(特権モード)

以下は、最初のノードにallinoneコンテナをデプロイするためのdocker-composeファイルの例です。allinoneコンテナにはエンフォーサーモジュールが含まれているため、同じノード上のアプリケーションコンテナを保護できます。グリーンフィールドとブラウンフィールドのデプロイメントの両方がサポートされています。

allinone:
    pid: host
    image: neuvector/allinone:<version>
    container_name: allinone
    privileged: true
    environment:
        - CLUSTER_JOIN_ADDR=node_ip
        - NV_PLATFORM_INFO=platform=Docker
    ports:
        - 18300:18300
        - 18301:18301
        - 18400:18400
        - 18401:18401
        - 18301:18301/udp
        - 8443:8443
    volumes:
        - /lib/modules:/lib/modules:ro
        - /var/neuvector:/var/neuvector
        - /var/run/docker.sock:/var/run/docker.sock:ro
        - /proc:/host/proc:ro
        - /sys/fs/cgroup:/host/cgroup:ro

最も重要な環境変数は*CLUSTER_JOIN_ADDR*です。それは他のエンフォーサーが接続するIPアドレスです。通常、これはall-in-oneコンテナが実行されているノードのIPアドレスに設定する必要があります。

ポート18300と18301は、クラスター通信のデフォルトポートです。これらはクラスター内のすべてのコントローラーとエンフォーサーで同一でなければなりません。デフォルトポートを変更する方法については、_"Docker-composeの詳細"_セクションを参照してください。

AllinoneでREST APIを公開するには、10443のポートマップを追加します。例えば - 10443:10443。

docker-composeを使用してエンフォーサーコンテナを追加します(特権モード)。

これは、エンフォーサーをクラスターに参加させるためのdocker-composeファイルの例です。グリーンフィールドとブラウンフィールドのデプロイメントの両方がサポートされています。

enforcer:
    pid: host
    image: neuvector/enforcer:<version>
    container_name: enforcer
    privileged: true
    environment:
        - CLUSTER_JOIN_ADDR=controller_node_ip
        - NV_PLATFORM_INFO=platform=Docker
    ports:
        - 18301:18301
        - 18401:18401
        - 18301:18301/udp
    volumes:
        - /lib/modules:/lib/modules:ro
        - /var/run/docker.sock:/var/run/docker.sock:ro
        - /proc:/host/proc:ro
        - /sys/fs/cgroup/:/host/cgroup/:ro

最も重要な環境変数は*CLUSTER_JOIN_ADDR*です。エンフォーサーの場合、`<controller_node_ip>`をコントローラーのノードIPアドレスに置き換えます。通常、コントローラー/all-in-oneのdocker-composeファイルとエンフォーサーのdocker-composeファイルの*CLUSTER_JOIN_ADDR*は同じ値を持っています。

SUSE® Securityスキャナーコンテナをデプロイします。

SUSE® Security 4.0+からは、脆弱性スキャンを実行するために別のスキャナーコンテナをデプロイする必要があります。重要:最新のCVEデータベースがデプロイされることを保証するために、スキャナーイメージをプルして実行する際は常に:latestタグを使用してください。

コントローラーと同じホストにスキャナーをデプロイするためのサンプルdocker run。

docker run -td --name scanner -e CLUSTER_JOIN_ADDR=controller_node_ip -p 18402:18402 -v /var/run/docker.sock:/var/run/docker.sock:ro neuvector/scanner:latest

およびサンプルdocker-compose。

Scanner:
   image: neuvector/scanner:latest
   container_name: scanner
   environment:
     - CLUSTER_JOIN_ADDR=controller_node_ip
   ports:
     - 18402:18402
   volumes:
     - /var/run/docker.sock:/var/run/docker.sock:ro

コントローラーとは異なるホストにスキャナーをデプロイするには、コントローラーがスキャナーに到達できるように環境変数CLUSTER_ADVERTISED_ADDRを追加してください。

docker run -td --name scanner -e CLUSTER_JOIN_ADDR=controller_node_ip -e CLUSTER_ADVERTISED_ADDR=scanner_host_ip -p 18402:18402 -v /var/run/docker.sock:/var/run/docker.sock:ro neuvector/scanner:latest

コントローラーと同じホストに複数のスキャナーをデプロイするには、ポートマッピングとCLUSTER_ADVERTISED_ADDR環境変数を削除してください。

docker run -itd --name s1  -e CLUSTER_JOIN_ADDR=controller_node_ip neuvector/scanner:latest

s1はスキャナー1を示します(追加のスキャナーにはs2、s3などを使用してください)。

スタンドアロンのスキャナー(コントローラーなし/Allinone)をデプロイするには、並列およびスタンドアロンのスキャナーのセクションを参照してください。

最新のCVEデータベースの更新をSUSE® Securityから取得するためにスキャナーを更新するには、スキャナーを停止して再起動するcronジョブを作成し、最新のものを取得してください。詳細についてはこのセクションを参照してください。

特権モードを使用しないデプロイ

一部のプラットフォーム構成では、SUSE® Securityコンテナを特権モードで実行する必要なくデプロイすることが可能です。設定は、機能を追加し、AppArmorプロファイルを設定する能力をサポートしている必要があります。Docker DataCenter/UCPおよびSwarmは現在これをサポートしていませんが、ComposeまたはRunを使用してSUSE® Securityを手動でデプロイすることは依然として可能です。

docker-composeを使用してAllinone(特権モードなし)をデプロイ

allinone:
    pid: host
    image: neuvector/allinone:<version>
    container_name: neuvector.allinone
    cap_add:
        - SYS_ADMIN
        - NET_ADMIN
        - SYS_PTRACE
        - IPC_LOCK
    security_opt:
        - apparmor=unconfined
        - seccomp=unconfined
        - label=disable
    environment:
        - CLUSTER_JOIN_ADDR=[AllInOne Node IP Address]
        - NV_PLATFORM_INFO=platform=Docker
    ports:
        - 18300:18300
        - 18301:18301
        - 18400:18400
        - 18401:18401
        - 18301:18301/udp
        - 8443:8443
    volumes:
        - /lib/modules:/lib/modules:ro
        - /var/run/docker.sock:/var/run/docker.sock:ro
        - /proc:/host/proc:ro
        - /sys/fs/cgroup:/host/cgroup:ro
        - /var/neuvector:/var/neuvector

docker-composeを使用してEnforcer(特権モードなし)をデプロイ

enforcer:
    pid: host
    image: neuvector/enforcer:<version>
    container_name: neuvector.enforcer
    cap_add:
        - SYS_ADMIN
        - NET_ADMIN
        - SYS_PTRACE
        - IPC_LOCK
    security_opt:
        - apparmor=unconfined
        - seccomp=unconfined
        - label=disable
    environment:
        - CLUSTER_JOIN_ADDR=[AllInOne Node IP Address]
        - NV_PLATFORM_INFO=platform=Docker
    ports:
        - 18301:18301
        - 18401:18401
        - 18301:18301/udp
    volumes:
        - /lib/modules:/lib/modules:ro
        - /var/run/docker.sock:/var/run/docker.sock:ro
        - /proc:/host/proc:ro
        - /sys/fs/cgroup/:/host/cgroup/:ro

docker runを使用してAllinone(特権モードあり)をデプロイ

デプロイするためにcomposeの代わりにdocker runを使用できます。こちらがサンプルです。

docker run -d --name allinone \
--pid=host \
--privileged \
    -e CLUSTER_JOIN_ADDR=[AllInOne Node IP Address] \
    -e NV_PLATFORM_INFO=platform=Docker \
    -p 18300:18300 \
    -p 18301:18301 \
    -p 18400:18400 \
    -p 18401:18401 \
    -p 18301:18301/udp \
    -p 8443:8443 \
    -v /lib/modules:/lib/modules:ro \
    -v /var/neuvector:/var/neuvector \
    -v /var/run/docker.sock:/var/run/docker.sock:ro \
    -v /sys/fs/cgroup:/host/cgroup:ro \
    -v /proc:/host/proc:ro \
neuvector/allinone:<version>

docker runを使用してEnforcer(特権モードあり)をデプロイ

docker run -d --name enforcer \
--pid=host \
--privileged \
    -e CLUSTER_JOIN_ADDR=[AllInOne Node IP Address] \
    -e NV_PLATFORM_INFO=platform=Docker \
    -p 18301:18301 \
    -p 18401:18401 \
    -p 18301:18301/udp \
    -v /lib/modules:/lib/modules:ro \
    -v /var/run/docker.sock:/var/run/docker.sock:ro \
    -v /sys/fs/cgroup:/host/cgroup:ro \
    -v /proc:/host/proc:ro \
neuvector/enforcer:<version>

docker runを使用してAllinone(特権モードなし)をデプロイ

デプロイするためにcomposeの代わりにdocker runを使用できます。こちらがサンプルです。

docker run -d --name allinone \
--pid=host \
--cap-add=SYS_ADMIN \
--cap-add=NET_ADMIN \
--cap-add=SYS_PTRACE \
--cap-add=IPC_LOCK \
--security-opt label=disable \
--security-opt apparmor=unconfined \
--security-opt seccomp=unconfined \
    -e CLUSTER_JOIN_ADDR=[AllInOne Node IP Address] \
    -e NV_PLATFORM_INFO=platform=Docker \
    -p 18300:18300 \
    -p 18301:18301 \
    -p 18400:18400 \
    -p 18401:18401 \
    -p 18301:18301/udp \
    -p 8443:8443 \
    -v /lib/modules:/lib/modules:ro \
    -v /var/neuvector:/var/neuvector \
    -v /var/run/docker.sock:/var/run/docker.sock:ro \
    -v /sys/fs/cgroup:/host/cgroup:ro \
    -v /proc:/host/proc:ro \
neuvector/allinone:<version>

docker runを使用してEnforcer(特権モードなし)をデプロイ

docker run -d --name enforcer \
--pid=host \
--cap-add=SYS_ADMIN \
--cap-add=NET_ADMIN \
--cap-add=SYS_PTRACE \
--cap-add=IPC_LOCK \
--security-opt label=disable \
--security-opt apparmor=unconfined \
--security-opt seccomp=unconfined \
    -e CLUSTER_JOIN_ADDR=[AllInOne Node IP Address]  \
    -e NV_PLATFORM_INFO=platform=Docker \
    -p 18301:18301 \
    -p 18401:18401 \
    -p 18301:18301/udp \
    -v /lib/modules:/lib/modules:ro \
    -v /var/run/docker.sock:/var/run/docker.sock:ro \
    -v /sys/fs/cgroup:/host/cgroup:ro \
    -v /proc:/host/proc:ro \
neuvector/enforcer:<version>

異なるホストにSUSE® Securityの各コンポーネントを個別にデプロイします。

コントローラーおよび/またはマネージャー(エンフォーサーなし)に専用のdockerホストを割り当てる予定の場合、これらのコンテナはAllinoneの代わりに個別にデプロイできます。dockerは、コントローラーとEnforcerの機能が同じノード上で別々のコンポーネントとしてデプロイされることをサポートしていないため、ノード上でコントローラーとEnforcerの機能を使用する場合は、Allinoneコンテナを使用する必要があります。

コントローラーのcomposeファイル([controller IP]を最初のコントローラーノードのIPに置き換えてください)

controller:
    image: neuvector/controller:<version>
    container_name: controller
    pid: host
    privileged: true
    environment:
      - CLUSTER_JOIN_ADDR=[controller IP]
      - NV_PLATFORM_INFO=platform=Docker
    ports:
        - 18300:18300
        - 18301:18301
        - 18400:18400
        - 18401:18401
        - 18301:18301/udp
        - 10443:10443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /proc:/host/proc:ro
      - /sys/fs/cgroup:/host/cgroup:ro
      - /var/neuvector:/var/neuvector

例えば、Docker runも使用できます。

docker run -itd --privileged --name neuvector.controller -e CLUSTER_JOIN_ADDR=controller_ip -p 18301:18301 -p 18301:18301/udp -p 18300:18300 -p 18400:18400 -p 10443:10443 -v /var/neuvector:/var/neuvector -v /var/run/docker.sock:/var/run/docker.sock:ro -v /proc:/host/proc:ro -v /sys/fs/cgroup/:/host/cgroup/:ro neuvector/controller:<version>

マネージャーのcomposeファイル([controller IP]を接続するコントローラーノードのIPに置き換えてください)。Docker UCP HRMサービスは、デフォルトポート8443を使用しており、これはSUSE® Securityコンソールポートと競合します。デフォルトのHRMポートを使用する場合は、以下の例でSUSE® Securityポートマッピングを別のポートに変更してください。例えば、マネージャーコンテナのために9443:8443のように示されています。

manager:
    image: neuvector/manager:<version>
    container_name: nvmanager
    environment:
      - CTRL_SERVER_IP=[controller IP]
    ports:
      - 9443:8443

Enforcer用のcomposeファイル:

enforcer:
    image: neuvector/enforcer:<version>
    pid: host
    container_name: enforcer
    privileged: true
    environment:
        - CLUSTER_JOIN_ADDR=controller_node_ip
        - NV_PLATFORM_INFO=platform=Docker
    ports:
        - 18301:18301
        - 18401:18401
        - 18301:18301/udp
    volumes:
        - /lib/modules:/lib/modules:ro
        - /var/run/docker.sock:/var/run/docker.sock:ro
        - /proc:/host/proc:ro
        - /sys/fs/cgroup/:/host/cgroup/:ro

SUSE® Securityの監視と再起動

SUSE® SecurityコンテナはUCP/Swarmサービスとしてデプロイされていないため、ノード上で自動的に開始/再起動されることはありません。SUSE® Security SYSLOGイベントのためにSIEMシステムを通じてアラートを設定するか、DataCenterを通じてSUSE® Securityコンテナが実行されていないかを検出する必要があります。

特権モードなしでのデプロイ

一般的に、特権設定を以下のように置き換える必要があります:

    cap_add:
        - SYS_ADMIN
        - NET_ADMIN
        - SYS_PTRACE
        - IPC_LOCK
    security_opt:
        - apparmor=unconfined
        - seccomp=unconfined
        - label=disable

上記の構文はDocker EE v17.06.0+用です。これ以前のバージョンでは、=の代わりに:を使用します。例えば、apparmor:unconfined。

Docker ネイティブの更新

最新のCVEデータベースがデプロイされることを保証するために、スキャナーイメージをプルおよび実行する際には、常に`:latest`タグを使用してください。

docker stop scanner
docker rm <scanner id>
docker pull neuvector/scanner:latest
<docker run command from below>

`docker rm -f <scanner id>`は、実行中のスキャナーを強制停止および削除するためにも使用できます。

docker-composeについて

docker-compose -f file.yaml down
docker-compose -f file.yaml pull        // pre-pull the image before starting the scanner
docker-compose -f file.yaml up -d

サンプルdocker run

docker run -td --name scanner -e CLUSTER_JOIN_ADDR=controller_node_ip -e CLUSTER_ADVERTISED_ADDR=node_ip -e SCANNER_DOCKER_URL=tcp://192.168.1.10:2376 -p 18402:18402 -v /var/run/docker.sock:/var/run/docker.sock:ro neuvector/scanner:latest

およびサンプルdocker-compose。

Scanner:
   image: neuvector/scanner:latest
   container_name: scanner
   environment:
     - SCANNER_DOCKER_URL=tcp://192.168.1.10:2376
     - CLUSTER_JOIN_ADDR=controller_node_ip
     - CLUSTER_ADVERTISED_ADDR=node_ip
   ports:
     - 18402:18402
   volumes:
     - /var/run/docker.sock:/var/run/docker.sock:ro