Обновить сертификаты для системных компонентов
Для взаимодействия системных компонентов Kubernetes нужны актуальные сертификаты. Они обновляются автоматически каждые 30 дней. Если при обновлении сертификатов возникает ошибка, вы можете обновить сертификаты в панели управления или через API Managed Kubernetes.
Информация об обновлении сертификатов отражается в логах кластера.
При каждом обновлении сертификатов меняется kubeconfig-файл, поэтому к кластеру нужно заново подключаться. Чтобы не подключаться заново, настройте обновление через ServiceAccount Token.
Обновить сертификаты при возникновении ошибки
Если при автоматическом обновлении сертификатов возникла ошибка ROTATE CERTS = ERROR
, можно обновить сертификаты в панели управления или через API Managed Kubernetes.
- В панели управления перейдите в раздел Облачная платформа → Kubernetes.
- Откройте страницу кластера → вкладка Настройки.
- В блоке Доступ к кластеру нажмите Обновить сертификаты.
- Заново подключитесь к кластеру.
Настроить обновление сертификатов через ServiceAccount Token
ServiceAccount Token — это способ авторизации в Kubernetes API. Он позволяет не обновлять kubeconfig-файл после каждого обновления сертификатов.
Процесс получения ServiceAccount Token зависит от версии Kubernetes:
Для версии Kubernetes 1.23 и ниже
Linux
Windows
-
Создайте ServiceAccount:
kubectl -n kube-system create serviceaccount <serviceaccount_name>
Укажите
<serviceaccount_name>
— имя сервисного аккаунта. -
Создайте ClusterRoleBinding (группу для нового пользователя) и добавьте роль с правами администратора (cluster-admin):
kubectl create clusterrolebinding <clusterrolebinding_name> --clusterrole=cluster-admin --serviceaccount=kube-system:<serviceaccount_name>
Укажите
<clusterrolebinding_name>
— имя группы для нового пользователя. -
Добавьте в переменную окружения
TOKENNAME
имя секрета созданного ServiceAccount, в котором хранится токен:export TOKENNAME=$(kubectl -n kube-system get serviceaccount/<serviceaccount_name> -o jsonpath='{.secrets[0].name}')
-
Добавьте в переменную окружения
TOKEN
декодированный токен из секрета:export TOKEN=$(kubectl -n kube-system get secret $TOKENNAME -o jsonpath='{.data.token}' | base64 --decode)
-
Проверьте работоспособность токена — сделайте запрос в Kubernetes API с токеном в заголовке:
curl -k -H "Authorization: Bearer $TOKEN" -X GET "https://<kube_api_ip>:6443/api/v1/nodes" | json_pp
Укажите
<kube_api_ip>
— IP-адрес кластера в панели управления. -
Добавьте ServiceAccount в kubeconfig-файл:
kubectl config set-credentials <serviceaccount_name> --token=$TOKEN
-
Переключите контекст:
kubectl config set-context --current --user=<serviceaccount_name>
-
Проверьте работоспособность — сделайте любой запрос в Kubernetes API. Например, запросите список нод кластера:
kubectl get nodes
-
Обновленный kubeconfig-файл будет находиться в домашней директории
$HOME/.kube/config
-
Запустите PowerShell от имени администратора.
-
Создайте ServiceAccount:
kubectl -n kube-system create serviceaccount <serviceaccount_name>
Укажите
<serviceaccount_name>
— имя сервисного аккаунта. -
Создайте ClusterRoleBinding (группу для нового пользователя) и добавьте роль с правами администратора (cluster-admin):
kubectl create clusterrolebinding <clusterrolebinding_name> --clusterrole=cluster-admin --serviceaccount=kube-system:<serviceaccount_name>
Укажите
<clusterrolebinding_name>
— имя группы для нового пользователя. -
Получите имя секрета созданного ServiceAccount, в котором хранится токен:
$env:token_name = kubectl -n kube-system get serviceaccount/<serviceaccount_name> -o jsonpath='{.secrets[0].name}'
-
Добавьте в переменную
token
декодированный токен из секрета:$env:token = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String((kubectl -n kube-system get secret $token_name -o jsonpath='{.data.token}')))
-
Добавьте ServiceAccount в kubeconfig-файл:
kubectl config set-credentials <serviceaccount_name> --token=$token
-
Переключите контекст:
kubectl config set-context --current --user=<serviceaccount_name>
-
Проверьте работоспособность — сделайте любой запрос в Kubernetes API. Например, запросите список нод кластера:
kubectl get nodes
-
Обновленный kubeconfig-файл будет находиться в домашней директории
$env:USERPROFILE/.kube/config
Для версии Kubernetes 1.24 и выше
Linux
Windows
-
Создайте ServiceAccount:
kubectl -n kube-system create serviceaccount <serviceaccount_name>
Укажите
<serviceaccount_name>
— имя сервисного аккаунта. -
Создайте ClusterRoleBinding (группу для нового пользователя) и добавьте роль с правами администратора (cluster-admin):
kubectl create clusterrolebinding <clusterrolebinding_name> --clusterrole=cluster-admin --serviceaccount=kube-system:<serviceaccount_name>
Укажите
<clusterrolebinding_name>
— имя группы для нового пользователя. -
Получите имя секрета созданного 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 -
Добавьте в переменную окружения
TOKEN
декодированный токен из секрета:export TOKEN=$(kubectl -n kube-system get secret <serviceaccount_name>-token -o jsonpath='{.data.token}' | base64 --decode)
-
Проверьте работоспособность токена — сделайте запрос в Kubernetes API с токеном в заголовке:
curl -k -H "Authorization: Bearer $TOKEN" -X GET "https://<kube_api_ip>:6443/api/v1/nodes" | json_pp
Укажите
<kube_api_ip>
— IP-адрес кластера в панели управления. -
Добавьте ServiceAccount в kubeconfig-файл:
kubectl config set-credentials <serviceaccount_name> --token=$TOKEN
-
Переключите контекст:
kubectl config set-context --current --user=<serviceaccount_name>
-
Проверьте работоспособность — сделайте любой запрос в Kubernetes API. Например, запросите список нод кластера:
kubectl get nodes
-
Обновленный kubeconfig-файл будет находиться в домашней директории
$HOME/.kube/config
-
Запустите PowerShell от имени администратора.
-
Создайте ServiceAccount:
kubectl -n kube-system create serviceaccount <serviceaccount_name>
Укажите
<serviceaccount_name>
— имя сервисного аккаунта. -
Создайте ClusterRoleBinding (группу для нового пользователя) и добавьте роль с правами администратора (cluster-admin):
kubectl create clusterrolebinding <clusterrolebinding_name> --clusterrole=cluster-admin --serviceaccount=kube-system:<serviceaccount_name>