Docker & Mirantis Kubernetes Engine

Kubernetes-Bereitstellung auf Mirantis Kubernetes Engine

Befolgen Sie die Anweisungen im Kubernetes-Abschnitt.

SUSE® Security unterstützt keine gemischten Kubernetes / Swarm-Cluster.

Bereitstellung von SUSE® Security Containern mit Docker Native oder UCP/Swarm

Bitte beachten Sie, dass die native Docker-Bereitstellung auf Mirantis Kubernetes Engine mit Swarm die Bereitstellung von Diensten mit Containern im privilegierten Modus oder mit hinzugefügten Seccomp-Funktionen NICHT unterstützt. Um in dieser Umgebung bereitzustellen, müssen Sie Docker Compose oder Run verwenden, um die SUSE® Security Container bereitzustellen. Sie können die Bereitstellung auf dem Remote-Host (docker-compose -H HOST) verwenden, um diese Aufgabe zu erleichtern.

Hier sind die Beispielkonfigurationsdateien für Docker Compose. Bitte beachten Sie, dass die Verwendung von Docker Native die Bereitstellung des Enforcers auf demselben Knoten wie den Controller nicht unterstützt, was die Verwendung des All-in-One-Containers erforderlich macht, wenn Controller- und Enforcer-Funktionen auf einem Knoten gewünscht sind.

Die Umgebungsvariable NV_PLATFORM_INFO=platform=Docker wird verwendet, um SUSE® Security mitzuteilen, dass die Plattform Docker/Swarm ist, auch wenn möglicherweise ungenutzte Kubernetes-Container von SUSE® Security bei einer Docker EE-Bereitstellung erkannt werden. Um diese in der Network Activity → View sowie in → Show System sehen zu können, fügen Sie die Umgebungsvariable NV_SYSTEM_GROUPS für den Enforcer hinzu.

Stellen Sie All-in-One für hohe Verfügbarkeit bereit

Für HA in Produktionsumgebungen mit Docker Native oder EE, stellen Sie den All-in-One-Container auf den ersten drei Produktionshosts bereit. Jeder All-in-One sollte auf die IP-Adressen aller All-in-One-Hosts verweisen. Zum Beispiel sind drei All-in-One-Container das Minimum für HA, und die CLUSTER_JOIN_ADDR sollte die drei IP-Adressen durch Kommas getrennt auflisten. Zusätzliche HA All-in-One können in ungerader Anzahl bereitgestellt werden, z.B. 5, 7. Stellen Sie den Enforcer auf den verbleibenden Hosts im Cluster bereit, in beliebiger Reihenfolge.

Stellen Sie All-in-One mit docker-compose (privilegierter Modus) bereit.

Im Folgenden finden Sie ein Beispiel für die docker-compose-Datei, um den All-in-One-Container auf dem ersten Knoten bereitzustellen. Da der All-in-One-Container ein Enforcer-Modul enthält, können Anwendungscontainer auf demselben Knoten gesichert werden. Sowohl Greenfield- als auch Brownfield-Bereitstellungen werden unterstützt.

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

Die wichtigste Umgebungsvariable ist die CLUSTER_JOIN_ADDR. Es ist die IP-Adresse, zu der sich andere Enforcer verbinden. Normalerweise sollte sie auf die IP-Adresse des Knotens gesetzt werden, auf dem der All-in-One-Container läuft.

Port 18300 und 18301 sind Standardports für die Clusterkommunikation. Sie müssen für alle Controller und Enforcer im Cluster identisch sein. Bitte beziehen Sie sich auf den Abschnitt "Docker-compose Details", um zu erfahren, wie Sie die Standardports ändern können.

Um die REST-API im All-in-One freizugeben, fügen Sie die Portzuordnung für 10443 hinzu, zum Beispiel - 10443:10443.

Fügen Sie einen Enforcer-Container mit Docker-Compose (privilegierter Modus) hinzu.

Dies ist ein Beispiel für die Docker-Compose-Datei, um einen Enforcer in das Cluster einzufügen. Sowohl Greenfield- als auch Brownfield-Bereitstellungen werden unterstützt.

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

Die wichtigste Umgebungsvariable ist CLUSTER_JOIN_ADDR. Für Enforcer ersetzen Sie <controller_node_ip> durch die IP-Adresse des Controllers. Typischerweise haben CLUSTER_JOIN_ADDR in der Docker-Compose-Datei des Controllers/All-in-One und in der Docker-Compose-Datei des Enforcers denselben Wert.

Stellen Sie den SUSE® Security Scanner-Container bereit.

Ab SUSE® Security 4.0+ muss ein separater Scanner-Container bereitgestellt werden, um Schwachstellen zu scannen. Wichtig: Verwenden Sie immer das :latest-Tag, wenn Sie das Scanner-Image abrufen und ausführen, um sicherzustellen, dass die neueste CVE-Datenbank bereitgestellt wird.

Beispiel für docker run, um den Scanner auf demselben Host wie den Controller bereitzustellen.

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

Und Beispiel für 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

Um den Scanner auf einem anderen Host als dem Controller bereitzustellen, fügen Sie die Umgebungsvariable CLUSTER_ADVERTISED_ADDR hinzu, damit der Controller den Scanner erreichen kann.

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

Um mehrere Scanner auf demselben Host wie den Controller bereitzustellen, entfernen Sie die Portzuordnung und die Umgebungsvariable CLUSTER_ADVERTISED_ADDR.

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

Dabei ist s1 Scanner 1 (verwenden Sie s2, s3 usw. für jeden zusätzlichen Scanner).

Um einen eigenständigen Scanner (kein Controller/All-in-One) bereitzustellen, siehe bitte den Abschnitt Parallel und Standalone Scanners.

Um den Scanner zu aktualisieren, um die neuesten CVE-Datenbankaktualisierungen von SUSE® Security zu erhalten, erstellen Sie einen Cron-Daemon-Job, um den Scanner zu beenden und neu zu starten, wobei die neuesten Daten abgerufen werden. Siehe diesen Abschnitt für Details.

Bereitstellung ohne Verwendung des privilegierten Modus

Für einige Plattformkonfigurationen ist es möglich, die SUSE® Security Container bereitzustellen, ohne dass sie im privilegierten Modus ausgeführt werden müssen. Die Konfiguration muss die Möglichkeit unterstützen, Berechtigungen hinzuzufügen und das AppArmor-Profil festzulegen. Beachten Sie, dass Docker DataCenter/UCP und Swarm dies derzeit nicht unterstützen, es jedoch dennoch möglich ist, SUSE® Security manuell mit Compose oder Run bereitzustellen.

Bereitstellung All-in-One (KEIN privilegierter Modus) mit 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

Bereitstellung Enforcer (KEIN privilegierter Modus) mit 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

Bereitstellung All-in-One (privilegierter Modus) mit docker run

Sie können docker run anstelle von compose zur Bereitstellung verwenden. Hier sind Beispiele.

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>

Bereitstellung Enforcer (privilegierter Modus) mit 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>

Bereitstellung All-in-One (KEIN privilegierter Modus) mit docker run

Sie können docker run anstelle von Compose zum Bereitstellen verwenden. Hier sind Beispiele.

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>

Bereitstellung Enforcer (KEIN privilegierter Modus) mit 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>

Separater SUSE® Security Komponenten auf verschiedenen Hosts bereitstellen

Wenn Sie planen, einen Docker-Host einem Controller und/oder Manager (kein Enforcer) zu widmen, können diese Container einzeln anstelle des All-in-One bereitgestellt werden. Beachten Sie, dass Docker nicht unterstützt, den Enforcer auf demselben Knoten wie den Controller als separate Komponenten bereitzustellen, was die Verwendung des All-in-One-Containers erfordert, wenn Controller- und Enforcer-Funktionen auf einem Knoten gewünscht sind.

Compose-Datei für den Controller (ersetzen Sie [Controller-IP] durch die IP des ersten Controller-Knotens)

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 kann ebenfalls verwendet werden, zum Beispiel

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-Datei für den Manager (ersetzen Sie [Controller-IP] durch die IP des Controller-Knotens, mit dem Sie sich verbinden möchten). Der Docker UCP HRM-Dienst verwendet den Standardport 8443, der mit dem SUSE® Security Konsolenport in Konflikt steht. Wenn Sie den Standard-HRM-Port verwenden, ändern Sie die SUSE® Security Portzuordnung im folgenden Beispiel auf einen anderen Port, zum Beispiel 9443:8443 für den Manager-Container, wie unten gezeigt.

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

Compose-Datei für den 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

Überwachung und Neustart von SUSE® Security

Da die SUSE® Security Container nicht als UCP/Swarm-Dienst bereitgestellt werden, werden sie auf Knoten nicht automatisch gestartet/neugestartet. Sie sollten über Ihr SIEM-System Alarme für SUSE® Security SYSLOG-Ereignisse oder über DataCenter einrichten, um zu erkennen, ob ein SUSE® Security Container nicht läuft.

Bereitstellung ohne privilegierten Modus

Im Allgemeinen müssen Sie die privilegierte Einstellung ersetzen durch:

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

Die obige Syntax gilt für Docker EE v17.06.0+. Versionen davor verwenden : anstelle von =, zum Beispiel apparmor:unconfined.

Docker Native Updates

Verwenden Sie immer das :latest Tag, wenn Sie das Scanner-Image herunterladen und ausführen, um sicherzustellen, dass die neueste CVE-Datenbank bereitgestellt wird.

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

docker rm -f <scanner id> kann auch verwendet werden, um den laufenden Scanner zu beenden und zu entfernen.

Für 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

Beispiel 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

Und Beispiel 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