В принципе — это шпаргалка, что бы не забыть как все на самом деле происходит 🙂
Создание 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 пользователя.
Шпаргалка сделана по мотивам записок доброго человека.