Udostępnij za pośrednictwem


Samouczek: konfigurowanie ról kontroli dostępu opartej na rolach (RBAC) w usłudze Azure Kubernetes Service (AKS) przy użyciu rozwiązania Ansible

Ważne

Rozwiązanie Ansible w wersji 2.8 (lub nowszej) jest wymagane do uruchomienia przykładowych podręczników w tym artykule.

Usługa Azure Kubernetes Service (AKS) ułatwia wdrażanie zarządzanego klastra Kubernetes na platformie Azure. Usługa AKS zmniejsza złożoność i nakłady operacyjne związane z zarządzaniem rozwiązaniem Kubernetes, przenosząc znaczną część tej odpowiedzialności na platformę Azure. Jako hostowana usługa Kubernetes, platforma Azure obsługuje krytyczne zadania, takie jak monitorowanie kondycji i konserwacja. Wzorce rozwiązania Kubernetes są zarządzane przez platformę Azure. Zarządzasz tylko węzłami agentów i obsługujesz je. Jako zarządzana usługa Kubernetes usługa AKS jest bezpłatna — płacisz tylko za węzły agenta w klastrach; nie dla mistrzów.

Usługę AKS można skonfigurować do używania identyfikatora Entra firmy Microsoft do uwierzytelniania użytkownika. Po skonfigurowaniu token uwierzytelniania entra firmy Microsoft jest używany do logowania się do klastra usługi AKS. Kontrola dostępu oparta na rolach może być oparta na tożsamości użytkownika lub członkostwie w grupie katalogów.

W tym artykule omówiono sposób wykonywania następujących zadań:

  • Tworzenie klastra usługi AKS z obsługą identyfikatora entra firmy Microsoft
  • Konfigurowanie roli RBAC w klastrze

Wymagania wstępne

  • Subskrypcja platformy Azure: jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
  • Jednostka usługi platformy Azure: Utwórz jednostkę usługi, zanotuj następujące wartości: appId, displayName, password i tenant.
  • Instalowanie biblioteki RedHat OpenShift - pip install openshift

Konfigurowanie identyfikatora Entra firmy Microsoft na potrzeby uwierzytelniania usługi AKS

Podczas konfigurowania identyfikatora Entra firmy Microsoft na potrzeby uwierzytelniania usługi AKS skonfigurowano dwie aplikacje firmy Microsoft Entra. Ta operacja musi zostać ukończona przez administratora dzierżawy platformy Azure. Aby uzyskać więcej informacji, zobacz Integrowanie identyfikatora entra firmy Microsoft z usługą AKS.

Z poziomu administratora dzierżawy platformy Azure uzyskaj następujące wartości:

  • Wpis tajny aplikacji serwera
  • Identyfikator aplikacji serwera
  • Identyfikator aplikacji klienckiej
  • Identyfikator dzierżawy

Te wartości są potrzebne do uruchomienia przykładowego podręcznika.

Tworzenie klastra AKS

W tej sekcji utworzysz usługę AKS z aplikacją Firmy Microsoft Entra.

Poniżej przedstawiono kilka kluczowych uwag, które należy wziąć pod uwagę podczas pracy z przykładowym podręcznikiem:

  • Podręcznik jest ładowany ssh_key z ~/.ssh/id_rsa.pubelementu . Jeśli go zmodyfikujesz, użyj formatu jednowierszowego — zaczynając od ciągu "ssh-rsa" (bez cudzysłowów).

  • Wartości client_id i client_secret są ładowane z ~/.azure/credentialspliku , który jest domyślnym plikiem poświadczeń. Możesz ustawić te wartości na jednostkę usługi lub załadować te wartości ze zmiennych środowiskowych:

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

Zapisz następujący podręcznik 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"

Pobieranie identyfikatora obiektu Entra firmy Microsoft

Aby utworzyć powiązanie RBAC, najpierw musisz uzyskać identyfikator obiektu Entra firmy Microsoft.

  1. Zaloguj się w witrynie Azure Portal.

  2. W polu wyszukiwania w górnej części strony wprowadź wartość Microsoft Entra ID.

  3. Kliknij pozycję Enter.

  4. W menu Zarządzaj wybierz pozycję Użytkownicy.

  5. W polu nazwy wyszukaj swoje konto.

  6. W kolumnie Nazwa wybierz link do konta.

  7. W sekcji Tożsamość skopiuj identyfikator obiektu.

Tworzenie powiązania RBAC

W tej sekcji utworzysz powiązanie roli lub powiązanie roli klastra w usłudze AKS.

Zapisz następujący podręcznik 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>

Zastąp <your-aad-account> symbol zastępczy identyfikatorem obiektu dzierżawy firmy Microsoft Entra.

Zapisz następujący podręcznik — który wdraża nową rolę w usłudze AKS — jako aks-kube-deploy.yml:

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

Uruchamianie przykładowego podręcznika

W tej sekcji wymieniono kompletny przykładowy podręcznik, który wywołuje zadania tworzone w tym artykule.

Zapisz następujący podręcznik 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

vars W sekcji zastąp następujące symbole zastępcze informacjami firmy Microsoft Entra:

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

Uruchom kompletny podręcznik przy użyciu ansible-playbook polecenia :

ansible-playbook aks-rbac.yml

Weryfikowanie wyników

W tej sekcji użyjesz listy węzłów utworzonych w tym artykule.

Wprowadź następujące polecenie w wierszu polecenia terminalu:

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

Polecenie przekierowuje Cię do strony uwierzytelniania. Zaloguj się przy użyciu konta Azure.

Po uwierzytelnieniu narzędzie kubectl wyświetla węzły w podobny sposób do następujących wyników:

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

Czyszczenie zasobów

Gdy zasoby utworzone w tym artykule nie będą już potrzebne, usuń je.

Zapisz następujący kod 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"

Uruchamianie podręcznika przy użyciu podręcznika ansible-playbook

ansible-playbook cleanup.yml

Następne kroki