Настройка Nginx
Nginx является опциональным компонентом поставки с версии Закрома.Хранение 2.9.0. В данной конфигурации Nginx работает как reverse proxy для сервисов Закрома.Хранение и как точка TLS-терминации.
Для базового кластера и Single Node необходимость установки Nginx определяется целевой схемой доступа к S3 API и Admin UI. В описанном мультикластерном сценарии Nginx обязателен: он терминирует TLS для сервиса CDN и проксирует запросы в локальный HTTP endpoint сервиса.
Настройка выполняется отдельным шагом после подготовки inventory, сертификатов и переменных Закрома.Хранение.
Inventory
Добавьте узлы, на которых должен быть установлен и настроен Nginx, в группу zakroma-storage-nginx.
Пример для базового кластера:
1[zakroma-storage-nginx] 2rutherford-2 ansible_host=192.168.1.2 3rutherford-3 ansible_host=192.168.1.3 4rutherford-4 ansible_host=192.168.1.4
Переменные Zakroma-Storage
В файле inventories/<тип_инсталляции>/group_vars/zakroma-storage.yml включите использование reverse proxy для Admin UI:
1zakroma_storage_admin: 2 path: "zakroma-admin.zakroma.internal" 3 reverse_proxy: 4 enabled: true 5 port: 443
Проверьте, что в этом же файле корректно указаны домены и порты сервисов, которые используются в Nginx-конфигурации:
1zakroma_storage_base_domain: "zakroma.internal" 2 3zakroma_storage_gateway: 4 s3api_port: 8080 5 management_port: 8083
Значения должны соответствовать доменной зоне и портам конкретной инсталляции.
Переменные Nginx
Основная настройка Nginx выполняется в файле inventories/<тип_инсталляции>/group_vars/zakroma-storage-nginx.yml.
Минимально проверьте следующие параметры:
1nginx_package_name: "nginx" 2nginx_service_state: started 3nginx_service_enabled: true 4nginx_remove_default_vhost: true 5nginx_listen_ipv6: false 6 7nginx_vhosts: 8 - listen: "443 ssl" 9 filename: ps.zakroma.internal.443.conf 10 server_name: "*.ps.zakroma.internal" 11 extra_parameters: | 12 ssl_certificate /opt/certs/zakroma.crt; 13 ssl_certificate_key /opt/certs/zakroma.key; 14 location / { 15 proxy_buffering off; 16 proxy_set_header Host $http_host; 17 proxy_set_header X-Forwarded-Scheme $scheme; 18 proxy_set_header X-Forwarded-Proto $scheme; 19 proxy_set_header X-Forwarded-For $remote_addr; 20 proxy_set_header X-Real-IP $remote_addr; 21 22 proxy_pass http://127.0.1.1:{{ zakroma_storage_gateway.s3api_port }}; 23 add_header x-forwarded-path $request_uri; 24 } 25 26 - listen: "443 ssl" 27 filename: zakroma-admin.zakroma.internal.443.conf 28 server_name: "zakroma-admin.zakroma.internal" 29 extra_parameters: | 30 ssl_certificate /opt/certs/zakroma.crt; 31 ssl_certificate_key /opt/certs/zakroma.key; 32 location / { 33 proxy_set_header Host $http_host; 34 proxy_set_header X-Forwarded-Scheme $scheme; 35 proxy_set_header X-Forwarded-Proto $scheme; 36 proxy_set_header X-Forwarded-For $remote_addr; 37 proxy_set_header X-Real-IP $remote_addr; 38 39 proxy_pass http://127.0.1.1:{{ zakroma_storage_gateway.management_port }}; 40 add_header x-forwarded-path $request_uri; 41 }
Если используются другие имена доменов, пути сертификатов или порты, замените значения в server_name, filename, ssl_certificate, ssl_certificate_key и proxy_pass.
TLS-терминация CDN в мультикластере
В каждом кластере Nginx принимает запросы к zakroma-cdn.cluster-N.zakroma.internal:443 и проксирует их на локальный CDN endpoint http://127.0.0.1:8099. Поставочные файлы inventories/multicluster/cluster-N/group_vars/zakroma-storage-nginx.yml уже содержат соответствующие vhost. Пример для первого кластера:
1- listen: "443 ssl" 2 filename: zakroma-cdn.cluster-1.zakroma.internal.443.conf 3 server_name: "zakroma-cdn.cluster-1.zakroma.internal" 4 extra_parameters: | 5 ssl_certificate /opt/certs/zakroma.crt; 6 ssl_certificate_key /opt/certs/zakroma.key; 7 location ~ ^/(.*) { 8 proxy_set_header Host $http_host; 9 proxy_set_header X-Forwarded-Scheme $scheme; 10 proxy_set_header X-Forwarded-Proto $scheme; 11 proxy_set_header X-Forwarded-For $remote_addr; 12 proxy_set_header X-Real-IP $remote_addr; 13 14 proxy_pass http://127.0.0.1:8099/$1$is_args$args; 15 add_header x-forwarded-path $request_uri; 16 }
Для второго кластера замените cluster-1 на cluster-2. Сертификат должен содержать соответствующее имя zakroma-cdn.cluster-N.zakroma.internal в SAN. DNS-запись должна указывать на узлы группы zakroma-storage-nginx соответствующего кластера.
Запуск playbook
Запустите playbook установки Nginx для нужной конфигурации:
1ANSIBLE_CONFIG=ansible.cfg ansible-playbook -i inventories/base-cluster/hosts playbooks/sample-play-zakroma-storage-nginx.yml
Для мультикластера используйте inventory конкретного кластера:
1ANSIBLE_CONFIG=ansible.cfg ansible-playbook -i inventories/multicluster/cluster-1/hosts playbooks/sample-play-zakroma-storage-nginx.yml 2ANSIBLE_CONFIG=ansible.cfg ansible-playbook -i inventories/multicluster/cluster-2/hosts playbooks/sample-play-zakroma-storage-nginx.yml
После выполнения проверьте состояние сервиса:
1systemctl status nginx 2nginx -t