Как выдать доступ пользователю к кластеру k8s по сертификату
Содержание
  1. Пользователь генерит csr и передаёт администратору кластера openssl req -new -newkey rsa:2048 -nodes -keyout i.ivanov.key.pem -out i.ivanov.csr -subj "/CN=i.ivanov /O=MY.ORG"
  2. Администратор кластера создаёт манифест CSR в kubernetes, где сертификат закодирован в base64
    cat <<EOF | kubectl apply -f -
    apiVersion: certificates.k8s.io/v1
    kind: CertificateSigningRequest
    metadata:
      name: i.ivanov
    spec:
      request:
        <CSR_CONTENT>
      signerName: kubernetes.io/kube-apiserver-client
      usages:
      - client auth
    EOF
    
  3. Администратор кластера выпускает сертификат, подписанный куберовским CA kubectl certificate approve i.ivanov
  4. Администратор кластера копирует полученный сертификат и пересылает его пользователю. Подтвержденный csr хранится в течение часа kubectl get csr/i.ivanov -o json | jq -r '.status.certificate' | base64 -D > i.ivanov.crt.pem
  5. Пользователь добавляет в свой локальный ~/.kube/config настройки для кластера. Администратор передаёт значения certificate-authority-data, server, client-certificate-data (п. 4) пользователю.
  6. Управление доступом пользователей осуществляется через RBAC