Установка и настройка компонентов на узлах
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, выполните следующие команды:
- Создайте 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
- Создайте директорию для файлов 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*
- Задайте переменную среды:
Если вы выполняете этот шаг на Astra Linux, выполните команду:
export BASE_IMAGE=registry.astralinux.ru/library/astra/ubi18:1.8.3
Если вы выполняете этот шаг на Ubuntu, выполните команду:
export BASE_IMAGE=ubuntu:22.04
- Создайте файл
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
- Соберите Docker-контейнер MongoDB:
docker build -t mongo:5.0.32-knbe-custom .
- Выгрузите собранный Docker-контейнер MongoDB в tar-архив:
docker save --output mongo_5.0.32-knbe-custom.tar mongo:5.0.32-knbe-custom
- Скопируйте архив на узлы 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
- На узлах Node_2 и Node_3 загрузите Docker-контейнер MongoDB:
docker load -i /tmp/mongo_5.0.32-knbe-custom.tar
- Настройте набор репликации (replica set). Для этого:
- Инициируйте replica set на узле Node_1:
docker exec -i mongo-1 mongosh --tls \--tlsCertificateKeyFile /ssl/certs/mongo/combined.pem \--tlsCAFile /ssl/certs/ca/cert.pem <<EOFrs.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 - На узле 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
- На узле 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
- Инициируйте replica set на узле Node_1:
- Настройте защиту MongoDB:
- Добавьте правило разрешения на узлы Node_1, Node_2 и Node_3:
iptables -A INPUT -p tcp -s
<IP-адрес узла>--dport 27017 -j ACCEPT - Добавьте правило блокировки для остальных обращений к узлам:
iptables -A INPUT -p tcp --dport 27017 -j DROP
- Сохраните правила:
apt install iptables-persistent
netfilter-persistent save
- Добавьте правило разрешения на узлы Node_1, Node_2 и Node_3:
- Создайте Docker volume на всех узлах:
docker volume create --name orc_dbs_data
- Создайте и запустите контейнер на узле 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
- Создайте и запустите контейнер на узле 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
- Создайте и запустите контейнер на узле 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, выполните следующие команды:
- Создайте том Docker volume на узлах Node_1 и Node_2:
docker volume create --name redis_data
- Задайте переменную среды на всех узлах:
Если вы выполняете этот шаг на Astra Linux, выполните команды:
export REDIS_IMAGE=registry.astralinux.ru/library/astra/ubi18-redis7015:1.8.3
Если вы выполняете этот шаг на Ubuntu, выполните команды:
export REDIS_IMAGE=redis:6.2.20
- Запустите контейнер на узле 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
- Запустите контейнер на узле 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, выполните следующие команды:
- Создайте том Docker volume на всех узлах:
docker volume create --name redis_sentinel_data
- Создайте и запустите контейнер на узле 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"
- Создайте и запустите контейнер на узле 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"
- Создайте и запустите контейнер на узле 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 будет настроен.
Веб-сервис оркестратора
Чтобы установить и настроить компоненты, выполните следующие команды:
- Перенесите образ контейнера оркестратора из комплекта поставки на узлы Node_1 и Node_2.
- Загрузите образ контейнера в Docker engine:
docker load -i "${ORC_CONTAINER_NAME//:/-}.tgz"
- Создайте том Docker volume на узлах Node_1 и Node_2:
docker volume create --name orc_data
- Создайте и запустите контейнер на узле 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
- Создайте и запустите контейнер на узле 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
Рабочая среда оркестратора будет сформирована.