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_AUTH
  • k8s_pki_intermediate_ca_for_service_kube_apiserver_tls/ Intermediate CA for K8S: kube-apiserver TLS
  • k8s_pki_intermediate_ca_for_service_kube_controller_manager_tls/ Intermediate CA for K8S: kube-controller-manager TLS
  • k8s_pki_intermediate_ca_for_service_kube_scheduler_tls/ Intermediate CA for K8S: kube-scheduler TLS
  • k8s_pki_intermediate_ca_for_service_kubelet_client_auth/ Intermediate CA for K8S: kubelet CLIENT_AUTH
  • k8s_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}" )

client_auth

k8s_pki_intermediate_ca_for_service_kube_apiserver_client_auth/

k8s_pki_intermediate_ca_for_service_kubelet_client_auth/