2.11. 타사 정책 컨트롤러 통합
타사 정책을 통합하여 정책 템플릿 내에서 사용자 지정 주석을 생성하여 하나 이상의 규정 준수 표준, 제어 카테고리 및 제어를 지정합니다.
또한 policy-collection/community 의 타사 정책을 사용할 수도 있습니다.
다음 타사 정책을 통합하는 방법을 알아보십시오.
2.11.1. Gatekeeper 제약 조건 및 제약 조건 템플릿 통합
게이트 키퍼는OPA(Open Policy Agent)를 사용하여 실행되는 사용자 정의 리소스 정의 기반 정책을 적용할 수 있는 감사 기능을 사용하는 웹 후크입니다. Gatekeeper는 Gatekeeper Operator 정책을 사용하여 클러스터에 설치할 수 있습니다. 게이트키퍼 제약 조건을 사용하여 Kubernetes 리소스 컴플라이언스를 평가할 수 있습니다. OPA를 정책 엔진으로 활용하고 정책 언어로 Rego를 사용할 수 있습니다.
사전 요구 사항: Gatekeeper를 설치하고 클러스터에 Gatekeeper 정책을 적용하려면 Red Hat Advanced Cluster Management for Kubernetes 또는 Red Hat OpenShift Container Platform Plus 서브스크립션이 있어야 합니다. Gatekeeper는 최신 버전의 Red Hat Advanced Cluster Management에서 지원하는 버전 3.11을 제외한 OpenShift Container Platform 버전에서만 지원됩니다.
게이트키퍼 정책은 제약 조건 템플릿(ConstraintTemplates
) 및 제약 조건을 사용하여 작성됩니다. Red Hat Advanced Cluster Management 정책에서 Gatekeeper 제약 조건을 사용하는 다음 YAML 예제를 확인하십시오.
제약 조건 및 제약 조건: Gatekeeper 제약 조건 및 Gatekeeper 제약 조건의 다중 클러스터 배포에 Red Hat Advanced Cluster Management 정책을 사용하여 허브 클러스터에 집계된 Gatekeeper 통합 기능을 사용합니다.
다음 예제에서는 Gatekeeper
ConstraintTemplate
및 제약 조건 (K8sRequiredLabels
)을 정의하여게이트키퍼
레이블이 모든 네임스페이스에 설정되어 있는지 확인합니다.apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: require-gatekeeper-labels-on-ns spec: remediationAction: inform 1 disabled: false policy-templates: - objectDefinition: apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8srequiredlabels annotations: policy.open-cluster-management.io/severity: low 2 spec: crd: spec: names: kind: K8sRequiredLabels validation: openAPIV3Schema: properties: labels: type: array items: string targets: - target: admission.k8s.gatekeeper.sh rego: | package k8srequiredlabels violation[{"msg": msg, "details": {"missing_labels": missing}}] { provided := {label | input.review.object.metadata.labels[label]} required := {label | label := input.parameters.labels[_]} missing := required - provided count(missing) > 0 msg := sprintf("you must provide labels: %v", [missing]) } - objectDefinition: apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sRequiredLabels metadata: name: ns-must-have-gk annotations: policy.open-cluster-management.io/severity: low 3 spec: enforcementAction: dryrun match: kinds: - apiGroups: [""] kinds: ["Namespace"] parameters: labels: ["gatekeeper"]
- 1
remediationAction
이inform
로 설정되어 있으므로 Gatekeeper 제약 조건의enforcementAction
필드가 재정의되어경고합니다
. 즉, Gatekeeper는게이트 키퍼
레이블이 누락된 네임스페이스를 만들거나 업데이트하는 방법에 대해 경고합니다. 정책수정을
강제
적용하도록 설정된 경우 Gatekeeper 제약 조건enforcementAction
필드가거부
하도록 재정의됩니다. 이 컨텍스트에서 이 구성을 사용하면 모든 사용자가게이트키퍼
레이블이 없는 네임스페이스를 만들거나 업데이트할 수 없습니다.- 2 3
- 선택 사항: 각 Gatekeeper 제약 조건 또는 제약 조건 템플릿에 대해
policy.open-cluster-management.io/severity
주석의 심각도 값을 설정합니다. 유효한 값은 다른 Red Hat Advanced Cluster Management 정책 유형(낮음
,중간
,높음
또는 심각)과동일합니다
.
이전 정책을 사용하면 다음과 같은 정책 상태 메시지가 표시될 수 있습니다.
warn - you must provide labels: {"gatekeeper"} (네임스 기본 시), warn - you must provide labels: {"gatekeeper"} (네 Namespace gatekeeper-system)
. Gatekeeper 제약 조건 또는ConstraintTemplates
가 포함된 정책이 삭제되면 관리 클러스터에서 제약 조건 및ConstraintTemplates
도 삭제됩니다.콘솔에서 특정 관리 클러스터에 대한 Gatekeeper 감사 결과를 보려면 정책 템플릿 결과 페이지로 이동합니다. 검색이 활성화된 경우 감사에 실패한 Kubernetes 오브젝트의 YAML을 확인합니다.
참고:
- 관련 리소스 섹션은 감사 결과가 Gatekeeper 버전 3.9 이상에서 생성되는 경우에만 사용할 수 있습니다.
- Gatekeeper 감사 기능은 기본적으로 1분마다 실행됩니다. 감사 결과는 관리형 클러스터의 Red Hat Advanced Cluster Management 정책 상태에서 볼 수 있도록 hub 클러스터로 다시 전송됩니다.
policy-gatekeeper-admission
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-gatekeeper-admission spec: remediationAction: inform # will be overridden by remediationAction in parent policy severity: low object-templates: - complianceType: mustnothave objectDefinition: apiVersion: v1 kind: Event metadata: namespace: openshift-gatekeeper-system # set it to the actual namespace where gatekeeper is running if different annotations: constraint_action: deny constraint_kind: K8sRequiredLabels constraint_name: ns-must-have-gk event_type: violation
2.11.1.1. 추가 리소스
-
자세한 내용은
policy-gatekeeper-operator.yaml
을 참조하십시오.
자세한 내용은 OPA Gatekeeper 의 내용을 참조하십시오.
- 다른 정책 관리에 대한 자세한 내용은 구성 정책 관리를 참조하십시오.
- 보안 프레임워크에 대한 자세한 내용은 Governance 를 참조하십시오.
2.11.2. 정책 생성기
Policy Generator는 Kustomize를 사용하여 Red Hat Advanced Cluster Management for Kubernetes 애플리케이션 라이프사이클 서브스크립션 GitOps 워크플로우의 일부로, Kustomize를 사용하여 Red Hat Advanced Cluster Management 정책을 생성합니다. 정책 생성기는 Kubernetes 매니페스트 YAML 파일에서 Red Hat Advanced Cluster Management 정책을 구축하는 데 사용되는 PolicyGenerator
매니페스트 YAML 파일을 통해 제공됩니다. 정책 생성기는 Kustomize 생성기 플러그인으로 구현됩니다. Kustomize에 대한 자세한 내용은 Kustomize 문서를 참조하십시오.
자세한 내용은 다음 섹션을 참조하십시오.
2.11.2.1. 정책 생성 기능
Policy Generator 및 Red Hat Advanced Cluster Management 애플리케이션 라이프사이클 서브스크립션 GitOps 워크플로우와의 통합은 Red Hat Advanced Cluster Management 정책을 통해 Kubernetes 리소스 오브젝트의 배포를 단순화하여 OpenShift Container Platform 클러스터 및 Kubernetes 클러스터를 관리합니다.
정책 생성기를 사용하여 다음 작업을 완료합니다.
- Kustomize 디렉터리에서 생성된 매니페스트를 포함하여 Kubernetes 매니페스트 파일을 Red Hat Advanced Cluster Management 구성 정책으로 변환합니다.
- 생성된 Red Hat Advanced Cluster Management 정책에 삽입되기 전에 입력 Kubernetes 매니페스트를 패치합니다.
- Red Hat Advanced Cluster Management for Kubernetes를 통해 Gatekeeper 정책 위반에 대해 보고할 수 있도록 추가 구성 정책을 생성합니다.
- hub 클러스터에서 정책 세트를 생성합니다.
2.11.2.2. 정책 생성기 구성 구조
정책 생성기는 PolicyGenerator
종류 및 policy.open-cluster-management.io/v1
API 버전의 매니페스트로 구성된 Kustomize 생성기 플러그인입니다.
플러그인을 사용하려면 kustomization.yaml
파일에 generators
섹션을 추가하여 시작합니다. 다음 예제를 확인합니다.
generators: - policy-generator-config.yaml
이전 예에서 참조되는 policy-generator-config.yaml
파일은 생성할 정책의 지침이 있는 YAML 파일입니다. 간단한 PolicyGenerator
구성 파일은 다음 예와 유사합니다.
apiVersion: policy.open-cluster-management.io/v1 kind: PolicyGenerator metadata: name: config-data-policies policyDefaults: namespace: policies policySets: [] policies: - name: config-data manifests: - path: configmap.yaml
configmap.yaml
은 정책에 포함할 Kubernetes 매니페스트 YAML 파일을 나타냅니다. 또는 Kustomize 디렉터리의 경로 또는 여러 Kubernetes 매니페스트 YAML 파일이 있는 디렉터리를 설정할 수 있습니다. 다음 예제를 확인합니다.
apiVersion: v1 kind: ConfigMap metadata: name: my-config namespace: default data: key1: value1 key2: value2
생성된 Policy
는 PlacementRule
및 PlacementBinding
과 함께 다음 예와 유사합니다.
apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: placement-config-data namespace: policies spec: clusterConditions: - status: "True" type: ManagedClusterConditionAvailable clusterSelector: matchExpressions: [] --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-config-data namespace: policies placementRef: apiGroup: apps.open-cluster-management.io kind: PlacementRule name: placement-config-data subjects: - apiGroup: policy.open-cluster-management.io kind: Policy name: config-data --- apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: annotations: policy.open-cluster-management.io/categories: CM Configuration Management policy.open-cluster-management.io/controls: CM-2 Baseline Configuration policy.open-cluster-management.io/standards: NIST SP 800-53 policy.open-cluster-management.io/description: name: config-data namespace: policies spec: disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: config-data spec: object-templates: - complianceType: musthave objectDefinition: apiVersion: v1 data: key1: value1 key2: value2 kind: ConfigMap metadata: name: my-config namespace: default remediationAction: inform severity: low
2.11.2.3. 정책 생성기 구성 참조 테이블
각 정책에 대해 namespace
를 제외한 policyDefaults
섹션의 모든 필드를 재정의할 수 있으며 policySetDefaults
섹션의 모든 필드를 각 정책 세트에 대해 재정의할 수 있습니다.
필드 | 선택적 또는 필수 | 설명 |
---|---|---|
| 필수 항목 |
값을 |
| 필수 항목 |
정책 유형을 표시하려면 해당 값을 |
| 필수 항목 | 정책 리소스를 식별하는 이름입니다. |
| 선택 사항 |
여러 정책이 동일한 배치를 사용하는 경우 이 이름은 생성되는 |
| 필수 항목 |
여기에 나열된 기본값은 |
| 필수 항목 | 모든 정책의 네임스페이스입니다. |
| 선택 사항 |
매니페스트를 클러스터의 오브젝트와 비교할 때 정책 컨트롤러 동작을 결정합니다. 사용할 수 있는 값은 |
| 선택 사항 |
매니페스트 메타데이터 섹션을 클러스터의 오브젝트와 비교할 때 |
| 선택 사항 |
|
| 선택 사항 |
|
| 선택 사항 |
|
| 선택 사항 |
정책이 |
| 선택 사항 |
생성된 구성 정책에 설정할 주석의 키-값 쌍입니다. 예를 들어 다음 매개변수를 정의하여 정책 템플릿을 비활성화할 수 있습니다. |
| 선택 사항 |
모든 정책에 대한 레이블 및 주석을 복사하여 복제본 정책에 추가합니다. 기본적으로 |
| 선택 사항 |
정책 위반의 심각도입니다. 기본값은 |
| 선택 사항 |
정책이 비활성화되었는지 여부입니다. 즉, 전파되지 않고 결과적으로 상태가 없습니다. 정책을 활성화하려면 기본값은 |
| 선택 사항 |
정책의 수정 메커니즘입니다. 매개변수 값은 |
| 네임스페이스가 지정되지 않은 네임스페이스 오브젝트에 필요합니다. |
오브젝트가 적용되는 관리형 클러스터의 네임스페이스를 결정합니다. |
| 선택 사항 |
특정 |
| 선택 사항 |
이 정책을 적용하기 전에 특정 규정 준수 상태에 있어야 하는 오브젝트 목록입니다. |
| 필수 항목 | 종속되는 오브젝트의 이름입니다. |
| 선택 사항 | 종속되는 오브젝트의 네임스페이스입니다. 기본값은 정책 생성기에 대해 설정된 정책의 네임스페이스입니다. |
| 선택 사항 |
오브젝트가 있어야 하는 규정 준수 상태입니다. 기본값은 |
| 선택 사항 |
개체의 종류입니다. 기본적으로 kind는 |
| 선택 사항 |
오브젝트의 API 버전입니다. 기본값은 |
| 선택 사항 |
이 정책을 적용하기 전에 특정 규정 준수 상태에 있어야 하는 오브젝트 목록입니다. 정의한 종속 항목은 |
| 필수 항목 | 종속되는 오브젝트의 이름입니다. |
| 선택 사항 | 종속되는 오브젝트의 네임스페이스입니다. 기본적으로 값은 정책 생성기에 대해 설정된 정책의 네임스페이스로 설정됩니다. |
| 선택 사항 |
오브젝트가 있어야 하는 규정 준수 상태입니다. 기본값은 |
| 선택 사항 |
개체의 종류입니다. 기본값은 |
| 선택 사항 |
오브젝트의 API 버전입니다. 기본값은 |
| 선택 사항 |
정책 생성기가 해당 종속 항목이 원하는 상태에 도달할 때까지 대기할 때 컴플라이언스 상태 점검을 바이패스합니다. 기본값은 |
| 선택 사항 |
정책 목록에 정의된 순서대로 적용되도록 정책에 대한 |
| 선택 사항 |
해당 정책의 매니페스트 목록에 정의된 순서에 적용되도록 정책 템플릿에 |
| 선택 사항 |
이렇게 하면 정책에서 래핑되는 모든 매니페스트에 대해 단일 구성 정책이 생성되는지 확인합니다. |
| 선택 사항 |
구성 정책에서 GatekeeperPolicies를 정의하지 않고 Gatekeeper 매니페스트를 직접 사용하려면 |
| 선택 사항 |
정책이 Kyverno 정책 매니페스트를 참조하는 경우 Kyverno 정책이 위반될 때 Red Hat Advanced Cluster Management에서 정책 위반을 수신하기 위해 추가 구성 정책이 생성되었는지 여부를 결정합니다. 기본값은 |
| 선택 사항 |
정책이 조인하는 정책 세트의 배열입니다. 정책 세트 세부 정보는 |
| 선택 사항 |
정책에 대한 배치 매니페스트를 생성합니다. 기본적으로 |
| 선택 사항 |
정책이 설정된 정책의 일부인 경우 기본적으로 생성기는 정책 세트의 배치가 생성되므로 이 정책에 대한 배치를 생성하지 않습니다. 정책 배치 및 정책 집합 배치를 모두 사용하여 정책을 배포하려면 |
| 선택 사항 | 정책에 대한 배치 구성입니다. 기본값은 모든 클러스터와 일치하는 배치 구성입니다. |
| 선택 사항 | 동일한 클러스터 선택기를 포함하는 배치 규칙을 통합할 이름을 지정합니다. |
| 선택 사항 |
클러스터에 이미 존재하는 배치를 사용하도록 이 매개변수를 정의합니다. 배치는 생성되지 않지만 |
| 선택 사항 |
기존 배치를 재사용하려면 |
| 선택 사항 |
|
| 선택 사항 |
|
| 선택 사항 |
|
| 선택 사항 |
|
| 선택 사항 |
정책 세트의 기본값입니다. 이 매개변수에 나열된 기본값은 |
| 선택 사항 |
정책에 대한 배치 구성입니다. 기본값은 모든 클러스터와 일치하는 배치 구성입니다. 이 필드에 대한 설명은 |
| 선택 사항 |
정책 세트에 대한 배치 매니페스트를 생성합니다. 기본적으로 |
| 필수 항목 |
함께 생성할 정책 목록은 기본값 또는 |
| 필수 항목 | 생성할 정책의 이름입니다. |
| 필수 항목 |
정책에 포함할 Kubernetes 오브젝트 매니페스트 목록은 기본값, 이 |
| 필수 항목 |
|
| 선택 사항 |
경로에 매니페스트에 적용할 Kustomize 패치 목록입니다. 여러 매니페스트가 있는 경우 패치에는 |
| 선택 사항 |
생성할 정책 세트 목록과 함께 기본값 또는 |
| 필수 항목 | create로 설정된 정책의 이름입니다. |
| 선택 사항 | create로 설정된 정책에 대한 설명입니다. |
| 선택 사항 |
정책 세트에 포함할 정책 목록입니다. |
2.11.2.4. 추가 리소스
- Operator를 설치하기 위한 정책 생성을 읽습니다.
- 자세한 내용은 Policy set controller 에서 참조하십시오.
- 자세한 내용은 Kustomize 적용을 참조하십시오.
- 자세한 내용은 관리 설명서를 참조하십시오.
-
kustomization.yaml
파일의 예제를 참조하십시오. - Kubernetes 라벨 및 선택기 설명서를 참조합니다.
- 자세한 내용은 Gatekeeper 를 참조하십시오.
- Kustomize 설명서를 참조하십시오.
- 통합 타사 정책 컨트롤러 문서로 돌아갑니다.
2.11.3. Operator를 설치하기 위한 정책 생성
Red Hat Advanced Cluster Management 정책을 일반적으로 사용하는 것은 하나 이상의 관리형 Red Hat OpenShift Container Platform 클러스터에 Operator를 설치하는 것입니다. 정책 생성기를 사용하여 정책을 생성하고 생성된 정책을 사용하여 OpenShift GitOps Operator를 설치하는 방법을 알아보려면 계속 읽으십시오.
2.11.3.1. OpenShift GitOps를 설치하는 정책 생성
정책 생성기를 사용하여 OpenShift GitOps를 설치하는 정책을 생성할 수 있습니다. OpenShift GitOps Operator는 다음 예제에서 사용되는 모든 네임스페이스 설치 모드를 제공합니다. 다음 예와 유사하게 openshift-gitops-subscription.yaml
이라는 서브스크립션
매니페스트 파일을 생성합니다.
apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: openshift-gitops-operator namespace: openshift-operators spec: channel: stable name: openshift-gitops-operator source: redhat-operators sourceNamespace: openshift-marketplace
특정 버전의 Operator에 고정하려면 parameter 및 value: spec.startingCSV: openshift-gitops-operator.v<version> 을 추가합니다
. < ;version&
gt;을 기본 버전으로 바꿉니다.
PolicyGenerator
구성 파일이 필요합니다. policy-generator-config.yaml
이라는 구성 파일을 사용하여 모든 OpenShift Container Platform 관리 클러스터에 OpenShift GitOps를 설치하는 정책을 생성합니다. 다음 예제를 참조하십시오.
apiVersion: policy.open-cluster-management.io/v1 kind: PolicyGenerator metadata: name: install-openshift-gitops policyDefaults: namespace: policies placement: clusterSelectors: vendor: "OpenShift" remediationAction: enforce policies: - name: install-openshift-gitops manifests: - path: openshift-gitops-subscription.yaml
마지막 필수 파일은 kustomization.yaml
이며 다음 구성이 필요합니다.
generators: - policy-generator-config.yaml
생성된 정책은 다음 파일과 유사합니다.
apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: placement-install-openshift-gitops namespace: policies spec: clusterConditions: - status: "True" type: ManagedClusterConditionAvailable clusterSelector: matchExpressions: - key: vendor operator: In values: - OpenShift --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-install-openshift-gitops namespace: policies placementRef: apiGroup: apps.open-cluster-management.io kind: PlacementRule name: placement-install-openshift-gitops subjects: - apiGroup: policy.open-cluster-management.io kind: Policy name: install-openshift-gitops --- apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: annotations: policy.open-cluster-management.io/categories: CM Configuration Management policy.open-cluster-management.io/controls: CM-2 Baseline Configuration policy.open-cluster-management.io/standards: NIST SP 800-53 policy.open-cluster-management.io/description: name: install-openshift-gitops namespace: policies spec: disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: install-openshift-gitops spec: object-templates: - complianceType: musthave objectDefinition: apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: openshift-gitops-operator namespace: openshift-operators spec: channel: stable name: openshift-gitops-operator source: redhat-operators sourceNamespace: openshift-marketplace remediationAction: enforce severity: low
OpenShift Container Platform 설명서의 매니페스트에서 생성된 정책이 지원됩니다. OpenShift Container Platform 설명서의 모든 구성 지침은 정책 생성기를 사용하여 적용할 수 있습니다.
2.11.3.2. Compliance Operator를 설치하는 정책 생성
Compliance Operator와 같이 네임스페이스가 지정된 설치 모드를 사용하는 Operator의 경우 OperatorGroup
매니페스트도 필요합니다.
네임스페이스
, 서브스크립션
및 compliance-operator.yaml
이라는 OperatorGroup
매니페스트를 사용하여 YAML 파일을 생성합니다. 다음 예제에서는 이러한 매니페스트를 compliance-operator
네임스페이스에 설치합니다.
apiVersion: v1 kind: Namespace metadata: name: openshift-compliance --- apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: compliance-operator namespace: openshift-compliance spec: targetNamespaces: - compliance-operator --- apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: compliance-operator namespace: openshift-compliance spec: channel: release-0.1 name: compliance-operator source: redhat-operators sourceNamespace: openshift-marketplace
PolicyGenerator
구성 파일이 필요합니다. 모든 OpenShift Container Platform 관리 클러스터에 Compliance Operator를 설치하는 다음 PolicyGenerator
정책 예제를 확인합니다.
apiVersion: policy.open-cluster-management.io/v1 kind: PolicyGenerator metadata: name: install-compliance-operator policyDefaults: namespace: policies placement: clusterSelectors: vendor: "OpenShift" remediationAction: enforce policies: - name: install-compliance-operator manifests: - path: compliance-operator.yaml
마지막 필수 파일은 kustomization.yaml
이며 다음 구성이 필요합니다.
generators: - policy-generator-config.yaml
결과적으로 생성된 정책은 다음 파일과 유사합니다.
apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: name: placement-install-compliance-operator namespace: policies spec: clusterConditions: - status: "True" type: ManagedClusterConditionAvailable clusterSelector: matchExpressions: - key: vendor operator: In values: - OpenShift --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-install-compliance-operator namespace: policies placementRef: apiGroup: apps.open-cluster-management.io kind: PlacementRule name: placement-install-compliance-operator subjects: - apiGroup: policy.open-cluster-management.io kind: Policy name: install-compliance-operator --- apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: annotations: policy.open-cluster-management.io/categories: CM Configuration Management policy.open-cluster-management.io/controls: CM-2 Baseline Configuration policy.open-cluster-management.io/standards: NIST SP 800-53 policy.open-cluster-management.io/description: name: install-compliance-operator namespace: policies spec: disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: install-compliance-operator spec: object-templates: - complianceType: musthave objectDefinition: apiVersion: v1 kind: Namespace metadata: name: openshift-compliance - complianceType: musthave objectDefinition: apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: compliance-operator namespace: openshift-compliance spec: channel: release-0.1 name: compliance-operator source: redhat-operators sourceNamespace: openshift-marketplace - complianceType: musthave objectDefinition: apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: compliance-operator namespace: openshift-compliance spec: targetNamespaces: - compliance-operator remediationAction: enforce severity: low
2.11.3.3. OperatorGroups에서 정책 종속 항목 사용
OperatorGroup
매니페스트를 사용하여 Operator를 설치할 때 Subscription
이 생성되기 전에 OperatorGroup
이 클러스터에 존재해야 합니다. 정책 생성기와 함께 정책 종속성 기능을 사용하여 서브스크립션
정책을 적용하기 전에 OperatorGroup
정책을 준수하도록 합니다.
매니페스트를 원하는 순서대로 나열하여 정책 종속성을 설정합니다. 예를 들어 네임스페이스 정책을 먼저 생성하고 다음에 OperatorGroup
을 생성하고 Subscription
을 마지막으로 생성할 수 있습니다.
policyDefaults.orderManifests
매개변수를 활성화하고 정책 생성 구성 매니페스트에서 policyDefaults.conMeshMemberRollateManifests
를 비활성화하여 매니페스트 간 종속성을 자동으로 설정합니다.
2.11.4. OpenShift GitOps를 사용하여 정책 정의 관리(ArgoCD)
ArgoCD 기반 OpenShift GitOps를 사용하여 정책 정의를 관리할 수도 있습니다. 이 워크플로를 허용하려면 OpenShift GitOps에 Red Hat Advanced Cluster Management hub 클러스터에서 정책을 생성할 수 있는 액세스 권한이 부여되어야 합니다. 생성, 읽기, 업데이트, 삭제 정책 및 배치에 액세스할 수 있는 openshift-gitops-policy-admin
이라는 다음 ClusterRole
리소스를 생성합니다. ClusterRole
은 다음 예와 유사할 수 있습니다.
kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: openshift-gitops-policy-admin rules: - verbs: - get - list - watch - create - update - patch - delete apiGroups: - policy.open-cluster-management.io resources: - policies - policysets - placementbindings - verbs: - get - list - watch - create - update - patch - delete apiGroups: - apps.open-cluster-management.io resources: - placementrules - verbs: - get - list - watch - create - update - patch - delete apiGroups: - cluster.open-cluster-management.io resources: - placements - placements/status - placementdecisions - placementdecisions/status
ClusterRoleBinding
오브젝트를 생성하여 OpenShift GitOps 서비스 계정 액세스 권한을 openshift-gitops-policy-admin
ClusterRole
오브젝트에 부여합니다. ClusterRoleBinding
은 다음 예와 유사할 수 있습니다.
kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: openshift-gitops-policy-admin subjects: - kind: ServiceAccount name: openshift-gitops-argocd-application-controller namespace: openshift-gitops roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: openshift-gitops-policy-admin
OpenShift GitOps를 사용하여 Red Hat Advanced Cluster Management 정책 정의를 배포하면 각 관리형 클러스터 네임스페이스에 정책 복사본이 생성됩니다. 이러한 사본을 복제 정책이라고 합니다. OpenShift GitOps가 이 복제 정책을 반복적으로 삭제하거나 ArgoCD 애플리케이션이 동기화되지 않음을 나타내기 위해 argocd.argoproj.io/compare-options:
Red Hat Advanced Cluster Management 정책 프레임워크를 통해 복제된 각 정책에 주석이 자동으로 설정됩니다.
ArgoCD에서 오브젝트를 추적하는 데 사용하는 레이블 및 주석이 있습니다. ArgoCD에 복제된 정책이 표시되지 않도록 하려면 Red Hat Advanced Cluster Management 정책 정의에서 spec.copyPolicyMetadata
를 false
로 설정하여 이러한 ArgoCD 추적 라벨 및 주석이 복제된 정책으로 복사되지 않도록 할 수 있습니다.
2.11.4.1. OpenShift GitOps와 정책 생성기 통합(ArgoCD)
ArgoCD를 기반으로 하는 OpenShift GitOps는 GitOps를 통해 정책 생성기를 사용하여 정책을 생성할 수도 있습니다. 정책 생성기는 OpenShift GitOps 컨테이너 이미지에 사전 설치되지 않으므로 일부 사용자 지정이 수행되어야 합니다. 후속하려면 Red Hat Advanced Cluster Management hub 클러스터에 OpenShift GitOps Operator를 설치하고 hub 클러스터에 로그인해야 합니다.
OpenShift GitOps가 Kustomize를 실행할 때 Policy Generator에 액세스하려면 Init Container가 Red Hat Advanced Cluster Management Application Subscription 컨테이너 이미지에서 OpenShift GitOps 컨테이너로 정책 생성기 바이너리를 복사해야 합니다. 또한 Kustomize를 실행할 때 --enable-alpha-plugins
플래그를 제공하도록 OpenShift GitOps를 구성해야 합니다. 다음 명령을 사용하여 OpenShift GitOps argocd
오브젝트 편집을 시작합니다.
oc -n openshift-gitops edit argocd openshift-gitops
그런 다음 다음 추가 YAML 콘텐츠를 포함하도록 OpenShift GitOps argocd
오브젝트를 수정합니다. Red Hat Advanced Cluster Management의 새로운 주요 버전이 릴리스되고 정책 생성기를 최신 버전으로 업데이트하려면 Init Container에서 사용하는 registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel8
이미지를 최신 태그로 업데이트해야 합니다. 다음 예제를 보고 < version
>을 2.8 또는 원하는 Red Hat Advanced Cluster Management 버전으로 교체합니다.
apiVersion: argoproj.io/v1alpha1 kind: ArgoCD metadata: name: openshift-gitops namespace: openshift-gitops spec: kustomizeBuildOptions: --enable-alpha-plugins repo: env: - name: KUSTOMIZE_PLUGIN_HOME value: /etc/kustomize/plugin initContainers: - args: - -c - cp /etc/kustomize/plugin/policy.open-cluster-management.io/v1/policygenerator/PolicyGenerator /policy-generator/PolicyGenerator command: - /bin/bash image: registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel8:v<version> name: policy-generator-install volumeMounts: - mountPath: /policy-generator name: policy-generator volumeMounts: - mountPath: /etc/kustomize/plugin/policy.open-cluster-management.io/v1/policygenerator name: policy-generator volumes: - emptyDir: {} name: policy-generator
OpenShift GitOps에서 정책 생성기를 사용할 수 있으므로 Red Hat Advanced Cluster Management Hub 클러스터에서 정책을 생성할 수 있는 OpenShift GitOps 액세스 권한이 부여되어야 합니다. 정책 및 배치를 생성, 읽기, 업데이트, 삭제할 수 있는 액세스 권한을 사용하여 openshift-gitops-policy-admin
이라는 ClusterRole
리소스를 생성합니다. ealier ClusterRole
예제를 참조하십시오.
또한 ClusterRoleBinding
오브젝트를 생성하여 OpenShift GitOps 서비스 계정 액세스 권한을 openshift-gitops-policy-admin
ClusterRole
에 부여합니다. ClusterRoleBinding
은 다음 리소스와 유사할 수 있습니다.
kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: openshift-gitops-policy-admin subjects: - kind: ServiceAccount name: openshift-gitops-argocd-application-controller namespace: openshift-gitops roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: openshift-gitops-policy-admin
2.11.4.2. 추가 리소스
- OperatorGroups에서 정책 종속 항목을 사용하여 읽습니다.
- ArgoCD 문서를 참조하십시오.
- Operator를 설치하기 위해 정책 생성으로 돌아갑니다.