Tutorial: Mengonfigurasi peran kontrol akses berbasis peran (RBAC) di Azure Kubernetes Service (AKS) menggunakan Ansible

Penting

Ansible 2.8 (atau yang lebih baru) diperlukan untuk menjalankan sampel playbook dalam artikel ini.

Azure Kubernetes Service (AKS) memudahkan penyebaran kluster Kubernetes terkelola di Azure. AKS mengurangi kerumitan dan operasional yang berlebih dalam mengelola Kubernetes dengan mengalihkan sebagian besar tanggung jawab tersebut ke Azure. Sebagai layanan Kubernetes yang dihosting, Azure menangani tugas-tugas penting, seperti pemantauan dan pemeliharaan kesehatan. Master Kubernetes dikelola oleh Azure. Anda hanya mengelola dan memelihara node agen. Sebagai layanan Kubernetes terkelola, AKS gratis - Anda hanya perlu membayar node agen dalam kluster Anda; bukan untuk master.

AKS dapat dikonfigurasi untuk menggunakan ID Microsoft Entra untuk autentikasi pengguna. Setelah dikonfigurasi, Anda menggunakan token autentikasi Microsoft Entra untuk masuk ke kluster AKS. RBAC dapat didasarkan pada identitas pengguna atau keanggotaan grup direktori.

Dalam artikel ini, Anda akan mempelajari cara:

  • Membuat kluster AKS berkemampuan Microsoft Entra ID
  • Mengonfigurasi peran RBAC di dalam kluster

Prasyarat

  • Langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum memulai.
  • Perwakilan layanan Azure: Buat perwakilan layanan, catat nilai-nilai berikut: appId, displayName, kata sandi, dan penyewa.
  • Instal pustaka RedHat OpenShift - pip install openshift

Mengonfigurasi ID Microsoft Entra untuk autentikasi AKS

Saat mengonfigurasi ID Microsoft Entra untuk autentikasi AKS, dua aplikasi Microsoft Entra dikonfigurasi. Operasi ini harus diselesaikan oleh administrator penyewa Azure. Untuk informasi selengkapnya, lihat Mengintegrasikan MICROSOFT Entra ID dengan AKS.

Dari administrator penyewa Azure, dapatkan beberapa nilai berikut:

  • Rahasia aplikasi server
  • ID aplikasi server
  • ID aplikasi klien
  • ID Penyewa

Nilai-nilai ini diperlukan untuk menjalankan playbook sampel.

Membuat kluster AKS

Di bagian ini, Anda membuat AKS dengan aplikasi Microsoft Entra.

Berikut adalah beberapa catatan penting yang perlu dipertimbangkan saat bekerja dengan sampel playbook:

  • Playbook memuat ssh_key dari ~/.ssh/id_rsa.pub. Jika Anda memodifikasinya, gunakan format satu baris - dimulai dengan "ssh-rsa" (tanpa tanda kutip).

  • Nilai client_id dan client_secret dimuat dari ~/.azure/credentials, yang merupakan file informasi masuk default. Anda dapat mengatur nilai-nilai ini ke perwakilan layanan Anda atau memuat nilai-nilai ini dari variabel lingkungan:

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

Simpan playbook berikut sebagai 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"

Mendapatkan ID Objek Microsoft Entra

Untuk membuat pengikatan RBAC, Anda harus terlebih dahulu mendapatkan ID Objek Microsoft Entra.

  1. Masuk ke portal Azure.

  2. Di bidang pencarian di bagian atas halaman, masukkan ID Microsoft Entra.

  3. Klik Enter.

  4. Di menu Kelola menu, pilih Pengguna.

  5. Di bidang nama, cari akun Anda.

  6. Di kolom Nama, pilih tautan ke akun Anda.

  7. Di bagian Identitas, salin ID Objek.

    Copy the Microsoft Entra Object ID.

Buat pengikatan RBAC

Di bagian ini, Anda membuat pengikatan peran atau pengikatan peran kluster di AKS.

Simpan playbook berikut sebagai 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> Ganti tempat penampung dengan ID Objek penyewa Microsoft Entra Anda.

Simpan playbook berikut - yang menyebarkan peran baru Anda ke AKS - sebagai aks-kube-deploy.yml:

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

Jalankan sampel playbook

Bagian ini mencantumkan playbook sampel lengkap, yang memanggil pembuatan tugas dalam artikel ini.

Simpan playbook berikut sebagai 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

Di bagian , vars ganti tempat penampung berikut dengan informasi Microsoft Entra Anda:

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

Jalankan playbook lengkap menggunakan perintah ansible-playbook:

ansible-playbook aks-rbac.yml

Memverifikasi hasil

Di bagian ini, Anda menggunakan kubectl untuk mendaftar pembuatan node dalam artikel ini.

Masukkan perintah berikut di prompt terminal:

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

Perintah ini akan mengarahkan Anda ke halaman autentikasi. Masuk dengan akun Azure Anda.

Setelah diautentikasi, kubectl membuat daftar node dengan cara yang mirip dengan hasil berikut:

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

Membersihkan sumber daya

Bila tidak lagi diperlukan, hapus sumber daya yang dibuat dalam artikel ini.

Simpan kode berikut sebagai 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"

Jalankan playbook menggunakan ansible-playbook.

ansible-playbook cleanup.yml

Langkah berikutnya