Browse Source
Generate TLS certs for calico typha (#5258)
Generate TLS certs for calico typha (#5258)
* Generate TLS certs for calico typha Change-Id: I3883f49c124c52d0fc5b900ca2b44e4e2ed0d707 * Add group vars note Change-Id: I63550dfef616e884efdbd42010a90b2c04c5eb69pull/5241/head
committed by
Kubernetes Prow Robot
12 changed files with 249 additions and 5 deletions
Unified View
Diff Options
-
3inventory/sample/group_vars/k8s-cluster/k8s-net-calico.yml
-
3roles/download/defaults/main.yml
-
4roles/network_plugin/calico/defaults/main.yml
-
89roles/network_plugin/calico/files/make-ssl-typha.sh
-
20roles/network_plugin/calico/files/openssl.conf
-
6roles/network_plugin/calico/tasks/install.yml
-
49roles/network_plugin/calico/tasks/typha_certs.yml
-
2roles/network_plugin/calico/templates/calico-config.yml.j2
-
37roles/network_plugin/calico/templates/calico-node.yml.j2
-
33roles/network_plugin/calico/templates/calico-typha.yml.j2
-
5tests/files/gce_centos7-calico-ha.yml
-
3tests/files/packet_centos7-calico-ha.yml
@ -0,0 +1,89 @@ |
|||||
|
#!/bin/bash |
||||
|
|
||||
|
# Author: Smana smainklh@gmail.com |
||||
|
# |
||||
|
# 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. |
||||
|
|
||||
|
set -o errexit |
||||
|
set -o pipefail |
||||
|
usage() |
||||
|
{ |
||||
|
cat << EOF |
||||
|
Create self signed certificates |
||||
|
|
||||
|
Usage : $(basename $0) -f <config> [-d <ssldir>] |
||||
|
-h | --help : Show this message |
||||
|
-f | --config : Openssl configuration file |
||||
|
-d | --ssldir : Directory where the certificates will be installed |
||||
|
-c | --cadir : Directory where the existing CA is located |
||||
|
|
||||
|
ex : |
||||
|
$(basename $0) -f openssl.conf -d /srv/ssl |
||||
|
EOF |
||||
|
} |
||||
|
|
||||
|
# Options parsing |
||||
|
while (($#)); do |
||||
|
case "$1" in |
||||
|
-h | --help) usage; exit 0;; |
||||
|
-f | --config) CONFIG=${2}; shift 2;; |
||||
|
-d | --ssldir) SSLDIR="${2}"; shift 2;; |
||||
|
-c | --cadir) CADIR="${2}"; shift 2;; |
||||
|
*) |
||||
|
usage |
||||
|
echo "ERROR : Unknown option" |
||||
|
exit 3 |
||||
|
;; |
||||
|
esac |
||||
|
done |
||||
|
|
||||
|
if [ -z ${CONFIG} ]; then |
||||
|
echo "ERROR: the openssl configuration file is missing. option -f" |
||||
|
exit 1 |
||||
|
fi |
||||
|
if [ -z ${SSLDIR} ]; then |
||||
|
SSLDIR="/etc/calico/certs" |
||||
|
fi |
||||
|
|
||||
|
tmpdir=$(mktemp -d /tmp/calico_typha_certs.XXXXXX) |
||||
|
trap 'rm -rf "${tmpdir}"' EXIT |
||||
|
cd "${tmpdir}" |
||||
|
|
||||
|
mkdir -p "${SSLDIR} ${CADIR}" |
||||
|
|
||||
|
# Root CA |
||||
|
if [ -e "$CADIR/ca.key" ]; then |
||||
|
# Reuse existing CA |
||||
|
cp $CADIR/{ca.crt,ca.key} . |
||||
|
else |
||||
|
openssl genrsa -out ca.key 2048 > /dev/null 2>&1 |
||||
|
openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt -subj "/CN=calico-typha-ca" > /dev/null 2>&1 |
||||
|
fi |
||||
|
|
||||
|
# Typha server |
||||
|
openssl genrsa -out typha-server.key 2048 > /dev/null 2>&1 |
||||
|
openssl req -new -key typha-server.key -out typha-server.csr -subj "/CN=typha-server" -config ${CONFIG} > /dev/null 2>&1 |
||||
|
openssl x509 -req -in typha-server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out typha-server.crt -days 3650 -extensions ssl_client -extfile ${CONFIG} > /dev/null 2>&1 |
||||
|
|
||||
|
# Typha client |
||||
|
openssl genrsa -out typha-client.key 2048 > /dev/null 2>&1 |
||||
|
openssl req -new -key typha-client.key -out typha-client.csr -subj "/CN=typha-client" -config ${CONFIG} > /dev/null 2>&1 |
||||
|
openssl x509 -req -in typha-client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out typha-client.crt -days 3650 -extensions ssl_client -extfile ${CONFIG} > /dev/null 2>&1 |
||||
|
|
||||
|
# Install certs |
||||
|
if [ -e "$CADIR/ca.key" ]; then |
||||
|
# No pass existing CA |
||||
|
rm -f ca.crt ca.key |
||||
|
fi |
||||
|
|
||||
|
mv {*.crt,*.key} ${SSLDIR}/ |
@ -0,0 +1,20 @@ |
|||||
|
req_extensions = v3_req |
||||
|
distinguished_name = req_distinguished_name |
||||
|
|
||||
|
[req_distinguished_name] |
||||
|
|
||||
|
[ v3_req ] |
||||
|
basicConstraints = CA:FALSE |
||||
|
keyUsage = digitalSignature, keyEncipherment |
||||
|
|
||||
|
[ ssl_client ] |
||||
|
extendedKeyUsage = clientAuth, serverAuth |
||||
|
basicConstraints = CA:FALSE |
||||
|
subjectKeyIdentifier=hash |
||||
|
authorityKeyIdentifier=keyid,issuer |
||||
|
|
||||
|
[ v3_ca ] |
||||
|
basicConstraints = CA:TRUE |
||||
|
keyUsage = cRLSign, digitalSignature, keyCertSign |
||||
|
subjectKeyIdentifier=hash |
||||
|
authorityKeyIdentifier=keyid:always,issuer |
@ -0,0 +1,49 @@ |
|||||
|
--- |
||||
|
- name: Calico | Check if typha-server exists |
||||
|
command: "{{ bin_dir }}/kubectl -n kube-system get secret typha-server" |
||||
|
register: typha_server_secret |
||||
|
changed_when: false |
||||
|
failed_when: false |
||||
|
|
||||
|
- name: Calico | Ensure calico certs dir |
||||
|
file: |
||||
|
path: /etc/calico/certs |
||||
|
state: directory |
||||
|
when: typha_server_secret.rc != 0 |
||||
|
|
||||
|
- name: Calico | Copy ssl script for typha certs |
||||
|
copy: |
||||
|
src: make-ssl-typha.sh |
||||
|
dest: "{{ bin_dir }}/make-ssl-typha.sh" |
||||
|
mode: 0755 |
||||
|
when: typha_server_secret.rc != 0 |
||||
|
|
||||
|
- name: Calico | Copy ssl config for typha certs |
||||
|
copy: |
||||
|
src: openssl.conf |
||||
|
dest: /etc/calico/certs/openssl.conf |
||||
|
mode: 0644 |
||||
|
when: typha_server_secret.rc != 0 |
||||
|
|
||||
|
- name: Calico | Generate typha certs |
||||
|
command: >- |
||||
|
{{ bin_dir }}/make-ssl-typha.sh |
||||
|
-f /etc/calico/certs/openssl.conf |
||||
|
-c {{ kube_cert_dir }} |
||||
|
-d /etc/calico/certs |
||||
|
when: typha_server_secret.rc != 0 |
||||
|
|
||||
|
- name: Calico | Create typha tls secrets |
||||
|
command: >- |
||||
|
{{ bin_dir }}/kubectl -n kube-system |
||||
|
create secret tls {{ item.name }} |
||||
|
--cert {{ item.cert }} |
||||
|
--key {{ item.key }} |
||||
|
with_items: |
||||
|
- name: typha-server |
||||
|
cert: /etc/calico/certs/typha-server.crt |
||||
|
key: /etc/calico/certs/typha-server.key |
||||
|
- name: typha-client |
||||
|
cert: /etc/calico/certs/typha-client.crt |
||||
|
key: /etc/calico/certs/typha-client.key |
||||
|
when: typha_server_secret.rc != 0 |
xxxxxxxxxx