Dela via


Självstudie: Konfigurera rollbaserade rbac-roller (åtkomstkontroll) i Azure Kubernetes Service (AKS) med Ansible

Viktigt!

Ansible 2.8 (eller senare) krävs för att köra exempelspelböckerna i den här artikeln.

Azure Kubernetes Service (AKS) gör det enkelt att distribuera ett hanterat Kubernetes-kluster i Azure. AKS minskar komplexiteten och arbetet med att hantera Kubernetes genom att avlasta en stor del av det ansvaret till Azure. Som Kubernetes-värdtjänst hanterar Azure viktiga uppgifter som övervakning av hälsotillstånd och underhåll åt dig. Kubernetes-huvudservrar hanteras av Azure. Du kan endast hantera och underhålla agentnoderna. Som en hanterad Kubernetes-tjänst är AKS kostnadsfri – du betalar bara för agentnoderna i dina kluster. inte för mästarna.

AKS kan konfigureras för att använda Microsoft Entra-ID för användarautentisering. När du har konfigurerat använder du din Microsoft Entra-autentiseringstoken för att logga in på AKS-klustret. RBAC kan baseras på en användares identitets- eller kataloggruppsmedlemskap.

I den här artikeln kan du se hur du:

  • Skapa ett Microsoft Entra ID-aktiverat AKS-kluster
  • Konfigurera en RBAC-roll i klustret

Förutsättningar

  • Azure-prenumeration: Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
  • Azure-tjänstens huvudnamn: Skapa ett huvudnamn för tjänsten och anteckna följande värden: appId, displayName, lösenord och klientorganisation.
  • Installera RedHat OpenShift-biblioteket - pip install openshift

Konfigurera Microsoft Entra-ID för AKS-autentisering

När du konfigurerar Microsoft Entra-ID för AKS-autentisering konfigureras två Microsoft Entra-program. Den här åtgärden måste slutföras av en Azure-klientadministratör. Mer information finns i Integrera Microsoft Entra-ID med AKS.

Hämta följande värden från Azure-klientadministratören:

  • Serverapphemlighet
  • Serverapp-ID
  • Klientapps-ID
  • Klientorganisations-ID

Dessa värden behövs för att köra exempelspelboken.

Skapa ett AKS-kluster

I det här avsnittet skapar du en AKS med Microsoft Entra-programmet.

Här följer några viktiga kommentarer att tänka på när du arbetar med exempelspelboken:

  • Spelboken läses in ssh_key från ~/.ssh/id_rsa.pub. Om du ändrar det använder du enkelradsformatet – från och med "ssh-rsa" (utan citattecken).

  • Värdena client_id och client_secret läses in från ~/.azure/credentials, vilket är standardfilen för autentiseringsuppgifter. Du kan ange dessa värden till tjänstens huvudnamn eller läsa in dessa värden från miljövariabler:

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

Spara följande spelbok som 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"

Hämta Microsoft Entra-objekt-ID:t

Om du vill skapa en RBAC-bindning måste du först hämta Microsoft Entra-objekt-ID:t.

  1. Logga in på Azure-portalen.

  2. I sökfältet överst på sidan anger du Microsoft Entra-ID.

  3. Klicka på Enter.

  4. På menyn Hantera väljer du Användare.

  5. Sök efter ditt konto i namnfältet.

  6. I kolumnen Namn väljer du länken till ditt konto.

  7. I avsnittet Identitet kopierar du objekt-ID :t.

    Copy the Microsoft Entra Object ID.

Skapa RBAC-bindning

I det här avsnittet skapar du en rollbindning eller klusterrollbindning i AKS.

Spara följande spelbok som 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> Ersätt platshållaren med ditt Microsoft Entra-klientobjekt-ID.

Spara följande spelbok – som distribuerar din nya roll till AKS – som aks-kube-deploy.yml:

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

Kör exempelspelboken

I det här avsnittet visas den fullständiga exempelspelboken som anropar de uppgifter som skapas i den här artikeln.

Spara följande spelbok som 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

I avsnittet vars ersätter du följande platshållare med din Microsoft Entra-information:

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

Kör den fullständiga spelboken med kommandot ansible-playbook :

ansible-playbook aks-rbac.yml

Verifiera resultatet

I det här avsnittet använder du kubectl-listan med noderna som skapas i den här artikeln.

Ange följande kommando i en terminalprompt:

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

Kommandot dirigerar dig till en autentiseringssida. Logga in med ditt Azure-konto.

När kubectl har autentiserats visas noderna på liknande sätt som följande resultat:

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

Rensa resurser

Ta bort resurserna som skapas i den här artikeln när de inte längre behövs.

Spara följande kod som 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"

Kör spelboken med ansible-playbook

ansible-playbook cleanup.yml

Nästa steg