Docker 部署 NeuVector 适用于简单测试或功能验证场景。本文记录在 Docker 环境中部署、升级 NeuVector,以及从 v5.4.2 之前版本升级时证书相关的注意事项。
单点部署 单点部署时,可以在一台节点上部署 All-in-One 容器,并根据需要额外部署 Enforcer 和 Scanner。
部署 All-in-One 容器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 docker run -d --name allinone \ --pid=host \ --privileged \ -e CLUSTER_JOIN_ADDR=172.16.16.142 \ -e NV_PLATFORM_INFO=platform=Docker \ -e CTRL_PERSIST_CONFIG=1 \ -p 18300:18300 \ -p 18301:18301 \ -p 18400:18400 \ -p 18401:18401 \ -p 10443:10443 \ -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:5.4.1
部署 Enforcer 容器 1 2 3 4 5 6 7 8 9 10 11 12 13 docker run -d --name enforcer \ --pid=host \ --privileged \ -e CLUSTER_JOIN_ADDR=172.16.16.142 \ -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:5.4.1
部署 Scanner 容器 1 2 3 4 5 6 docker run -td --name scanner \ -e CLUSTER_JOIN_ADDR=172.16.16.142 \ -e NV_PLATFORM_INFO=platform=Docker \ -p 18402:18402 \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ harbor.warnerchen.com/rancher/neuvector-scanner:6
高可用部署 高可用部署时,需要分别在多台节点上部署 All-in-One 容器,并在 CLUSTER_JOIN_ADDR 中配置所有控制节点地址。
部署 All-in-One 容器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 docker run -d --name allinone \ --pid=host \ --privileged \ -e CLUSTER_JOIN_ADDR=172.16.16.141,172.16.16.142,172.16.16.143 \ -e NV_PLATFORM_INFO=platform=Docker \ -e CTRL_PERSIST_CONFIG=1 \ -p 18300:18300 \ -p 18301:18301 \ -p 18400:18400 \ -p 18401:18401 \ -p 10443:10443 \ -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:5.4.1
部署 Enforcer 容器 1 2 3 4 5 6 7 8 9 10 11 12 13 docker run -d --name enforcer \ --pid=host \ --privileged \ -e CLUSTER_JOIN_ADDR=172.16.16.141,172.16.16.142,172.16.16.143 \ -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:5.4.1
部署 Scanner 容器 1 2 3 4 5 6 docker run -td --name scanner \ -e CLUSTER_JOIN_ADDR=172.16.16.141,172.16.16.142,172.16.16.143 \ -e NV_PLATFORM_INFO=platform=Docker \ -p 18402:18402 \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ harbor.warnerchen.com/rancher/neuvector-scanner:6
升级 NeuVector 升级前需要先停止并重命名旧容器,然后使用新版本镜像重新创建容器。
升级 All-in-One 容器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 docker stop allinone docker rename allinone allinone-5.2.1 docker run -d --name allinone \ --pid=host \ --privileged \ -e CLUSTER_JOIN_ADDR=172.16.16.141,172.16.16.142,172.16.16.143 \ -e NV_PLATFORM_INFO=platform=Docker \ -e CTRL_PERSIST_CONFIG=1 \ -p 18300:18300 \ -p 18301:18301 \ -p 18400:18400 \ -p 18401:18401 \ -p 10443:10443 \ -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:5.4.1
升级 Enforcer 容器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 docker stop enforcer docker rename enforcer enforcer-5.2.1 docker run -d --name enforcer \ --pid=host \ --privileged \ -e CLUSTER_JOIN_ADDR=172.16.16.141,172.16.16.142,172.16.16.143 \ -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:5.4.1
使用 v5.4.2 版本起的注意事项 NeuVector 包含用于 Manager(控制台/UI 访问)、Controller(REST API、内部通信)、Enforcer(内部通信)和 Scanner(内部通信)的通信加密证书。
从 v5.4.2 开始,这些证书默认不会自动生成,在部署/升级前,需要手动准备并挂载证书。
参考文档:
https://open-docs.neuvector.com/5.4/deploying/production/internal
准备证书 准备 ca.cfg 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 cat <<EOF > ca.cfg [req] distinguished_name = req_distinguished_name x509_extensions = v3_req prompt = no [req_distinguished_name] C = US ST = California L = San Jose O = NeuVector Inc. OU = Neuvector CN = Neuvector [v3_req] keyUsage = digitalSignature, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth, clientAuth subjectAltName = @alt_names [alt_names] DNS.1 = Neuvector EOF
生成证书和私钥:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 openssl genrsa -out ca.key 2048 openssl req -x509 -sha256 -new -nodes -key ca.key -days 3650 -out ca.crt ... Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]:Guangdong Locality Name (eg, city) []:Shenzhen Organization Name (eg, company) [Internet Widgits Pty Ltd]:NeuVector Inc. Organizational Unit Name (eg, section) []:NeuVector Common Name (e.g. server FQDN or YOUR name) []:NeuVector Email Address []: openssl genrsa -out tls.key 2048 openssl req -new -key tls.key -sha256 -out cert.csr -config ca.cfg openssl req -in cert.csr -noout -text openssl x509 -req -sha256 -in cert.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out tls.crt -days 3650 -extensions 'v3_req' -extfile ca.cfg openssl x509 -in tls.crt -text
文件示例:
1 2 3 4 5 6 7 ls -lh-rw-r--r-- 1 root root 369 May 16 14:05 ca.cfg -rw-r--r-- 1 root root 1.4K May 16 14:05 ca.crt -rw------- 1 root root 1.7K May 16 14:05 ca.key -rw-r--r-- 1 root root 1.1K May 16 14:05 cert.csr -rw-r--r-- 1 root root 1.5K May 16 14:05 tls.crt -rw------- 1 root root 1.7K May 16 14:05 tls.key
挂载内部通信证书 部署/升级步骤与前文一致,但所有 NeuVector 容器(All-in-One、Enforcer、Scanner)都需要额外挂载内部通信证书。
1 2 3 -v /<your_path>/ca.crt:/etc/neuvector/certs/internal/ca.cert -v /<your_path>/tls.crt:/etc/neuvector/certs/internal/cert.pem -v /<your_path>/tls.key:/etc/neuvector/certs/internal/cert.key
例如:
1 2 3 4 5 6 docker run -d --name allinone \ ... -v /<your_path>/ca.crt:/etc/neuvector/certs/internal/ca.cert \ -v /<your_path>/tls.crt:/etc/neuvector/certs/internal/cert.pem \ -v /<your_path>/tls.key:/etc/neuvector/certs/internal/cert.key \ neuvector/allinone:5.4.9