Adds certificate generation
This will generate self-signed certificates needed for Octavia during install. Change-Id: I39bbc4c43633b844b55f463723ba1b72d79fd206
This commit is contained in:
parent
b10a24998a
commit
1515ca276b
@ -238,17 +238,6 @@ octavia_amp_ram: 1024
|
|||||||
octavia_amp_vcpu: 1
|
octavia_amp_vcpu: 1
|
||||||
octavia_amp_disk: 2
|
octavia_amp_disk: 2
|
||||||
|
|
||||||
# client certs
|
|
||||||
octavia_client_ca: "{{ octavia_system_home_folder }}/certs/ca_01.pem"
|
|
||||||
octavia_client_cert: "{{ octavia_system_home_folder }}/certs/client.pem"
|
|
||||||
# server
|
|
||||||
octavia_server_ca: "{{ octavia_system_home_folder }}/certs/ca_01.pem"
|
|
||||||
# ca certs
|
|
||||||
octavia_ca_private_key: "{{ octavia_system_home_folder }}/certs/private/cakey.pem"
|
|
||||||
octavia_ca_certificate: "{{ octavia_system_home_folder }}/certs/ca_01.pem"
|
|
||||||
octavia_ca_private_key_passphrase: foobar
|
|
||||||
octavia_signing_digest: sha256
|
|
||||||
|
|
||||||
# spare pool - increase to speed up load balancer creation and fail over
|
# spare pool - increase to speed up load balancer creation and fail over
|
||||||
octavia_spare_amphora_pool_size: 1
|
octavia_spare_amphora_pool_size: 1
|
||||||
|
|
||||||
@ -400,7 +389,33 @@ octavia_amphora_driver: amphora_haproxy_rest_driver
|
|||||||
octavia_compute_driver: compute_nova_driver
|
octavia_compute_driver: compute_nova_driver
|
||||||
octavia_network_driver: allowed_address_pairs_driver
|
octavia_network_driver: allowed_address_pairs_driver
|
||||||
|
|
||||||
|
# Certificate generation
|
||||||
|
# this directory needs to be accessible
|
||||||
|
octavia_cert_dir: "{{ lookup('env', 'HOME') }}/openstack-ansible/octavia"
|
||||||
|
octavia_cert_key_length_server: '4096' # key length
|
||||||
|
octavia_cert_cipher_server: 'aes256'
|
||||||
|
octavia_cert_cipher_client: 'aes256'
|
||||||
|
octavia_cert_key_length_client: '4096' # key length
|
||||||
|
octavia_cert_server_ca_common_name: 'www.example.com' # change this to something more real
|
||||||
|
octavia_cert_client_ca_common_name: 'www.example.com' # change this to something more real
|
||||||
|
octavia_cert_client_req_common_name: 'www.example.com' # change this to something more real
|
||||||
|
octavia_generate_client_cert: True # generate self signed client certs
|
||||||
|
octavia_generate_certs: True
|
||||||
|
|
||||||
|
# client certs
|
||||||
|
octavia_client_ca_key: "{{ octavia_cert_dir }}/ca_01.key"
|
||||||
|
octavia_client_ca: "{{ octavia_cert_dir }}/ca_01.pem"
|
||||||
|
octavia_client_cert: "{{ octavia_cert_dir }}/client.pem"
|
||||||
|
# server
|
||||||
|
octavia_server_ca: "{{ octavia_ca_certificate }}"
|
||||||
|
# ca certs
|
||||||
|
octavia_ca_private_key: "{{ octavia_cert_dir }}/private/cakey.pem"
|
||||||
|
octavia_ca_private_key_passphrase: "{{ octavia_cert_password_client }}"
|
||||||
|
octavia_ca_certificate: "{{ octavia_cert_dir }}/ca_server_01.pem"
|
||||||
|
octavia_signing_digest: sha256
|
||||||
|
|
||||||
## Tunable overrides
|
## Tunable overrides
|
||||||
octavia_octavia_conf_overrides: {}
|
octavia_octavia_conf_overrides: {}
|
||||||
octavia_api_paste_ini_overrides: {}
|
octavia_api_paste_ini_overrides: {}
|
||||||
octavia_policy_overrides: {}
|
octavia_policy_overrides: {}
|
||||||
|
|
||||||
|
@ -163,18 +163,9 @@ Creating the cryptographic certificates
|
|||||||
For production installation make sure that you review this very carefully with your
|
For production installation make sure that you review this very carefully with your
|
||||||
own security requirements and potantially use your own CA to sign the certificates.
|
own security requirements and potantially use your own CA to sign the certificates.
|
||||||
|
|
||||||
#. Run the certificate script.
|
The system will automatically generate and use self-signed certificates with different
|
||||||
|
Certificate Authorities for control plane and amphora. Make sure to store a copy in
|
||||||
In the bin directory of the Octavia project you cloned above run:
|
a safe place for potential disaster recovery.
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
mkdir /var/lib/octavia/certs
|
|
||||||
source create_certificates.sh /var/lib/octavia/certs `pwd`/../etc/certificates/openssl.cnf
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
The certificates will be created in ``/var/lib/octavia/certs`` where the
|
|
||||||
ansible script are expecting them.
|
|
||||||
|
|
||||||
Optional: Configuring Octavia with ssh access to the amphora
|
Optional: Configuring Octavia with ssh access to the amphora
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Octavia requires SSL certificates for communication with the amphora. This
|
||||||
|
adds the automatic creation of self signed certificates for this purpose.
|
||||||
|
It uses different certificate authorities for amphora and control plane
|
||||||
|
thus insuring maximum security.
|
||||||
|
security:
|
||||||
|
- |
|
||||||
|
It is recommended that the certificate generation is always reviewed by
|
||||||
|
security professionals since algorithms and key-lengths considered secure
|
||||||
|
change all the time.
|
||||||
|
|
@ -32,6 +32,18 @@
|
|||||||
tags:
|
tags:
|
||||||
- always
|
- always
|
||||||
|
|
||||||
|
- include: octavia_certs_install.yml
|
||||||
|
when: octavia_generate_certs | bool
|
||||||
|
delegate_to: localhost
|
||||||
|
tags:
|
||||||
|
- octavia-install
|
||||||
|
|
||||||
|
- include: octavia_certs.yml
|
||||||
|
when: octavia_generate_certs | bool
|
||||||
|
delegate_to: localhost
|
||||||
|
tags:
|
||||||
|
- octavia-config
|
||||||
|
|
||||||
- include: octavia_pre_install.yml
|
- include: octavia_pre_install.yml
|
||||||
tags:
|
tags:
|
||||||
- octavia-install
|
- octavia-install
|
||||||
|
70
tasks/octavia_certs.yml
Normal file
70
tasks/octavia_certs.yml
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
---
|
||||||
|
# Copyright 2018, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
- name: Create the server CA private key
|
||||||
|
openssl_privatekey:
|
||||||
|
path: "{{ octavia_ca_private_key }}"
|
||||||
|
passphrase: "{{ octavia_ca_private_key_passphrase }}"
|
||||||
|
cipher: "{{ octavia_cert_cipher_server }}"
|
||||||
|
size: "{{ octavia_cert_key_length_server }}"
|
||||||
|
|
||||||
|
- name: Create server CA CSR
|
||||||
|
openssl_csr:
|
||||||
|
path: "{{ octavia_cert_dir }}/ca_server_01.csr"
|
||||||
|
common_name: "{{ octavia_cert_server_ca_common_name }}"
|
||||||
|
privatekey_path: "{{ octavia_ca_private_key }}"
|
||||||
|
privatekey_passphrase: "{{ octavia_ca_private_key_passphrase }}"
|
||||||
|
|
||||||
|
- name: Create server CA certificate
|
||||||
|
openssl_certificate:
|
||||||
|
path: "{{ octavia_ca_certificate }}"
|
||||||
|
privatekey_path: "{{ octavia_ca_private_key }}"
|
||||||
|
privatekey_passphrase: "{{ octavia_ca_private_key_passphrase }}"
|
||||||
|
csr_path: "{{ octavia_cert_dir }}/ca_server_01.csr"
|
||||||
|
provider: selfsigned
|
||||||
|
owner: "{{ lookup('env', 'USER') }}"
|
||||||
|
|
||||||
|
- name: Generate Octavia client certificate
|
||||||
|
block:
|
||||||
|
- name: Create the client cert private key
|
||||||
|
openssl_privatekey:
|
||||||
|
path: "{{ octavia_cert_dir }}/client.key"
|
||||||
|
size: "{{ octavia_cert_key_length_client }}"
|
||||||
|
|
||||||
|
- name: Create client cert CSR
|
||||||
|
openssl_csr:
|
||||||
|
path: "{{ octavia_cert_dir }}/client.csr"
|
||||||
|
common_name: "{{ octavia_cert_client_req_common_name }}"
|
||||||
|
privatekey_path: "{{ octavia_cert_dir }}/client.key"
|
||||||
|
|
||||||
|
- name: Create client certificate
|
||||||
|
openssl_certificate:
|
||||||
|
path: "{{ octavia_cert_dir }}/client-.pem"
|
||||||
|
privatekey_path: "{{ octavia_ca_private_key }}"
|
||||||
|
privatekey_passphrase: "{{ octavia_ca_private_key_passphrase }}"
|
||||||
|
csr_path: "{{ octavia_cert_dir }}/client.csr"
|
||||||
|
provider: selfsigned
|
||||||
|
owner: "{{ lookup('env', 'USER') }}"
|
||||||
|
|
||||||
|
# use cat to avoid mangling the certs
|
||||||
|
- name: Generate single pem client.pem
|
||||||
|
shell: "cat client-.pem client.key >{{ octavia_client_cert }}"
|
||||||
|
args:
|
||||||
|
chdir: "{{ octavia_cert_dir }}"
|
||||||
|
creates: "{{ octavia_client_cert }}"
|
||||||
|
tags:
|
||||||
|
- skip_ansible_lint
|
||||||
|
|
||||||
|
when: octavia_generate_client_cert|bool
|
67
tasks/octavia_certs_install.yml
Normal file
67
tasks/octavia_certs_install.yml
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
---
|
||||||
|
# Copyright 2018, Rackspace US, Inc.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
- name: Ensure python OpenSSL dependencies are installed.
|
||||||
|
pip:
|
||||||
|
name: pyOpenSSL
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Generate Cert Dirs
|
||||||
|
file:
|
||||||
|
path: "{{ item.path }}"
|
||||||
|
state: directory
|
||||||
|
mode: "{{ item.mode }}"
|
||||||
|
owner: "{{ lookup('env', 'USER') }}"
|
||||||
|
with_items:
|
||||||
|
- { path: "{{ octavia_cert_dir }}", mode: '0750' }
|
||||||
|
- { path: "{{ octavia_cert_dir }}/newcerts", mode: '0750'}
|
||||||
|
- { path: "{{ octavia_cert_dir }}/private", mode: '0750'}
|
||||||
|
|
||||||
|
# These are run at the very first installation of Octavia
|
||||||
|
# While Octavia acts as a CA for the server certificates,
|
||||||
|
# for the amphora it only needs a client certificate and
|
||||||
|
# the (public) certificate authority certificate.
|
||||||
|
# Generating the secret key here and storing it
|
||||||
|
# on the deploy host allows us to rotate the client
|
||||||
|
# certificate without recycling the amphora since
|
||||||
|
# we can keep the same CA.
|
||||||
|
|
||||||
|
- name: Generate client certificate
|
||||||
|
block:
|
||||||
|
- name: Create the client CAs private key
|
||||||
|
openssl_privatekey:
|
||||||
|
path: "{{ octavia_client_ca_key }}"
|
||||||
|
passphrase: "{{ octavia_cert_password_client }}"
|
||||||
|
cipher: "{{ octavia_cert_cipher_client }}"
|
||||||
|
size: "{{ octavia_cert_key_length_client }}"
|
||||||
|
|
||||||
|
- name: Create client CA CSR
|
||||||
|
openssl_csr:
|
||||||
|
path: "{{ octavia_cert_dir }}/ca_01.csr"
|
||||||
|
common_name: "{{ octavia_cert_client_ca_common_name }}"
|
||||||
|
privatekey_path: "{{ octavia_client_ca_key }}"
|
||||||
|
privatekey_passphrase: "{{ octavia_cert_password_client }}"
|
||||||
|
|
||||||
|
- name: Create client CA certificate
|
||||||
|
openssl_certificate:
|
||||||
|
path: "{{ octavia_client_ca }}"
|
||||||
|
privatekey_path: "{{ octavia_client_ca_key }}"
|
||||||
|
privatekey_passphrase: "{{ octavia_cert_password_client }}"
|
||||||
|
csr_path: "{{ octavia_cert_dir }}/ca_01.csr"
|
||||||
|
provider: selfsigned
|
||||||
|
owner: "{{ lookup('env', 'USER') }}"
|
||||||
|
|
||||||
|
when: octavia_generate_client_cert | bool == True
|
||||||
|
|
@ -98,3 +98,7 @@ octavia_ssh_enabled: True
|
|||||||
octavia_amphora_driver: "{% if test_octavia_amphora | bool %}amphora_haproxy_rest_driver{% else %}amphora_noop_driver{% endif %}"
|
octavia_amphora_driver: "{% if test_octavia_amphora | bool %}amphora_haproxy_rest_driver{% else %}amphora_noop_driver{% endif %}"
|
||||||
octavia_compute_driver: "{% if test_octavia_amphora | bool %}compute_nova_driver{% else %}compute_noop_driver{% endif %}"
|
octavia_compute_driver: "{% if test_octavia_amphora | bool %}compute_nova_driver{% else %}compute_noop_driver{% endif %}"
|
||||||
octavia_network_driver: "{% if test_octavia_amphora | bool %}allowed_address_pairs_driver{% else %}network_noop_driver{% endif %}"
|
octavia_network_driver: "{% if test_octavia_amphora | bool %}allowed_address_pairs_driver{% else %}network_noop_driver{% endif %}"
|
||||||
|
|
||||||
|
# cert generation
|
||||||
|
octavia_cert_password_client: 'changeme'
|
||||||
|
|
||||||
|
@ -18,38 +18,6 @@
|
|||||||
become: True
|
become: True
|
||||||
gather_facts: True
|
gather_facts: True
|
||||||
tasks:
|
tasks:
|
||||||
- name: Install apt packages
|
|
||||||
apt:
|
|
||||||
pkg: "{{ item }}"
|
|
||||||
state: "{{ octavia_package_state }}"
|
|
||||||
update_cache: yes
|
|
||||||
register: install_packages
|
|
||||||
until: install_packages|success
|
|
||||||
retries: 5
|
|
||||||
delay: 2
|
|
||||||
with_items:
|
|
||||||
- git
|
|
||||||
- name: Clone Octavia
|
|
||||||
git:
|
|
||||||
repo: "https://git.openstack.org/openstack/octavia"
|
|
||||||
dest: "{{ octavia_system_home_folder }}/octavia"
|
|
||||||
version: "{{ octavia_git_install_branch }}"
|
|
||||||
tags:
|
|
||||||
- skip_ansible_lint
|
|
||||||
- name: Change permission
|
|
||||||
file:
|
|
||||||
path: "{{ octavia_system_home_folder }}/octavia/bin/create_certificates.sh"
|
|
||||||
mode: 0755
|
|
||||||
- name: Generate certs
|
|
||||||
shell: "{{ octavia_system_home_folder }}/octavia/bin/create_certificates.sh {{ octavia_system_home_folder }}/certs {{ octavia_system_home_folder }}/octavia/etc/certificates/openssl.cnf"
|
|
||||||
args:
|
|
||||||
creates: "{{ octavia_system_home_folder }}/certs/ca_01.pem"
|
|
||||||
tags:
|
|
||||||
- skip_ansible_lint
|
|
||||||
- name: Fix certs/private directory access
|
|
||||||
file:
|
|
||||||
path: "{{ octavia_system_home_folder }}/certs/private"
|
|
||||||
mode: 0755
|
|
||||||
- name: Install pip requirements
|
- name: Install pip requirements
|
||||||
pip:
|
pip:
|
||||||
name: "shade"
|
name: "shade"
|
||||||
|
Loading…
Reference in New Issue
Block a user