Создание файла конфигурации

Статические файлы конфигурации позволяют получить доступ к кластеру Kubernetes без использования CLI, например из систем непрерываной интеграции.

Также с помощью статического файла конфигурации можно настроить доступ к нескольким кластерам Kubernetes. Между описанными в конфигурациях кластерами Kubernetes можно быстро переключаться с помощью команды kubectl config use-context. Подробнее о настройке доступа к нескольким кластерам Kubernetes читайте в документации Kubernetes.

Чтобы создать файл конфигурации:

Для выполнения bash-команд вам понадобится парсер JSON-файлов — jq.

Получите уникальный идентификатор кластера Kubernetes

Для обращения к кластеру Kubernetes используйте его уникальный идентификатор. Запишите его в переменную для использования в других командах.

  1. Узнайте уникальный идентификатор кластра 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/   |
    +----------------------+----------+---------------------+---------+---------+-------------------------+----------------------+
    
  2. Запишите уникальный идентификатор кластера Kubernetes в переменную.

    Выполните команду:

    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
  1. Получите подробную информацию о кластере Kubernetes в формате JSON и сохраните ее в переменную $CLUSTER:

    $CLUSTER = yc managed-kubernetes cluster get --id $CLUSTER_ID --format json | ConvertFrom-Json   
    
  2. Получите сертификат кластера Kubernetes и сохраните его в файл ca.pem:

    $CLUSTER.master.master_auth.cluster_ca_certificate | Set-Content ca.pem
    

Создайте объект ServiceAccount

Создайте объект ServiceAccount для взаимодействия с API Kubernetes внутри кластера Kubernetes.

  1. Сохраните следующую спецификацию для создания объекта ServiceAccount в YAML-файл с названием sa.yaml.

    Подробную спецификацию объекта ServiceAccount читайте в документации Kubernetes.

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin-user
      namespace: kube-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    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
    
  2. Создайте объект 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)
  1. Получите токен объекта ServiceAccount. Кавычки из содержимого уберутся автоматически:

    $SECRET = kubectl -n kube-system get secret -o json | `
        ConvertFrom-Json | `
        Select-Object -ExpandProperty items | `
        Where-Object { $_.metadata.name -like "*admin-user*" }
    
  2. Раскодируйте токен из формата 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.
MASTER_ENDPOINT=$(yc managed-kubernetes cluster get --id $CLUSTER_ID \
    --format json | \
    jq -r .master.endpoints.external_v4_endpoint)

Выполните команду:

$MASTER_ENDPOINT = $CLUSTER.master.endpoints.external_v4_endpoint

Создайте и заполните файл конфигурации

  1. Добавьте сведения о кластере Kubernetes в файл конфигурации.

    Выполните команду:

    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
    
  2. Добавьте информацию о токене для admin-user в файл конфигурации.

    Выполните команду:

    kubectl config set-credentials admin-user \
                    --token=$SA_TOKEN \
                    --kubeconfig=test.kubeconfig
    

    Выполните команду:

    kubectl config set-credentials admin-user `
                    --token=$SA_TOKEN `
                    --kubeconfig=test.kubeconfig
    
  3. Добавьте информацию о контексте в файл конфигурации.

    Выполните команду:

    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
    
  4. Используйте созданную конфигурацию для дальнейшей работы.

    Выполните команду:

    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