Docker et Mirantis Kubernetes Engine
Déploiement Kubernetes sur Mirantis Kubernetes Engine
Suivez les instructions dans la section Kubernetes.
|
SUSE® Security ne prend pas en charge les clusters Kubernetes / Swarm mixtes. |
Déployer des conteneurs SUSE® Security en utilisant Docker natif ou UCP/Swarm
Notez que le déploiement Docker natif sur Mirantis Kubernetes Engine utilisant Swarm NE prend PAS en charge le déploiement de services avec des conteneurs en mode privilégié, ou avec des capacités seccomp ajoutées. Pour déployer dans cet environnement, vous devez utiliser Docker Compose ou Run pour déployer les SUSE® Security conteneurs. Vous pouvez utiliser le déploiement sur hôte distant (docker-compose -H HOST) pour faciliter cette tâche.
Voici les fichiers de configuration Docker Compose d’exemple. Notez que l’utilisation de Docker natif ne prend pas en charge le déploiement de l’enforcer sur le même nœud que le contrôleur, nécessitant l’utilisation du conteneur All-in-One si les fonctions de contrôleur et d’enforcer sont souhaitées sur un nœud.
| La variable d’environnement NV_PLATFORM_INFO=platform=Docker est utilisée pour notifier SUSE® Security que la plateforme est Docker/Swarm, même s’il peut y avoir des conteneurs Kubernetes inutilisés détectés par SUSE® Security sur un déploiement Docker EE. Aussi, pour pouvoir les voir dans l’activité réseau → Vue → Afficher le système, ajoutez la variable d’environnement pour l’enforcer NV_SYSTEM_GROUPS. |
Déployer All-in-One pour une haute disponibilité
Pour la haute disponibilité dans des environnements Docker natifs ou EE en production, déployez le conteneur All-in-One sur les trois premiers hôtes de production. Chaque All-in-One doit pointer vers les adresses IP de tous les hôtes All-in-One. Par exemple, trois conteneurs All-in-One sont le minimum pour la haute disponibilité, et le CLUSTER_JOIN_ADDR doit lister les trois adresses IP séparées par des virgules. Des All-in-One supplémentaires peuvent être déployés en nombres impairs, par exemple 5, 7. Déployez l’enforcer sur les hôtes restants du cluster, dans n’importe quel ordre.
Déployez All-in-One en utilisant docker-compose (mode privilégié)
Voici un exemple de fichier Docker Compose pour déployer le conteneur All-in-One sur le premier nœud. Parce que le conteneur All-in-One contient un module enforcer, les conteneurs d’application sur le même nœud peuvent être sécurisés. Les déploiements greenfield et brownfield sont tous deux pris en charge.
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
La variable d’environnement la plus importante est le CLUSTER_JOIN_ADDR. C’est l’adresse IP à laquelle d’autres enforcers se connectent. Normalement, elle doit être définie sur l’adresse IP du nœud où le conteneur All-in-One est en cours d’exécution.
Les ports 18300 et 18301 sont les ports par défaut pour la communication du cluster. Ils doivent être identiques pour tous les contrôleurs et enforcers dans le cluster. Veuillez vous référer à la section "Détails de Docker Compose" pour savoir comment changer les ports par défaut.
|
Pour exposer l’API REST dans l’All-in-One, ajoutez le mappage de ports pour 10443, par exemple 10443:10443. |
Ajoutez un conteneur enforcer en utilisant Docker Compose (mode privilégié)
Voici un exemple de fichier Docker Compose pour rejoindre un enforcer dans le cluster. Les déploiements greenfield et brownfield sont tous deux pris en charge.
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
La variable d’environnement la plus importante est CLUSTER_JOIN_ADDR. Pour les enforcers, remplacez <controller_node_ip> par l’adresse IP du nœud du contrôleur. Typiquement, CLUSTER_JOIN_ADDR dans le fichier Docker Compose du contrôleur/All-in-One et dans le fichier Docker Compose de l’enforcer ont la même valeur.
Déployez le SUSE® Security conteneur Scanner
À partir de SUSE® Security 4.0+, un conteneur scanner séparé doit être déployé pour effectuer une analyse de vulnérabilité. Important : Utilisez toujours le tag :latest lors du tirage et de l’exécution de l’image du scanner pour garantir que la dernière base de données CVE est déployée.
Exemple de docker run pour déployer le scanner sur le même hôte que le contrôleur.
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
Et exemple 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
Pour déployer le scanner sur un hôte différent de celui du contrôleur, ajoutez la variable d’environnement CLUSTER_ADVERTISED_ADDR afin que le contrôleur puisse atteindre le 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
Pour déployer plusieurs scanners sur le même hôte que le contrôleur, supprimez le mappage de port et la variable d’environnement CLUSTER_ADVERTISED_ADDR.
docker run -itd --name s1 -e CLUSTER_JOIN_ADDR=controller_node_ip neuvector/scanner:latest
Où s1 est le scanner 1 (utilisez s2, s3, etc. pour chaque scanner supplémentaire).
Pour déployer un scanner autonome (sans contrôleur/tout-en-un), veuillez consulter la section Scanners parallèles et autonomes.
Pour mettre à jour le scanner afin d’obtenir les dernières mises à jour de la base de données CVE depuis SUSE® Security, créez une tâche cron pour arrêter et redémarrer le scanner, en tirant la dernière version. Voir cette section pour plus de détails.
Déploiement sans utiliser le mode privilégié
Pour certaines configurations de plateforme, il est possible de déployer les SUSE® Security conteneurs sans qu’ils aient besoin de s’exécuter en mode privilégié. La configuration doit prendre en charge la possibilité d’ajouter des capacités et de définir le profil apparmor. Notez que Docker DataCenter/UCP et Swarm ne prennent actuellement pas en charge cela, mais il est toujours possible de déployer SUSE® Security manuellement en utilisant Docker Compose ou Run.
Déployez All-in-One (SANS mode privilégié) avec 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
Déployez l’enforcer (SANS mode privilégié) avec 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
Déployez All-in-One (mode privilégié) avec docker run
Vous pouvez utiliser docker run au lieu de Docker Compose pour déployer. Voici des exemples.
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>
Déployez l’enforcer (mode privilégié) avec 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>
Déployez All-in-One (SANS mode privilégié) avec docker run
Vous pouvez utiliser docker run au lieu de Docker Compose pour déployer. Voici des exemples.
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>
Déployez l’enforcer (SANS mode privilégié) avec 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>
Déployer des SUSE® Security composants séparément sur différents hôtes
Si vous prévoyez de dédier un hôte Docker à un Contrôleur et/ou un Gestionnaire (sans enforcer), ces conteneurs peuvent être déployés individuellement au lieu de l’All-in-One. Notez que Docker ne prend pas en charge le déploiement de l’enforcer sur le même nœud que le contrôleur en tant que composants séparés, nécessitant l’utilisation du conteneur All-in-One si les fonctions de contrôleur et d’enforcer sont souhaitées sur un nœud.
Fichier Docker Compose du Contrôleur (remplacez [controller IP] par l’IP du premier nœud contrôleur)
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
La commande Docker run peut également être utilisée, par exemple
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>
Fichier Docker Compose du Gestionnaire (remplacez [controller IP] par l’IP du nœud contrôleur auquel se connecter). Le service HRM de Docker UCP utilise le port par défaut 8443 qui entre en conflit avec le SUSE® Security port console. Si vous utilisez le port HRM par défaut, changez alors le SUSE® Security mappage de port dans l’exemple ci-dessous vers un autre port, par exemple 9443:8443 pour le conteneur gestionnaire comme indiqué ci-dessous.
manager:
image: neuvector/manager:<version>
container_name: nvmanager
environment:
- CTRL_SERVER_IP=[controller IP]
ports:
- 9443:8443
Le fichier Docker Compose pour l’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
Surveillance et redémarrage de SUSE® Security
Puisque les SUSE® Security conteneurs ne sont pas déployés en tant que service UCP/Swarm, ils ne sont pas automatiquement démarrés/redémarrés sur les nœuds. Vous devez configurer des alertes via votre système SIEM pour les SUSE® Security événements SYSLOG ou via DataCenter pour détecter si un SUSE® Security conteneur ne fonctionne pas.
Déploiement sans mode privilégié
En général, vous devrez remplacer le paramètre privilégié par :
cap_add:
- SYS_ADMIN
- NET_ADMIN
- SYS_PTRACE
- IPC_LOCK
security_opt:
- apparmor=unconfined
- seccomp=unconfined
- label=disable
La syntaxe ci-dessus est pour Docker EE v17.06.0+. Les versions antérieures utilisent : au lieu de =, par exemple apparmor:unconfined.
Mises à jour Docker Native
|
Utilisez toujours le tag |
docker stop scanner
docker rm <scanner id>
docker pull neuvector/scanner:latest
<docker run command from below>
|
Pour Docker Compose
Exemple de docker run
Et exemple de Docker Compose
|