Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Создание kubeconfig для пользователя

В разделе описывается процедура создания kubeconfig для пользователя с использованием сертификатов, сгенерированных в StarVault

1. Предварительные условия:

  • У вас есть токен доступа к хранилищу секретов StarVault с привилегиями root

  • У вас есть доступ к кластеру с учетной записью, имеющей роль cluster-admin в Kubernetes

2. Шаги по созданию kubeconfig

  1. Подключитесь к мастер-узлу и выполните вход в StarVault:

    starvault login
  2. Сгенерируйте роль. В max_ttl указывается максимальный срок действия в часах. В текущем примере он составляет 1 год

    starvault write nova-kubernetes-pki-int/roles/example-user \
        allow_any_name=true \
        ext_key_usage="ClientAuth" \
        max_ttl="8760h" \
        key_type="rsa" \
        key_bits="2048" \
        server_flag="false" \
        client_flag="true"
  3. Сгенерируйте сертификат и сохраните его локально. Значение ttl не должно превышать срок действия, заданный на предыдущем шаге

    starvault write -format=json nova-kubernetes-pki-int/issue/example-user \
        common_name="example" \
        ttl="8760h" > /tmp/example-cert.json
  4. Извлеките сертификат и ключ

    jq -r .data.certificate /tmp/example-cert.json > /tmp/sa-client.crt
    jq -r .data.private_key /tmp/example-cert.json > /tmp/sa-client.key
  5. Сгенерируйте kubeconfig

    touch kubeconfig.conf
    export KUBECONFIG=kubeconfig.conf
    kubectl config set-cluster my-cluster --server=https://127.0.0.1:6443 --certificate-authority=/etc/kubernetes/pki/ca.crt --embed-certs=true
    kubectl config set-credentials example --client-certificate=/tmp/sa-client.crt --client-key=/tmp/sa-client.key --embed-certs=true
    kubectl config set-context example-context --cluster=my-cluster --user=example
    kubectl config use-context example-context
  6. Создайте ClusterRoleBinding с требуемыми правами. Ниже приведён пример для роли cluster-admin. Имя пользователя должно соответствовать Common Name, указанному при генерации сертификата

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
        name: test
    subjects:
        - kind: User
            apiGroup: rbac.authorization.k8s.io
            name: example
    roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: cluster-admin