구성 정책은 오브젝트 정의에 Golang 텍스트 템플릿을 포함할 수 있도록 지원합니다. 이러한 템플릿은 허브 클러스터 또는 해당 클러스터와 관련된 구성을 사용하여 대상 관리 클러스터에서 런타임 시 해결됩니다. 이를 통해 동적 콘텐츠를 사용하여 구성 정책을 정의하고 대상 클러스터에 사용자 지정된 Kubernetes 리소스를 알리거나 적용할 수 있습니다.
구성 정책 정의에는 hub 클러스터 및 관리 클러스터 템플릿이 모두 포함될 수 있습니다. Hub 클러스터 템플릿은 허브 클러스터에서 먼저 처리된 다음 해결된 허브 클러스터 템플릿이 있는 정책 정의가 대상 클러스터로 전파됩니다. 관리 클러스터에서 ConfigurationPolicyController 는 정책 정의에서 관리되는 클러스터 템플릿을 처리한 다음 완전히 해결된 오브젝트 정의를 적용하거나 확인합니다.
템플릿 구문은 Golang 템플릿 언어 사양을 준수해야 하며 확인된 템플릿에서 생성된 리소스 정의는 유효한 YAML이어야 합니다. 자세한 내용은 패키지 템플릿에 대한 Golang 설명서를 참조하십시오. 템플릿 검증의 오류는 정책 위반으로 인식됩니다. 사용자 지정 템플릿 함수를 사용하면 런타임 시 값이 교체됩니다.
중요: 허브 클러스터 템플릿을 사용하여 시크릿 또는 기타 민감한 데이터를 전파하는 경우 허브 클러스터의 관리 클러스터 네임스페이스 및 해당 정책이 배포된 관리 클러스터에 중요한 데이터가 있습니다. 템플릿 콘텐츠는 정책에서 확장되며 정책은 OpenShift Container Platform ETCD 암호화 지원에 의해 암호화되지 않습니다. 이 문제를 해결하려면 시크릿에서 값을 자동으로 암호화하는 fromSecret 또는 copySecretData 를 사용하거나 다른 값을 암호화하도록 보호합니다.
런타임 시 정책이 전파되는 대상 클러스터의 이름으로 확인되는 .ManagedClusterName 변수를 사용할 수 있습니다. .ManagedClusterLabels 변수를 사용할 수도 있으며, 이 변수는 정책이 전파되는 관리형 클러스터의 라벨과 키 맵으로 확인됩니다.
컨텍스트 변수 없음
액세스 제어
Policy 리소스와 동일한 네임스페이스에 있는 네임스페이스가 지정된 Kubernetes 오브젝트만 참조할 수 있습니다.
클러스터의 모든 리소스를 참조할 수 있습니다.
함수
Kubernetes 리소스 및 문자열 조작에 대한 동적 액세스를 지원하는 템플릿 함수 세트입니다. 자세한 내용은 템플릿 함수 를 참조하십시오. 조회 제한 사항은 액세스 제어 행을 참조하십시오.
hub 클러스터의 fromSecret 템플릿 기능은 결과 값을 관리되는 클러스터 네임스페이스에서 복제된 정책의 암호화된 문자열로 저장합니다.
동등한 호출은 다음 구문을 사용할 수 있습니다. {{hub "(lookup "v1" "Secret" "default" "my-hub-secret").data.message | protect hub}}
템플릿 함수 세트는 Kubernetes 리소스 및 문자열 조작에 대한 동적 액세스를 지원합니다. 자세한 내용은 템플릿 함수 를 참조하십시오.
함수 출력 스토리지
템플릿 기능의 출력은 관리 클러스터와 동기화되기 전에 Hub 클러스터의 각 관리 클러스터 네임스페이스의 Policy 리소스 오브젝트에 저장됩니다. 즉, hub 클러스터의 Policy 리소스 오브젝트에 대한 읽기 액세스 권한이 있는 모든 사용자가 템플릿 함수의 중요한 결과를 읽을 수 있으며 관리 클러스터에서 ConfigurationPolicy 리소스 오브젝트를 사용하여 읽기 권한이 제공됩니다. 또한 etcd 암호화가 활성화된 경우 Policy 및 ConfigurationPolicy 리소스 오브젝트가 암호화되지 않습니다. 중요한 출력을 반환하는 템플릿 함수(예: 시크릿)를 사용할 때 이를 신중하게 고려하는 것이 좋습니다.
템플릿 기능의 출력은 정책 관련 리소스 오브젝트에 저장되지 않습니다.
처리
처리는 클러스터에 복제된 정책을 전파하는 동안 허브 클러스터에서 런타임 시 수행됩니다. 정책 내의 정책 및 허브 클러스터 템플릿은 템플릿이 생성 또는 업데이트되는 경우에만 허브 클러스터에서 처리됩니다.
처리는 관리 클러스터의 ConfigurationPolicyController 에서 수행됩니다. 정책은 정기적으로 처리되므로 확인된 오브젝트 정의를 참조된 리소스의 데이터로 자동으로 업데이트합니다.
처리 오류
허브 클러스터 템플릿의 오류는 정책이 적용되는 관리 클러스터에서 위반으로 표시됩니다.
관리형 클러스터 템플릿의 오류는 위반이 발생한 특정 대상 클러스터에서 위반으로 표시됩니다.
리소스별 및 일반 조회 템플릿 기능과 같은 템플릿 함수는 허브 클러스터의 Kubernetes 리소스( {{hub … hub}} 구분 기호 사용) 또는 관리 클러스터( {{ … }} 구분 기호 사용)를 참조하는 데 사용할 수 있습니다. 자세한 내용은 템플릿 처리를 참조하십시오. 리소스별 기능은 편의를 위해 사용되며 리소스의 콘텐츠에 더 쉽게 액세스할 수 있습니다. 일반 함수를 사용하는 경우 더 고급인 lookup 을 사용하여 조회 중인 리소스의 YAML 구조를 숙지합니다. 이러한 함수 외에도 base64enc,base64dec,들여쓰기 ,autoindent,toInt,toBool 등과 같은 유틸리티 기능도 사용할 수 있습니다.
YAML 구문을 사용하여 템플릿을 준수하려면 정책 리소스에서 따옴표 또는 블록 문자(| 또는 > )를 사용하여 문자열로 템플릿을 설정해야 합니다. 이로 인해 해결된 템플릿 값도 문자열이 됩니다. 이를 재정의하려면 toInt 또는 toBool 을 템플릿의 최종 함수로 사용하여 값을 각각 정수 또는 부울로 해석하도록 강제 수행하는 추가 처리를 시작합니다. 지원되는 일부 사용자 지정 템플릿 함수에 대한 설명 및 예를 보려면 계속 읽으십시오.
Copy to ClipboardCopied!Toggle word wrapToggle overflow
이 기능을 사용하면 Kubernetes Secret 리소스의 네임스페이스, 이름 및 데이터 키를 입력합니다. hub 클러스터 템플릿의 기능을 사용할 때 정책에 사용되는 동일한 네임스페이스를 사용해야 합니다. 자세한 내용은 템플릿 처리를 참조하십시오.
참고: hub 클러스터 템플릿과 함께 이 기능을 사용하면 보호 기능을 사용하여 출력이 자동으로 암호화됩니다.
Kubernetes Secret 리소스가 대상 클러스터에 없는 경우 정책 위반이 발생합니다. 데이터 키가 대상 클러스터에 없으면 값이 빈 문자열이 됩니다. 대상 클러스터에 Secret 리소스를 적용하는 다음 구성 정책을 확인합니다. PASSWORD 데이터 키의 값은 대상 클러스터의 보안을 참조하는 템플릿입니다.
Copy to ClipboardCopied!Toggle word wrapToggle overflow
이 기능을 사용하는 경우 Kubernetes ConfigMap 리소스의 네임스페이스, 이름 및 데이터 키를 입력합니다. hub 클러스터 템플릿의 기능을 사용하여 정책에 사용되는 동일한 네임스페이스를 사용해야 합니다. 자세한 내용은 템플릿 처리를 참조하십시오. Kubernetes ConfigMap 리소스가 대상 클러스터에 없는 경우 정책 위반이 발생합니다. 데이터 키가 대상 클러스터에 없으면 값이 빈 문자열이 됩니다. 대상 관리 클러스터에 Kubernetes 리소스를 적용하는 다음 구성 정책을 확인합니다. 로그 파일 데이터 키의 값은 ConfigMap에서 로그 파일 의 값을 검색하는 템플릿, default 네임스페이스에서 logs-config, 로그 수준은 데이터 키 로그 수준으로 설정됩니다.
Copy to ClipboardCopied!Toggle word wrapToggle overflow
이 기능을 사용하는 경우 Kubernetes ClusterClaim 리소스의 이름을 입력합니다. ClusterClaim 리소스가 없는 경우 정책 위반이 발생합니다. 대상 관리 클러스터에 Kubernetes 리소스를 적용하는 구성 정책의 다음 예제를 봅니다. platform data 키의 값은 platform.open-cluster-management.io 클러스터 클레임의 값을 검색하는 템플릿입니다. 마찬가지로 ClusterClaim 에서 제품 및 버전의 값을 검색합니다.
Copy to ClipboardCopied!Toggle word wrapToggle overflow
이 기능을 사용하는 경우 Kubernetes 리소스의 API 버전, 종류, 네임스페이스, 이름 및 선택적 라벨 선택기를 입력합니다. 허브 클러스터 템플릿 내의 정책에 사용되는 동일한 네임스페이스를 사용해야 합니다. 자세한 내용은 템플릿 처리를 참조하십시오. 라벨 선택기 예제는 추가 리소스 섹션에서 Kubernetes 라벨 및 선택기 설명서에 대한 참조를 참조하십시오. 대상 관리 클러스터에 Kubernetes 리소스를 적용하는 구성 정책의 다음 예제를 봅니다. metrics-url 데이터 키의 값은 default 네임스페이스에서 v1/Service Kubernetes 리소스 지표 를 검색하는 템플릿이며 쿼리된 리소스에서 Spec.ClusterIP 값으로 설정됩니다.
apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
name: demo-lookup
namespace: test-templates
spec:
namespaceSelector:
exclude:
- kube-*
include:
- default
object-templates:
- complianceType: musthave
objectDefinition:
kind: ConfigMap
apiVersion: v1
metadata:
name: demo-app-config
namespace: test
data:
# Configuration values can be set as key-value properties
app-name: sampleApp
app-description: "this is a sample app"
metrics-url: |
http://{{ (lookup "v1" "Service" "default" "metrics").spec.clusterIP }}:8080
remediationAction: enforce
severity: low
apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:name: demo-lookup
namespace: test-templates
spec:namespaceSelector:exclude:- kube-*
include:- default
object-templates:-complianceType: musthave
objectDefinition:kind: ConfigMap
apiVersion: v1
metadata:name: demo-app-config
namespace: test
data:# Configuration values can be set as key-value propertiesapp-name: sampleApp
app-description:"this is a sample app"metrics-url:|
http://{{ (lookup "v1" "Service" "default" "metrics").spec.clusterIP }}:8080remediationAction: enforce
severity: low
Copy to ClipboardCopied!Toggle word wrapToggle overflow
Copy to ClipboardCopied!Toggle word wrapToggle overflow
이전 YAML 예제에는 lookup 함수를 사용하도록 정의된 기존 hub 클러스터 정책 템플릿이 있습니다. 관리형 클러스터 네임스페이스의 복제 정책에서 값은 다음 구문과 유사합니다. $ocm_encrypted:okrrBqt72oI+3WT/0vxeI3vGa+wpLD7Z0ZxFMLvL204=
사용되는 각 암호화 알고리즘은 256비트 키를 사용하는 AES-CBC입니다. 각 암호화 키는 관리 클러스터마다 고유하며 30일마다 자동으로 순환됩니다.
이렇게 하면 암호 해독된 값이 관리 클러스터의 정책에 저장되지 않습니다.
즉시 교체하려면 허브 클러스터의 관리 클러스터 네임스페이스의 policy.open-cluster -management.io/last- rotated 주석을 삭제합니다. 그런 다음 새 암호화 키를 사용하도록 정책을 다시 처리합니다.
관리된 클러스터 및 허브 클러스터 템플릿을 모두 사용하여 각 대상 클러스터 또는 정책 정의에서 하드 코드 구성 값에 대한 별도의 정책을 생성할 필요성을 줄일 수 있습니다. 보안을 위해 리소스별 및 허브 클러스터 템플릿의 일반 조회 기능은 허브 클러스터의 정책 네임스페이스로 제한됩니다.
중요: 허브 클러스터 템플릿을 사용하여 보안 또는 기타 민감한 데이터를 전파하면 허브 클러스터의 관리 클러스터 네임스페이스 및 해당 정책이 배포된 관리 클러스터에 중요한 데이터 노출이 발생합니다. 템플릿 콘텐츠는 정책에서 확장되며 정책은 OpenShift Container Platform ETCD 암호화 지원에 의해 암호화되지 않습니다. 이 문제를 해결하려면 시크릿에서 값을 자동으로 암호화하는 fromSecret 또는 copySecretData 를 사용하거나 다른 값을 암호화하도록 보호합니다.
Hub 클러스터 템플릿은 정책 생성 중에 참조된 리소스의 데이터 또는 참조된 리소스가 업데이트될 때 확인됩니다.
수동으로 업데이트를 시작해야 하는 경우 특수 주석 policy.open-cluster-management.io/trigger-update 를 사용하여 템플릿에서 참조하는 데이터의 변경 사항을 표시합니다. 특수 주석 값을 변경하면 템플릿 처리가 자동으로 시작됩니다. 또한 참조된 리소스의 최신 내용은 관리 클러스터에서 처리를 위해 전파되는 정책 정의에서 읽고 업데이트됩니다. 이 주석을 사용하는 방법은 매번 값을 하나씩 늘리는 것입니다.
YAML 문자열 표현으로 오브젝트 템플릿을 설정합니다. object-template-raw 매개변수는 if-else 및 range 함수와 같은 고급 템플릿 사용 사례를 지원하는 선택적 매개변수입니다. 다음 예제는 kinds -category를 추가하도록 정의됩니다. 기본 네임스페이스의 모든 ConfigMap에 mammal 레이블은 name 키가 Sea Otter 와 같습니다.
Red Hat Advanced Cluster Management에서 처리하지 않는 템플릿이 포함된 정책을 생성할 수 있습니다. 기본적으로 Red Hat Advanced Cluster Management는 모든 템플릿을 처리합니다.
허브 클러스터의 템플릿 처리를 바이패스하려면 {{ template content }} 를 {{ '{{ template content }}'}} 로 변경해야 합니다.
또는 Policy:policy.open-cluster-management.io/disable-templates: "true" 의 ConfigurationPolicy 섹션에 다음 주석을 추가할 수 있습니다. 이 주석이 포함된 경우 이전 해결 방법이 필요하지 않습니다. ConfigurationPolicy 용으로 템플릿 처리가 바이패스됩니다.