Создание учетной записи для не интерактивного доступа (CI\CD, автоматизация)

  1. Если у вас уже есть Namespace, к которому будет выдаваться доступ, то переходите к следующему шагу. Если нет, то откройте страницу HomeNamespaces и нажмите «Create Namespace».
    В открывшемся окне введите имя и по желанию добавьте метки\сетевую политику, после чего нажмите «Create»:

    access for ci cd 1
  2. Необходимо создать сервисную учетную запись. Для этого, открываете страницу RBAC ManagementServiceAccounts и нажмите «Create ServiceAccount».
    В открывшемся окне введите имя и namespace из п.1 и нажмите «Create»:

    access for ci cd 2
  3. Далее необходимо создать роль, которой будет обладать сервисная учетная запись. Если у вас уже есть роль, то переходите к следующему шагу.
    Чтобы создать роль откройте страницу RBAC ManagementRoles и нажмите «Create Role». В открывшемся окне введите имя, namespace из п.1 и правила. Нажмите «Create»:

    access for ci cd 3
  4. Далее необходимо связать роль с сервисной учетной записью. Для этого откройте страницу RBAC ManagementRoleBindings и нажмите «Create Binding».
    В открывшемся окне выберите Binding type (в данной демонстрации это Namespace role binding, но вы так же можете привязать роль для всего кластера), введите имя для RoleBinding, выберите namespace (из п.1) из выпадающего списка. Затем, выберите роль, созданную на предыдущем шаге, а в качестве Subject выберите ServiceAccount, namespace из п.1 и имя сервисной учетной записи из п.2. Нажмите «Create»:

    access for ci cd 4
  5. Далее нам нужно создать токен для аутентификации. Для этого нажмите “+” в правом верхнем углу и в открывшемся окне вставьте следующий манифест, убедившись, что namespace и имя аккаунта в блоке annotations совпадают с вашими:

    apiVersion: v1
    kind: Secret
    type: kubernetes.io/service-account-token
    metadata:
      name: ci-cd-sa-token
      namespace: sa-access-test
      annotations:
        kubernetes.io/service-account.name: ci-cd-sa
  6. Теперь вы можете получить аутентификационную информацию для данного сервисного аккаунта. Для этого откройте страницу WorkloadsSecrets и выберите секрет из п.5. Из раздела data скопируйте ca.crt и token и закодируйте значение сертификата в base64 (вместо кодирования в base64 можно перейти на вкладку YAML и скопировать уже закодированное значение. При этом, у значения ca.crt необходимо удалить последние 4 символа «Cg==»)

  7. Для доступа к API с помощью HTTP-запроса сохраните ca.crt в файл, токен из п.6 в переменную TOKEN и неймспейс из п.1 в переменную NAMESPACE.
    Теперь выполните следующую команду подставив вместо <адрес_мастер_узла> IP или DNS вашего мастер-узла:
    curl --cacert cert.crt -H "Authorization: Bearer $TOKEN" "https://<адрес_мастер_узла>:6443/api/v1/namespaes/$NAMESPACE/pods/"

  8. Для доступа к кластеру с помощью утилиты kubectl вам необходимо создать конфиг файл. Для этого в шаблоне замените значения <ca.crt_из_секрета> и <токен_из_секрета> на данные из п.6, <имя_сервисного_аккаунта> на имя из п.2, <адрес_мастер_узла> на IP или FQDN вашего мастер-узла

    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: <ca.crt_из_секрета>
        server: https://<адрес_мастер_узла>:6443
      name: nova-kubernetes-cluster
    contexts:
    - context:
        cluster: nova-kubernetes-cluster
        user: <имя_сервисного_аккаунта>
      name: default
    current-context: default
    kind: Config
    preferences: {}
    users:
    - name: <имя_сервисного_аккаунта>
      user:
        token: <токен_из_секрета>