Zelfstudie: RBAC-rollen (op rollen gebaseerd toegangsbeheer) configureren in Azure Kubernetes Service (AKS) met behulp van Ansible
Belangrijk
Ansible 2.8 (of hoger) is vereist om de voorbeeldplaybooks in dit artikel uit te voeren.
Met Azure Kubernetes Service (AKS) kunt u eenvoudig een beheerd Kubernetes-cluster implementeren in Azure. AKS verkleint de complexiteit en de operationele overhead die gepaard gaan met het beheer van Kubernetes door veel van deze taken naar Azure over te hevelen. Azure handelt als een gehoste Kubernetes-service cruciale taken voor u af zoals statuscontrole en onderhoud. De Kubernetes-modellen worden beheerd door Azure. U beheert en onderhoudt alleen de agentknooppunten. Als beheerde Kubernetes-service is AKS gratis. U betaalt alleen voor de agentknooppunten binnen uw clusters; niet voor de masters.
AKS kan worden geconfigureerd voor het gebruik van Microsoft Entra-id voor gebruikersverificatie. Zodra dit is geconfigureerd, gebruikt u uw Microsoft Entra-verificatietoken om u aan te melden bij het AKS-cluster. De RBAC kan zijn gebaseerd op de identiteit of het lidmaatschap van een directorygroep van een gebruiker.
In dit artikel leert u het volgende:
- Een AKS-cluster met Microsoft Entra ID maken
- Een RBAC-rol configureren in het cluster
Vereisten
- Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.
- Azure-service-principal: maak een service-principal, noteer de volgende waarden: appId, displayName, wachtwoord en tenant.
Ansible installeren: Voer een van de volgende opties uit:
- Ansible installeren en configureren op een virtuele Linux-machine
- Configureer Azure Cloud Shell en maak een virtuele machine met Ansible als u geen toegang hebt tot een virtuele Linux-machine.
- De RedHat OpenShift-bibliotheek installeren -
pip install openshift
Microsoft Entra-id configureren voor AKS-verificatie
Bij het configureren van Microsoft Entra-id voor AKS-verificatie worden twee Microsoft Entra-toepassingen geconfigureerd. Deze bewerking moet worden voltooid door een Azure-tenantbeheerder. Zie Microsoft Entra-id integreren met AKS voor meer informatie.
Haal bij de Azure-tenantbeheerder de volgende waarden op:
- Server-app-geheim
- Server-app-id
- Client-app-id
- Tenant-id
Deze waarden zijn nodig om het voorbeeldplaybook uit te voeren.
Een AKS-cluster maken
In deze sectie maakt u een AKS met de Microsoft Entra-toepassing.
Hier volgen enkele belangrijke opmerkingen die u moet overwegen bij het werken met het voorbeeldplaybook:
Het playbook wordt geladen
ssh_key
van~/.ssh/id_rsa.pub
. Als u deze wijzigt, gebruikt u de indeling met één regel, te beginnen met 'ssh-rsa' (zonder de aanhalingstekens).De
client_id
waarden enclient_secret
waarden worden geladen van~/.azure/credentials
, wat het standaardreferentiebestand is. U kunt deze waarden instellen op uw service-principal of deze waarden laden vanuit omgevingsvariabelen:client_id: "{{ lookup('env', 'AZURE_CLIENT_ID') }}" client_secret: "{{ lookup('env', 'AZURE_SECRET') }}"
Sla het volgende playbook op als 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"
De Object-id van Microsoft Entra ophalen
Als u een RBAC-binding wilt maken, moet u eerst de Microsoft Entra-object-id ophalen.
Meld u aan bij het Azure-portaal.
Voer in het zoekveld boven aan de pagina Microsoft Entra-id in.
Klik op
Enter
.Selecteer Gebruikers in het menu Beheren.
Zoek in het naamveld naar uw account.
Selecteer in de kolom Naam de koppeling naar uw account.
Kopieer de object-id in de sectie Identiteit.
RBAC-binding maken
In deze sectie maakt u een rolbinding of clusterrolbinding in AKS.
Sla het volgende playbook op als 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>
Vervang de <your-aad-account>
tijdelijke aanduiding door de object-id van uw Microsoft Entra-tenant.
Sla het volgende playbook op, waarmee uw nieuwe rol in AKS wordt geïmplementeerd, als aks-kube-deploy.yml
:
- name: Apply role to AKS
k8s:
src: kube-role.yml
kubeconfig: "aks-{{ name }}-kubeconfig"
Het voorbeeldplaybook uitvoeren
In deze sectie wordt het volledige voorbeeldplaybook weergegeven dat de taken aanroept die in dit artikel worden gemaakt.
Sla het volgende playbook op als 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
Vervang in de vars
sectie de volgende tijdelijke aanduidingen door uw Microsoft Entra-gegevens:
<client id>
<server id>
<server secret>
<tenant id>
Voer het volledige playbook uit met behulp van de ansible-playbook
opdracht:
ansible-playbook aks-rbac.yml
De resultaten controleren
In deze sectie gebruikt u de kubectl-lijst met de knooppunten die in dit artikel worden gemaakt.
Voer de volgende opdracht in bij een terminalprompt:
kubectl --kubeconfig aks-aksansibletest-kubeconfig-user get nodes
Met de opdracht wordt u naar een verificatiepagina geleid. Meld u aan met uw Azure-account.
Na verificatie geeft kubectl de knooppunten op dezelfde manier weer als de volgende resultaten:
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
Resources opschonen
Verwijder de resources die u in dit artikel hebt gemaakt als u ze niet meer nodig hebt.
Sla de volgende code op als 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"
Het playbook uitvoeren met ansible-playbook
ansible-playbook cleanup.yml