С помощью существующего протокола единого входа OpenID Connect 8 страница



}

 

После осушения всех подключений используйте API NGINX Plus, что-

бы полностью удалить сервер из восходящего пула:

$ curl -X DELETE \ 'http://nginx.local/api/3/http/upstreams/backend/servers/0'

[]

 

Команда curl выполняет запрос с методом DELETE на тот же URI, кото- рый использовался для обновления состояния серверов. Метод DELETE дает команду NGINX удалить сервер. Этот API-вызов возвращает все серверы и их идентификаторы, которые по-прежнему остаются в пуле. Поскольку мы начали с пустого пула, добавили только один сервер че- рез API, осушили его и затем удалили, теперь у нас снова есть пустой пул.


 

                                                             5.2. Хранилище типа ключ / значение v 63

Обсуждение

 
Эксклюзивный API NGINX Plus позволяет динамическим серверам приложений добавлять и удалять себя в конфигурацию NGINX на лету. Когда серверы подключаются к сети, они могут зарегистрироваться в пуле, и NGINX начнет отправлять его для нагрузки. Когда сервер необ- ходимо удалить, он может запросить у NGINX Plus осушение своих под- ключений, а затем удалить себя из восходящего пула до закрытия. Это позволяет инфраструктуре за счет автоматизации уменьшать и увели- чивать масштаб без вмешательства человека.

См. также:

 
Документация по NGINX Plus API Swagger (https://demo.nginx.com/swagger-ui/).

5.2. Хранилище типа ключ/значение

Задача

Вам нужен NGINX Plus для принятия динамических решений по управлению трафиком на основе входных данных из приложений.

Решение

Настройте хранилище типа ключ/значение, поддерживающее клас- теры и API, а затем добавьте ключи и значения:

keyval_zone zone=blacklist:1M;

keyval $remote_addr $num_failures zone=blacklist;

 

server {

# ...

location / {

if ($num_failures) {

return 403 'Forbidden';

}

return 200 'OK';

}

}

server {

# ...

#  Директивы,  ограничивающие доступ к API


 

64 v Глава 5. Программируемость и автоматизация                                                  

 

#  См.  главу 6

location /api { api write=on;

}

}

 

 
В этой конфигурации NGINX Plus используется каталог keyval_zone для создания зоны общей памяти хранилища типа ключ/значение с име- нем blacklist и устанавливается лимит памяти в 1 Мб. Затем директива

keyval отображает значение ключа, соответствующего первому парамет-

 
ру $remote_addr, в новую переменную с именем $num_failures из зоны. Эта новая переменная затем используется для определения того, должен ли NGINX Plus обслуживать запрос или вернуть ошибку 403 Forbidden code.

После запуска сервера NGINX Plus с этой конфигурацией вы можете использовать команду curl и ожидать ответа 200 OK.

$ curl 'http://127.0.0.1/' OK

Теперь добавьте IP-адрес локального компьютера в хранилище типа ключ/значение со значением 1:

$ curl -X POST -d '{"127.0.0.1":"1"}' \

'http://127.0.0.1/api/3/http/keyvals/blacklist'

 

Команда curl отправляет запрос с использованием метода POST по протоколу HTTP с объектом JSON, содержащим объект ключ/значение для отправки в зону общей памяти черного списка. URI API-интерфейса хранилища типа ключ/значение форматируется как показано ниже:

/api/{version}/http/keyvals/{httpKeyvalZoneName}

 

IP-адрес локального компьютера теперь добавлен в зону ключ/значе- ние с именем blacklist со значением 1. В следующем запросе NGINX Plus ищет $remote_addr в зоне ключ/значение, находит запись и отображает значение в переменную $num_failures. Эта переменная затем оценива- ется в операторе if. Когда у переменной есть значение, if оценивается как True, а NGINX Plus возвращает ошибку 403 Forbidden:

$ curl 'http://127.0.0.1/' Forbidden

Вы можете обновить или удалить ключ, сделав запрос с методом PATCH:


 

                                       5.3. Установка с использованием приложения Puppet   v 65

$ curl -X PATCH -d '{"127.0.0.1":null}' \ 'http://127.0.0.1/api/3/http/keyvals/blacklist'

 
NGINX Plus удаляет ключ, если значение равно нулю, и запросы снова возвращают ответ 200 OK.

Обсуждение

 
Хранилище типа ключ/значение, эксклюзивная функция NGINX Plus, позволяет приложениям вводить информацию в NGINX Plus. В приве- денном примере переменная $remote_addr используется для создания динамического черного списка. Вы можете заполнить это хранилище любым ключом, который NGINX Plus может иметь в качестве перемен- ной (например, куки-файлом сессии), и предоставить NGINX Plus внеш- нее значение. В NGINX Plus R16 хранилище типа ключ/значение стало поддерживать кластеры, а это означает, что вы должны предоставить обновление ключ/значение только одному серверу NGINX Plus, и все прочие получат эту информацию.

См. также:

https://www.nginx.com/blog/dynamic-bandwidth-limits-nginx-plus-key-value- store/

 

5.3. Установка с использованием приложения Puppet

Задача

Вам нужно установить и настроить NGINX с использованием Puppet, чтобы управлять конфигурацией NGINX в виде кода и соответствовать остальным конфигурациям Puppet.

Решение

Создайте модуль, который устанавливает NGINX, управляет файла- ми, которые вам нужны, и гарантирует, что NGINX работает:

class nginx {

package {"nginx": ensure => 'installed',}

service {"nginx": ensure => 'true',

hasrestart => 'true',


 

 
66 v Глава 5. Программируемость и автоматизация                                                  

 

restart => '/etc/init.d/nginx reload',

}

file { "nginx.conf":

path => '/etc/nginx/nginx.conf', require => Package['nginx'], notify => Service['nginx'],

content => template('nginx/templates/nginx.conf.erb'), user=>'root',

group=>'root', mode='0644';

}

}

 

 
Этот модуль использует утилиту управления пакетами, чтобы га- рантировать, что пакет NGINX установлен. Он также гарантирует, что NGINX запущен и включен во время загрузки. Конфигурация со- общает Puppet, что у службы есть команда перезапуска с директивой hasrestart, и мы можем переопределить команду  restart, перезагру- зив NGINX. Файловый ресурс будет управлять и шаблонировать файл nginx.conf с использованием языка шаблонов Embedded Ruby (ERB). Шаблонирование файла произойдет после установки пакета NGINX благодаря директиве require. Однако файловый ресурс уведомит служ- бу NGINX о перезагрузке благодаря директиве notify. Шаблонный файл конфигурации не включен. Тем не менее файл конфигурации NGINX по умолчанию установить просто, либо это может быть очень сложно, если использовать циклы языков шаблонов ERB или EPP и подстанов- ку переменных.

Обсуждение

Puppet – это инструмент управления конфигурацией на базе языке программирования Ruby. Модули встроены в предметно-ориентиро- ванный язык и вызываются через файл манифеста, который определяет конфигурацию для данного сервера. Puppet может быть запущен в кон- фигурации «ведущий–ведомый» или без ведущего. С Puppet манифест запускается на ведущем устройстве, а затем отправляется на ведомое устройство. Это важно, потому что это гарантирует, что ведомое устрой- ство поставляется только с той конфигурацией, которая предназначена для него, и без дополнительных настроек, предназначенных для дру- гих серверов. Существует множество чрезвычайно развитых общедо- ступных модулей для Puppet. Эти модули помогут вам начать работу с


 

                                               5.4. Установка с использованием системы Chef    v 67

вашей конфигурацией. Общедоступный модуль NGINX из voxpupuli  на

 
GitHub создаст шаблоны конфигурации NGINX за вас.

См. также:

https://puppet.com/docshttps://puppet.com/docs/puppet/latest/types/package.htmlhttps://puppet.com/docs/puppet/latest/types/service.htmlhttps://puppet.com/docs/puppet/latest/types/ fi le.htmlhttps://puppet.com/docs/puppet/latest/lang_template.htmlhttps://github.com/voxpupuli/puppet-nginx

 

5.4. Установка с использованием системы Chef

Задача                                   

Вам нужно установить и настроить NGINX, используя Chef, чтобы управлять конфигурациями NGINX в виде кода и соответствовать осталь- ным конфигурациям Chef.

Решение

Создайте кулинарную книгу с рецептом установки NGINX, настрой- те файлы конфигурации через шаблоны и обеспечьте перезагрузку NGINX, после того как конфигурация будет введена в действие. Ниже приводится пример рецепта:

package 'nginx' do action :install

end

 

service 'nginx' do

supports :status => true, :restart => true, :reload => true action [ :start, :enable ]

end

 

template 'nginx.conf' do path "/etc/nginx.conf" source "nginx.conf.erb" owner 'root'


 

68 v Глава 5. Программируемость и автоматизация                                                  

 

group 'root' mode '0644'

 
notifies :reload, 'service[nginx]', :delayed end

 

Блок package устанавливает NGINX. Блок service гарантирует, что NGINX запускается и включается при загрузке, а затем объявляет остальной части Chef, что служба nginx будет поддерживать примени- тельно к действиям. Блок template формирует файл ERB и помещает его в /etc/nginx.conf с владельцем и группой root, а также устанавливает значение mode на 644 и уведомляет службу nginx о перезагрузке, но ждет конца  запуска  Chef,  объявляемое  оператором  :delayed.  Шаблонный файл конфигурации не включен. Тем не менее файл конфигурации NGINX по умолчанию установить просто, либо это может быть очень сложно, если использовать циклы языков шаблонов ERB или EPP и под- становку переменных.

Обсуждение                                        

Chef – это система управления конфигурациями на базе языка Ruby. Она может работать в режиме «ведущий–ведомый» или в ре- жиме соло, ныне известном как Chef Zero. У Chef есть огромное со- общество с большим количеством общедоступных книг с рецептами, которое именуется Supermarket. Эти сборники рецептов можно уста- навливать и поддерживать с помощью утилиты командной строки Berkshelf. Chef чрезвычайно мощная система, и то, что мы проде- монстрировали, является лишь небольшим примером. Общедоступ- ная книга с рецептами NGINX в Supermarket чрезвычайно гибкая и предоставляет варианты простой установки NGINX из диспетчера пакетов или из исходного кода, а также возможность компилировать и устанавливать множество различных модулей, создавать шаблоны основных конфигураций.

См. также:

https://docs.chef.iohttps://docs.chef.io/resource_package.htmlhttps://docs.chef.io/resource_service.htmlhttps://docs.chef.io/resource_template.htmlhttps://supermarket.chef.io/cookbooks/nginx


 

                                            5.5. Установка с использованием системы Ansible   v 69

5.5. Установка с использованием

системы Ansible                                

Задача

Вам необходимо установить и настроить NGINX, используя Ansible, чтобы управлять конфигурациями NGINX в виде кода и соответство- вать остальным конфигурациям Ansible.

Решение

Создайте плейбук Ansible для установки NGINX и управления файлом nginx.conf. Ниже приведен пример файла задачи для плейбука, чтобы установить NGINX. Убедитесь, что он работает и создает шаблон файла конфигурации:

-

 
name: NGINX | Installing NGINX package: name=nginx state=present

 

- name: NGINX | Starting NGINX service:

name: nginx state: started enabled: yes

 

- name: Copy nginx configuration in place. template:

src: nginx.conf.j2

dest: "/etc/nginx/nginx.conf" owner: root

group: root mode: 0644

notify:

- reload nginx

 

Блок package устанавливает NGINX. Блок service гарантирует, что NGINX запущен и включен при загрузке. Блок template  устанавливает файл шаблона Jinja2 и помещает результат в /etc/nginx.conf с root в качестве владельца и группы, а также устанавливает значение mode в 644 и уведомляет службу nginx о перезагрузке. Шаблонный файл кон- фигурации не включен. Тем не менее файл конфигурации NGINX по


 

70 v Глава 5. Программируемость и автоматизация                                                       

умолчанию установить просто, либо это может быть очень сложно, если использовать циклы языка шаблонов Jinja2 и подстановку пере- менных.

Обсуждение                                  

Ansible – это широко распространенное и мощное средство управ- ления конфигурациями, написанное на языке Python. Конфигурация задач идет в формате YAML, а язык шаблонов Jinja2 используется для файлов шаблонов. Ansible предлагает графический интерфейс для управления и мониторинга работы Ansible Tower по подписке. Тем не менее обычно он используется с локальных компьютеров или для соз- дания серверов непосредственно к клиенту или в модели без ведомого устройства. Ansible отправляет SSH-пакеты на свои серверы и запускает конфигурации. Как и у других систем управления конфигурациями, у Ansible существует большое сообщество под названием Ansible Galaxy, где можно найти очень сложные роли для использования в своих плей- буках.

См. также:

 
https://docs.ansible.comhttps://docs.ansible.com/ansible/latest/modules/package_module.htmlhttps://docs.ansible.com/ansible/latest/modules/service_module.htmlhttps://docs.ansible.com/ansible/latest/modules/template_module.htmlhttps://galaxy.ansible.com   

 

5.6. Установка с использованием SaltStack

Задача

Вам необходимо установить и настроить NGINX с использованием системы SaltStack, чтобы управлять конфигурациями NGINX в виде кода и соответствовать остальным конфигурациям SaltStack.

Решение

Установите NGINX через модуль управления пакетами и управляйте файлами конфигураций, которые вам нужны. Ниже приводится пример файла состояния (sls), который установит пакет nginx и гарантирует, что служба работает, включается при загрузке и перезагружается, если в файл конфигурации внесены изменения:


 

 
                                                      5.6. Установка с использованием SaltStack   v 71

nginx:

pkg:

- installed service:

- name: nginx

- running

- enable: True

- reload:  True

- watch:

- file: /etc/nginx/nginx.conf

 

/etc/nginx/nginx.conf: file:

- managed

- source: salt://path/to/nginx.conf

- user: root

- group: root

- template: jinja

- mode: 644

- require:

- pkg: nginx

 

 
Это базовый пример установки NGINX с помощью утилиты управ- ления пакетами и управления файлом nginx.conf. Пакет NGINX уста- новлен, а служба запущена и активируется при загрузке. С помощью SaltStack можно объявлять файл, управляемый Salt, как показано в примере, и шаблонизированный многими различными языками шаб- лонов. Шаблонный файл конфигурации не включен. Тем не менее файл конфигурации NGINX по умолчанию установить просто, либо это мо- жет быть очень сложно, если использовать циклы языка шаблонов Jinja2 и подстановку переменных. Эта конфигурация также указывает, что NGINX должно быть установлено до управления файлом из-за операто- ра require. После того как файл будет на месте, NGINX перезагружается благодаря установленной в его службе директиве watch и перезагружа- ется, а не перезапускается, так как значение директивы reload установ- лено в True.

Обсуждение

SaltStack – это мощный инструмент управления конфигурациями, который определяет состояния сервера в YAML. Модули для SaltStack


Дата добавления: 2021-01-21; просмотров: 119; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!