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 Gatekeeper란?

OPA Gatekeeper는 OPA를 따르는 CRD(사용자 지정 리소스 정의) 기반 정책을 적용하는 오픈 소스 유효성 검사 Kubernetes 허용 컨트롤러 웹후크입니다.

OPA Gatekeeper의 목표는 서비스에 하드 코드된 정책 규칙 대신 구성을 사용하여 허용 정책을 사용자 지정할 수 있도록 하는 것입니다. 또한 정책 위반 리소스를 식별하기 위해 클러스터에 대한 전체 보기를 제공합니다.

OPA Gatekeeper를 사용하여 규칙으로 조직 전체의 정책을 정의합니다.

  • CPU 및 메모리 제한과 같은 최대 리소스 제한은 구성된 모든 Pod에 적용됩니다.

  • 승인된 리포지토리의 이미지 배포만 허용합니다.

  • 클러스터의 모든 네임스페이스에 대한 레이블 명명 규칙은 각 네임스페이스에 대한 연락 지점을 지정합니다.

  • 클러스터 서비스에 전역적으로 고유한 선택기가 있어야 합니다.

AKS용 Azure Policy

Azure Policy는 OPA Gatekeeper 버전 3을 확장하고 기본 제공 정책을 통해 AKS와 통합합니다. 이러한 정책은 일관된 중앙 집중식 방식으로 클러스터의 대규모 적용 및 보호 기능을 적용합니다.

회사의 개발 팀은 개발을 최적화하고 DevSpaces와 같은 개발 도구를 도입하여 Kubernetes 개발 워크플로를 간소화하려고 합니다. 팀 구성원이 해당 프로젝트에 대한 특정 리소스 제한을 준수하는지 확인하려고 합니다. 여러분은 컴퓨팅 리소스, 스토리지 리소스 및 개발 네임스페이스에서 허용되는 개체 수를 정의하는 정책을 수립하기로 결정합니다.

리소스 제한을 설정하려면 네임스페이스 수준에서 리소스 할당량을 적용하고 리소스 사용량을 모니터링하여 정책 할당량을 조정합니다. 해당 전략을 사용하여 개발 팀 전반에 걸쳐 리소스를 예약하고 제한합니다.

AKS용 Azure Policy 추가 기능을 사용하는 방법

AKS용 Azure Policy 추가 기능을 등록하기 위한 몇 가지 단계가 있습니다. 여기서는 예를 제공하지만 실제로는 다음 단원의 단계를 완료하게 됩니다.

  1. az provider register 명령을 사용하여 두 리소스 공급자를 등록합니다.

    • Microsoft.ContainerServiceMicrosoft.PolicyInsights: 이러한 리소스 공급자는 정책 이벤트에 대한 정보를 쿼리하고 컨테이너를 관리하는 등의 작업을 지원합니다. 이는 정책 수정을 쿼리, 만들기, 업데이트 또는 삭제하는 작업입니다.

    다음은 두 가지 등록 명령의 예입니다.

    az provider register --namespace Microsoft.ContainerService
    az provider register --namespace Microsoft.PolicyInsights
    
  2. Microsoft. ContainerService 리소스 공급자를 사용하여 AKS-AzurePolicyAutoApprove 기능을 등록합니다. 다음은 명령의 예입니다.

    az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
    
  3. 성공적인 기능 등록을 확인한 후 --namespace 매개 변수와 함께 az provider register 명령을 실행하여 새 기능 등록을 전파합니다. 다음은 명령의 예입니다.

    az provider register -n Microsoft.ContainerService
    
  4. Azure Policy 추가 기능 사용:

    az aks enable-addons \
        --addons azure-policy \
        --name myAKSCluster \
        --resource-group myResourceGroup
    

    추가 기능을 활성화하면 클러스터의 두 네임스페이스에 워크로드가 예약됩니다. 첫 번째 네임스페이스는 azure-policyazure-policy-webhook을(를) 포함하는 kube-system입니다. 두 번째 네임스페이스는 gatekeeper-controller-manager을(를) 포함하는 gatekeeper-system입니다. 해당 워크로드는 AKS 컨트롤 플레인에 제출된 요청을 평가하는 작업을 담당합니다. 구성한 정책에 따라 정책 웹후크가 요청을 허용하거나 거부할 수 있습니다.

기본 제공 정책 정의 할당

Azure 정책 준수 대시보드를 사용하여 Azure 환경의 정책을 관리합니다. 대시보드를 사용하면 리소스별, 정책별 세부 수준으로 드릴다운할 수 있습니다. 또한 기존 리소스에 대한 대량 수정과 새 리소스에 대한 자동 수정을 사용해 리소스의 정책 준수를 지원할 수 있습니다.

각 정책에 대한 다음 개요 정보가 나열됩니다.

항목 설명 예제
이름 정책의 이름입니다. [미리 보기]: 컨테이너 CPU 및 메모리 리소스 제한이 Kubernetes 클러스터에 지정된 제한을 초과하지 않는지 확인 정책을 구성합니다.
범위 해당 정책이 적용되는 구독 리소스 그룹입니다. mySubscription/rg-akscostsaving.
준수 상태 할당된 정책의 상태입니다. 준수, 충돌됨, 시작되지 않음 또는 등록되지 않음.
리소스 준수 정책을 준수하는 리소스의 백분율입니다. 해당 계산에는 준수, 미준수 및 충돌 리소스가 고려됩니다. 100
비준수 리소스 하나 이상의 정책 규칙을 위반하는 고유한 리소스의 수입니다. 3
비준수 정책 미준수 정책의 수입니다. 5

여기서부터, 트리거된 이벤트에 대한 리소스별, 정책별 세부 정보를 드릴다운할 수 있습니다. 예를 들어 거부된 워크로드 배포에 대한 세부 정보를 검사할 수 있습니다.

정책 할당

정책을 할당하려면 Azure Policy 탐색 패널의 작성 섹션에서 할당 옵션을 선택합니다.

이니셔티브라고 하는 정책 그룹 또는 단일 정책의 두 가지 방법 중 하나로 Azure 정책을 할당합니다.

이니셔티브 할당

이니셔티브 할당은 특정 목표 또는 목적을 충족하기 위해 함께 그룹화되는 Azure 정책 정의 컬렉션입니다. 예를 들어 리소스에 지불 카드 업계 데이터 보안 표준을 적용하는 것이 목표일 수 있습니다.

정책 할당

정책 할당은 Kubernetes 클러스터에서 권한 있는 컨테이너를 허용하지 않음과 같은 단일 정책을 할당합니다.

정책을 할당하는 방법

각 정책은 일련의 구성 단계를 사용하여 정의됩니다. 캡처할 정보의 양은 선택하는 정책 형식에 따라 달라집니다.

예를 들어, 회사 클라우드 환경에서 개발자가 리소스 배포를 제한하기 위해 Azure Kubernetes Service용 기본 제공 Azure 정책 중 하나를 할당할 수 있습니다. 정책 이름은 ‘컨테이너 CPU 및 메모리 리소스 제한이 Kubernetes 클러스터에 지정된 제한을 초과하지 않는지 확인’입니다.

해당 정책을 적용하려면 배포 요청에 의해 요청된 허용 리소스에 대한 제한을 설정해야 합니다.

정책을 할당할 때 구성 가능한 옵션을 살펴보겠습니다.

기본 정책 정보

첫 번째 단계에서는 새 정책을 정의하는 기본 정보를 선택하고 입력해야 합니다. 예를 들어 이 정보는 정책과 리소스 범위일 수 있습니다. 다음 테이블에서는 구성할 수 있는 각 항목을 보여줍니다.

항목 Description
범위 범위는 정책 할당이 적용되는 리소스 또는 리소스 그룹을 결정합니다. 해당 값은 구독 또는 관리 그룹을 기반으로 합니다. 범위 수준보다 한 단계 낮은 수준의 선택 영역에서 리소스를 제외할 수 있습니다.
정책 정의 적용할 정책입니다. 몇 가지 기본 제공 정책 옵션에서 선택할 수 있습니다.
할당 이름 할당된 정책을 식별하는 데 사용되는 이름입니다.
설명 정책을 설명하는 자유로운 형식의 텍스트입니다.
정책 적용 사용사용 안 함을 선택할 수 있습니다. 옵션이 사용 안 함인 경우 정책이 적용되지 않으며 요청은 미준수를 이유로 거부되지 않습니다.
할당자 등록된 사용자를 기본값으로 하는 자유 텍스트 값입니다. 이 값을 변경할 수 있습니다.

정책 매개 변수

정책을 적용하려면 각 특정 정책에 적용되는 비즈니스 규칙을 구성해야 합니다. 모든 정책에 동일한 비즈니스 규칙이 적용되는 것은 아니므로 정책마다 매개 변수가 다릅니다.

예를 들어 컨테이너 CPU 및 메모리 리소스 제한이 Kubernetes 클러스터에 지정된 제한을 초과하지 않는지 확인 정책을 적용하려면 세 가지 매개 변수를 설정해야 합니다.

  • 컨테이너에 허용되는 최대 CPU 개수
  • 컨테이너에 허용되는 최대 메모리 바이트
  • 정책에서 제외할 Kubernetes 네임스페이스의 목록

해당 정책과 구성할 사용자 지정 매개 변수가 없는 HTTPS를 통해서만 웹 애플리케이션에 액세스할 수 있음 정책을 비교합니다.

모든 정책에는 효과 설정이 있습니다. 이 설정은 정책 실행을 사용하거나 사용하지 않도록 설정합니다. 매개 변수와 마찬가지로 정책에는 다른 효과 옵션도 있습니다.

예를 들어, 리소스 관리 정책의 경우 효과 값으로 감사, 거부 또는 사용 안 함을 선택할 수 있습니다. 웹 애플리케이션 정책의 경우 감사 또는 사용 안 함만 선택할 수 있습니다.

이 테이블에서는 정책 정의에서 현재 지원되는 모든 효과를 보여줍니다.

효과 설명
Append 요청된 리소스에 더 많은 필드 추가
감사 활동 로그에서 경고 이벤트 만들기
AuditIfNotExists 조건과 일치하는 리소스와 관련된 리소스를 감사하도록 설정
Deny 정책 정의를 통해 정의된 표준과 일치하지 않아 요청에 실패하는 리소스 요청 방지
DeployIfNotExists 조건이 충족되면 템플릿 배포 실행
사용 안 함 상황을 테스트하거나, 정책 정의를 통해 효과를 매개 변수화하여 단일 할당을 사용하지 않도록 하려는 경우에 유용함
Modify 만들거나 업데이트하는 동안 리소스의 태그를 추가, 업데이트 또는 제거

정책 수정

마지막 단계는 정책 수정을 고려하는 것입니다. 정책을 할당할 때 리소스가 이미 존재하고 새 정책을 위반할 수 있습니다. 기본적으로 새로 만든 리소스만 새 정책에 적용됩니다. 수정을 사용하여 새 정책을 할당한 후 기존 리소스를 확인하세요. 수정 작업은 적용되는 정책 종류에 따라 다를 수 있습니다.

다음 연습에서는 비용을 더 줄일 수 있는 컨테이너 CPU 및 메모리 리소스 제한이 Kubernetes 클러스터에서 지정된 제한을 초과하지 않도록 한다는 정책을 사용합니다.