Vault PKI Intermediate SETUP CAs for ALL SERVICES Kubernetes the hard way v2
Материал из noname.com.ua
Прежде чем начать
Для понимания ЗАЧЕМ это делается - можно просмотреть Описание СА и сертификатов (которые будут созданы в этой секции)
Однако это не требуется - можно сначала сделать все необходимые настройки, и только после разобрать зачем они нужны
Terraform
По-хорошему эту часть надо делать не скриптами на баше и вызовами vault
, а с помощью terraform
, но пока-что руки не дошли переделать.
Какие есть CA
В этой инсталляции используются следующие CA
k8s_pki_root_ca/
k8s Root CA, Корневой СА, которым подписаны промежуточные СА и только они. Все остальные сертификаты подписаны промежуточными СА.k8s_pki_intermediate_ca_for_service_etcd/
Intermediate CA for ETCd service, СА которым подписываются сертификаты дляetcd
k8s_pki_intermediate_ca_for_service_kube_apiserver_client_auth/
Intermediate CA for K8S: kube-apiserver CLIENT_AUTHk8s_pki_intermediate_ca_for_service_kube_apiserver_tls/
Intermediate CA for K8S: kube-apiserver TLSk8s_pki_intermediate_ca_for_service_kube_controller_manager_tls/
Intermediate CA for K8S: kube-controller-manager TLSk8s_pki_intermediate_ca_for_service_kube_scheduler_tls/
Intermediate CA for K8S: kube-scheduler TLSk8s_pki_intermediate_ca_for_service_kubelet_client_auth/
Intermediate CA for K8S: kubelet CLIENT_AUTHk8s_pki_intermediate_ca_for_service_kubelet_tls/
Intermediate CA for K8S: kubelet TLS
k8s_pki_intermediate_ca_for_service_etcd/
k8s_pki_intermediate_ca_for_service_etcd/
- используется для клиентских и серверных сертификатов etcd
.
Строго говоря, не является частью k8s и настраивается отдельно (Настройка PKI для etcd
)
- для шифрования endpoints
- для авторизации клиентов
tls
k8s_pki_intermediate_ca_for_service_kube_apiserver_tls/
k8s_pki_intermediate_ca_for_service_kube_controller_manager_tls/
k8s_pki_intermediate_ca_for_service_kube_scheduler_tls/
k8s_pki_intermediate_ca_for_service_kubelet_tls/
Для всех TLS-PKI в целом настройка практически одинаковая
Общие переменные
#!/bin/bash export SERVICE_NAME='kube-apiserver' #export SERVICE_NAME="kube-controller-manager" #export SERVICE_NAME="kube-scheduler" #export SERVICE_NAME="kubelet" export PKI_PATH_PREFIX="k8s_pki_intermediate_ca_for_service" export USAGE="TLS" export SERVICE_NAME_UNDERSCORE=$(echo ${SERVICE_NAME} | sed 's/-/_/g') export USAGE_LOWERCASE=$(echo "${USAGE,,}") export PKI_PATH="${PKI_PATH_PREFIX}_${SERVICE_NAME_UNDERSCORE}_${USAGE_LOWERCASE}" export VAULT_ADDR=http://vault.home:8200 export VAULT_TOKEN="s.Yb1J2VamFyYoav3VVE2YQQ88" export INTERMEDIATE_CA_DESCRIPTION="PKI Intermediate CA for K8S: ${SERVICE_NAME} ${USAGE}" COMMON_NAME="Intermediate CA for service ${SERVICE_NAME} ${USAGE}" COUNTRY="Ukraine" LOCALITY="Kharkov" STREET_ADDRESS="Lui Pastera st. 322 app. 131" POSTAL_CODE="61172" ORGNIZATION="K8s The Hardest Way Labs" OU="IT" TTL="175200h" MAX_LEASE_TIME="175200h" COMMON_SETTINGS=() COMMON_SETTINGS+=( "common_name=${COMMON_NAME}") COMMON_SETTINGS+=( "country=${COUNTRY}" ) COMMON_SETTINGS+=( "locality=${LOCALITY}" ) COMMON_SETTINGS+=( "street_address=${STREET_ADDRESS}" ) COMMON_SETTINGS+=( "postal_address=${POSTAL_CODE}" ) COMMON_SETTINGS+=( "organization=${ORGNIZATION}" ) COMMON_SETTINGS+=( "ou=${OU}" ) COMMON_SETTINGS+=( "ttl=${TTL}" )