Kurz: Konfigurace rolí řízení přístupu na základě role (RBAC) ve službě Azure Kubernetes Service (AKS) pomocí Ansible
Důležité
K spuštění ukázkových playbooků v tomto článku se vyžaduje Ansible 2.8 (nebo novější).
Azure Kubernetes Service (AKS) usnadňuje nasazení spravovaného clusteru Kubernetes v Azure. AKS zjednodušuje správu Kubernetes a snižuje provozní režii s tím spojenou díky přenášení většiny zodpovědnosti na Azure. Jako hostovaná služba Kubernetes se za vás Azure stará o důležité úlohy, jako je monitorování stavu a údržba. Hlavní servery Kubernetes spravuje Azure. Pouze spravujete a udržujete uzly agentů. Jako spravovaná služba Kubernetes je AKS bezplatná – platíte jenom za uzly agentů v rámci vašich clusterů; ne pro předlohy.
AKS je možné nakonfigurovat tak, aby pro ověřování uživatelů používalo ID Microsoft Entra. Po nakonfigurování se pomocí ověřovacího tokenu Microsoft Entra přihlásíte ke clusteru AKS. Řízení přístupu na základě role může být založeno na identitě uživatele nebo členství ve skupině adresářů.
V tomto článku získáte informace o těchto tématech:
- Vytvoření clusteru AKS s podporou Id Microsoft Entra
- Konfigurace role RBAC v clusteru
Požadavky
- Předplatné Azure: Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.
- Instanční objekt Azure: Vytvořte instanční objekt a poznamenejte si následující hodnoty: appId, displayName, password a tenant.
Nainstalujte Ansible: Proveďte jednu z následujících možností:
- Instalace a konfigurace Ansible na virtuálním počítači s Linuxem
- Nakonfigurujte Azure Cloud Shell a – pokud nemáte přístup k virtuálnímu počítači s Linuxem – vytvořte virtuální počítač pomocí Ansible.
- Instalace knihovny RedHat OpenShift -
pip install openshift
Konfigurace ID Microsoft Entra pro ověřování AKS
Při konfiguraci Microsoft Entra ID pro ověřování AKS jsou nakonfigurovány dvě aplikace Microsoft Entra. Tuto operaci musí dokončit správce tenanta Azure. Další informace najdete v tématu Integrace ID Microsoft Entra s AKS.
Ze správce tenanta Azure získejte následující hodnoty:
- Tajný kód serverové aplikace
- ID serverové aplikace
- ID klientské aplikace
- ID tenanta
Tyto hodnoty jsou potřeba ke spuštění ukázkového playbooku.
Vytvoření clusteru AKS
V této části vytvoříte AKS s aplikací Microsoft Entra.
Tady je několik klíčových poznámek, které je potřeba vzít v úvahu při práci s ukázkovým playbookem:
Playbook se načte
ssh_key
z~/.ssh/id_rsa.pub
. Pokud ho upravíte, použijte jednořádkový formát – počínaje "ssh-rsa" (bez uvozovek).Hodnoty jsou
client_secret
načtenyclient_id
z~/.azure/credentials
, což je výchozí soubor přihlašovacích údajů. Tyto hodnoty můžete nastavit na instanční objekt nebo načíst tyto hodnoty z proměnných prostředí:client_id: "{{ lookup('env', 'AZURE_CLIENT_ID') }}" client_secret: "{{ lookup('env', 'AZURE_SECRET') }}"
Uložte následující ukázkový playbook jako 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"
Získání ID objektu Microsoft Entra
Pokud chcete vytvořit vazbu RBAC, musíte nejprve získat ID objektu Microsoft Entra.
Přihlaste se k portálu Azure.
Do vyhledávacího pole v horní části stránky zadejte ID Microsoft Entra.
Klikněte na
Enter
.V nabídce Spravovat vyberte Uživatelé.
V poli s názvem vyhledejte svůj účet.
Ve sloupci Název vyberte odkaz na váš účet.
V části Identita zkopírujte ID objektu.
Vytvoření vazby RBAC
V této části vytvoříte vazbu role nebo vazbu role clusteru v AKS.
Uložte následující ukázkový playbook jako 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>
Zástupný symbol nahraďte ID objektu <your-aad-account>
tenanta Microsoft Entra.
Uložte následující playbook – který nasadí novou roli do AKS – jako aks-kube-deploy.yml
:
- name: Apply role to AKS
k8s:
src: kube-role.yml
kubeconfig: "aks-{{ name }}-kubeconfig"
Spuštění ukázkového playbooku
Tato část obsahuje úplný ukázkový playbook, který volá úlohy vytvářené v tomto článku.
Uložte následující ukázkový playbook jako 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
V části vars
nahraďte následující zástupné symboly informacemi Microsoft Entra:
<client id>
<server id>
<server secret>
<tenant id>
Spusťte kompletní playbook pomocí ansible-playbook
příkazu:
ansible-playbook aks-rbac.yml
Ověření výsledků
V této části použijete seznam uzlů vytvářených v tomto článku pomocí kubectl.
Na příkazovém řádku terminálu zadejte následující příkaz:
kubectl --kubeconfig aks-aksansibletest-kubeconfig-user get nodes
Příkaz vás nasměruje na ověřovací stránku. Přihlaste se pomocí svého účtu Azure.
Po ověření kubectl vypíše uzly podobným způsobem jako následující výsledky:
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
Vyčištění prostředků
Pokud už prostředky vytvořené v tomto článku nepotřebujete, odstraňte je.
Uložte následující kód jako 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"
Spuštění playbooku pomocí ansible-playbooku
ansible-playbook cleanup.yml