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 Ansible: Lakukan salah satu opsi berikut:
- Menginstal dan mengonfigurasi Ansibel pada mesin virtual Linux
- Konfigurasikan Azure Cloud Shell dan - jika Anda tidak memiliki akses ke mesin virtual Linux - buat mesin virtual dengan Ansible.
- 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
danclient_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.
Masuk ke portal Azure.
Di bidang pencarian di bagian atas halaman, masukkan ID Microsoft Entra.
Klik
Enter
.Di menu Kelola menu, pilih Pengguna.
Di bidang nama, cari akun Anda.
Di kolom Nama, pilih tautan ke akun Anda.
Di bagian Identitas, salin ID Objek.
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