Kubernetes용 Azure Policy를 사용하여 AKS 리소스 할당량 정책 구성
Azure Policy를 사용하면 클라우드 환경에 대한 표준을 적용하고 대규모로 규정 준수를 평가할 수 있습니다. 회사에서 직원이 조직의 회사 소프트웨어, 하드웨어 및 기타 리소스를 사용할 수 있는 방법을 정의하는 비즈니스 규칙을 구현하는 것이 좋습니다. 따라서 기업은 정책을 사용하여 액세스를 적용, 검토 및 정의합니다. 정책은 조직이 거버넌스 및 법적 요구 사항을 충족하고 모범 사례를 구현하며 조직 규칙을 수립하는 데 도움이 됩니다.
AKS(Azure Kubernetes Service)를 사용하면 정책을 사용하여 클라우드 네이티브 애플리케이션을 효율적으로 오케스트레이션할 수 있습니다. 팀에서 AKS를 사용하여 비용 효율적인 접근 방식을 보장하는 방법을 관리하기 위해 비즈니스 규칙을 적용해야 합니다. Azure Policy를 사용하여 Azure 기반 클라우드 리소스에 이 아이디어를 적용하기로 결정했습니다.
Kubernetes에 Azure Policy를 사용하는 방법을 논의하기 전에 Kubernetes 내에서 이 기능을 사용하도록 설정하는 몇 가지 개념을 더 이해해야 합니다.
Kubernetes 어드미션 컨트롤러란 무엇인가?
어드미션 컨트롤러는 요청된 Kubernetes 객체의 지속성이 이루어지기 전에 인증 및 권한 부여된 요청을 Kubernetes API에서 가로채는 Kubernetes 플러그인입니다. 예를 들어 새 워크로드를 배포하고 배포에 특정 메모리 요구 사항이 있는 Pod 요청이 포함되어 있다고 가정합니다. 어드미션 컨트롤러는 배포 요청을 가로채고 클러스터에 저장되기 전에 배포를 승인해야 합니다.
허용 컨트롤러는 클러스터를 사용하고 디자인하는 방법을 제어하고 적용하는 소프트웨어라고 생각할 수 있습니다. Kubernetes 개체를 만들고 삭제하고 수정하는 요청을 제한합니다.
허용 컨트롤러 웹후크란?
허용 컨트롤러 웹후크는 허용 요청을 수신한 다음 이러한 요청에 대해 작동하는 HTTP 콜백 함수입니다. 허용 컨트롤러는 런타임에 구성해야 합니다. 이러한 컨트롤러는 컴파일된 허용 플러그 인 또는 웹후크로 실행되는 배포된 확장에 대해 존재합니다.
허용 웹후크는 유효성 검사 웹후크 또는 변경 웹후크의 두 가지 종류로 제공됩니다. 변경 웹후크가 먼저 호출되고 API 서버로 전송된 개체에서 기본값을 변경하고 적용할 수 있습니다. 유효성 검사 웹후크는 개체 값의 유효성을 검사하고 요청을 거부할 수 있습니다.
OPA(Open Policy Agent)란?
OPA(Open Policy Agent)는 정책을 작성할 수 있는 높은 수준의 선언적 언어를 제공하는 오픈 소스 범용 정책 엔진입니다. 이러한 정책을 사용하면 시스템이 작동하는 방식을 감독하는 규칙을 정의할 수 있습니다.
OPA 게이트키퍼란?
OPA Gatekeeper는 OPA 구문을 따르는 CRD(사용자 지정 리소스 정의) 기반 정책을 적용하는 오픈 소스, 유효성 검사, Kubernetes 허용 컨트롤러 웹후크입니다.
OPA Gatekeeper의 목표는 서비스에 대해 하드 코딩된 정책 규칙 대신 구성을 사용하여 허용 정책을 사용자 지정할 수 있도록 하는 것입니다. 또한 정책 위반 리소스를 식별하는 클러스터의 전체 보기를 제공합니다.
OPA 게이트키퍼를 사용하여 규칙으로 조직 전체 정책을 정의합니다.
CPU 및 메모리 제한과 같은 최대 리소스 제한은 구성된 모든 Pod에 적용됩니다.
이미지 배포는 승인된 리포지토리에서만 허용됩니다.
클러스터의 모든 네임스페이스에 대한 레이블에 대한 명명 규칙은 각 네임스페이스에 대한 연락처 지점을 지정해야 합니다.
클러스터 서비스에 전역적으로 고유한 선택기가 있어야 합니다.
AKS용 Azure Policy
Azure Policy는 OPA Gatekeeper 버전 3을 확장하고 기본 제공 정책을 통해 AKS와 통합합니다. 이러한 정책은 중앙 집중식으로 일관적인 방식으로 클러스터에서 대규모 적용 및 보호 조치를 적용합니다.
회사의 개발 팀은 개발을 최적화하고 DevSpaces와 같은 개발 도구를 도입하여 Kubernetes 개발 워크플로를 간소화하려고 합니다. 팀 구성원이 프로젝트에 대한 특정 리소스 제한을 준수하는지 확인하려고 합니다. 개발 네임스페이스에서 허용되는 컴퓨팅 리소스, 스토리지 리소스 및 개체 수를 정의하는 정책을 적용하기로 결정합니다.
리소스 제한을 설정하려면 네임스페이스 수준에서 리소스 할당량을 적용하고 리소스 사용량을 모니터링하여 정책 할당량을 조정할 수 있습니다. 이 전략을 사용하여 개발 팀 전체에서 리소스를 예약하고 제한합니다.
AKS에 Azure Policy 추가 기능을 사용하도록 설정하는 방법
AKS 기능에 대한 Azure Policy 추가 기능을 등록하는 몇 가지 단계가 있습니다. 여기서는 예제를 제공하겠지만, 여러분이 실제로 단계를 완료하는 것은 다음 단원에서 이루어질 것입니다.
다음 명령을 사용하여 두 개의 리소스 공급자를 등록합니다.
az provider register
- Microsoft.ContainerService 및 Microsoft.PolicyInsights: 이러한 리소스 공급자는 정책 이벤트에 대한 정보를 쿼리하고 컨테이너를 관리하는 등의 작업을 지원합니다. 정책 수정을 쿼리, 만들기, 업데이트 또는 삭제하는 작업입니다.
다음은 두 가지 등록 명령의 예입니다.
az provider register --namespace Microsoft.ContainerService az provider register --namespace Microsoft.PolicyInsights
리소스 공급자에
AKS-AzurePolicyAutoApprove
Microsoft. ContainerService
기능을 등록합니다. 명령의 예는 다음과 같습니다.az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
성공적인 기능 등록을 확인한 후 매개 변수를
az provider register
--namespace
사용하여 명령을 실행하여 새 기능 등록을 전파합니다. 명령의 예는 다음과 같습니다.az provider register -n Microsoft.ContainerService
azure-policy 추가 기능을 사용하도록 설정합니다.
az aks enable-addons \ --addons azure-policy \ --name myAKSCluster \ --resource-group myResourceGroup
추가 기능을 활성화하면 클러스터의 두 네임스페이스에서 워크로드가 예약됩니다. 첫 번째 네임스페이스는 및
azure-policy
를 포함하는azure-policy-webhook
입니다. 두 번째 네임스페이스는 게이트키퍼 시스템이며, 여기에는gatekeeper-controller-manager
. 이러한 워크로드는 AKS 컨트롤 플레인에 제출된 요청을 평가합니다. 구성된 정책에 따라 정책 웹후크는 요청을 허용하거나 거부할 수 있습니다.
기본 제공 정책 정의 할당
Azure 정책 준수 대시보드를 사용하여 Azure 환경의 정책을 관리합니다. 대시보드를 사용하면 리소스별 정책별 세부 정보 수준으로 드릴다운할 수 있습니다. 기존 리소스에 대한 대량 수정 및 새 리소스에 대한 자동 수정을 사용하여 리소스를 규정 준수로 가져올 수 있습니다.
각 정책에 대해 다음 개요 정보가 나열됩니다.
항목 | 설명 | 예시 |
---|---|---|
이름 | 정책의 이름입니다. | [미리 보기]: 컨테이너 CPU 및 메모리 리소스 제한이 Kubernetes 클러스터에서 지정된 제한을 초과하지 않는지 확인합니다. |
범위 | 이 정책이 적용되는 구독 리소스 그룹입니다. | mySubscription/rg-akscostsaving. |
준수 상태 | 할당된 정책의 상태입니다. | 준수, 충돌, 시작 안 됨 또는 등록되지 않음 |
리소스 규정 준수 | 정책을 준수하는 리소스의 백분율입니다. 이 계산은 규정 준수, 비준수 및 충돌하는 리소스를 고려합니다. | 100 |
비준수 리소스 | 하나 이상의 정책 규칙을 위반하는 고유 리소스의 수입니다. | 3 |
비준수 정책 | 비준수 정책 수입니다. | 5 |
여기에서 트리거된 이벤트에 대한 리소스별 및 정책별 세부 정보로 드릴다운할 수 있습니다. 예를 들어 거부된 워크로드 배포의 세부 정보를 검사할 수 있습니다.
정책 할당
정책을 할당하려면 Azure Policy 탐색 패널의 작성 섹션에서할당 옵션을 선택합니다.
Azure 정책을 이니셔티브라고 하는 정책 그룹 또는 단일 정책의 두 가지 방법 중 하나로 할당합니다.
주도권 할당
이니셔티브 할당은 특정 목표 또는 목적을 충족하기 위해 함께 그룹화된 Azure 정책 정의의 컬렉션입니다. 예를 들어 목표는 리소스에 결제 카드 업계 데이터 보안 표준을 적용하는 것입니다.
정책 할당
정책 할당은 Kubernetes 클러스터에서 권한 있는 컨테이너 허용 안 함과 같은 단일 정책을 할당합니다.
정책을 할당하는 방법
각 정책은 일련의 구성 단계를 사용하여 정의됩니다. 캡처하는 정보의 양은 선택한 정책 유형에 따라 달라집니다.
예를 들어 회사의 클라우드 환경에서 개발자가 리소스 배포를 제한하려면 Azure Kubernetes Service에 대한 기본 제공 Azure 정책 중 하나를 할당할 수 있습니다. 정책 이름은 컨테이너 CPU 및 메모리 리소스 제한이 Kubernetes 클러스터에서 지정된 한도를 초과하지 않도록 하는 것입니다.
정책을 사용하려면 배포 요청에서 요청한 허용된 리소스에 대한 제한을 설정해야 합니다.
정책을 할당할 때 구성 가능한 옵션을 살펴보겠습니다.
기본 정책 정보
첫 번째 단계에서는 새 정책을 정의하는 기본 정보를 선택하고 입력해야 합니다. 예를 들어 이 정보는 정책 및 리소스 범위일 수 있습니다. 다음 표에는 구성할 수 있는 각 항목이 표시됩니다.
항목 | 설명 |
---|---|
범위 | 범위는 정책 할당이 적용되는 리소스 또는 리소스 그룹을 결정합니다. 이 값은 구독 또는 관리 그룹을 기반으로 합니다. 범위 수준보다 낮은 한 수준에서 선택 영역에서 리소스를 제외할 수 있습니다. |
정책 정의 | 적용하려는 정책입니다. 몇 가지 기본 제공 정책 옵션 중에서 선택할 수 있습니다. |
할당 이름 | 할당된 정책을 식별하는 데 사용되는 이름입니다. |
묘사 | 정책을 설명하는 자유 텍스트 설명입니다. |
정책 적용 | 사용 및 사용 안 함을 선택할 수 있습니다. 옵션이 사용 안 함인 경우 정책이 적용되지 않고 요청이 비준수로 거부되지 않습니다. |
에 의해 할당됨 | 등록된 사용자의 기본값인 자유 텍스트 값입니다. 이 값을 변경할 수 있습니다. |
정책 매개 변수
정책을 사용하려면 각 특정 정책에 적용되는 비즈니스 규칙을 구성해야 합니다. 모든 정책에 동일한 비즈니스 규칙이 있는 것은 아니며, 따라서 각 정책에 서로 다른 매개 변수가 있습니다.
예를 들어 컨테이너 CPU 및 메모리 리소스 제한이 Kubernetes 클러스터 정책에서 지정된 한도를 초과하지 않도록 하려면 다음 세 가지 매개 변수를 설정해야 합니다.
- 컨테이너에 허용되는 최대 CPU 단위
- 컨테이너에 허용되는 최대 메모리 바이트
- 정책에서 제외할 Kubernetes 네임스페이스 목록
해당 정책을 웹 애플리케이션과 비교하려면 구성할 사용자 지정 매개 변수가 없는 HTTPS 정책을 통해서만 액세스할 수 있어야 합니다 .
모든 정책에는 효과 설정이 있습니다. 이 설정은 정책 실행을 사용하거나 사용하지 않도록 설정합니다. 매개 변수와 마찬가지로 정책에는 다른 효과 옵션이 있을 수도 있습니다.
예를 들어 리소스 관리 정책의 경우 감사, 거부 또는 비활성화 를 효과 값으로 선택할 수 있습니다. 웹 애플리케이션 정책의 경우 감사 또는 사용 안 함만 선택할 수 있습니다.
이 표에서는 정책 정의에서 현재 지원되는 모든 효과를 나열합니다.
영향 | 설명 |
---|---|
덧붙이다 | 요청된 리소스에 더 많은 필드 추가 |
감사 | 활동 로그에 경고 이벤트를 만듭니다. |
AuditIfNotExists | 조건과 일치하는 리소스와 관련된 리소스에 대한 감사를 사용하도록 설정합니다. |
거절하다 | 정책 정의를 통해 정의된 표준과 일치하지 않는 리소스 요청을 방지하고 요청에 실패합니다. |
DeployIfNotExists | 조건이 충족되면 템플릿 배포를 실행합니다. |
비활성화 | 테스트 상황 또는 정책 정의가 효과를 매개 변수화하고 단일 할당을 사용하지 않도록 설정하려는 경우에 유용합니다. |
수정하다 | 만들거나 업데이트하는 동안 리소스에 태그를 추가, 업데이트 또는 제거합니다. |
정책 수정
마지막 단계는 정책 수정을 고려하는 것입니다. 정책을 할당하면 리소스가 이미 존재하고 새 정책을 위반할 수 있습니다. 기본적으로 새로 만든 리소스만 새 정책에 적용됩니다. 새 정책을 할당한 후, 개선 조치를 통해 기존 리소스를 점검합니다. 수정 작업은 적용되는 정책 유형에 따라 다를 수 있습니다.
다음 연습에서는 컨테이너 CPU 및 메모리 리소스 제한이 Kubernetes 클러스터 정책에서 지정된 한도를 초과하지 않도록 하여 비용을 더 낮춥니다.