Создание файла конфигурации
Статические файлы конфигурации позволяют получить доступ к кластеру Kubernetes без использования CLI, например из систем непрерывной интеграции.
Также с помощью статического файла конфигурации можно настроить доступ к нескольким кластерам Kubernetes. Между описанными в конфигурациях кластерами Kubernetes можно быстро переключаться с помощью команды kubectl config use-context
. Подробнее о настройке доступа к нескольким кластерам Kubernetes читайте в документации Kubernetes.
Чтобы создать файл конфигурации:
- Подготовьте сертификат кластера Kubernetes.
- Создайте объект ServiceAccount.
- Подготовьте токен объекта ServiceAccount.
- Создайте и заполните файл конфигурации.
- Проверьте результат.
Для выполнения bash-команд вам понадобится парсер JSON-файлов — jq.
Получите уникальный идентификатор кластера Kubernetes
Для обращения к кластеру Kubernetes используйте его уникальный идентификатор. Запишите его в переменную для использования в других командах.
-
Узнайте уникальный идентификатор кластера Kubernetes:
Консоль управленияCLI- Перейдите на страницу каталога и выберите Managed Service for Kubernetes.
- Нажмите на имя нужного кластера Kubernetes.
В блоке Общая информация отобразится уникальный идентификатор кластера Kubernetes.
$ yc managed-kubernetes cluster list +----------------------+----------+---------------------+---------+---------+-------------------------+----------------------+ | ID | NAME | CREATED AT | HEALTH | STATUS | EXTERNAL ENDPOINT | INTERNAL ENDPOINT | +----------------------+----------+---------------------+---------+---------+-------------------------+----------------------+ | catb3ppsdsh7vajr216f | my-k8s | 2019-09-04 15:17:11 | HEALTHY | RUNNING | https://84.201.148.31/ | https://10.0.0.24/ | +----------------------+----------+---------------------+---------+---------+-------------------------+----------------------+
-
Запишите уникальный идентификатор кластера Kubernetes в переменную.
BashPowerShellВыполните команду:
CLUSTER_ID=catb3ppsdsh7vajr216f
Выполните команду:
$CLUSTER_ID = "catb3ppsdsh7vajr216f"
Подготовьте сертификат кластера Kubernetes
Сохраните сертификат кластера Kubernetes в файл ca.pem
. С помощью этого сертификата подтверждается подлинность кластера 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
-
Получите подробную информацию о кластере Kubernetes в формате JSON и сохраните ее в переменную
$CLUSTER
:$CLUSTER = yc managed-kubernetes cluster get --id $CLUSTER_ID --format json | ConvertFrom-Json
-
Получите сертификат кластера Kubernetes и сохраните его в файл
ca.pem
:$CLUSTER.master.master_auth.cluster_ca_certificate | Set-Content ca.pem
Создайте объект ServiceAccount
Создайте объект ServiceAccount
для взаимодействия с API Kubernetes внутри кластера Kubernetes.
-
Сохраните следующую спецификацию для создания объекта
ServiceAccount
в YAML-файл с названиемsa.yaml
.Подробную спецификацию объекта
ServiceAccount
читайте в документации Kubernetes.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
в кластере Kubernetes.
Выполните команду, которая:
- Получает информацию о сервисном аккаунте
admin-user
в формате JSON. - Оставляет только информацию о сертификате и убирает лишние кавычки из содержимого токена.
- Раскодирует токен из формата Base64.
- Записывает содержимое токена в переменную
SA_TOKEN
.
SA_TOKEN=$(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | \
grep admin-user | \
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-адрес кластера Kubernetes
Получите IP-адрес кластера Kubernetes и добавьте его в переменную MASTER_ENDPOINT
для дальнейшего использования.
Выполните команду, которая:
- Получает информацию о кластере Kubernetes с уникальным идентификатором
c497ipckbqppifcvrnrk
в формате JSON. - Оставляет только IP-адрес кластера Kubernetes.
- Убирает лишние кавычки из содержимого.
- Записывает IP-адрес в переменную
MASTER_ENDPOINT
.
Для подключения к API кластера Kubernetes из интернета (вне Облака).
MASTER_ENDPOINT=$(yc managed-kubernetes cluster get --id $CLUSTER_ID \
--format json | \
jq -r .master.endpoints.external_v4_endpoint)
Для подключения к API кластера Kubernetes для подключения к мастеру из облачных сетей.
MASTER_ENDPOINT=$(yc managed-kubernetes cluster get --id $CLUSTER_ID \
--format json | \
jq -r .master.endpoints.internal_v4_endpoint)
Выполните команду для подключения к API кластера Kubernetes из интернета (вне Облака):
$MASTER_ENDPOINT = $CLUSTER.master.endpoints.external_v4_endpoint
Для подключения к API кластера Kubernetes из облачных сетей выполните команду:
$MASTER_ENDPOINT = $CLUSTER.master.endpoints.internal_v4_endpoint
Создайте и заполните файл конфигурации
-
Добавьте сведения о кластере Kubernetes в файл конфигурации.
BashPowerShellВыполните команду:
kubectl config set-cluster sa-test2 \ --certificate-authority=ca.pem \ --server=$MASTER_ENDPOINT \ --kubeconfig=test.kubeconfig
kubectl config set-cluster sa-test2 ` --certificate-authority=ca.pem ` --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