안녕하세요, Cloudraw 입니다!
이번 글 주제는 ‘AKS 클러스터 RBAC 적용하기’ 입니다.
Azure Kubernetes Service(이하 AKS)는 Azure에서 제공하는 kubernetes Service로 사용자가 클러스터를 따로 구성할 필요가 없습니다. 수동으로 kubernetes를 생성하고 관리하는 경우 클러스터의 노드 구성, 네트워크구성, 보안 설정, 스토리지 관리 및 업그레이드 등의 유지보수가 쉽지 않고 장애 발생 시 피해가 발생할 수 있습니다. 반면에 AKS를 사용하면 사용자는 Azure에 의해 관리 되는 클러스터를 제공받기 때문에 구성 및 유지보수에 대한 스트레스를 받을 필요가 없습니다. 이러한 장점 덕에 저희 Cloudstudio도 AKS를 활용하여 서비스하고 있습니다.
먼저 AKS의 구조를 확인해보겠습니다.
Control plane은 Azure에서 관리하기 때문에 사용자는 접근할 수 없습니다. kubectl get nodes 명령을 실행하면 Worker node만 보여집니다.
Azure에서는 Control plane을 무료로 제공하고 있으며 AKS 클러스터에 연결된 Worker node에 대한 비용만 발생합니다.
포털에서 AKS 생성하기 / RBAC 적용
AKS는 사용자 인증에 Microsoft Entra ID(구 Azure Active Directory, AAD) 를 사용하도록 구성할 수 있습니다.
Microsoft Entra ID 인증토큰을 사용하여 AKS 클러스터에서 인증 할 수 있으며, 인증 후에는 Kubernetes RBAC(인가)를 사용하여 사용자ID 또는 그룹 멤버 자격을 기반으로 네임스페이스 및 클러스터 리소스에 대한 접근을 통제 할 수 있습니다.
이번 글에서는 다음과 같이 구성해 보겠습니다.
- Cluster Admin 권한이 있는 계정은 클러스터의 모든 리소스에 접근 및 관리가 가능합니다.
- dev 사용자는 namespace dev 에만 접근할 수 있도록 설정할 수 있습니다.
- ops 사용자는 namespace ops 에만 접근할 수 있도록 설정할 수 있습니다.
1. Azure 사용자 및 그룹 생성하기
- admin 사용자 / admin 그룹 :클러스터에 admin권한을 가지는 사용자
- dev 사용자 / dev 그룹 : 클러스터의 dev 네임스페이스에 대해서만 권한을 갖는 사용자
- ops 사용자 / ops 그룹 : 클러스터의 ops 네임스페이스에 대해서만 권한을 갖는 사용자
2. 사용자/그룹에게 구독에 대한 적절한 권한 부여하기
각 사용자나 사용자들이 속한 그룹은 사용하려는 구독에 대한 적절한 권한이 있어야 합니다. 이번 실습에서는 편의상 구독에 대하여 Contributor 권한을 부여하도록 하겠습니다.
(실제 기업 환경에서는 구독에 대하여 적절한 권한 설정이 필요합니다.)
만약 구독에 대한 권한이 없을 경우 az login 명령 실행시 아래와 같은 오류가 발생합니다.
‘No subscriptions found for 계정명’ 이라고 오류메세지를 출력합니다.
3. AKS 생성하기
Cluster Configuration
- ResourceGroup을 새로 생성합니다.
- Cluster details : 원하는 환경및 스펙을 선택합니다.
- Authentication and Authorization : AAD authentication with k8s RBAC
- Cluster admin ClusterRoleBinding — “admin”그룹
만약 Cluster admin ClusterRoleBinding에 dev그룹과 ops그룹도 추가하면 namespace별로 RBAC을 적용하더라도 Cluster admin ClusterRoleBinding이 우선순위로 적용되므로 모든 namespace에서 접근이 가능합니다.
Networking Configuration
Public access
- Set authorized IP ranges : kubectl 명령으로 클러스터에 접속할 수 있는 IP대역을 설정할 수 있습니다.
Container networking
- Network configuration : kubenet
AKS 클러스터의 네트워크로 kubenet을 사용하면 기본적으로 Azure Virtual Network와 서브넷을 만들고 노드는 Azure Virtual Network 서브넷의 IP주소를 얻습니다. - Network policy : Calico
AKS가 정상적으로 만들어지면 두 개의 ResourceGroup 이 생성됩니다.
AKS 생성 시 지정한 ResourceGroup 안에는 AKS 클러스터 리소스만 속해 있습니다.
추가로 생성된 ResourceGroup 안에는 AKS 클러스터가 구성되는데 필요한 각종 Azure 리소스(VMSS,NSG,Vnet,LoadBalancer등)들이 속해 있습니다. 이처럼 클러스터 자체와 클러스터를 구성하는데 필요한 리소스들이 구분되어 관리되는 것을 확인할 수 있습니다.
4. AKS 에 접속하기 + RBAC 적용
AKS클러스터에 접속하고 클러스터 안에 리소스를 만들기 위해서는 로컬 PC에 kubectl과 AZ-CLI가 설치 되어있어야 합니다. 이미 설치가 되어있다는 가정 하에 설정방법에 대해서만 설명하겠습니다.
Admin 계정으로 으로 로그인하기
- az login
az login 을 입력하면 Azure에 로그인하는 창이 브라우저에 열립니다.
앞서 만든 admin 계정을 입력하고 로그인합니다.
- az aks get-credentials — resource-group rg-test-aks — name test-aks
클러스터 Credential을 등록합니다.
$HOME/.kube/config 파일에 클러스터 context가 등록된 것을 확인할 수 있습니다.
- kubelogin convert-kubeconfig -l azurecli
주의할 점은 kubernetes 1.26부터 기본 Azure 인증 플러그인이 kubectl에서 지원하지 않게 되었습니다. AAD 인증을 지원하는 쿠버네티스 클러스터와 상호작용하려면 Exec 플러그인을 사용하는 Kubelogin으로 전환해야 합니다.
Exec플러그인은 kubectl API 서버로 보낼 사용자 자격증명을 받기 위해 외부 명령을 실행할 수 있는 kubernetes 인증 전략중 하나입니다.
v1.24보다 최신 버전의 AKS는 kubelogin을 기본적으로 사용하지만 이전 버전은 auth-provider버전을 사용합니다. 만약 전환하지 않고 auth-provider 플러그인을 사용할 경우 context가 등록되었다할지라도 클러스터에 접속하지 못합니다.
- kubectl create ns dev
dev 사용자가 접근할 수 있는 namespsace를 생성합니다.
- kubectl create ns ops
Ops 사용자가 접근할 수 있는 namespsace를 생성합니다.
RBAC적용
- kubectl apply -f dev-rbac.yaml
dev사용자에게 적용할 role을 namespace 기준으로 만들어주고, role과 사용자를 mapping해주는 rolebinding도 생성해줍니다.
- kubectl apply -f ops-rbac.yaml
ops 사용자에게 적용할 role을 namespace 기준으로 만들어주고, role과 사용자를 mapping해주는 rolebinding도 생성해줍니다.
dev 계정으로 클러스터에 접속하기
- az account clear
로컬에 남아있는 azure 계정에 남아있는 cache를 삭제합니다.
계정에 대한 캐시가 남아있지 않은 상태에서 로그인을 진행해야 합니다.
- az login
dev 사용자로 로그인합니다.
- namespace dev에 Pod 생성
하지만 dev를 제외한 namespace에서는 kubectl 명령을 실행할 수 없습니다.
ops 계정으로 클러스터에 접속하기
- az account clear
로컬에 남아있는 azure 계정에 남아있는 cache를 삭제합니다.
계정에 대한 캐시가 남아있지 않은 상태에서 로그인을 진행해야 합니다.
- az login
ops 사용자로 로그인합니다.
- namespace ops에 Pod 생성
하지만 ops를 제외한 namespace에서는 kubectl 명령을 실행할 수 없습니다.
이상으로 AKS를 생성하고 접속하는 방법과 AzureAD 계정 별로 Kubernetes 접근권한을 관리하는 Kubernetes RBAC을 적용하는 방법에 대하여 보여드렸습니다.
감사합니다.
Cloudraw는 쉽게 클라우드 인프라를 그리고 사용할 수 있는 서비스를 제공하기 위해 노력하고 있습니다.
클라우드가 있는 곳 어디든 Cloudraw가 함께합니다.
📨 help@cloudraw.kr
'Cloud & Kubernetes' 카테고리의 다른 글
[Azure] Azure Static Web Apps + GitlabCI로 애플리케이션 배포하기 (0) | 2024.01.22 |
---|