Vault PKI Intermediate SETUP CAs for ALL SERVICES Kubernetes the hard way v2: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 38: Строка 38:
 
==<code>k8s_pki_intermediate_ca_for_service_kube_scheduler_tls/</code>==
 
==<code>k8s_pki_intermediate_ca_for_service_kube_scheduler_tls/</code>==
 
==<code>k8s_pki_intermediate_ca_for_service_kubelet_tls/</code>==
 
==<code>k8s_pki_intermediate_ca_for_service_kubelet_tls/</code>==
  +
  +
Для всех TLS-PKI в целом настройка практически одинаковая
  +
  +
==Общие переменные==
  +
<PRE>
  +
#!/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}" )
  +
</PRE>
  +
 
=client_auth=
 
=client_auth=
   

Версия 15:03, 21 декабря 2022

Прежде чем начать

Для понимания ЗАЧЕМ это делается - можно просмотреть Описание СА и сертификатов (которые будут созданы в этой секции)
Однако это не требуется - можно сначала сделать все необходимые настройки, и только после разобрать зачем они нужны

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/