В принципе — это шпаргалка, что бы не забыть как все на самом деле происходит 🙂
Создание SSL ключа и сертификата пользователя
Создаём временную директорию:
# mkdir tmp
# cd tmp
Генерируем SSL ключ пользователя:
# openssl genrsa -out artur.key 4096
Создаём конфигурационный файл для openssl — csr.cnf следующего содержания:
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[ dn ]
CN = artur
O = dev
[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=serverAuth,clientAuth
Генерируем запрос на сертификат:
# openssl req -config csr.cnf -new -key artur.key -nodes -out artur.csr
Формируем запрос на сертификат в формате base64 и помещаем его в переменную среды окружения:
# export BASE64_CSR=$(cat artur.csr | base64 | tr -d '\n')
Создаём yaml файл csr.yaml с запросом на подпись следующего содержания:
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
name: artur_csr
spec:
groups:
- system:authenticated
request: ${BASE64_CSR}
usages:
- digital signature
- key encipherment
- server auth
- client auth
Помещаем запрос в кубернетес:
# cat csr.yaml | envsubst | kubectl apply -f -
Контролируем наличие запроса:
# kubectl get csr
Подписываем и генерируем сертификат:
# kubectl certificate approve artur_csr
Копируем во временную директорию файл ~/.kube/config и в разделе users удаляем из него строки client-certificate-data и client-key-data.
Добавляем в config строку с сертификатом клиента в формате base64:
# echo "client-certificate-data: $(kubectl get csr artur_csr -o jsonpath={.status.certificate})" >> config
В редакторе делаем правильное выравнивание строки. Также везде меняем пользователя на artur.
Добавляем в config файл ключ пользователя в формате base64:
# kubectl --kubeconfig ./config config set-credentials artur --client-key=artur.key --embed-certs=true
Смотрим получившийся конфигурационный файл:
# kubectl --kubeconfig ./config config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://192.168.0.45:6443
name: cluster.local
contexts:
- context:
cluster: cluster.local
user: artur
name: artur@cluster.local
current-context: artur@cluster.local
kind: Config
preferences: {}
users:
- name: artur
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
Передаём файл config пользователю или копируем его в директорию ~/.kube пользователя.
Шпаргалка сделана по мотивам записок доброго человека.