Создание статического файла конфигурации
Статические файлы конфигурации позволяют получить доступ к кластеру Managed Service for Kubernetes без использования CLI, например из систем непрерывной интеграции.
Также с помощью статического файла конфигурации можно настроить доступ к нескольким кластерам Managed Service for Kubernetes. Между описанными в конфигурациях кластерами Managed Service for Kubernetes можно быстро переключаться с помощью команды kubectl config use-context
. Подробнее о настройке доступа к нескольким кластерам Managed Service for Kubernetes читайте в документации Kubernetes
Чтобы создать файл конфигурации:
- Получите уникальный идентификатор кластера.
- Подготовьте сертификат кластера Managed Service for Kubernetes.
- Создайте объект ServiceAccount.
- Подготовьте токен объекта ServiceAccount.
- Создайте и заполните файл конфигурации.
- Проверьте результат.
Для выполнения bash-команд вам понадобится парсер JSON-файлов — jq
Перед началом работы
- Создайте сервисный аккаунт.
- Создайте кластер Managed Service for Kubernetes любой подходящей конфигурации.
- Создайте группу узлов любой подходящей конфигурации.
- Установите kubectl
и настройте его на работу с созданным кластером. Учетные данные добавьте в конфигурационный файлtest.kubeconfig
с помощью флага--kubeconfig=test.kubeconfig
.
Получите уникальный идентификатор кластера
Для обращения к кластеру Managed Service for Kubernetes используйте его уникальный идентификатор. Запишите его в переменную для использования в других командах.
-
Узнайте уникальный идентификатор кластера Managed Service for Kubernetes:
Консоль управленияCLI- Перейдите на страницу каталога и выберите Managed Service for Kubernetes.
- Нажмите на имя нужного кластера Managed Service for Kubernetes.
В поле Идентификатор отобразится уникальный идентификатор кластера Managed Service for Kubernetes.
yc managed-kubernetes cluster list
Результат:
+----------------------+--------+---------------------+---------+---------+------------------------+--------------------+ | ID | NAME | CREATED AT | HEALTH | STATUS | EXTERNAL ENDPOINT | INTERNAL ENDPOINT | +----------------------+--------+---------------------+---------+---------+------------------------+--------------------+ | catb3ppsdsh7******** | my-k8s | 2019-09-04 15:17:11 | HEALTHY | RUNNING | https://84.201.148.31/ | https://10.0.0.24/ | +----------------------+--------+---------------------+---------+---------+------------------------+--------------------+
-
Запишите уникальный идентификатор кластера Managed Service for Kubernetes в переменную:
BashPowerShellCLUSTER_ID=catb3ppsdsh7********
$CLUSTER_ID = "catb3ppsdsh7********"
Подготовьте сертификат кластера
Сохраните сертификат кластера Managed Service for Kubernetes в файл ca.pem
. С помощью этого сертификата подтверждается подлинность кластера Managed Service for Kubernetes.
Выполните команду, которая:
- Получает информацию о кластере Managed Service for Kubernetes в формате JSON.
- Оставляет только информацию о сертификате и убирает лишние кавычки из содержимого сертификата.
- Убирает лишние символы из содержимого сертификата.
- Сохраняет сертификат в файл
ca.pem
.
yc managed-kubernetes cluster get --id $CLUSTER_ID --format json | \
jq -r .master.master_auth.cluster_ca_certificate | \
awk '{gsub(/\\n/,"\n")}1' > ca.pem
-
Получите подробную информацию о кластере Managed Service for Kubernetes в формате JSON и сохраните ее в переменную
$CLUSTER
:$CLUSTER = yc managed-kubernetes cluster get --id $CLUSTER_ID --format json | ConvertFrom-Json
-
Получите сертификат кластера Managed Service for Kubernetes и сохраните его в файл
ca.pem
:$CLUSTER.master.master_auth.cluster_ca_certificate | Set-Content ca.pem
Создайте объект ServiceAccount
Создайте объект ServiceAccount
для взаимодействия с API Kubernetes внутри кластера Managed Service for Kubernetes.
-
Сохраните следующую спецификацию для создания объекта
ServiceAccount
и секрета для него в YAML-файл с названиемsa.yaml
.Подробную спецификацию объекта
ServiceAccount
читайте в документации Kubernetes .Версия Kubernetes 1.24 и вышеВерсия Kubernetes 1.23 и нижеapiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kube-system --- apiVersion: v1 kind: Secret type: kubernetes.io/service-account-token metadata: name: admin-user-token namespace: kube-system annotations: kubernetes.io/service-account.name: "admin-user"
apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kube-system
-
Создайте объект
ServiceAccount
и секрет для него:kubectl create -f sa.yaml
Подготовьте токен объекта ServiceAccount
Токен необходим для аутентификации объекта ServiceAccount
в кластере Managed Service for Kubernetes.
Выполните команду, которая:
- Получает информацию о созданном сервисном аккаунте
admin-user
в формате JSON. - Оставляет только информацию о токене и убирает лишние кавычки из содержимого токена.
- Раскодирует токен из формата Base64.
- Записывает содержимое токена в переменную
SA_TOKEN
.
SA_TOKEN=$(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | \
grep admin-user-token | \
awk '{print $1}') -o json | \
jq -r .data.token | \
base64 -d)
-
Получите токен объекта
ServiceAccount
. Кавычки из содержимого уберутся автоматически:$SECRET = kubectl -n kube-system get secret -o json | ` ConvertFrom-Json | ` Select-Object -ExpandProperty items | ` Where-Object { $_.metadata.name -like "*admin-user*" }
-
Раскодируйте токен из формата Base64:
$SA_TOKEN = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($SECRET.data.token))
Получите IP-адрес кластера
Получите IP-адрес кластера Managed Service for Kubernetes и добавьте его в переменную MASTER_ENDPOINT
для дальнейшего использования.
Выполните команду, которая:
- Получает в формате JSON информацию о кластере Managed Service for Kubernetes по его уникальному идентификатору.
- Оставляет только IP-адрес кластера Managed Service for Kubernetes.
- Убирает лишние кавычки из содержимого.
- Записывает IP-адрес в переменную
MASTER_ENDPOINT
.
Для подключения к API кластера Managed Service for Kubernetes из интернета (вне Yandex Cloud).
MASTER_ENDPOINT=$(yc managed-kubernetes cluster get --id $CLUSTER_ID \
--format json | \
jq -r .master.endpoints.external_v4_endpoint)
Для подключения к API кластера Managed Service for Kubernetes для подключения к мастеру из облачных сетей.
MASTER_ENDPOINT=$(yc managed-kubernetes cluster get --id $CLUSTER_ID \
--format json | \
jq -r .master.endpoints.internal_v4_endpoint)
Выполните команду для подключения к API кластера Managed Service for Kubernetes из интернета (вне Yandex Cloud):
$MASTER_ENDPOINT = $CLUSTER.master.endpoints.external_v4_endpoint
Для подключения к API кластера Managed Service for Kubernetes из облачных сетей выполните команду:
$MASTER_ENDPOINT = $CLUSTER.master.endpoints.internal_v4_endpoint
Дополните файл конфигурации
-
Добавьте сведения о кластере Managed Service for Kubernetes в файл конфигурации.
BashPowerShellВыполните команду:
kubectl config set-cluster sa-test2 \ --certificate-authority=ca.pem \ --embed-certs \ --server=$MASTER_ENDPOINT \ --kubeconfig=test.kubeconfig
Выполните команду:
kubectl config set-cluster sa-test2 ` --certificate-authority=ca.pem ` --embed-certs ` --server=$MASTER_ENDPOINT ` --kubeconfig=test.kubeconfig
-
Добавьте информацию о токене для
admin-user
в файл конфигурации.BashPowerShellВыполните команду:
kubectl config set-credentials admin-user \ --token=$SA_TOKEN \ --kubeconfig=test.kubeconfig
Выполните команду:
kubectl config set-credentials admin-user ` --token=$SA_TOKEN ` --kubeconfig=test.kubeconfig
-
Добавьте информацию о контексте в файл конфигурации.
BashPowerShellВыполните команду:
kubectl config set-context default \ --cluster=sa-test2 \ --user=admin-user \ --kubeconfig=test.kubeconfig
Выполните команду:
kubectl config set-context default ` --cluster=sa-test2 ` --user=admin-user ` --kubeconfig=test.kubeconfig
-
Используйте созданную конфигурацию для дальнейшей работы.
BashPowerShellВыполните команду:
kubectl config use-context default \ --kubeconfig=test.kubeconfig
Выполните команду:
kubectl config use-context default ` --kubeconfig=test.kubeconfig
Проверьте результат
Проверьте, что конфигурация настроена верно, выполнив команду:
kubectl get namespace --kubeconfig=test.kubeconfig
Результат:
NAME STATUS AGE
default Active 9d