Поделиться через


Руководство. Настройка ролей управления доступом на основе ролей (RBAC) в Служба Azure Kubernetes (AKS) с помощью Ansible

Внимание

Для выполнения примеров сборников схем из этой статьи требуется Ansible 2.8 (или последующей версии).

Служба Azure Kubernetes (AKS) упрощает развертывание управляемого кластера Kubernetes в Azure. AKS снижает сложность управления службой Kubernetes и связанные временные затраты, делегируя ответственность за большую их часть облаку Azure. Размещенная в Azure служба Kubernetes отвечает за критические задачи, в частности за мониторинг работоспособности и техническое обслуживание. Azure управляет мастером Kubernetes. Управление и обслуживание приходится вести только для узлов агентов. Как управляемая среда Kubernetes, AKS предоставляется бесплатно, оплачиваются только узлы агента в кластерах, а не мастера.

AKS можно настроить для использования идентификатора Microsoft Entra для проверки подлинности пользователей. После настройки маркер проверки подлинности Microsoft Entra используется для входа в кластер AKS. Управление доступом на основе ролей может основываться на удостоверении пользователя или членстве в группах каталога.

Вы узнаете, как выполнять следующие задачи:

  • Создание кластера AKS с поддержкой идентификатора Microsoft Entra
  • Настройка роли RBAC в кластере

Необходимые компоненты

  • Установите библиотеку RedHat OpenShift - pip install openshift.

Настройка идентификатора записи Майкрософт для проверки подлинности AKS

При настройке идентификатора Microsoft Entra для проверки подлинности AKS настраиваются два приложения Microsoft Entra. Эту операцию должен выполнять администратор клиента Azure. Дополнительные сведения см. в разделе "Интеграция идентификатора Microsoft Entra с AKS".

Обратитесь к администратору клиента Azure, чтобы получить следующие значения:

  • секрет серверного приложения;
  • идентификатор серверного приложения;
  • идентификатор клиентского приложения.
  • Идентификатор клиента

Эти значения необходимы для запуска примера сборника схем.

Создание кластера AKS

В этом разделе описано, как создать AKS с приложением Microsoft Entra.

Ниже приведено несколько важных примечаний, которые следует рассмотреть при работе с примером сборника схем.

  • Сборник схем выполняет загрузку ssh_key из ~/.ssh/id_rsa.pub. При его изменении следует использовать однострочный формат, который начинается с "ssh-rsa" (без кавычек).

  • Значения client_id и client_secret загружаются из ~/.azure/credentials, который является файлом учетных данных по умолчанию. Эти значения можно установить в качестве субъекта-службы или загрузить их значения из переменных среды.

    client_id: "{{ lookup('env', 'AZURE_CLIENT_ID') }}"
    client_secret: "{{ lookup('env', 'AZURE_SECRET') }}"
    

Сохраните следующий сборник схем как aks-create.yml:

- name: Create resource group
  azure_rm_resourcegroup:
      name: "{{ resource_group }}"
      location: "{{ location }}"

- name: List supported kubernetes version from Azure
  azure_rm_aksversion_facts:
      location: "{{ location }}"
  register: versions

- name: Create AKS cluster with RBAC enabled
  azure_rm_aks:
      resource_group: "{{ resource_group }}"
      name: "{{ name }}"
      dns_prefix: "{{ name }}"
      enable_rbac: yes
      kubernetes_version: "{{ versions.azure_aks_versions[-1] }}"
      agent_pool_profiles:
        - count: 3
          name: nodepool1
          vm_size: Standard_D2_v2
      linux_profile:
          admin_username: azureuser
          ssh_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
      service_principal:
          client_id: "{{ lookup('ini', 'client_id section=default file=~/.azure/credentials') }}"
          client_secret: "{{ lookup('ini', 'secret section=default file=~/.azure/credentials') }}"
      aad_profile:
          client_app_id: "{{ client_app_id }}"
          server_app_id: "{{ server_app_id }}"
          server_app_secret: "{{ server_app_secret }}"
          tenant_id: "{{ app_tenant_id }}"
  register: aks

- name: Save cluster user config
  copy:
      content: "{{ aks.kube_config }}"
      dest: "aks-{{ name }}-kubeconfig-user"

- name: Get admin config of AKS
  azure_rm_aks_facts:
      resource_group: "{{ resource_group }}"
      name: "{{ name }}"
      show_kubeconfig: admin
  register: aks

- name: Save the kubeconfig
  copy:
      content: "{{ aks.aks[0].kube_config }}"
      dest: "aks-{{ name }}-kubeconfig"

Получение идентификатора объекта Microsoft Entra

Чтобы создать привязку RBAC, сначала необходимо получить идентификатор объекта Microsoft Entra.

  1. Войдите на портал Azure.

  2. В поле поиска в верхней части страницы введите идентификатор Microsoft Entra.

  3. Нажмите кнопку Enter.

  4. В меню Управление выберите Пользователи.

  5. В поле имени найдите свою учетную запись.

  6. В столбце Имя щелкните ссылку на свою учетную запись.

  7. В разделе Удостоверение скопируйте идентификатор объекта.

Создание привязки RBAC

В этом разделе вы создаете привязку роли или привязку роли кластера в AKS.

Сохраните следующий сборник схем как kube-role.yml:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cluster-admins
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: <your-aad-account>

Замените заполнитель идентификатором <your-aad-account>объекта клиента Microsoft Entra.

Сохраните приведенный ниже сборник схем, который развертывает новые роли в AKS, как aks-kube-deploy.yml.

- name: Apply role to AKS
  k8s:
      src: kube-role.yml
      kubeconfig: "aks-{{ name }}-kubeconfig"

Выполнение примера сборника схем

В этом разделе перечислены полные примеры сборника схем, который в этой статье вызывает создание задач.

Сохраните следующий сборник схем как aks-rbac.yml:

---
- hosts: localhost
  vars:
      resource_group: aksansibletest
      name: aksansibletest
      location: eastus
  tasks:
     - name: Ensure resource group exist
       azure_rm_resourcegroup:
           name: "{{ resource_group }}"
           location: "{{ location }}"

     - name: Create AKS
       vars:
           client_app_id: <client id>
           server_app_id: <server id>
           server_app_secret: <server secret>
           app_tenant_id: <tenant id>
       include_tasks: aks-create.yml

     - name: Enable RBAC
       include_tasks: aks-kube-deploy.yml

vars В разделе замените следующие заполнители сведениями Microsoft Entra:

  • <client id>
  • <server id>
  • <server secret>
  • <tenant id>

Запустите готовый сборник схем с помощью команды ansible-playbook.

ansible-playbook aks-rbac.yml

Проверка результатов

В этом разделе вы используете kubectl для получения списка узлов, созданных в этой статье.

В командной строке терминала введите следующую команду.

kubectl --kubeconfig aks-aksansibletest-kubeconfig-user get nodes

Эта команда перенаправит вас на страницу аутентификации. Войдите в систему с использованием учетной записи Azure.

После аутентификации kubectl выведет список узлов, как показано ниже.

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code XXXXXXXX to authenticate.
NAME                       STATUS   ROLES   AGE   VERSION
aks-nodepool1-33413200-0   Ready    agent   49m   v1.12.6
aks-nodepool1-33413200-1   Ready    agent   49m   v1.12.6
aks-nodepool1-33413200-2   Ready    agent   49m   v1.12.6

Очистка ресурсов

Удалите ресурсы Azure, созданные в рамках этой статьи, если они вам больше не нужны.

Сохраните следующий код как cleanup.yml:

---
- hosts: localhost
  vars:
      name: aksansibletest
      resource_group: aksansibletest
  tasks:
      - name: Clean up resource group
        azure_rm_resourcegroup:
            name: "{{ resource_group }}"
            state: absent
            force: yes
      - name: Remove kubeconfig
        file:
            state: absent
            path: "aks-{{ name }}-kubeconfig"

Запустите сборник схем с помощью команды ansible-playbook.

ansible-playbook cleanup.yml

Следующие шаги