Установка и настройка компонентов на узлах

06 октября 2026

ID 320881

Для работы оркестратора установите и настройте MongoDB, Redis, Redis Sentinel и контейнеры оркестратора. Перед запуском контейнеров создайте Docker-сеть на всех узлах.

MongoDB

Для использования MongoDB необходимо включить у CPU расширение системы команд AVX. Для этого при развертывании ВМ задайте режим CPU host-passthrough, если для развертывания вы используете KVM.

Для работы оркестратора соберите Docker-контейнер MongoDB из архива MongoDB, входящего в комплект поставки Kaspersky NGFW.

Все действия по сборке Docker-контейнера MongoDB выполняются на узле Node_1.

Чтобы установить и настроить MongoDB, выполните следующие команды:

  1. Создайте Docker volume на всех узлах:

    docker network create \

    --driver=bridge \

    --subnet=10.11.11.0/24 \

    --gateway=10.11.11.1 \

    --opt com.docker.network.bridge.name=knaas_aio_int \

    knaas_aio_int

  2. Создайте директорию для файлов MongoDB и подготовьте файлы, необходимые для сборки контейнера:

    mkdir mongo

    cd mongo

    cp /tmp/mongo_5.0.32-r7.crt*.tar.gz .

    tar xzf mongo_5.0.32-r7.crt*.tar.gz

    mv mongo_5.0*/bin .

    rm -rf mongo_5.0*

  3. Задайте переменную среды:

    Если вы выполняете этот шаг на Astra Linux, выполните команду:

    export BASE_IMAGE=registry.astralinux.ru/library/astra/ubi18:1.8.3

    Если вы выполняете этот шаг на Ubuntu, выполните команду:

    export BASE_IMAGE=ubuntu:22.04

  4. Создайте файл Dockerfile:

    cat > Dockerfile <<EOF

    FROM $BASE_IMAGE

    WORKDIR /

    RUN apt-get update && apt-get install -y libcurl4 && rm -rf /var/lib/apt/lists/*

    RUN groupadd --system mongodb && useradd --system --no-create-home -g mongodb mongodb

    RUN mkdir -p /home/mongodb && chown mongodb:mongodb /home/mongodb

    RUN mkdir -p /var/lib/mongodb && mkdir -p /var/log/mongodb && chown -R mongodb:mongodb /var/lib/mongodb /var/log/mongodb

    COPY bin/ /bin

    RUN mkdir -p /data/db && chown -R mongodb:mongodb /data/db

    USER mongodb

    EXPOSE 27017

    CMD ["mongod", "--bind_ip_all", "--logpath", "/var/log/mongodb/mongod.log", "--dbpath", "/var/lib/mongodb"]

    EOF

  5. Соберите Docker-контейнер MongoDB:

    docker build -t mongo:5.0.32-knbe-custom .

  6. Выгрузите собранный Docker-контейнер MongoDB в tar-архив:

    docker save --output mongo_5.0.32-knbe-custom.tar mongo:5.0.32-knbe-custom

  7. Скопируйте архив на узлы Node_2 и Node_3:

    scp mongo_5.0.32-knbe-custom.tar $NODE_2:/tmp

    scp mongo_5.0.32-knbe-custom.tar $NODE_3:/tmp

  8. На узлах Node_2 и Node_3 загрузите Docker-контейнер MongoDB:

    docker load -i /tmp/mongo_5.0.32-knbe-custom.tar

  9. Настройте набор репликации (replica set). Для этого:
    1. Инициируйте replica set на узле Node_1:

      docker exec -i mongo-1 mongosh --tls \

      --tlsCertificateKeyFile /ssl/certs/mongo/combined.pem \

      --tlsCAFile /ssl/certs/ca/cert.pem <<EOF

      rs.initiate({

      _id: 'knaas',

      version: 1,

      members: [

      {_id: 0, host: '$NODE_1:27017', priority: 2},

      {_id: 1, host: '$NODE_2:27017', priority: 1},

      {_id: 2, host: '$NODE_3:27017', arbiterOnly: true}

      ]

      })

      EOF

    2. На узле Node_1 добавьте в БД пользователя admin:

      docker exec -i mongo-1 mongosh --tls \

      --tlsCertificateKeyFile /ssl/certs/mongo/combined.pem \

      --tlsCAFile /ssl/certs/ca/cert.pem <<EOF

      db.getSiblingDB("admin").createUser({

      user:"admin",

      pwd:"$MONGO_ADMIN_PASS",

      roles:[{

      role:"userAdminAnyDatabase",

      db:"admin"

      }]

      })

      EOF

    3. На узле Node_1 добавьте в БД пользователя knaas:

      docker exec -i mongo-1 mongosh --tls \

      --tlsCertificateKeyFile /ssl/certs/mongo/combined.pem \

      --tlsCAFile /ssl/certs/ca/cert.pem <<EOF

      db.getSiblingDB("admin").auth("admin","$MONGO_ADMIN_PASS");

      db.getSiblingDB("knaas").createUser({

      user:"knaas",

      pwd:"$MONGO_KNAAS_PASS",

      roles:["readWrite"]

      })

      EOF

  10. Настройте защиту MongoDB:
    1. Добавьте правило разрешения на узлы Node_1, Node_2 и Node_3:

      iptables -A INPUT -p tcp -s <IP-адрес узла> --dport 27017 -j ACCEPT

    2. Добавьте правило блокировки для остальных обращений к узлам:

      iptables -A INPUT -p tcp --dport 27017 -j DROP

    3. Сохраните правила:

      apt install iptables-persistent

      netfilter-persistent save

  11. Создайте Docker volume на всех узлах:

    docker volume create --name orc_dbs_data

  12. Создайте и запустите контейнер на узле Node_1:

    docker run -d --name=mongo-1 \

    --hostname=mongo-1 \

    --volume orc_dbs_data:/data/db \

    --volume $HOME/ssl/ca/certificate.pem:/ssl/certs/ca/cert.pem:ro \

    --volume $HOME/ssl/mongo/combined.pem:/ssl/certs/mongo/combined.pem:ro \

    --env=TZ=Europe/Moscow \

    --network=knaas_aio_int \

    -p 27017:27017 \

    --restart=unless-stopped \

    --runtime=runc \

    mongo:5.0.32-knbe-custom \

    mongod --bind_ip_all --replSet knaas --tlsMode requireTLS --tlsCertificateKeyFile /ssl/certs/mongo/combined.pem --tlsCAFile /ssl/certs/ca/cert.pem --tlsDisabledProtocols TLS1_0,TLS1_1

  13. Создайте и запустите контейнер на узле Node_2:

    docker run -d --name=mongo-2 \

    --hostname=mongo-2 \

    --volume orc_dbs_data:/data/db \

    --volume $HOME/ssl/ca/certificate.pem:/ssl/certs/ca/cert.pem:ro \

    --volume $HOME/ssl/mongo/combined.pem:/ssl/certs/mongo/combined.pem:ro \

    --env=TZ=Europe/Moscow \

    --network=knaas_aio_int \

    -p 27017:27017 \

    --restart=unless-stopped \

    --runtime=runc \

    mongo:5.0.32-knbe-custom \

    mongod --bind_ip_all --replSet knaas --tlsMode requireTLS --tlsCertificateKeyFile /ssl/certs/mongo/combined.pem --tlsCAFile /ssl/certs/ca/cert.pem --tlsDisabledProtocols TLS1_0,TLS1_1

  14. Создайте и запустите контейнер на узле Node_3:

    docker run -d --name=mongo-3 \

    --hostname=mongo-3 \

    --volume orc_dbs_data:/data/db \

    --volume $HOME/ssl/ca/certificate.pem:/ssl/certs/ca/cert.pem:ro \

    --volume $HOME/ssl/mongo/combined.pem:/ssl/certs/mongo/combined.pem:ro \

    --env=TZ=Europe/Moscow \

    --network=knaas_aio_int \

    -p 27017:27017 \

    --restart=unless-stopped \

    --runtime=runc \

    mongo:5.0.32-knbe-custom \

    mongod --bind_ip_all --replSet knaas --tlsMode requireTLS --tlsCertificateKeyFile /ssl/certs/mongo/combined.pem --tlsCAFile /ssl/certs/ca/cert.pem --tlsDisabledProtocols TLS1_0,TLS1_1

MongoDB будет настроен.

Redis

Для Ubuntu 22.04 используйте образ redis:6.2.20 вместо registry.astralinux.ru/library/astra/ubi18-redis7015:1.8.3.

Чтобы установить и настроить Redis, выполните следующие команды:

  1. Создайте том Docker volume на узлах Node_1 и Node_2:

    docker volume create --name redis_data

  2. Задайте переменную среды на всех узлах:

    Если вы выполняете этот шаг на Astra Linux, выполните команды:

    export REDIS_IMAGE=registry.astralinux.ru/library/astra/ubi18-redis7015:1.8.3

    Если вы выполняете этот шаг на Ubuntu, выполните команды:

    export REDIS_IMAGE=redis:6.2.20

  3. Запустите контейнер на узле Node_1:

    docker run -d \

    --name redis-master \

    -p 6379:6379 \

    --network=knaas_aio_int \

    --restart=unless-stopped \

    --volume redis_data:/data \

    --volume $HOME/ssl/ca/certificate.pem:/ssl/certs/ca/ca.pem:ro \

    --volume $HOME/ssl/redis/cert.pem:/ssl/certs/redis/cert.pem:ro \

    --volume $HOME/ssl/redis/cert.key:/ssl/keys/redis/key.pem:ro \

    $REDIS_IMAGE \

    redis-server \

    --port 0 \

    --bind 0.0.0.0 \

    --protected-mode no \

    --tls-port 6379 \

    --tls-replication yes \

    --tls-cert-file /ssl/certs/redis/cert.pem \

    --tls-key-file /ssl/keys/redis/key.pem \

    --tls-ca-cert-file /ssl/certs/ca/ca.pem

  4. Запустите контейнер на узле Node_2:

    docker run -d \

    --name redis-replica \

    -p 6379:6379 \

    --network=knaas_aio_int \

    --restart=unless-stopped \

    --volume redis_data:/data \

    --volume $HOME/ssl/ca/certificate.pem:/ssl/certs/ca/ca.pem:ro \

    --volume $HOME/ssl/redis/cert.pem:/ssl/certs/redis/cert.pem:ro \

    --volume $HOME/ssl/redis/cert.key:/ssl/keys/redis/key.pem:ro \

    $REDIS_IMAGE \

    redis-server \

    --port 0 \

    --bind 0.0.0.0 \

    --protected-mode no \

    --tls-port 6379 \

    --tls-replication yes \

    --tls-cert-file /ssl/certs/redis/cert.pem \

    --tls-key-file /ssl/keys/redis/key.pem \

    --tls-ca-cert-file /ssl/certs/ca/ca.pem \

    --replicaof $NODE_1 6379

Redis будет настроен

Redis Sentinel

Для Ubuntu 22.04 используйте образ redis:6.2.20 вместо registry.astralinux.ru/library/astra/ubi18-redis7015:1.8.3.

Чтобы установить и настроить Redis Sentinel, выполните следующие команды:

  1. Создайте том Docker volume на всех узлах:

    docker volume create --name redis_sentinel_data

  2. Создайте и запустите контейнер на узле Node_1:

    docker run -d \

    --name redis-sentinel-1 \

    --volume $HOME/ssl/ca/certificate.pem:/ssl/certs/ca/ca.pem:ro \

    --volume $HOME/ssl/redis-sentinel/cert.pem:/ssl/certs/redis/cert.pem:ro \

    --volume $HOME/ssl/redis-sentinel/cert.key:/ssl/keys/redis/key.pem:ro \

    -p 26379:26379 \

    --network=knaas_aio_int \

    --restart=unless-stopped \

    $REDIS_IMAGE \

    sh -c "cat > /sentinel.conf <<EOF

    port 0

    bind 0.0.0.0

    protected-mode no

    tls-port 26379

    tls-cert-file /ssl/certs/redis/cert.pem

    tls-key-file /ssl/keys/redis/key.pem

    tls-ca-cert-file /ssl/certs/ca/ca.pem

    tls-auth-clients optional

    tls-replication yes

    tls-cluster yes

    sentinel monitor mymaster $NODE_1 6379 2

    sentinel down-after-milliseconds mymaster 5000

    sentinel failover-timeout mymaster 60000

    sentinel parallel-syncs mymaster 1

    sentinel announce-ip $NODE_1

    sentinel announce-port 26379

    EOF

    redis-server /sentinel.conf --sentinel"

  3. Создайте и запустите контейнер на узле Node_2:

    docker run -d \

    --name redis-sentinel-2 \

    --volume $HOME/ssl/ca/certificate.pem:/ssl/certs/ca/ca.pem:ro \

    --volume $HOME/ssl/redis-sentinel/cert.pem:/ssl/certs/redis/cert.pem:ro \

    --volume $HOME/ssl/redis-sentinel/cert.key:/ssl/keys/redis/key.pem:ro \

    -p 26379:26379 \

    --network=knaas_aio_int \

    --restart=unless-stopped \

    $REDIS_IMAGE \

    sh -c "cat > /sentinel.conf <<EOF

    port 0

    bind 0.0.0.0

    protected-mode no

    tls-port 26379

    tls-cert-file /ssl/certs/redis/cert.pem

    tls-key-file /ssl/keys/redis/key.pem

    tls-ca-cert-file /ssl/certs/ca/ca.pem

    tls-auth-clients optional

    tls-replication yes

    tls-cluster yes

    sentinel monitor mymaster $NODE_1 6379 2

    sentinel down-after-milliseconds mymaster 5000

    sentinel failover-timeout mymaster 60000

    sentinel parallel-syncs mymaster 1

    sentinel announce-ip $NODE_2

    sentinel announce-port 26379

    EOF

    redis-server /sentinel.conf --sentinel"

  4. Создайте и запустите контейнер на узле Node_3:

    docker run -d \

    --name redis-sentinel-3 \

    --volume $HOME/ssl/ca/certificate.pem:/ssl/certs/ca/ca.pem:ro \

    --volume $HOME/ssl/redis-sentinel/cert.pem:/ssl/certs/redis/cert.pem:ro \

    --volume $HOME/ssl/redis-sentinel/cert.key:/ssl/keys/redis/key.pem:ro \

    -p 26379:26379 \

    --network=knaas_aio_int \

    --restart=unless-stopped \

    $REDIS_IMAGE \

    sh -c "cat > /sentinel.conf <<EOF

    port 0

    bind 0.0.0.0

    protected-mode no

    tls-port 26379

    tls-cert-file /ssl/certs/redis/cert.pem

    tls-key-file /ssl/keys/redis/key.pem

    tls-ca-cert-file /ssl/certs/ca/ca.pem

    tls-auth-clients optional

    tls-replication yes

    tls-cluster yes

    sentinel monitor mymaster $NODE_1 6379 2

    sentinel down-after-milliseconds mymaster 5000

    sentinel failover-timeout mymaster 60000

    sentinel parallel-syncs mymaster 1

    sentinel announce-ip $NODE_3

    sentinel announce-port 26379

    EOF

    redis-server /sentinel.conf --sentinel"

Redis Sentinel будет настроен.

Веб-сервис оркестратора

Чтобы установить и настроить компоненты, выполните следующие команды:

  1. Перенесите образ контейнера оркестратора из комплекта поставки на узлы Node_1 и Node_2.
  2. Загрузите образ контейнера в Docker engine:

    docker load -i "${ORC_CONTAINER_NAME//:/-}.tgz"

  3. Создайте том Docker volume на узлах Node_1 и Node_2:

    docker volume create --name orc_data

  4. Создайте и запустите контейнер на узле Node_1:

    docker run -d --name=orc-1 \

    --hostname=orc-1 \

    --volume $HOME/ssl/ca/certificate.pem:/ssl/certs/ca/cert.pem:ro \

    --volume $HOME/ssl/ca/certificate.key:/ssl/keys/ca/key.pem:ro \

    --volume $HOME/ssl/orc/trustStore.p12:/ssl/certs/orc/trustStore.p12:ro \

    --volume $HOME/ssl/orc/keyStore.p12:/ssl/certs/orc/keyStore.p12:ro \

    --volume $HOME/ssl/orc/cert.pem:/ssl/certs/orc/cert.pem:ro \

    --volume $HOME/ssl/orc/key.pem:/ssl/keys/orc/key.pem:ro \

    --volume orc_data:/data \

    -p 8080:8080 \

    --env=TZ=Europe/Moscow \

    --env=KNAAS_EULA_AGREED=yes \

    --env="JAVA_OPTS=-Xms2048m -Xmx3560m -Dspring.data.mongodb.database=knaas -Dorc.security.encryption.password=$ORC_ENC_PASS -Dspring.data.mongodb.uri=mongodb://knaas:$MONGO_KNAAS_PASS@$NODE_1:27017,$NODE_2:27017,$NODE_3:27017/knaas?replicaSet=knaas&tls=true -Dspring.redis.redisson.sentinel-servers-config.subscription-mode=master -Dspring.redis.redisson.sentinel-servers-config.master-name=mymaster -Dspring.redis.redisson.sentinel-servers-config.read-mode=MASTER -Dspring.redis.redisson.sentinel-servers-config.add-sentinel-address=rediss://$NODE_1:26379,rediss://$NODE_2:26379,rediss://$NODE_3:26379 -Dspring.redis.redisson.sentinel-servers-config.ssl-truststore=file:///ssl/certs/orc/trustStore.p12 -Dspring.redis.redisson.sentinel-servers-config.ssl-truststore-password=$ORC_KEY_PASS -Dspring.redis.redisson.sentinel-servers-config.ssl-keystore=file:///ssl/certs/orc/keyStore.p12 -Dspring.redis.redisson.sentinel-servers-config.ssl-keystore-password=$ORC_KEY_PASS -Dorc.openflow.tls.ca-private.certificate.path=/ssl/keys/ca/key.pem -Dorc.openflow.tls.ca-public.certificate.path=/ssl/certs/ca/cert.pem -Dgrpc.tls.certificate.path=/ssl/certs/orc/cert.pem -Dgrpc.tls.private.key.path=/ssl/keys/orc/key.pem -Dgrpc.tls.ca.certificate.path=/ssl/certs/ca/cert.pem -Dserver.ssl.enabled=true -Dserver.ssl.trust-store=/ssl/certs/orc/trustStore.p12 -Dserver.ssl.trust-store-password=$ORC_KEY_PASS -Dserver.ssl.trust-store-type=pkcs12 -Dserver.ssl.key-store=/ssl/certs/orc/keyStore.p12 -Dserver.ssl.key-store-password=$ORC_KEY_PASS -Dserver.ssl.key-store-type=pkcs12 -Dorc.sdn.grpc.timeout=60s" \

    --network=knaas_aio_int \

    --workdir=/opt/b4n/orc \

    --restart=unless-stopped \

    $ORC_CONTAINER_NAME

  5. Создайте и запустите контейнер на узле Node_2:

    docker run -d --name=orc-2 \

    --hostname=orc-2 \

    --volume $HOME/ssl/ca/certificate.pem:/ssl/certs/ca/cert.pem:ro \

    --volume $HOME/ssl/ca/certificate.key:/ssl/keys/ca/key.pem:ro \

    --volume $HOME/ssl/orc/trustStore.p12:/ssl/certs/orc/trustStore.p12:ro \

    --volume $HOME/ssl/orc/keyStore.p12:/ssl/certs/orc/keyStore.p12:ro \

    --volume $HOME/ssl/orc/cert.pem:/ssl/certs/orc/cert.pem:ro \

    --volume $HOME/ssl/orc/key.pem:/ssl/keys/orc/key.pem:ro \

    --volume orc_data:/data \

    -p 8080:8080 \

    --env=TZ=Europe/Moscow \

    --env=KNAAS_EULA_AGREED=yes \

    --env="JAVA_OPTS=-Xms2048m -Xmx3560m -Dspring.data.mongodb.database=knaas -Dorc.security.encryption.password=$ORC_ENC_PASS -Dspring.data.mongodb.uri=mongodb://knaas:$MONGO_KNAAS_PASS@$NODE_1:27017,$NODE_2:27017,$NODE_3:27017/knaas?replicaSet=knaas&tls=true -Dspring.redis.redisson.sentinel-servers-config.subscription-mode=master -Dspring.redis.redisson.sentinel-servers-config.master-name=mymaster -Dspring.redis.redisson.sentinel-servers-config.read-mode=MASTER -Dspring.redis.redisson.sentinel-servers-config.add-sentinel-address=rediss://$NODE_1:26379,rediss://$NODE_2:26379,rediss://$NODE_3:26379 -Dspring.redis.redisson.sentinel-servers-config.ssl-truststore=file:///ssl/certs/orc/trustStore.p12 -Dspring.redis.redisson.sentinel-servers-config.ssl-truststore-password=$ORC_KEY_PASS -Dspring.redis.redisson.sentinel-servers-config.ssl-keystore=file:///ssl/certs/orc/keyStore.p12 -Dspring.redis.redisson.sentinel-servers-config.ssl-keystore-password=$ORC_KEY_PASS -Dorc.openflow.tls.ca-private.certificate.path=/ssl/keys/ca/key.pem -Dorc.openflow.tls.ca-public.certificate.path=/ssl/certs/ca/cert.pem -Dgrpc.tls.certificate.path=/ssl/certs/orc/cert.pem -Dgrpc.tls.private.key.path=/ssl/keys/orc/key.pem -Dgrpc.tls.ca.certificate.path=/ssl/certs/ca/cert.pem -Dserver.ssl.enabled=true -Dserver.ssl.trust-store=/ssl/certs/orc/trustStore.p12 -Dserver.ssl.trust-store-password=$ORC_KEY_PASS -Dserver.ssl.trust-store-type=pkcs12 -Dserver.ssl.key-store=/ssl/certs/orc/keyStore.p12 -Dserver.ssl.key-store-password=$ORC_KEY_PASS -Dserver.ssl.key-store-type=pkcs12 -Dorc.sdn.grpc.timeout=60s" \

    --network=knaas_aio_int \

    --workdir=/opt/b4n/orc \

    --restart=unless-stopped \

    $ORC_CONTAINER_NAME

Рабочая среда оркестратора будет сформирована.

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!