Docker e Mirantis Kubernetes Engine
Implantação do Kubernetes no Mirantis Kubernetes Engine
Siga as instruções na seção Kubernetes.
|
SUSE® Security não suporta clusters mistos de Kubernetes / Swarm. |
Implante SUSE® Security Contêineres Usando Docker Nativo ou UCP/Swarm
Observe que a implantação nativa do Docker no Mirantis Kubernetes Engine usando Swarm NÃO SUPORTA a implantação de serviços com contêineres em modo privilegiado ou com capacidades seccomp adicionadas. Para implantar neste ambiente, você deve usar Docker Compose ou Run para implantar os SUSE® Security contêineres. Você pode usar a implantação em host remoto (docker-compose -H HOST) para facilitar essa tarefa.
Aqui estão os arquivos de configuração de exemplo do docker compose. Observe que usar o docker nativo não suporta implantar o enforcer no mesmo nó que o controlador, exigindo o uso do contêiner All-in-One se as funções de controlador e enforcer forem desejadas em um nó.
| A variável de ambiente NV_PLATFORM_INFO=platform=Docker é usada para notificar SUSE® Security que a plataforma é Docker/Swarm, mesmo que possam haver contêineres Kubernetes não utilizados detectados por SUSE® Security em uma implantação Docker EE. Além disso, para poder ver isso na Atividade de Rede → Visualizar → Mostrar Sistema, adicione a variável de ambiente para o Enforcer NV_SYSTEM_GROUPS. |
Implante All-in-One para alta disponibilidade
Para HA em ambientes de produção Docker nativo ou EE, implante o contêiner All-in-One nos primeiros três hosts de produção. Cada All-in-One deve apontar para os endereços IP de todos os hosts All-in-One. Por exemplo, três contêineres All-in-One é o mínimo para HA, e o CLUSTER_JOIN_ADDR deve listar os três endereços IP separados por vírgula. All-in-One adicionais para HA podem ser implantados em números ímpares, por exemplo, 5, 7. Implante o Enforcer nos hosts restantes do cluster, em qualquer um.
Implante o All-in-One usando docker-compose (modo privilegiado)
A seguir, um exemplo do arquivo docker-compose para implantar o contêiner All-in-One no primeiro nó. Como o contêiner All-in-One possui um módulo de enforcer interno, os contêineres de aplicativo no mesmo nó podem ser protegidos. Implantações tanto em greenfield quanto em brownfield são suportadas.
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
A variável de ambiente mais importante é CLUSTER_JOIN_ADDR. É o endereço IP ao qual outros enforcers se conectam. Normalmente, deve ser definido como o endereço IP do nó onde o contêiner All-in-One está em execução.
As portas 18300 e 18301 são as portas padrão para comunicação do cluster. Elas devem ser idênticas para todos os controladores e enforcers no cluster. Por favor, consulte a seção "Detalhes do Docker-compose" para saber como alterar as portas padrão.
|
Para expor a API REST no All-in-One, adicione o mapeamento de porta para 10443, por exemplo - 10443:10443. |
Adicione um contêiner enforcer usando docker-compose (modo privilegiado)
Este é um exemplo de arquivo docker-compose para adicionar um enforcer ao cluster. Implantações tanto em greenfield quanto em brownfield são suportadas.
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
A variável de ambiente mais importante é CLUSTER_JOIN_ADDR. Para enforcers, substitua <controller_node_ip> pelo endereço IP do nó do controlador. Normalmente, CLUSTER_JOIN_ADDR no arquivo docker-compose do controlador/all-in-one e no arquivo docker-compose do enforcer têm o mesmo valor.
Implante o SUSE® Security contêiner Scanner
A partir do SUSE® Security 4.0+, um contêiner scanner separado deve ser implantado para realizar a varredura de vulnerabilidades. Importante: Sempre use a tag :latest ao puxar e executar a imagem do scanner para garantir que o banco de dados CVE mais recente seja implantado.
Exemplo de docker run para implantar o scanner no mesmo host que o controlador.
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
E exemplo de 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
Para implantar o scanner em um host diferente do controlador, adicione a variável de ambiente CLUSTER_ADVERTISED_ADDR para que o controlador possa alcançar o scanner.
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
Para implantar vários scanners no mesmo host que o controlador, remova o mapeamento de porta e a variável de ambiente CLUSTER_ADVERTISED_ADDR.
docker run -itd --name s1 -e CLUSTER_JOIN_ADDR=controller_node_ip neuvector/scanner:latest
Onde s1 é o scanner 1 (use s2, s3 etc. para cada scanner adicional).
Para implantar um scanner autônomo (sem controlador/All-in-One), consulte a seção Scanners Paralelos e Autônomos.
Para atualizar o Scanner a fim de obter as últimas atualizações do banco de dados CVE de SUSE® Security, crie um trabalho cron para parar e reiniciar o scanner, puxando a versão mais recente. Veja esta seção para detalhes.
Implantação Sem Usar Modo Privilegiado
Para algumas configurações de plataforma, é possível implantar os contêineres SUSE® Security sem exigir que eles sejam executados em modo privilegiado. A configuração deve suportar a capacidade de adicionar permissões e definir o arquivo de controle do AppArmor. Observe que o Docker DataCenter/UCP e o Swarm atualmente não suportam isso, mas ainda é possível implantar SUSE® Security manualmente usando Compose ou Run.
Implante o All-in-One (SEM modo privilegiado) com docker-compose
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
Implante o enforcer (SEM modo privilegiado) com 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
Implante o All-in-One (modo privilegiado) com docker run
Você pode usar docker run em vez de compose para implantar. Aqui estão exemplos.
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>
Implante o enforcer (modo privilegiado) com 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>
Implante o All-in-One (SEM modo privilegiado) com docker run
Você pode usar docker run em vez de compose para implantar. Aqui estão exemplos.
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>
Implante o enforcer (SEM modo privilegiado) com 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>
Implante SUSE® Security Componentes Separados em Hosts Diferentes
Se planeja dedicar um host Docker a um Controlador e/ou Gerente (sem Enforcer), esses contêineres podem ser implantados individualmente em vez do All-in-One. Observe que o Docker não suporta a implantação do enforcer no mesmo nó que o controlador como componentes separados, exigindo o uso do contêiner All-in-One se as funções de controlador e enforcer forem desejadas em um nó.
O arquivo de composição do Controlador (substitua [IP do controlador] pelo IP do primeiro nó controlador)
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
O comando docker run também pode ser usado, por exemplo.
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>
O arquivo de composição do Gerente (substitua [IP do controlador] pelo IP do nó controlador ao qual se conectar). O serviço HRM do Docker UCP usa a porta padrão 8443, que conflita com a SUSE® Security porta do console. Se estiver usando a porta padrão do HRM, altere o SUSE® Security mapeamento da porta no exemplo abaixo para outra porta, por exemplo 9443:8443 para o contêiner do Manager, conforme mostrado abaixo.
manager:
image: neuvector/manager:<version>
container_name: nvmanager
environment:
- CTRL_SERVER_IP=[controller IP]
ports:
- 9443:8443
O arquivo de composição para o Enforcer:
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
Monitorando e Reiniciando SUSE® Security
Como os SUSE® Security contêineres não são implantados como um serviço UCP/Swarm, eles não são iniciados/reiniciados automaticamente nos nós. Você deve configurar alertas através do seu sistema SIEM para SUSE® Security eventos SYSLOG ou através do DataCenter para detectar se um SUSE® Security contêiner não está em execução.
Implantando Sem Modo Privilegiado
Em geral, você precisará substituir a configuração privilegiada por:
cap_add:
- SYS_ADMIN
- NET_ADMIN
- SYS_PTRACE
- IPC_LOCK
security_opt:
- apparmor=unconfined
- seccomp=unconfined
- label=disable
A sintaxe acima é para Docker EE v17.06.0+. Versões anteriores a esta usam : em vez de =, por exemplo apparmor:unconfined.
Atualizações Nativas do Docker
|
Sempre use a |
docker stop scanner
docker rm <scanner id>
docker pull neuvector/scanner:latest
<docker run command from below>
|
Para docker-compose
Exemplo de docker run
E exemplo de docker-compose
|