Sdílet prostřednictvím


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.
  • 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čteny client_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.

  1. Přihlaste se k portálu Azure.

  2. Do vyhledávacího pole v horní části stránky zadejte ID Microsoft Entra.

  3. Klikněte na Enter.

  4. V nabídce Spravovat vyberte Uživatelé.

  5. V poli s názvem vyhledejte svůj účet.

  6. Ve sloupci Název vyberte odkaz na váš účet.

  7. V části Identita zkopírujte ID objektu.

    Copy the Microsoft Entra Object ID.

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

Další kroky