Merge "Add documentation for deploying letsencrypt certificates"
This commit is contained in:
commit
86a948a4bf
@ -144,3 +144,72 @@ The process is identical for the other services. Replace `rabbitmq` in
|
|||||||
the preceding configuration variables with `horizon`, `haproxy`, or `keystone`,
|
the preceding configuration variables with `horizon`, `haproxy`, or `keystone`,
|
||||||
and then run the playbook for that service to deploy user-provided certificates
|
and then run the playbook for that service to deploy user-provided certificates
|
||||||
to those services.
|
to those services.
|
||||||
|
|
||||||
|
LetsEncrypt certificates
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The HAProxy ansible role supports using LetsEncrypt to automatically deploy
|
||||||
|
trusted SSL certificates for the public endpoint. Each HAProxy server will
|
||||||
|
individually request a LetsEncrypt certificate.
|
||||||
|
|
||||||
|
The http-01 type challenge is used by certbot to deploy certificates so
|
||||||
|
it is required that the public endpoint is accessible directly on the
|
||||||
|
internet.
|
||||||
|
|
||||||
|
Deployment of certificates using LetsEncrypt has been validated for
|
||||||
|
openstack-ansible using Ubuntu Bionic. Other distributions should work
|
||||||
|
but are not tested.
|
||||||
|
|
||||||
|
To deploy certificates with LetsEncrypt, add the following to
|
||||||
|
``/etc/openstack_deploy/user_variables.yml`` to enable the
|
||||||
|
letsencrypt function in the haproxy ansible role, and to
|
||||||
|
create a new backend service called ``letsencrypt`` to service
|
||||||
|
http-01 challenge requests.
|
||||||
|
|
||||||
|
.. code-block:: shell-session
|
||||||
|
|
||||||
|
haproxy_ssl: true
|
||||||
|
haproxy_ssl_letsencrypt_enable: True
|
||||||
|
haproxy_ssl_letsencrypt_install_method: "distro"
|
||||||
|
haproxy_ssl_letsencrypt_setup_extra_params: "--http-01-address {{ ansible_host }} --http-01-port 8888"
|
||||||
|
haproxy_ssl_letsencrypt_email: "email.address@example.com"
|
||||||
|
|
||||||
|
haproxy_extra_services:
|
||||||
|
# an internal only service for acme-challenge whose backend is certbot running on any haproxy instance
|
||||||
|
- service:
|
||||||
|
haproxy_service_name: letsencrypt
|
||||||
|
haproxy_backend_nodes: "{{ groups['haproxy_all'] }}"
|
||||||
|
backend_rise: 1 #rise quickly to detect certbot running without delay
|
||||||
|
backend_fall: 2
|
||||||
|
haproxy_bind:
|
||||||
|
- 127.0.0.1 #bind to the localhost as the host internal IP will be used by certbot
|
||||||
|
haproxy_port: 8888
|
||||||
|
haproxy_balance_type: http
|
||||||
|
|
||||||
|
|
||||||
|
Copy the whole variable ``haproxy_default_services`` from
|
||||||
|
``/opt/openstack-ansible/inventory/group_vars/haproxy/haproxy.yml``
|
||||||
|
to ``/etc/openstack_deploy/group_vars/haproxy/haproxy_all.yml`` and
|
||||||
|
update the section for horizon to include the ACL redirects http-01
|
||||||
|
challenges to the HAProxy ``letsencrypt`` backend as follows:
|
||||||
|
|
||||||
|
.. code-block:: shell-session
|
||||||
|
|
||||||
|
- service:
|
||||||
|
haproxy_service_name: horizon
|
||||||
|
haproxy_backend_nodes: "{{ groups['horizon_all'] | default([]) }}"
|
||||||
|
haproxy_ssl: "{{ haproxy_ssl }}"
|
||||||
|
haproxy_ssl_all_vips: true
|
||||||
|
haproxy_port: "{{ haproxy_ssl | ternary(443,80) }}"
|
||||||
|
haproxy_backend_port: 80
|
||||||
|
haproxy_redirect_http_port: 80
|
||||||
|
haproxy_balance_type: http
|
||||||
|
haproxy_balance_alg: source
|
||||||
|
haproxy_backend_options:
|
||||||
|
- "httpchk HEAD / HTTP/1.0\\r\\nUser-agent:\\ osa-haproxy-healthcheck"
|
||||||
|
haproxy_service_enabled: "{{ groups['horizon_all'] is defined and groups['horizon_all'] | length > 0 }}"
|
||||||
|
haproxy_redirect_scheme: "https if !{ ssl_fc } !{ path_beg /.well-known/acme-challenge/ }" #redirect all non-ssl traffic to ssl except acme-challenge
|
||||||
|
haproxy_frontend_acls: #use a frontend ACL specify the backend to use for acme-challenge
|
||||||
|
letsencrypt-acl:
|
||||||
|
rule: "path_beg /.well-known/acme-challenge/"
|
||||||
|
backend_name: letsencrypt
|
||||||
|
Loading…
x
Reference in New Issue
Block a user