Delen via


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.
  • 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 en client_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.

  1. Meld u aan bij de Azure-portal.

  2. Voer in het zoekveld boven aan de pagina Microsoft Entra-id in.

  3. Klik op Enter.

  4. Selecteer Gebruikers in het menu Beheren.

  5. Zoek in het naamveld naar uw account.

  6. Selecteer in de kolom Naam de koppeling naar uw account.

  7. Kopieer de object-id in de sectie Identiteit.

    Copy the Microsoft Entra Object ID.

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

Volgende stappen