Перейти к основному содержимому
Обновить сертификаты для системных компонентов
Последнее изменение:

Обновить сертификаты для системных компонентов

Для взаимодействия системных компонентов Kubernetes нужны актуальные сертификаты. Они обновляются автоматически каждые 30 дней. Если при обновлении сертификатов возникает ошибка, вы можете обновить сертификаты в панели управления или через API Managed Kubernetes.

Информация об обновлении сертификатов отражается в логах кластера.

При каждом обновлении сертификатов меняется kubeconfig-файл, поэтому к кластеру нужно заново подключаться. Чтобы не подключаться заново, настройте обновление через ServiceAccount Token.

Обновить сертификаты при возникновении ошибки

Если при автоматическом обновлении сертификатов возникла ошибка ROTATE CERTS = ERROR, можно обновить сертификаты в панели управления или через API Managed Kubernetes.

  1. В панели управления перейдите в раздел Облачная платформаKubernetes.
  2. Откройте страницу кластера → вкладка Настройки.
  3. В блоке Доступ к кластеру нажмите Обновить сертификаты.
  4. Заново подключитесь к кластеру.

Настроить обновление сертификатов через ServiceAccount Token

ServiceAccount Token — это способ авторизации в Kubernetes API. Он позволяет не обновлять kubeconfig-файл после каждого обновления сертификатов.

Процесс получения ServiceAccount Token зависит от версии Kubernetes:

Для версии Kubernetes 1.23 и ниже

  1. Создайте ServiceAccount:

    kubectl -n kube-system create serviceaccount <serviceaccount_name>

    Укажите <serviceaccount_name> — имя сервисного аккаунта.

  2. Создайте ClusterRoleBinding (группу для нового пользователя) и добавьте роль с правами администратора (cluster-admin):

    kubectl create clusterrolebinding <clusterrolebinding_name> --clusterrole=cluster-admin --serviceaccount=kube-system:<serviceaccount_name>

    Укажите <clusterrolebinding_name> — имя группы для нового пользователя.

  3. Добавьте в переменную окружения TOKENNAME имя секрета созданного ServiceAccount, в котором хранится токен:

    export TOKENNAME=$(kubectl -n kube-system get serviceaccount/<serviceaccount_name> -o jsonpath='{.secrets[0].name}')
  4. Добавьте в переменную окружения TOKEN декодированный токен из секрета:

    export TOKEN=$(kubectl -n kube-system get secret $TOKENNAME -o jsonpath='{.data.token}' | base64 --decode)
  5. Проверьте работоспособность токена — сделайте запрос в Kubernetes API с токеном в заголовке:

    curl -k -H "Authorization: Bearer $TOKEN" -X GET "https://<kube_api_ip>:6443/api/v1/nodes" | json_pp

    Укажите <kube_api_ip> — IP-адрес кластера в панели управления.

  6. Добавьте ServiceAccount в kubeconfig-файл:

    kubectl config set-credentials <serviceaccount_name> --token=$TOKEN
  7. Переключите контекст:

    kubectl config set-context --current --user=<serviceaccount_name>
  8. Проверьте работоспособность — сделайте любой запрос в Kubernetes API. Например, запросите список нод кластера:

    kubectl get nodes
  9. Обновленный kubeconfig-файл будет находиться в домашней директории $HOME/.kube/config

Для версии Kubernetes 1.24 и выше

  1. Создайте ServiceAccount:

    kubectl -n kube-system create serviceaccount <serviceaccount_name>

    Укажите <serviceaccount_name> — имя сервисного аккаунта.

  2. Создайте ClusterRoleBinding (группу для нового пользователя) и добавьте роль с правами администратора (cluster-admin):

    kubectl create clusterrolebinding <clusterrolebinding_name> --clusterrole=cluster-admin --serviceaccount=kube-system:<serviceaccount_name>

    Укажите <clusterrolebinding_name> — имя группы для нового пользователя.

  3. Получите имя секрета созданного ServiceAcсount, в котором хранится токен:

    kubectl -n kube-system apply -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
    name: <serviceaccount_name>-token
    annotations:
    kubernetes.io/service-account.name: <serviceaccount_name>
    type: kubernetes.io/service-account-token
    EOF
  4. Добавьте в переменную окружения TOKEN декодированный токен из секрета:

    export TOKEN=$(kubectl -n kube-system get secret <serviceaccount_name>-token -o jsonpath='{.data.token}' | base64 --decode)
  5. Проверьте работоспособность токена — сделайте запрос в Kubernetes API с токеном в заголовке:

    curl -k -H "Authorization: Bearer $TOKEN" -X GET "https://<kube_api_ip>:6443/api/v1/nodes" | json_pp

    Укажите <kube_api_ip> — IP-адрес кластера в панели управления.

  6. Добавьте ServiceAccount в kubeconfig-файл:

    kubectl config set-credentials <serviceaccount_name> --token=$TOKEN
  7. Переключите контекст:

    kubectl config set-context --current --user=<serviceaccount_name>
  8. Проверьте работоспособность — сделайте любой запрос в Kubernetes API. Например, запросите список нод кластера:

    kubectl get nodes
  9. Обновленный kubeconfig-файл будет находиться в домашней директории $HOME/.kube/config