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

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

Для взаимодействия системных компонентов 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