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 Ansible: Gör något av följande alternativ:
- Installera och konfigurera Ansible på en virtuell Linux-dator
- Konfigurera Azure Cloud Shell och – om du inte har åtkomst till en virtuell Linux-dator – skapa en virtuell dator med Ansible.
- 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
ochclient_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.
Logga in på Azure-portalen.
I sökfältet överst på sidan anger du Microsoft Entra-ID.
Klicka på
Enter
.På menyn Hantera väljer du Användare.
Sök efter ditt konto i namnfältet.
I kolumnen Namn väljer du länken till ditt konto.
I avsnittet Identitet kopierar du objekt-ID :t.
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