자습서: Ansible을 사용하여 AKS(Azure Kubernetes Service)에서 RBAC(역할 기반 액세스 제어) 역할 구성
Important
이 문서의 샘플 플레이북을 실행하려면 Ansible 2.8 이상이 필요합니다.
AKS(Azure Kubernetes Service)를 사용하면 Azure에서 관리되는 Kubernetes 클러스터를 간단하게 배포할 수 있습니다. AKS는 대부분의 부담을 Azure에 오프로딩하여 Kubernetes를 관리하는 복잡성 및 운영 과부하를 감소시킵니다. 호스팅되는 Kubernetes 서비스인 Azure는 상태 모니터링 및 유지 관리 같은 중요 작업을 처리합니다. Kubernetes 마스터는 Azure에서 관리됩니다. 고객은 에이전트 노드만 관리 및 유지하면 됩니다. 관리되는 Kubernetes 서비스, AKS가 무료이므로 마스터가 아니라 클러스터 내의 에이전트 노드에 대해서만 지불합니다.
AKS는 사용자 인증에 Microsoft Entra ID를 사용하도록 구성할 수 있습니다. 구성되면 Microsoft Entra 인증 토큰을 사용하여 AKS 클러스터에 로그인합니다. RBAC는 사용자의 ID 또는 디렉터리 그룹 멤버 자격을 기반으로 할 수 있습니다.
이 문서에서는 다음 방법을 설명합니다.
- Microsoft Entra ID 사용 AKS 클러스터 만들기
- 클러스터에서 RBAC 역할 구성
필수 조건
- Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
Ansible 설치: 다음 옵션 중 하나를 수행합니다.
- Linux 가상 머신에서 Ansible 설치 및 구성
- Azure Cloud Shell 구성 - Linux 가상 머신에 액세스할 수 없는 경우 Ansible을 사용하여 가상 머신 만들기
- RedHat OpenShift 라이브러리 설치 -
pip install openshift
AKS 인증에 대한 Microsoft Entra ID 구성
AKS 인증을 위해 Microsoft Entra ID를 구성할 때 두 개의 Microsoft Entra 애플리케이션이 구성됩니다. Azure 테넌트 관리자가 이 작업을 완료해야 합니다. 자세한 내용은 AKS와 Microsoft Entra ID 통합을 참조하세요.
Azure 테넌트 관리자로부터 다음 값을 가져옵니다.
- 서버 앱 비밀
- 서버 앱 ID
- 클라이언트 앱 ID
- 테넌트 ID
샘플 플레이북을 실행하려면 이러한 값이 필요합니다.
AKS 클러스터 만들기
이 섹션에서는 Microsoft Entra 애플리케이션을 사용하여 AKS를 만듭니다.
샘플 플레이북을 사용할 때 고려해야 할 몇 가지 주요 참고 사항은 다음과 같습니다.
플레이북이 .에서
~/.ssh/id_rsa.pub
로드됩니다ssh_key
. 수정하는 경우 "ssh-rsa"(따옴표 없이)로 시작하는 한 줄 형식을 사용합니다.및
client_secret
값은client_id
기본 자격 증명 파일인 에서~/.azure/credentials
로드됩니다. 이러한 값을 서비스 주체로 설정하거나 환경 변수에서 이러한 값을 로드할 수 있습니다.client_id: "{{ lookup('env', 'AZURE_CLIENT_ID') }}" client_secret: "{{ lookup('env', 'AZURE_SECRET') }}"
다음 플레이북을 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"
Microsoft Entra 개체 ID 가져오기
RBAC 바인딩을 만들려면 먼저 Microsoft Entra 개체 ID를 가져와야 합니다.
Azure Portal에 로그인합니다.
페이지 맨 위에 있는 검색 필드에 Microsoft Entra ID를 입력합니다.
Enter
을 클릭합니다.관리 메뉴에서 사용자를 선택합니다.
이름 필드에서 계정을 검색합니다.
이름 열에서 계정의 링크를 선택합니다.
ID 섹션에서 개체 ID를 복사합니다.
RBAC 바인딩 만들기
이 섹션에서는 AKS에서 역할 바인딩 또는 클러스터 역할 바인딩을 만듭니다.
다음 플레이북을 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>
자리 표시자를 Microsoft Entra 테넌트 개체 ID로 바꿉니다.
새 역할을 AKS에 배포하는 다음 플레이북을 aks-kube-deploy.yml
로 저장합니다.
- name: Apply role to AKS
k8s:
src: kube-role.yml
kubeconfig: "aks-{{ name }}-kubeconfig"
샘플 플레이북 실행
이 섹션에서는 이 문서에서 만드는 작업을 호출하는 전체 샘플 플레이북을 나열합니다.
다음 플레이북을 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
섹션에서 다음 자리 표시자를 Microsoft Entra 정보로 바꿉 있습니다.
<client id>
<server id>
<server secret>
<tenant id>
다음 명령을 사용하여 전체 플레이북을 실행합니다.ansible-playbook
ansible-playbook aks-rbac.yml
결과 확인
이 섹션에서는 kubectl을 사용하여 이 문서에서 만드는 노드를 나열합니다.
터미널 프롬프트에서 다음 명령을 입력합니다.
kubectl --kubeconfig aks-aksansibletest-kubeconfig-user get nodes
이 명령은 인증 페이지로 안내합니다. Azure 계정으로 로그인합니다.
인증되면 kubectl은 다음 결과와 비슷한 방식으로 노드를 나열합니다.
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
리소스 정리
더 이상 필요하지 않은 경우 이 문서에서 만든 리소스를 삭제합니다.
다음 코드를 다음과 같이 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"
ansible-playbook을 사용하여 플레이북 실행
ansible-playbook cleanup.yml