Smart Proxy: различия между версиями
Pav (обсуждение | вклад) м (Смена путей к сертификатам) |
Pav (обсуждение | вклад) (Добавление настройки плагинов Ansible DHCP TFTP) |
||
Строка 111: | Строка 111: | ||
Запустите (через перезапуск) smart-proxy: | Запустите (через перезапуск) smart-proxy: | ||
<pre> | |||
# systemctl restart smart-proxy | |||
</pre> | |||
=== Добавление плагина === | === Добавление плагина === | ||
Строка 125: | Строка 126: | ||
Изменяем в полученном файле ''puppet_proxy_puppet_api.yml'' необходимые параметры применительно к вашей системе: | Изменяем в полученном файле ''puppet_proxy_puppet_api.yml'' необходимые параметры применительно к вашей системе: | ||
< | <pre> | ||
--- | --- | ||
# URL of the puppet master itself for API requests. | # URL of the puppet master itself for API requests. | ||
Строка 135: | Строка 136: | ||
:puppet_ssl_key: /etc/puppet/ssl/private_keys/sample.server.test.pem | :puppet_ssl_key: /etc/puppet/ssl/private_keys/sample.server.test.pem | ||
# | # | ||
</ | </pre> | ||
Для применения конфигурации перезапускаем службу smart-proxy: | Для применения конфигурации перезапускаем службу smart-proxy: | ||
<source lang="bash"> | |||
# systemctl restart smart-proxy | # systemctl restart smart-proxy | ||
</source> | |||
==== Настройка плагина remote-execution ==== | ==== Настройка плагина remote-execution ==== | ||
Строка 145: | Строка 147: | ||
''/etc/smart-proxy/config/settings.d/dynflow.yml'' | ''/etc/smart-proxy/config/settings.d/dynflow.yml'' | ||
< | <pre> | ||
--- | --- | ||
:enabled: http | :enabled: http | ||
Строка 156: | Строка 158: | ||
# If unset, the process will fallback to autodetection, using external core if the core gem is unavailable | # If unset, the process will fallback to autodetection, using external core if the core gem is unavailable | ||
:external_core: true | :external_core: true | ||
</ | </pre> | ||
''/etc/smart-proxy/config/settings.d/remote_execution_ssh.yml'' | ''/etc/smart-proxy/config/settings.d/remote_execution_ssh.yml'' | ||
< | <pre> | ||
--- | --- | ||
:enabled: true | :enabled: true | ||
Строка 169: | Строка 171: | ||
# Whether to run remote execution jobs asynchronously | # Whether to run remote execution jobs asynchronously | ||
:async_ssh: false | :async_ssh: false | ||
</ | </pre> | ||
Редактируем файл ''/etc/smart_proxy_dynflow_core/settings.yml'' | Редактируем файл ''/etc/smart_proxy_dynflow_core/settings.yml'' | ||
< | <pre> | ||
--- | --- | ||
# Path to dynflow database, leave blank for in-memory non-persistent database | # Path to dynflow database, leave blank for in-memory non-persistent database | ||
Строка 202: | Строка 204: | ||
# File to log to, leave empty for logging to STDOUT | # File to log to, leave empty for logging to STDOUT | ||
:log_file: /var/log/smart-proxy/smart_proxy_dynflow_core.log | :log_file: /var/log/smart-proxy/smart_proxy_dynflow_core.log | ||
</ | </pre> | ||
Создаем пару RSA ключей для пользователя '''_smartforeman''' | Создаем пару RSA ключей для пользователя '''_smartforeman''' | ||
Строка 208: | Строка 210: | ||
От имени пользователя '''root''' запускаем: | От имени пользователя '''root''' запускаем: | ||
< | <pre> | ||
# su - _smartforeman | # su - _smartforeman | ||
$ mkdir /var/lib/smart-proxy/.ssh | $ mkdir /var/lib/smart-proxy/.ssh | ||
$ ssh-keygen -t rsa -f .ssh/id_rsa_foreman_proxy | $ ssh-keygen -t rsa -f .ssh/id_rsa_foreman_proxy | ||
</ | </pre> | ||
Для удаленного запуска команд потребуется зарегистрировать созданный ключ в ''/root/.ssh/authorized_keys'' | Для удаленного запуска команд потребуется зарегистрировать созданный ключ в ''/root/.ssh/authorized_keys'' | ||
Строка 232: | Строка 234: | ||
# systemctl enable smart-proxy | # systemctl enable smart-proxy | ||
</pre> | </pre> | ||
==== Настройка плагина ansible ==== | |||
Разрешаем ansible в smart-proxy | |||
''/etc/smart-proxy/config/settings.d/ansible.yml'' | |||
<pre> | |||
--- | |||
:enabled: true | |||
:ansible_dir: /usr/lib/foreman | |||
:working_dir: /tmp | |||
</pre> | |||
Проверяем настройки пакета '''ansible''' | |||
Для получения списка хостов '''ansible''' обращается к файлу ''/etc/ansible/hosts'' | |||
Настроим его | |||
<pre> | |||
agents: | |||
hosts: | |||
host.server.name: | |||
ansible_user: root | |||
</pre> | |||
Для использования подключения ansible без запроса пароля, требуется сгенерировать ключ эффективного пользователя(root): | |||
<source lang="bash"> | |||
ssh-keygen -f ~/.ssh/id_rsa -N '' | |||
</source> | |||
После создания ключа передать его на нужные узлы: | |||
<source lang="bash"> | |||
ssh-copy-id -i ~/.ssh/id_rsa root@host.server.name | |||
</source> | |||
Проверить работу '''аnsible''', выполнив пинг на группу хостов agents: | |||
<source lang="bash"> | |||
ansible -m ping agents | |||
</source> | |||
==== Настройка плагина TFTP ==== | |||
Для задействования функции работы с '''TFTP''' сервером редактируем содержимое файла | |||
''/etc/smart-proxy/config/settings.d/tftp.yml'' | |||
<pre> | |||
--- | |||
# Can be true, false, or http/https to enable just one of the protocols | |||
:enabled: true | |||
:tftproot: /var/lib/tftpboot | |||
# Defines the TFTP Servername to use, overrides the name in the subnet declaration | |||
:tftp_servername: sample.server.name | |||
# Defines the default read timeout in seconds needed to download tftp artifacts | |||
# like initrd and vmlinuz. Default value 60 seconds | |||
#:tftp_read_timeout: 60 | |||
# Defines the default connection timeout in seconds needed to download tftp artifacts | |||
# like initrd and vmlinuz. Default value 10 seconds | |||
#:tftp_connect_timeout: 10 | |||
# Defines the default dns timeout in seconds needed to download tftp artifacts | |||
# like initrd and vmlinuz. Default value 10 seconds | |||
#:tftp_dns_timeout: 10 | |||
</pre> | |||
==== Настройка плагина DHCP ==== | |||
Для подключения возможности использовать '''DHCP''' необходимо создать/редактировать содержимое файлов | |||
''/etc/smart-proxy/config/settings.d/dhcp_isc.yml'' | |||
<pre> | |||
--- | |||
# | |||
# Configuration file for ISC dhcp provider | |||
# | |||
:config: /etc/dhcp/dhcpd.conf | |||
:leases: /var/lib/dhcp/dhcpd/state/dhcpd.leases | |||
# Specifies TSIG key name and secret | |||
#:key_name: secret_key_name | |||
#:key_secret: secret_key | |||
:omapi_port: 7911 | |||
</pre> | |||
Укажите параметры вашего '''DHCP''' в файле ''/etc/smart-proxy/config/settings.d/dhcp.yml'' | |||
<pre> | |||
--- | |||
# Can be true, false, or http/https to enable just one of the protocols | |||
:enabled: true | |||
# valid providers: | |||
# - dhcp_isc (ISC dhcp server) | |||
# - dhcp_native_ms (Microsoft native implementation) | |||
# - dhcp_libvirt | |||
:use_provider: dhcp_isc | |||
:server: 10.10.10.2 | |||
# subnets restricts the subnets queried to a subset, to reduce the query time. | |||
#:subnets: [192.168.205.0/255.255.255.128, 192.168.205.128/255.255.255.128] | |||
:subnets: [10.10.10.128/255.255.255.128 ] | |||
# Perform ICMP and TCP ping when searching free IPs from the pool. This makes | |||
# sure that active IP address is not suggested as free, however in locked down | |||
# network environments this can cause no free IPs. Enabled by default | |||
:ping_free_ip: true | |||
</pre> | |||
Если '''DHCP''' сервер располагается на одном сервере с сервером '''smart-proxy''', добавляем пользователя '''_smartforeman''' в группы named и dhcp | |||
<source lang="bash"> | |||
usermod -G dhcp -a _smartforeman | |||
usermod -G named -a _smartforeman | |||
</source> | |||
Чтобы пользователь '''_smartproxy''' смог читать файл конфигурации '''DHCP''' сервера установим атрибуты на ''/etc/dhcp/dhcpd.conf'' | |||
<source lang="bash"> | |||
chmod 644 /etc/dhcp/dhcpd.conf | |||
</source> | |||
=== Проверка версий === | === Проверка версий === | ||
Версия от 11:31, 28 марта 2022
Smart Proxy
Smart proxy - средство выполняющее вспомогательную для архитектуры Foreman функцию, в организации процесса ввода в работу нового хоста. Для уменьшения задержек в эксплуатации, он может быть размешен на ПК вместе со службой Foreman или на близстоящем ПК. Smart proxy также часто называется как Foreman proxy.
Подготовка
Перед установкой убедитесь, что Foreman установлен и инициализирован. Это важно.
Установка
Чтобы установить средство, нужно от администратора поставить пакет smart-proxy-compat, а всё требуемое вытянется по зависимостям.
# apt-get install smart-proxy-compat
Настройка
Пред запуском сервиса проверяем содержимое файлов ниже
/etc/smart-proxy/config/settings.d/puppetca_http_api.yml
--- # # URL of the puppet master itself for API requests. :puppet_url: https://sample.server.name:8140 # # SSL certificates used to access the CA API. :puppet_ssl_ca: /etc/puppet/ssl/certs/ca.pem :puppet_ssl_cert: /etc/puppet/ssl/certs/sample.server.name.pem :puppet_ssl_key: /etc/puppet/ssl/private_keys/sample.server.name.pem
/etc/smart-proxy/config/settings.d/puppet_proxy_puppet_api.yml
--- # # URL of the puppet master itself for API requests. :puppet_url: https://sample.server.name:8140 # # SSL certificates used to access the CA API. :puppet_ssl_ca: /etc/puppet/ssl/certs/ca.pem :puppet_ssl_cert: /etc/puppet/ssl/certs/sample.server.name.pem :puppet_ssl_key: /etc/puppet/ssl/private_keys/sample.server.name.pem # Smart Proxy api timeout when Puppet's environment classes api is used and classes cache is disabled :api_timeout: 30
/etc/smart-proxy/config/settings.d/puppetca.yml
--- # # PuppetCA management # Can be true, false, or http/https to enable just one of the protocols # :enabled: http # valid providers: # - puppetca_hostname_whitelisting (verify CSRs based on a hostname whitelist) # - puppetca_token_whitelisting (verify CSRs based on a token whitelist) :use_provider: puppetca_hostname_whitelisting # Puppet version used :puppet_version: 7.1.0
/etc/smart-proxy/config/settings.d/puppet.yml
--- # Can be true, false, or http/https to enable just one of the protocols :enabled: http # valid providers: # puppet_proxy_mcollective (uses mco puppet) # puppet_proxy_ssh (run puppet over ssh) # puppet_proxy_salt (uses salt puppet.run) # puppet_proxy_customrun (calls a custom command with args) #:use_provider: puppet_proxy_customrun :puppet_version: 7.1.0
/etc/smart-proxy/config/settings.d/puppetca_hostname_whitelisting.yml
--- # # Configuration of the PuppetCA hostname_whitelisting provider # :autosignfile: /etc/puppet/autosign.conf
/etc/smart-proxy/config/settings.d/facts.yml
--- # Can be true, false, or http/https to enable just one of the protocols :enabled: true
Проверяем наличие файла /etc/puppet/autosign.conf и установленные на него разрешения
touch /etc/puppet/autosign.conf chmod 664 /etc/puppet/autosign.conf
Запуск службы
Настройте системную службу smart-proxy на автозапуск (по желанию):
# systemctl enable smart-proxy
а дальше запустите её:
# systemctl start smart-proxy
Отныне средство будет доступно в запросам http://localhost:8000 для Foreman. Проверить можно например так:
# telnet localhost 8000
Настройка подключения Foreman и Smart-proxy
Настройка соединения Foreman и Smart-proxy производится через веб интерфейс Foreman. Потребуется перейти в меню Инфраструктура -> Капсулы -> Create Smart Proxy или по прямой ссылке
http://sample.server.name:2345/smart_proxies/new
Адрес Smart-proxy http://sample.server.name:8000
Запустите (через перезапуск) smart-proxy:
# systemctl restart smart-proxy
Добавление плагина
В зависимости от установленной версии smart-proxy выбираем каталог с примерами конфигурационных файлов.
Пример добавления плагина puppet_proxy_puppet_api.yml.
Из папки с примерами конфигурационных файлов smart-proxy /usr/lib/ruby/gems/2.5.0/gems/smart_proxy-1.24.3/config/settings.d копируем файл конфигурации в папку /etc/smart-proxy/config/settings.d/ :
# cp /usr/lib/ruby/gems/2.5.0/gems/smart_proxy-1.24.3/config/settings.d/puppet_proxy_puppet_api.yml.example \ /etc/smart-proxy/config/settings.d/puppet_proxy_puppet_api.yml
Изменяем в полученном файле puppet_proxy_puppet_api.yml необходимые параметры применительно к вашей системе:
--- # URL of the puppet master itself for API requests. :puppet_url: https://sample.server.test:8140 # # SSL certificates used to access the puppet API :puppet_ssl_ca: /etc/puppet/ssl/certs/ca.pem :puppet_ssl_cert: /etc/puppet/ssl/certs/sample.server.test.pem :puppet_ssl_key: /etc/puppet/ssl/private_keys/sample.server.test.pem #
Для применения конфигурации перезапускаем службу smart-proxy:
# systemctl restart smart-proxy
Настройка плагина remote-execution
Для запуска функционала remote-execution проверяем наличие и содержимое файлов ниже
/etc/smart-proxy/config/settings.d/dynflow.yml
--- :enabled: http :use_http: true :database: :core_url: http://sample.server.name:8008 # If true, external core will be used even if the core gem is available # If false, the feature will be disabled if the core gem is unavailable # If unset, the process will fallback to autodetection, using external core if the core gem is unavailable :external_core: true
/etc/smart-proxy/config/settings.d/remote_execution_ssh.yml
--- :enabled: true :ssh_identity_key_file: /var/lib/smart-proxy/.ssh/id_rsa_foreman_proxy :local_working_dir: /var/tmp :remote_working_dir: /var/tmp :kerberos_auth: false # Whether to run remote execution jobs asynchronously :async_ssh: false
Редактируем файл /etc/smart_proxy_dynflow_core/settings.yml
--- # Path to dynflow database, leave blank for in-memory non-persistent database :database: # URL of the foreman, used for reporting back :foreman_url: 'http://sample.server.name:2345' # SSL settings for client authentication against Foreman :foreman_ssl_ca: /etc/puppet/ssl/certs/ca.pem :foreman_ssl_key: /etc/puppet/ssl/private_keys/sample.server.name.pem :foreman_ssl_cert: /etc/puppet/ssl/certs/sample.server.name.pem :console_auth: true # Listen on address :listen: 0.0.0.0 # Listen on port :port: 8008 # SSL settings for running core as https service :use_https: false :ssl_ca_file: /etc/smart-proxy/ssl/certs/ca.pem :ssl_private_key: /etc/puppet/ssl/private_keys/sample.server.name.pem :ssl_certificate: /etc/puppet/ssl/certs/sample.server.name.pem # File to log to, leave empty for logging to STDOUT :log_file: /var/log/smart-proxy/smart_proxy_dynflow_core.log
Создаем пару RSA ключей для пользователя _smartforeman
От имени пользователя root запускаем:
# su - _smartforeman $ mkdir /var/lib/smart-proxy/.ssh $ ssh-keygen -t rsa -f .ssh/id_rsa_foreman_proxy
Для удаленного запуска команд потребуется зарегистрировать созданный ключ в /root/.ssh/authorized_keys
# cat /var/lib/smart-proxy/.ssh/id_rsa_foreman_proxy.pub >> /root/.ssh/authorized_keys
Разрешаем необходимые сервисы и запускаем их
# systemctl enable foreman-jobs # systemctl enable smart-proxy-dynflow-core # systemctl restart foreman-jobs # systemctl restart smart-proxy-dynflow-core
Функционал будет доступен после перезапуска сервиса smart-proxy и обновления активных функций капсул
# systemctl enable smart-proxy
Настройка плагина ansible
Разрешаем ansible в smart-proxy /etc/smart-proxy/config/settings.d/ansible.yml
--- :enabled: true :ansible_dir: /usr/lib/foreman :working_dir: /tmp
Проверяем настройки пакета ansible
Для получения списка хостов ansible обращается к файлу /etc/ansible/hosts
Настроим его
agents: hosts: host.server.name: ansible_user: root
Для использования подключения ansible без запроса пароля, требуется сгенерировать ключ эффективного пользователя(root):
ssh-keygen -f ~/.ssh/id_rsa -N ''
После создания ключа передать его на нужные узлы:
ssh-copy-id -i ~/.ssh/id_rsa root@host.server.name
Проверить работу аnsible, выполнив пинг на группу хостов agents:
ansible -m ping agents
Настройка плагина TFTP
Для задействования функции работы с TFTP сервером редактируем содержимое файла
/etc/smart-proxy/config/settings.d/tftp.yml
--- # Can be true, false, or http/https to enable just one of the protocols :enabled: true :tftproot: /var/lib/tftpboot # Defines the TFTP Servername to use, overrides the name in the subnet declaration :tftp_servername: sample.server.name # Defines the default read timeout in seconds needed to download tftp artifacts # like initrd and vmlinuz. Default value 60 seconds #:tftp_read_timeout: 60 # Defines the default connection timeout in seconds needed to download tftp artifacts # like initrd and vmlinuz. Default value 10 seconds #:tftp_connect_timeout: 10 # Defines the default dns timeout in seconds needed to download tftp artifacts # like initrd and vmlinuz. Default value 10 seconds #:tftp_dns_timeout: 10
Настройка плагина DHCP
Для подключения возможности использовать DHCP необходимо создать/редактировать содержимое файлов /etc/smart-proxy/config/settings.d/dhcp_isc.yml
--- # # Configuration file for ISC dhcp provider # :config: /etc/dhcp/dhcpd.conf :leases: /var/lib/dhcp/dhcpd/state/dhcpd.leases # Specifies TSIG key name and secret #:key_name: secret_key_name #:key_secret: secret_key :omapi_port: 7911
Укажите параметры вашего DHCP в файле /etc/smart-proxy/config/settings.d/dhcp.yml
--- # Can be true, false, or http/https to enable just one of the protocols :enabled: true # valid providers: # - dhcp_isc (ISC dhcp server) # - dhcp_native_ms (Microsoft native implementation) # - dhcp_libvirt :use_provider: dhcp_isc :server: 10.10.10.2 # subnets restricts the subnets queried to a subset, to reduce the query time. #:subnets: [192.168.205.0/255.255.255.128, 192.168.205.128/255.255.255.128] :subnets: [10.10.10.128/255.255.255.128 ] # Perform ICMP and TCP ping when searching free IPs from the pool. This makes # sure that active IP address is not suggested as free, however in locked down # network environments this can cause no free IPs. Enabled by default :ping_free_ip: true
Если DHCP сервер располагается на одном сервере с сервером smart-proxy, добавляем пользователя _smartforeman в группы named и dhcp
usermod -G dhcp -a _smartforeman
usermod -G named -a _smartforeman
Чтобы пользователь _smartproxy смог читать файл конфигурации DHCP сервера установим атрибуты на /etc/dhcp/dhcpd.conf
chmod 644 /etc/dhcp/dhcpd.conf
Проверка версий
Проверяем версию smart-proxy и подключенных плагинов, используя API запрос:
$ curl -k -H "Accept: application/json" http://localhost:8000/version
Переустановка или обновление
Чтобы переустановить или обновить средство нужно выполнить 2 команды подряд:
# apt-get install smart-proxy-compat # apt-get dist-upgrade
Полное удаление
# apt-get remove smart-proxy-compat