Руководство. Настройка ролей управления доступом на основе ролей (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 в кластере
Необходимые компоненты
- Подписка Azure. Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
- Субъект-служба Azure: создайте субъект-службу, записав следующие значения: appId, displayName, password и tenant.
Установите Ansible: выполните одно из указанных ниже действий.
- Установите и настройте Ansible на виртуальной машине Linux.
- Настройте Azure Cloud Shell и, если у вас нет доступа к виртуальной машине Linux, вы можете создать ее с помощью Ansible.
- Установите библиотеку 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.
Войдите на портал Azure.
В поле поиска в верхней части страницы введите идентификатор Microsoft Entra.
Нажмите кнопку
Enter
.В меню Управление выберите Пользователи.
В поле имени найдите свою учетную запись.
В столбце Имя щелкните ссылку на свою учетную запись.
В разделе Удостоверение скопируйте идентификатор объекта.
Создание привязки 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