Docker 和 Mirantis Kubernetes 引擎
在 Mirantis Kubernetes 引擎上进行 Kubernetes 部署
请遵循 Kubernetes 部分 中的说明。
|
SUSE® Security 不支持混合 Kubernetes / Swarm 集群。 |
使用 Docker 原生或 UCP/Swarm 部署 SUSE® Security 容器
请注意,在 Mirantis Kubernetes 引擎上使用 Swarm 进行原生 Docker 部署不支持以特权模式部署服务或添加 seccomp 功能的容器。要在此环境中部署,您必须使用 Docker Compose 或 Run 来部署 SUSE® Security 容器。您可以使用远程主机部署 (docker-compose -H HOST) 来简化此任务。
以下是示例 docker compose 配置文件。请注意,使用 Docker 原生不支持在与控制器相同的节点上部署执法者,如果希望在同一节点上具有控制器和执法者功能,则需要使用 All-in-One 容器。
| 环境变量 NV_PLATFORM_INFO=platform=Docker 用于通知 SUSE® Security 平台为 Docker/Swarm,即使在 Docker EE 部署中可能会检测到未使用的 Kubernetes 容器 SUSE® Security。此外,要在网络活动 → 视图 → 显示系统中查看这些内容,请为执法者添加环境变量 NV_SYSTEM_GROUPS。 |
部署 All-in-One 以实现高可用性
在生产 Docker 原生或 EE 环境中,为高可用性在前三个生产主机上部署 All-in-One 容器。每个 All-in-One 应指向所有 All-in-One 主机的 IP 地址。例如,三个 All-in-One 容器是高可用性的最小要求,CLUSTER_JOIN_ADDR 应列出三个用逗号分隔的 IP 地址。可以以奇数个数部署额外的高可用性 All-in-One,例如 5、7。在集群中其余主机上部署执法者,顺序不限。
使用 docker-compose 部署 All-in-One(特权模式)
以下是一个示例的 docker-compose 文件,用于在第一个节点上部署 All-in-One 容器。由于 All-in-One 容器内部有一个执法模块,因此同一节点上的应用程序容器可以得到保护。支持绿地和棕地部署。
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 详细信息"_部分以了解如何更改默认端口。
|
要在 All-in-One 中公开 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+开始,必须部署一个单独的扫描器容器以执行漏洞扫描。重要说明:在拉取和运行扫描器镜像时,请始终使用:latest标签,以确保部署最新的CVE数据库。
示例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 等)。
要部署独立扫描器(无控制器/All-in-One),请参见 并行和独立扫描器 一节。
要更新扫描器以获取来自 SUSE® Security 的最新 CVE 数据库更新,请创建一个 cron 任务以停止并重启扫描器,拉取最新版本。有关详细信息,请参见 本节。
不使用特权模式的部署
对于某些平台配置,可以在不要求以特权模式运行的情况下部署 SUSE® Security 容器。配置必须支持添加功能和设置 apparmor 配置文件。请注意,Docker DataCenter/UCP 和 Swarm 目前不支持此功能,但仍然可以使用 Compose 或 Run 手动部署 SUSE® Security。
使用 docker-compose 部署 All-in-One(无特权模式)
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:
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 部署 All-in-One(特权模式)
您可以使用 docker run 而不是 compose 进行部署。以下是示例。
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 部署执法者(特权模式)
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 部署 All-in-One(无特权模式)
您可以使用 docker run 而不是 compose 进行部署。以下是示例。
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 部署执法者(无特权模式)
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 主机专用于控制器和/或管理器(无执法者),则可以单独部署这些容器,而不是使用 All-in-One。请注意,docker 不支持在同一节点上将执法者作为单独组件部署,因此如果希望在节点上同时部署控制器和执法者功能,则需要使用 All-in-One 容器。
控制器 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
执法者的 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 服务部署,因此它们不会在节点上自动启动/重启。您应该通过 SIEM 系统为 SUSE® Security SYSLOG 事件设置警报,或通过数据中心检测 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 原生更新
|
拉取和运行扫描器镜像时,请始终使用 |
docker stop scanner
docker rm <scanner id>
docker pull neuvector/scanner:latest
<docker run command from below>
|
对于 docker-compose
示例 docker run
以及示例docker-compose
|