[ English | русский | Deutsch | español | Indonesia | English (United Kingdom) ]
Установка с ограниченным соединением¶
Многие плейбуки и роли в OpenStack-Ansible получают зависимости из Интернета по умолчанию. Настройки в примерах предполагают, что имеется Интернет соединение с высокой пропускной способностью через роутер в управляющей сети OpenStack.
Установки могут сталкиваться с ограниченным внешним соединением по ряду причин:
Ненадежное или медленное внешнее соединение
Правила брандмауэра, которые блокируют внешнее соединение
Внешнее соединение осуществляется через HTTP или SOCKS прокси
Архитектурные решения оператора изолировать сети OpenStack
Высокозащищенные окружения, где внешнее соединение не разрешено
При запуске OpenStack-Ansible в окружениях, которые блокируют интернет соединение, мы рекомендуем использовать следующий набор практик и переопределений настроек для использования.
Нижеприведенные параметры не исключают друг друга, и могут быть совмещены при необходимости.
Пример зависящих от Интернета вещей¶
пакеты Python
пакеты дистрибутивов
образы LXC контейнеров
репозитории с исходным кодом
GPG ключи для валидации пакетов
Вариант А: Создание локальных зеркал интернет ресурсов¶
Вы можете управлять и поддерживать зеркала OpenStack-Ansible и зависимостей OpenStack. Зеркала обычно предоставляют значительное снижение рисков путем уменьшения зависимости от ресурсов и систем вне вашего прямого контроля. Зеркала также могут дать более высокую стабильность, производительность и безопасность.
Репозитории Python пакетов¶
Много пакетов, используемых для запуска OpenStack, устанавливаются при помощи pip. Мы рекомендуем зеркалировать список пакетов из PyPi, которые используются pip. Оператор может предпочесть активно зеркалировать весь верхний репозиторий PyPi, но это может потребовать значительный объем дискового пространства. Как вариант, можно использовать кэширующий pip прокси для получения локальных копий только требуемых пакетов.
Что бы настроить развертывание на использование альтернативного источника при сборке, создайте файл /etc/pip.conf со следующим содержанием и убедитесь, что он имеется на всех хостах в окружении.
[global]
index-url = http://pip.example.org/simple
Дополнительно необходимо настроить easy_install на использование альтернативного индекса. easy_install используется вместо pip для установки любых зависимостей, которые указаны в переменной setup_requires в setup.py во время сборки wheel. Для более подробной информации https://pip.pypa.io/en/latest/reference/pip_install/#controlling-setup-requires
Для настройки easy_install используйте альтернативный индекс, создайте файл /root/.pydistutils.cfg со следующим содержанием.
[easy_install]
index_url = https://pip.example.org/simple
После, в /etc/openstack_deploy/user_variables.yml, настройте развертывание для копирования данных файлов с хоста в кэш образа контейнера.
# Copy these files from the host into the containers
lxc_container_cache_files_from_host:
- /etc/pip.conf
- /root/.pydistutils.cfg
пакеты дистрибутивов¶
Много программных пакетов установлено на Ubuntu при помощи .deb пакетов. Схожие механизмы пакетов существуют и для других дистрибутивов Linux. Мы советуем зеркалировать репозитории, которые содержат данные пакеты.
Upstream Ubuntu repositories to mirror for Ubuntu 22.04 LTS:
jammy
jammy-updates
OpenStack-Ansible требует несколько дополнительных репозиториев для установки специфичных компонентов, таких как Galera и Ceph.
Пример репозиториев для зеркалирования (Ubuntu на целевых хостах):
Данные списки намеренно не исчерпывающи и эквивалентные необходимы для других дистрибутивов Linux. Обратитесь к плейбукам OpenStack-Ansible и документации по ролям для дополнительных репозиториев и переменных, которые могут быть использованы для переопределения месторасположения репозитория.
образы LXC контейнеров¶
OpenStack-Ansible builds LXC images using debootstrap or dnf depending on
the distribution. In order to override the package repository you
might need to adjust some variables, like lxc_apt_mirror
or completely
override build command with lxc_hosts_container_build_command
Consult the openstack-ansible-lxc_hosts
role for details on
configuration overrides for this scenario.
репозитории с исходным кодом¶
OpenStack-Ansible использует Ansible Galaxy для загрузки ролей Ansible при начальной подготовке хоста развертывания. Операторы могут зеркалировать зависимости, которые загружаются при помощи скрипта bootstrap-ansible.sh
.
Deployers can configure the script to source Ansible from an alternate Git
repository by setting the environment variable ANSIBLE_GIT_REPO
. Also,
during initial bootstrap you might need to define a custom URL for
upper-constraints file that is part of openstack/requirements repository,
using the TOX_CONSTRAINTS_FILE environment variable.
Операторы могу настроить скрипт получать требуемые Ansible роли из альтернативных источников указав пользовательский файл требуемых ролей и указав путь к этому файлу при помощи переменной окружения ANSIBLE_ROLE_FILE
.
Вариант Б: Доступ к интернет ресурсам при помощи прокси¶
Некоторые сети не имеют маршрутизируемого доступа в Интернет, или требуют для определенного трафика использовать специфичные шлюзы, такие как HTTP или SOCKS прокси сервера.
Настройка может быть применена к целевым серверам и хосту развертывания для получения доступа к публичным интернет ресурсам через HTTP или SOCKS прокси сервер(ы). OpenStack-Ansible может быть использован для настройки целевых хостов использовать прокси сервер(ы). OpenStack-Ansible не предоставляет автоматизацию по созданию прокси сервера(ов)
Начальный хост развертывания не покрывается OpenStack-Ansible и оператор должен обеспечить наличие минимальных настройки прокси, а именно для системного менеджера пакетов.
Настройка прокси для apt-get
¶
Обратитесь к Настройка apt-get для использования http-прокси
Другие настройки прокси¶
В дополнение к базовой конфигурации имеются другие сетевые клиенты на целевых хостах, которые могут быть настроены для соединения через прокси. Например:
Большинство Python модулей
curl
wget
openstack
Эти инструменты и положенные в их основу библиотеки используются как непосредственно Ansible-ом, так и плейбуками OpenStack-Ansible. Потому для успешного доступа плейбуков к внешним ресурсам должна быть произведена настройка прокси.
Обычно эти инструменты считывают переменные окружения, содержащие настройки прокси сервера. Эти переменные окружения, при необходимости, можно задать в /etc/environment
.
Важно отметить, что прокси сервер должен использоваться только для доступа ко внешним ресурсам, а связь между внутренними компонентами OpenStack должна быть прямая и без использования прокси. Переменная окружения no_proxy
используется для определения хостов, доступ к которым должен быть осуществлён напрямую, без использования прокси. Обычно, это хосты из управляющей сети.
OpenStack-Ansible предоставляет два различных механизма для настройки прокси сервера:
1. The default configuration file suggests setting a persistent proxy
configuration on all target hosts and defines a persistent no_proxy
environment variable which lists all hosts/containers“ management addresses as
well as the load balancer internal/external addresses.
2. An alternative method applies proxy configuration in a transient manner
during the execution of Ansible playbooks and defines a minimum set of
management network IP addresses for no_proxy
that are required for the
playbooks to succeed. These proxy settings do not persist after an Ansible
playbook run and the completed deployment does not require them in order to be
functional.
Оператор должен решить какой из данных подходов больше подходит для целевых хостов, учитывая следующие рекомендации:
1. Persistent proxy configuration is a standard practice and network clients on the target hosts will be able to access external resources after deployment.
2. The deployer must ensure that a persistent proxy configuration has complete
coverage of all OpenStack management network host/containers“ IP addresses in
the no_proxy
environment variable. It is necessary to use a list of IP
addresses, CIDR notation is not valid for no_proxy
.
3. Transient proxy configuration guarantees that proxy environment variables
will not persist, ensuring direct communication between services on the
OpenStack management network after deployment. Target host network clients
such as wget
will not be able to access external resources after
deployment.
4. The maximum length of no_proxy
should not exceed 1024 characters due to
a fixed size buffer in the pam_env
PAM module. Longer environment variables
will be truncated during deployment operations and this will lead to
unpredictable errors during or after deployment.
Как только количество хостов/контейнеров в окружении достигнет определенного размера и длина no_proxy
превысит 1024 символа, в этот момент будет необходимо использовать сквозной прокси, настройки которого требуют только наличия ряда IP адресов управляющей сети в no_proxy
во время развертывания.
Обратитесь к global_environment_variables: и deployment_environment_variables: в типовом user_variables.yml для получения деталей о настройке переменных окружения для постоянного и временного прокси.
Настройка прокси на хосте развертывания для подготовки Ansible¶
Скрипт bootstrap-ansible.sh
, используемый для установки Ansible и зависимостей Ansible ролей на хосте развертывания, использует настройки прокси, заданные переменными окружения HTTPS_PROXY
или HTTP_PROXY
.
Примечание
Мы рекомендуем задать ваши переменные окружения с настройками прокси в /etc/environment
перед запуском каких-либо скриптов или плейбуков что бы избежать ошибок.
Для больших или сложных окружений, выделенный хост развертывания позволит применить наиболее подходящую настройку прокси как для хоста развертывания, так и для целевых хостов.
Важные моменты при проксировании TLS трафика¶
Proxying TLS traffic often interferes with the clients ability to perform successful validation of the certificate chain. Various configuration variables exist within the OpenStack-Ansible playbooks and roles that allow a deployer to ignore these validation failures. Disable certificate chain validation on a case by case basis and only after encountering failures that are known to only be caused by the proxy server(s).