Öğretici: Ansible kullanarak Azure Kubernetes Service'te (AKS) rol tabanlı erişim denetimi (RBAC) rollerini yapılandırma

Önemli

Bu makaledeki örnek playbook'ları çalıştırmak için Ansible 2.8 (veya üzeri) gereklidir.

Azure Kubernetes Service (AKS), Azure'da yönetilen bir Kubernetes kümesi dağıtmayı kolaylaştırır. AKS, sorumluluğun çoğunu Azure'a devrederek Kubernetes yönetiminin karmaşıklığını ve işlemsel yükünü azaltır. Barındırılan bir Kubernetes hizmeti olarak, Azure sistem durumu izleme ve bakım gibi kritik görevleri sizin için gerçekleştirir. Kubernetes ana düğümler Azure tarafından yönetilir. Siz yalnızca aracı düğümlerini yönetir ve sürdürürsünüz. Yönetilen bir Kubernetes hizmeti olarak AKS ücretsizdir; yalnızca kümelerinizdeki aracı düğümleri için ödeme gerçekleştirirsiniz; Ustalar için değil.

AKS, kullanıcı kimlik doğrulaması için Microsoft Entra Id kullanacak şekilde yapılandırılabilir. Yapılandırıldıktan sonra, AKS kümesinde oturum açmak için Microsoft Entra kimlik doğrulama belirtecinizi kullanırsınız. RBAC, bir kullanıcının kimliğine veya dizin grubu üyeliğine dayalı olabilir.

Bu makalede şunları öğreneceksiniz:

  • Microsoft Entra Id özellikli AKS kümesi oluşturma
  • Kümede RBAC rolü yapılandırma

Önkoşullar

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • RedHat OpenShift kitaplığını yükleme - pip install openshift

AKS kimlik doğrulaması için Microsoft Entra Id'yi yapılandırma

AKS kimlik doğrulaması için Microsoft Entra Id yapılandırılırken iki Microsoft Entra uygulaması yapılandırılır. Bu işlemin bir Azure kiracı yöneticisi tarafından tamamlanması gerekir. Daha fazla bilgi için bkz . Microsoft Entra ID'yi AKS ile tümleştirme.

Azure kiracı yöneticisinden aşağıdaki değerleri alın:

  • Sunucu uygulama gizli dizisi
  • Sunucu uygulaması kimliği
  • İstemci uygulama kimliği
  • Kiracı kimliği

Örnek playbook'u çalıştırmak için bu değerler gereklidir.

AKS kümesi oluşturma

Bu bölümde, Microsoft Entra uygulamasıyla bir AKS oluşturacaksınız.

Örnek playbook ile çalışırken göz önünde bulundurmanız gereken bazı önemli notlar şunlardır:

  • playbook'u içinden ~/.ssh/id_rsa.pubyüklenirssh_key. Bunu değiştirirseniz, "ssh-rsa" ile başlayan (tırnak işaretleri olmadan) tek satırlı biçimi kullanın.

  • client_id ve client_secret değerleri, varsayılan kimlik bilgisi dosyası olan dosyasından ~/.azure/credentialsyüklenir. Bu değerleri hizmet sorumlunuza ayarlayabilir veya ortam değişkenlerinden bu değerleri yükleyebilirsiniz:

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

Aşağıdaki playbook'u aks-create.yml olarak kaydedin:

- 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"

Microsoft Entra Nesne Kimliğini alma

RBAC bağlaması oluşturmak için önce Microsoft Entra Nesne Kimliğini almanız gerekir.

  1. Azure Portal oturum açın.

  2. Sayfanın üst kısmındaki arama alanına Microsoft Entra Id girin.

  3. Enter’a tıklayın.

  4. Yönet menüsünde Kullanıcılar'ı seçin.

  5. Ad alanında hesabınızı arayın.

  6. Ad sütununda hesabınızın bağlantısını seçin.

  7. Kimlik bölümünde Nesne Kimliğini kopyalayın.

    Copy the Microsoft Entra Object ID.

RBAC bağlaması oluşturma

Bu bölümde AKS'de rol bağlaması veya küme rol bağlaması oluşturacaksınız.

Aşağıdaki playbook'u kube-role.yml olarak kaydedin:

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>

Yer tutucuyu <your-aad-account> Microsoft Entra kiracı nesne kimliğiniz ile değiştirin.

Yeni rolünüzü AKS'ye dağıtan aşağıdaki playbook'u olarak aks-kube-deploy.ymlkaydedin:

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

Örnek playbook'u çalıştırma

Bu bölümde, bu makalede oluşturma görevlerini çağıran örnek playbook'un tamamı listelenmiştir.

Aşağıdaki playbook'u aks-rbac.yml olarak kaydedin:

---
- 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 bölümünde, aşağıdaki yer tutucuları Microsoft Entra bilgilerinizle değiştirin:

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

komutunu kullanarak playbook'un ansible-playbook tamamını çalıştırın:

ansible-playbook aks-rbac.yml

Sonuçları doğrulama

Bu bölümde, bu makalede oluşturan düğümlerin kubectl listesini kullanacaksınız.

Terminal istemine aşağıdaki komutu girin:

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

Komut sizi bir kimlik doğrulama sayfasına yönlendirir. Azure hesabınızla oturum açın.

Kimliği doğrulandıktan sonra kubectl düğümleri aşağıdaki sonuçlara benzer şekilde listeler:

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

Kaynakları temizleme

Artık gerekli olmadığında, bu makalede oluşturulan kaynakları silin.

Aşağıdaki kodu olarak cleanup.ymlkaydedin:

---
- 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"

Ansible-playbook kullanarak playbook'u çalıştırma

ansible-playbook cleanup.yml

Sonraki adımlar