검색

2.3. 정책 컨트롤러

download PDF

정책 컨트롤러는 클러스터가 정책과 호환되는지 여부를 모니터링하고 보고합니다. 즉시 사용 가능한 정책 템플릿을 사용하여 사전 정의된 정책 컨트롤러 및 정책을 적용하여 Red Hat Advanced Cluster Management for Kubernetes 정책 프레임워크를 사용합니다. 정책 컨트롤러는 Kubernetes CRD(사용자 정의 리소스 정의) 인스턴스입니다.

CRD에 대한 자세한 내용은 CustomResourceDefinitions를 사용하여 Kubernetes API 확장을 참조하십시오. 정책 컨트롤러는 정책 위반을 수정하여 클러스터 상태를 준수하도록 합니다.

제품 정책 프레임워크를 사용하여 사용자 지정 정책 및 정책 컨트롤러를 생성할 수 있습니다. 자세한 내용은 사용자 정의 정책 컨트롤러 생성(더 이상 사용되지 않음) 을 참조하십시오.

다음 주제를 참조하여 Kubernetes 정책 컨트롤러의 Red Hat Advanced Cluster Management for Kubernetes에 대해 자세히 알아보십시오.

중요: 구성 정책 컨트롤러 정책만 적용 기능을 지원합니다. 정책 컨트롤러에서 시행 기능을 지원하지 않는 정책을 수동으로 수정해야 합니다.

정책 관리에 대한 자세한 내용은 관리 정책을 참조하십시오.

2.3.1. Kubernetes 구성 정책 컨트롤러

구성 정책 컨트롤러를 사용하여 Kubernetes 리소스를 구성하고 클러스터 전체에 보안 정책을 적용할 수 있습니다.

구성 정책 컨트롤러는 로컬 Kubernetes API 서버와 통신하여 클러스터에 있는 구성 목록을 가져옵니다. CRD에 대한 자세한 내용은 CustomResourceDefinitions를 사용하여 Kubernetes API 확장을 참조하십시오.

구성 정책 컨트롤러는 설치 중에 hub 클러스터에 생성됩니다. 구성 정책 컨트롤러는 적용 기능을 지원하고 다음 정책의 준수를 모니터링합니다.

구성 정책의 수정 사항이 적용 되도록 설정되면 컨트롤러에서 대상 관리 클러스터에 복제 정책을 생성합니다. 구성 정책에서 템플릿을 사용할 수도 있습니다. 자세한 내용은 구성 정책의 템플릿 지원을 참조하십시오.

구성 정책 컨트롤러에 대한 자세한 내용을 보려면 계속 읽으십시오.

2.3.1.1. 구성 정책 컨트롤러 YAML 구조

Name:         configuration-policy-example
Namespace:
Labels:
APIVersion:   policy.open-cluster-management.io/v1
Kind:         ConfigurationPolicy
Metadata:
  Finalizers:
    finalizer.policy.open-cluster-management.io
Spec:
  Conditions:
    Ownership:
    NamespaceSelector:
      Exclude:
      Include:
    RemediationAction:
 Status:
   CompliancyDetails:
     Configuration-Policy-Example:
       Default:
       Kube - Public:
   Compliant:          Compliant
 Events:

2.3.1.2. 구성 정책 샘플

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: policy-config
spec:
  namespaceSelector:
    include: ["default"]
    exclude: []
  remediationAction: inform
    severity: low
    object-templates:
    - complianceType: musthave
      objectDefinition:
        apiVersion: v1
        kind: Pod
        metadata:
          name: pod
        spec:
          containers:
          - image: 'pod-image'
            name:
            ports:
           - containerPort: 80
  evaluationInterval:
    compliant:
    noncompliant:

2.3.1.3. 구성 정책 YAML 테이블

표 2.1. 매개변수 테이블
필드설명

apiVersion

필수 항목입니다. 값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목입니다. 정책 유형을 나타내려면 ConfigurationPolicy 로 값을 설정합니다.

metadata.name

필수 항목입니다. 정책의 이름입니다.

spec

필수 항목입니다. 모니터링할 구성 정책과 이를 수정하는 방법에 대한 사양입니다.

spec.namespace

네임스페이스가 지정된 오브젝트 또는 리소스에 필요합니다. 정책이 적용되는 허브 클러스터의 네임스페이스입니다. 정책에 적용할 네임스페이스인 include 매개변수에 하나 이상의 네임스페이스를 입력합니다. exclude 매개변수는 정책을 명시적으로 적용하지 않으려는 네임스페이스를 지정합니다.

spec.remediationAction

필수 항목입니다. 정책 수정을 지정합니다. 정보입력

spec.remediationAction.severity

필수 항목입니다. 정책을 준수하지 않는 경우 심각도를 지정합니다. 다음 매개변수 값을 사용합니다( 낮음,중간 또는 높음 ).

spec.remediationAction.complianceType

필수 항목입니다. 관리 클러스터에 평가하거나 적용해야 하는 역할 및 기타 Kubernetes 오브젝트의 예상 동작을 나열하는 데 사용됩니다. 다음 동사를 매개변수 값으로 사용해야 합니다.

mustonlyhave: 정확한 이름과 관련 필드가 있는 오브젝트가 있어야 함을 나타냅니다.

musthave: 지정된 object-template과 동일한 이름의 오브젝트가 있어야 함을 나타냅니다. 템플릿의 다른 필드는 오브젝트에 존재하는 항목의 하위 집합입니다.

mustnothave: 이름 또는 레이블이 같은 객체가 존재할 수 없으며 사양이나 규칙에 관계없이 삭제해야 함을 나타냅니다.

spec.evaluationInterval.compliant

선택 사항: 규정 준수 상태에 있을 때 정책을 평가하는 빈도를 정의하는 데 사용됩니다. 값은 시간 단위 접미사가 있는 일련의 숫자인 기간 형식이어야 합니다. 예를 들어 12h30m5s 는 12 시간, 30 분 및 5 초를 나타냅니다. 정책 사양 을 업데이트하지 않는 한 규정 준수 클러스터에서 정책을 다시 평가하지 않도록 never 로 설정할 수도 있습니다.

spec.evaluationInterval.noncompliant

선택 사항: 비호환 상태의 경우 정책을 평가하는 빈도를 정의하는 데 사용됩니다. evaluationInterval.compliant 매개변수와 유사하게 값은 시간 단위 접미사가 있는 숫자 시퀀스인 기간의 형식이어야 합니다. 정책 사양 을 업데이트하지 않는 한 정책이 비준수 클러스터에서 다시 평가되지 않도록 never 로 설정할 수도 있습니다.

NIST Special>-< 800-53 (Rev. 4)을 사용하고 CM-Configuration-Management 폴더의 Red Hat Advanced Cluster Management에서 지원하는 정책 샘플을 참조하십시오. hub 클러스터에 정책을 적용하는 방법에 대한 자세한 내용은 지원 정책을 참조하십시오.

정책 만들기 및 사용자 지정 방법에 대한 자세한 내용은 보안 정책 관리를 참조하십시오. 컨트롤러에 대한 자세한 내용은 정책 컨트롤러를 참조하십시오.

2.3.2. 인증서 정책 컨트롤러

인증서 정책 컨트롤러를 사용하면 만료에 가까운 인증서를 감지하고 너무 길거나 지정된 패턴과 일치하지 않는 DNS 이름이 포함된 시간 기간(시간)을 감지할 수 있습니다.

컨트롤러 정책에서 다음 매개변수를 업데이트하여 인증서 정책 컨트롤러를 구성하고 사용자 지정합니다.

  • minimumDuration
  • minimumCADuration
  • maximumDuration
  • maximumCADuration
  • allowedSANPattern
  • disallowedSANPattern

다음 시나리오 중 하나로 인해 정책을 준수하지 않을 수 있습니다.

  • 인증서가 최소 시간 동안 만료되거나 최대 시간을 초과하는 경우
  • DNS 이름이 지정된 패턴과 일치하지 않는 경우

인증서 정책 컨트롤러는 관리 클러스터에서 생성됩니다. 컨트롤러는 로컬 Kubernetes API 서버와 통신하여 인증서가 포함된 시크릿 목록을 가져오고 모든 호환 인증서를 결정합니다. CRD에 대한 자세한 내용은 CustomResourceDefinitions를 사용하여 Kubernetes API 확장을 참조하십시오.

인증서 정책 컨트롤러에서 시행 기능을 지원하지 않습니다.

2.3.2.1. 인증서 정책 컨트롤러 YAML 구조

인증서 정책의 다음 예제를 보고 YAML 테이블의 요소를 검토합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: CertificatePolicy
metadata:
  name: certificate-policy-example
  namespace:
  labels: category=system-and-information-integrity
spec:
  namespaceSelector:
    include: ["default"]
  remediationAction:
  severity:
  minimumDuration:
  minimumCADuration:
  maximumDuration:
  maximumCADuration:
  allowedSANPattern:
  disallowedSANPattern:
2.3.2.1.1. 인증서 정책 컨트롤러 YAML 테이블
표 2.2. 매개변수 테이블
필드설명

apiVersion

필수 항목입니다. 값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목입니다. 정책 유형을 나타내려면 값을 CertificatePolicy 로 설정합니다.

metadata.name

필수 항목입니다. 정책을 식별하는 이름입니다.

metadata.namespace

필수 항목입니다. 정책이 생성되는 관리형 클러스터 내의 네임스페이스입니다.

metadata.labels

선택 사항: 인증서 정책에서 category=system-and-integrity 레이블은 정책을 분류하고 인증서 정책을 쉽게 쿼리할 수 있습니다. 인증서 정책의 category 키에 대한 다른 값이 있는 경우 인증서 컨트롤러에서 값을 덮어씁니다.

spec

필수 항목입니다. 모니터링 및 새로 고칠 인증서의 사양입니다.

spec.namespaceSelector

필수 항목입니다. 정책을 적용하려는 관리형 클러스터 네임스페이스입니다. IncludeExclude 의 매개변수 값을 입력합니다. 참고:

• 여러 인증서 정책을 생성하여 동일한 관리 클러스터에 적용하는 경우 각 정책 namespaceSelector 에 다른 값을 할당해야 합니다.

• 인증서 정책 컨트롤러의 namespaceSelector 가 네임스페이스와 일치하지 않으면 정책이 준수된 것으로 간주됩니다.

spec.remediationAction

필수 항목입니다. 정책 수정을 지정합니다. 알릴 매개변수 값을 설정합니다. 인증서 정책 컨트롤러는 정보 기능만 지원합니다.

spec.severity

선택 사항: 정책을 준수하지 않는 경우 사용자에게 심각도를 알립니다. 다음 매개변수 값을 사용합니다( 낮음,중간 또는 높음 ).

spec.minimumDuration

필수 항목입니다. 값을 지정하지 않으면 기본값은 100h 입니다. 이 매개변수는 인증서를 준수하지 않는 것으로 간주하기 전에 최소 기간(시간)을 지정합니다. 매개변수 값은 Golang의 시간 기간 형식을 사용합니다. 자세한 내용은 Golang Parse Duration 을 참조하십시오.

spec.minimumCADuration

선택 사항: 다른 인증서와 다른 값으로 만료될 수 있는 서명 인증서를 식별하는 값을 설정합니다. 매개변수 값을 지정하지 않으면 CA 인증서 만료는 minimumDuration 에 사용되는 값입니다. 자세한 내용은 Golang Parse Duration 을 참조하십시오.

spec.maximumDuration

선택 사항: 원하는 제한을 초과하는 기간으로 생성된 인증서를 식별하려면 값을 설정합니다. 이 매개변수는 Golang의 시간 기간 형식을 사용합니다. 자세한 내용은 Golang Parse Duration 을 참조하십시오.

spec.maximumCADuration

선택 사항: 정의된 제한을 초과하는 기간으로 생성된 서명 인증서를 식별하려면 값을 설정합니다. 이 매개변수는 Golang의 시간 기간 형식을 사용합니다. 자세한 내용은 Golang Parse Duration 을 참조하십시오.

spec.allowedSANPattern

선택 사항: 인증서에 정의한 모든 SAN 항목과 일치해야 하는 정규식입니다. 이 매개변수는 DNS 이름을 패턴에 대해 확인합니다. 자세한 내용은 Golang Regular Expression 구문 을 참조하십시오.

spec.disallowedSANPattern

선택 사항: 인증서에 정의한 SAN 항목과 일치하지 않아야 하는 정규식입니다. 이 매개변수는 DNS 이름을 패턴과 대조하여 확인합니다.
참고: 와일드카드 인증서를 감지하려면 다음 SAN 패턴을 사용합니다. 허용하지 않는SANPattern: "[\\*]"

자세한 내용은 Golang Regular Expression 구문 을 참조하십시오.

2.3.2.2. 인증서 정책 샘플

hub 클러스터에 인증서 정책 컨트롤러가 생성되면 관리 클러스터에 복제 정책이 생성됩니다. 인증서 정책 샘플을 보려면 policy-certificate.yaml 을 참조하십시오.

인증서 정책을 관리하는 방법에 대한 자세한 내용은 보안 정책 관리를 참조하십시오. 자세한 내용은 정책 컨트롤러를 참조하십시오.

2.3.3. IAM 정책 컨트롤러

IAM(Identity and Access Management) 정책 컨트롤러를 사용하여 호환되지 않는 IAM 정책에 대한 알림을 수신할 수 있습니다. 규정 준수 검사는 IAM 정책에서 구성한 매개변수를 기반으로 합니다.

IAM 정책 컨트롤러는 클러스터에서 특정 클러스터 역할(예: ClusterRole)이 있는 원하는 최대 사용자 수를 모니터링합니다. 모니터링할 기본 클러스터 역할은 cluster-admin 입니다. IAM 정책 컨트롤러는 로컬 Kubernetes API 서버와 통신합니다. 자세한 내용은 CustomResourceDefinitions를 사용하여 Kubernetes API 확장을 참조하십시오.

IAM 정책 컨트롤러는 관리 클러스터에서 실행됩니다. 자세한 내용은 다음 섹션을 참조하십시오.

2.3.3.1. IAM 정책 YAML 구조

IAM 정책의 다음 예제를 보고 YAML 테이블의 매개변수를 검토합니다.

apiVersion: policy.open-cluster-management.io/v1
kind: IamPolicy
metadata:
  name:
spec:
  clusterRole:
  severity:
  remediationAction:
  maxClusterRoleBindingUsers:
  ignoreClusterRoleBindings:

2.3.3.2. IAM 정책 YAML 테이블

설명은 다음 매개변수 표를 참조하십시오.

표 2.3. 매개변수 테이블
필드설명

apiVersion

필수 항목입니다. 값을 policy.open-cluster-management.io/v1 로 설정합니다.

kind

필수 항목입니다. 정책 유형을 나타내려면 값을 Policy 로 설정합니다.

metadata.name

필수 항목입니다. 정책 리소스를 식별하는 이름입니다.

spec

필수 항목입니다. 정책에 대한 설정 세부 정보를 추가합니다.

spec.clusterRole

선택 사항: 모니터링할 클러스터 역할(예: ClusterRole)입니다. 지정하지 않는 경우 기본값은 cluster-admin 입니다.

spec.severity

선택 사항: 정책을 준수하지 않는 경우 사용자에게 심각도를 알립니다. 다음 매개변수 값을 사용합니다( 낮음,중간 또는 높음 ).

spec.remediationAction

선택 사항: 정책 수정을 지정합니다. 정보 .

spec.ignoreClusterRoleBindings

선택 사항: 무시할 클러스터 역할 바인딩 이름을 나타내는 정규식(regex) 값 목록입니다. 이러한 정규식 값은 Go regexp 구문 을 따라야 합니다. 기본적으로 system: 로 시작하는 이름이 있는 모든 클러스터 역할 바인딩은 무시됩니다. 이를 더 엄격한 값으로 설정하는 것이 좋습니다. 클러스터 역할 바인딩 이름을 무시하지 않으려면 목록을 단일 값 .^ 또는 일치하지 않는 다른 정규식으로 설정합니다.

spec.maxClusterRoleBindingUsers

필수 항목입니다. 정책을 준수하지 않는 것으로 간주하기 전에 사용할 수 있는 최대 IAM 역할 바인딩 수입니다.

2.3.3.3. IAM 정책 샘플

IAM 정책 샘플을 보려면 policy-limitclusteradmin.yaml 을 참조하십시오. 자세한 내용은 보안 정책 관리를 참조하십시오.

자세한 내용은 정책 컨트롤러를 참조하십시오.

2.3.4. 정책 세트 컨트롤러

정책 세트 컨트롤러는 동일한 네임스페이스에 정의된 정책으로 정책 상태 범위를 집계합니다. 동일한 네임스페이스에 있는 정책을 그룹화할 정책 세트(PolicySet)를 생성합니다. PolicySet의 모든 정책은 PolicySet Placement 를 바인딩하기 위해 PlacementBinding 을 생성하여 선택한 클러스터에 함께 배치됩니다. 정책 세트가 hub 클러스터에 배포됩니다.

또한 정책이 여러 정책 세트의 일부인 경우 기존 및 새 배치 리소스는 정책에 남아 있습니다. 사용자가 정책 세트에서 정책을 제거하면 정책 세트에서 선택된 클러스터에 정책이 적용되지 않지만 배치는 그대로 유지됩니다. 정책 세트 컨트롤러는 정책 세트 배치를 포함하는 클러스터의 위반 사항만 확인합니다.

참고: Red Hat Advanced Cluster Management 강화 샘플 정책 세트에서는 클러스터 배치를 사용합니다. 클러스터 배치를 사용하는 경우 정책이 포함된 네임스페이스를 관리 클러스터 세트에 바인딩합니다. 클러스터 배치 사용에 대한 자세한 내용은 클러스터에 정책 배포를 참조하십시오.

다음 섹션에서 정책 집합 구조에 대해 자세히 알아보십시오.

2.3.4.1. 정책 세트 YAML 구조

정책 세트는 다음 YAML 파일과 유사합니다.

apiVersion: policy.open-cluster-management.io/v1beta1
kind: PolicySet
metadata:
  name: demo-policyset
spec:
  policies:
  - policy-demo

---
apiVersion: policy.open-cluster-management.io/v1
kind: PlacementBinding
metadata:
  name: demo-policyset-pb
placementRef:
  apiGroup: apps.open-cluster-management.io
  kind: PlacementRule
  name: demo-policyset-pr
subjects:
- apiGroup: policy.open-cluster-management.io
  kind: PolicySet
  name: demo-policyset
---
apiVersion: apps.open-cluster-management.io
kind: PlacementRule
metadata:
  name: demo-policyset-pr
spec:
  clusterConditions:pagewidth:
  - status: "True"
    type: ManagedCLusterConditionAvailable
  clusterSelectors:
    matchExpressions:
      - key: name
        operator: In
        values:
          - local-cluster

2.3.4.2. 정책 세트 테이블

설명은 다음 매개변수 표를 참조하십시오.

표 2.4. 매개변수 테이블
필드설명

apiVersion

필수 항목입니다. 해당 값을 policy.open-cluster-management.io/v1beta1 로 설정합니다.

kind

필수 항목입니다. 정책 유형을 나타내려면 해당 값을 PolicySet 으로 설정합니다.

metadata.name

필수 항목입니다. 정책 리소스를 식별하는 이름입니다.

spec

필수 항목입니다. 정책에 대한 설정 세부 정보를 추가합니다.

spec.policies

선택 사항: 정책 세트에서 함께 그룹화할 정책 목록입니다.

2.3.4.3. 정책 세트 샘플

apiVersion: policy.open-cluster-management.io/v1beta1
kind: PolicySet
metadata:
  name: pci
  namespace: default
spec:
  description: Policies for PCI compliance
  policies:
  - policy-pod
  - policy-namespace
status:
  compliant: NonCompliant
  placement:
  - placementBinding: binding1
    placementRule: placement1
    policySet: policyset-ps

보안 정책 관리 주제의 정책 세트 생성 섹션을 참조하십시오. 또한 배포할 정책 생성기가 필요한 stable PolicySets, PolicySets-- Stable 을 확인합니다. 정책 생성기 설명서를 참조하십시오.

2.3.5. 사용자 정의 정책 컨트롤러 생성(더 이상 사용되지 않음)

사용자 정의 정책 컨트롤러를 작성, 적용, 보기 및 업데이트하는 방법을 학습합니다. 정책 컨트롤러의 YAML 파일을 생성하여 클러스터에 배포할 수 있습니다. 다음 섹션을 보고 정책 컨트롤러를 생성합니다.

2.3.5.1. 정책 컨트롤러 작성

governance-policy-framework 리포지토리에 있는 정책 컨트롤러 프레임워크를 사용합니다. 정책 컨트롤러를 생성하려면 다음 단계를 완료합니다.

  1. 다음 명령을 실행하여 governance-policy-framework 리포지토리를 복제합니다.

    git clone git@github.com:stolostron/governance-policy-framework.git
  2. 정책 스키마 정의를 업데이트하여 컨트롤러 정책을 사용자 지정합니다. 정책은 다음 내용과 유사합니다.

    metadata:
      name: samplepolicies.policies.open-cluster-management.io
    spec:
      group: policy.open-cluster-management.io
      names:
        kind: SamplePolicy
        listKind: SamplePolicyList
        plural: samplepolicies
        singular: samplepolicy
  3. 정책 컨트롤러를 업데이트하여 SamplePolicy 유형을 확인합니다. 다음 명령을 실행합니다.

    for file in $(find . -name "*.go" -type f); do  sed -i "" "s/SamplePolicy/g" $file; done
    for file in $(find . -name "*.go" -type f); do  sed -i "" "s/samplepolicy-controller/samplepolicy-controller/g" $file; done
  4. 다음 단계를 완료하여 정책 컨트롤러를 다시 컴파일하고 실행합니다.

    1. 클러스터에 로그인합니다.
    2. 사용자 아이콘을 선택한 다음 Configure client 를 클릭합니다.
    3. 구성 정보를 복사하여 명령줄에 붙여넣고 Enter 키를 누릅니다.
    4. 다음 명령을 실행하여 정책 CRD를 적용하고 컨트롤러를 시작합니다.

      export GO111MODULE=on
      
      kubectl apply -f deploy/crds/policy.open-cluster-management.io_samplepolicies_crd.yaml
      
      export WATCH_NAMESPACE=<cluster_namespace_on_hub>
      
      go run cmd/manager/main.go

      컨트롤러가 실행됨을 나타내는 다음 출력이 표시될 수 있습니다.

      {“level”:”info”,”ts”:1578503280.511274,”logger”:”controller-runtime.manager”,”msg”:”starting metrics server”,”path”:”/metrics”}
      {“level”:”info”,”ts”:1578503281.215883,”logger”:”controller-runtime.controller”,”msg”:”Starting Controller”,”controller”:”samplepolicy-controller”}
      {“level”:”info”,”ts”:1578503281.3203468,”logger”:”controller-runtime.controller”,”msg”:”Starting workers”,”controller”:”samplepolicy-controller”,”worker count”:1}
      Waiting for policies to be available for processing…
    5. 정책을 생성하고 컨트롤러에서 정책을 검색하고 클러스터에 정책을 적용하는지 확인합니다. 다음 명령을 실행합니다.

      kubectl apply -f deploy/crds/policy.open-cluster-management.io_samplepolicies_crd.yaml

      정책이 적용되면 사용자 정의 컨트롤러에서 정책을 모니터링하고 탐지했음을 나타내는 메시지가 표시됩니다. 메시지는 다음 내용과 유사합니다.

    {"level":"info","ts":1578503685.643426,"logger":"controller_samplepolicy","msg":"Reconciling SamplePolicy","Request.Namespace":"default","Request.Name":"example-samplepolicy"}
    {"level":"info","ts":1578503685.855259,"logger":"controller_samplepolicy","msg":"Reconciling SamplePolicy","Request.Namespace":"default","Request.Name":"example-samplepolicy"}
    Available policies in namespaces:
    namespace = kube-public; policy = example-samplepolicy
    namespace = default; policy = example-samplepolicy
    namespace = kube-node-lease; policy = example-samplepolicy
  5. 다음 명령을 실행하여 규정 준수 세부 정보에 대한 상태 필드를 확인합니다.

    kubectl describe SamplePolicy example-samplepolicy -n default

    출력은 다음 내용과 유사합니다.

    status:
      compliancyDetails:
        example-samplepolicy:
          cluster-wide:
          - 5 violations detected in namespace `cluster-wide`, there are 0 users violations
            and 5 groups violations
          default:
          - 0 violations detected in namespace `default`, there are 0 users violations
            and 0 groups violations
          kube-node-lease:
          - 0 violations detected in namespace `kube-node-lease`, there are 0 users violations
            and 0 groups violations
          kube-public:
          - 1 violations detected in namespace `kube-public`, there are 0 users violations
            and 1 groups violations
      compliant: NonCompliant
  6. 정책 컨트롤러에 대한 새 규칙을 도입하도록 정책 규칙 및 정책 논리를 변경합니다. 다음 단계를 완료합니다.

    1. SamplePolicySpec 을 업데이트하여 YAML 파일에 새 필드를 추가합니다. 사양은 다음 내용과 유사할 수 있습니다.

      spec:
        description: SamplePolicySpec defines the desired state of SamplePolicy
        properties:
          labelSelector:
            additionalProperties:
              type: string
            type: object
          maxClusterRoleBindingGroups:
            type: integer
          maxClusterRoleBindingUsers:
            type: integer
          maxRoleBindingGroupsPerNamespace:
            type: integer
          maxRoleBindingUsersPerNamespace:
            type: integer
    2. samplepolicy_controller.go 에서 SamplePolicySpec 구조를 새 필드를 사용하여 업데이트합니다.
    3. 정책 컨트롤러를 실행하도록 새 논리를 사용하여 samplepolicy_controller.go 파일에서 PeriodicallyExecSamplePolicies 함수를 업데이트합니다. Periodically ExecSamplePolicies 필드 의 예를 보려면 stolostron/multicloud-operators-policy-controller 를 참조하십시오.
    4. 정책 컨트롤러를 다시 컴파일하고 실행합니다. 정책 컨트롤러참조

정책 컨트롤러가 작동합니다.

2.3.5.2. 클러스터에 컨트롤러 배포

사용자 지정 정책 컨트롤러를 클러스터에 배포하고 정책 컨트롤러를 관리 대시보드와 통합합니다. 다음 단계를 완료합니다.

  1. 다음 명령을 실행하여 정책 컨트롤러 이미지를 빌드합니다.

    make build
    docker build . -f build/Dockerfile -t <username>/multicloud-operators-policy-controller:latest
  2. 다음 명령을 실행하여 이미지를 선택한 리포지토리로 내보냅니다. 예를 들어 다음 명령을 실행하여 이미지를 Docker Hub로 푸시합니다.

    docker login
    
    docker push <username>/multicloud-operators-policy-controller
  3. Red Hat Advanced Cluster Management for Kubernetes에서 관리하는 클러스터를 가리키도록 kubectl 을 구성합니다.
  4. 기본 제공 이미지 이름을 사용하도록 Operator 매니페스트를 교체하고 정책을 조사하도록 네임스페이스를 업데이트합니다. 네임스페이스는 클러스터 네임스페이스여야 합니다. 매니페스트는 다음 내용과 유사합니다.

    sed -i "" 's|stolostron/multicloud-operators-policy-controller|ycao/multicloud-operators-policy-controller|g' deploy/operator.yaml
    sed -i "" 's|value: default|value: <namespace>|g' deploy/operator.yaml
  5. 다음 명령을 실행하여 RBAC 역할을 업데이트합니다.

    sed -i "" 's|samplepolicies|testpolicies|g' deploy/cluster_role.yaml
    sed -i "" 's|namespace: default|namespace: <namespace>|g' deploy/cluster_role_binding.yaml
  6. 클러스터에 정책 컨트롤러를 배포합니다.

    1. 다음 명령을 실행하여 클러스터의 서비스 계정을 설정합니다.

      kubectl apply -f deploy/service_account.yaml -n <namespace>
    2. 다음 명령을 실행하여 Operator에 대한 RBAC를 설정합니다.

      kubectl apply -f deploy/role.yaml -n <namespace>
      
      kubectl apply -f deploy/role_binding.yaml -n <namespace>
    3. 정책 컨트롤러에 대한 RBAC를 설정합니다. 다음 명령을 실행합니다.

      kubectl apply -f deploy/cluster_role.yaml
      kubectl apply -f deploy/cluster_role_binding.yaml
    4. 다음 명령을 실행하여 CRD(사용자 정의 리소스 정의)를 설정합니다.

      kubectl apply -f deploy/crds/policies.open-cluster-management.io_samplepolicies_crd.yaml
    5. 다음 명령을 실행하여 multicloud-operator-policy-controller 를 배포합니다.

      kubectl apply -f deploy/operator.yaml -n <namespace>
    6. 다음 명령을 실행하여 컨트롤러가 작동하는지 확인합니다.

      kubectl get pod -n <namespace>
  7. 컨트롤러에서 모니터링할 정책을 생성하여 정책 컨트롤러를 통합해야 합니다. 자세한 내용은 콘솔에서 클러스터 보안 정책 생성을 참조하십시오.
2.3.5.2.1. 컨트롤러 배포 스케일링

정책 컨트롤러 배포는 삭제 또는 제거를 지원하지 않습니다. 배포를 스케일링하여 배포가 적용되는 포드를 업데이트할 수 있습니다. 다음 단계를 완료합니다.

  1. 관리형 클러스터에 로그인합니다.
  2. 사용자 정의 정책 컨트롤러의 배포로 이동합니다.
  3. 배포를 확장합니다. 배포를 0개의 Pod로 확장하면 정책 제어자 배포가 비활성화됩니다.

배포에 대한 자세한 내용은 OpenShift Container Platform 배포를 참조하십시오.

정책 컨트롤러가 클러스터에 배포 및 통합되었습니다. 제품 정책 컨트롤러를 확인합니다. 자세한 내용은 정책 컨트롤러를 참조하십시오.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.