2.8. 템플릿 처리 도입
구성 정책은 오브젝트 정의에 Golang 텍스트 템플릿을 포함할 수 있도록 지원합니다. 이러한 템플릿은 허브 클러스터 또는 해당 클러스터와 관련된 구성을 사용하여 대상 관리 클러스터에서 런타임 시 해결됩니다. 이를 통해 동적 콘텐츠를 사용하여 구성 정책을 정의하고 대상 클러스터에 사용자 지정된 Kubernetes 리소스를 알리거나 적용할 수 있습니다.
구성 정책 정의에는 hub 클러스터 및 관리 클러스터 템플릿이 모두 포함될 수 있습니다. Hub 클러스터 템플릿은 허브 클러스터에서 먼저 처리된 다음 해결된 허브 클러스터 템플릿이 있는 정책 정의가 대상 클러스터로 전파됩니다. 관리 클러스터에서 ConfigurationPolicyController
는 정책 정의에서 관리되는 클러스터 템플릿을 처리한 다음 완전히 해결된 오브젝트 정의를 적용하거나 확인합니다.
템플릿은 Golang 템플릿 언어 사양을 준수해야 하며 확인된 템플릿에서 생성된 리소스 정의는 유효한 YAML이어야 합니다. 자세한 내용은 패키지 템플릿에 대한 Golang 설명서를 참조하십시오. 템플릿 검증의 오류는 정책 위반으로 인식됩니다. 사용자 지정 템플릿 함수를 사용하면 런타임 시 값이 교체됩니다.
중요:
-
허브 클러스터 템플릿을 사용하여 시크릿 또는 기타 민감한 데이터를 전파하는 경우 허브 클러스터의 관리 클러스터 네임스페이스 및 해당 정책이 배포된 관리 클러스터에 중요한 데이터가 있습니다. 템플릿 콘텐츠는 정책에서 확장되며 정책은 OpenShift Container Platform ETCD 암호화 지원에 의해 암호화되지 않습니다. 이 문제를 해결하려면 시크릿에서 값을 자동으로 암호화하는
fromSecret
또는copySecretData
를 사용하거나 다른 값을 암호화하도록보호합니다
. 인증서와 같은 여러 줄 문자열 값을 추가하면 항상 템플릿 파이프라인 끝에
| toRawJson | toLiteral
구문을 추가하여 줄 바꿈을 처리합니다. 예를 들어Secret
리소스에서 인증서를 복사하여ConfigMap
리소스에 포함하는 경우 템플릿 파이프라인이 다음 구문과 유사할 수 있습니다.ca.crt: '{{ fromSecret "openshift-config" "ca-config-map-secret" "ca.crt" | base64dec | toRawJson | toLiteral }}'
toRawJson
템플릿 함수는 입력 값을 YAML 구조에 영향을 미치지 않도록 새 줄이 이스케이프된 JSON 문자열로 변환합니다.toLiteral
템플릿 함수는 출력에서 외부 작은따옴표를 제거합니다. 예를 들어,'{{ 'hello\nworld' | toRawJson }}'
템플릿 파이프라인에 대해 템플릿이 처리되면key: '"hello\nworld"'
입니다.키의 출력: '{{ 'hello\nworld' | toRawJson | toLiteral }}'
템플릿 파이프라인은key: "hello\nworld"
입니다.
hub 클러스터 및 관리형 클러스터 템플릿의 비교는 다음 표를 참조하십시오.
2.8.1. 허브 클러스터 및 관리형 클러스터 템플릿 비교
Templates | hub 클러스터 | 관리형 클러스터 |
---|---|---|
구문 | Golang 텍스트 템플릿 사양 | Golang 텍스트 템플릿 사양 |
구분 기호 | {{Hub … hub}} | {{ … }} |
컨텍스트 |
런타임 시 정책이 전파되는 대상 클러스터의 이름으로 확인되는 | 컨텍스트 변수 없음 |
액세스 제어 |
| 클러스터의 모든 리소스를 참조할 수 있습니다. |
함수 | Kubernetes 리소스 및 문자열 조작에 대한 동적 액세스를 지원하는 템플릿 함수 세트입니다. 자세한 내용은 템플릿 함수 를 참조하십시오. 조회 제한 사항은 액세스 제어 행을 참조하십시오.
hub 클러스터의
동등한 호출은 다음 구문을 사용할 수 있습니다. | 템플릿 함수 세트는 Kubernetes 리소스 및 문자열 조작에 대한 동적 액세스를 지원합니다. 자세한 내용은 템플릿 함수 를 참조하십시오. |
함수 출력 스토리지 |
템플릿 기능의 출력은 관리 클러스터와 동기화되기 전에 Hub 클러스터의 각 관리 클러스터 네임스페이스의 | 템플릿 기능의 출력은 정책 관련 리소스 오브젝트에 저장되지 않습니다. |
처리 | 처리는 클러스터에 복제된 정책을 전파하는 동안 허브 클러스터에서 런타임 시 수행됩니다. 정책 내의 정책 및 허브 클러스터 템플릿은 템플릿이 생성 또는 업데이트되는 경우에만 허브 클러스터에서 처리됩니다. |
처리는 관리 클러스터의 |
처리 오류 | 허브 클러스터 템플릿의 오류는 정책이 적용되는 관리 클러스터에서 위반으로 표시됩니다. | 관리형 클러스터 템플릿의 오류는 위반이 발생한 특정 대상 클러스터에서 위반으로 표시됩니다. |
다음 항목을 계속 읽습니다.
2.8.2. 템플릿 함수
리소스별 및 일반 조회
템플릿 기능과 같은 템플릿 함수는 허브 클러스터의 Kubernetes 리소스( {{hub … hub}}
구분 기호 사용) 또는 관리 클러스터( {{ … }}
구분 기호 사용)를 참조하는 데 사용할 수 있습니다. 자세한 내용은 템플릿 처리를 참조하십시오. 리소스별 기능은 편의를 위해 사용되며 리소스의 콘텐츠에 더 쉽게 액세스할 수 있습니다. 일반 함수를 사용하는 경우 더 고급인 lookup
을 사용하여 조회 중인 리소스의 YAML 구조를 숙지합니다. 이러한 함수 외에도 base64enc
,base64dec
,들여쓰기 ,
,autoindent
toInt
,toBool
등과 같은 유틸리티 기능도 사용할 수 있습니다.
YAML 구문을 사용하여 템플릿을 준수하려면 정책 리소스에서 따옴표 또는 블록 문자(|
또는 > )를 사용하여 문자열로 템플릿을 설정해야 합니다. 이로 인해 해결된 템플릿 값도 문자열이 됩니다. 이를 재정의하려면
toInt
또는 toBool
을 템플릿의 최종 함수로 사용하여 값을 각각 정수 또는 부울로 해석하도록 강제 수행하는 추가 처리를 시작합니다. 지원되는 일부 사용자 지정 템플릿 함수에 대한 설명 및 예를 보려면 계속 읽으십시오.
2.8.2.1. fromSecret 함수
fromSecret
함수는 시크릿에 지정된 데이터 키의 값을 반환합니다. 함수에 대해 다음 구문을 확인합니다.
func fromSecret (ns string, secretName string, datakey string) (dataValue string, err error)
이 기능을 사용하면 Kubernetes Secret
리소스의 네임스페이스, 이름 및 데이터 키를 입력합니다. hub 클러스터 템플릿의 기능을 사용할 때 정책에 사용되는 동일한 네임스페이스를 사용해야 합니다. 자세한 내용은 템플릿 처리를 참조하십시오.
참고: hub 클러스터 템플릿과 함께 이 기능을 사용하면 보호 기능을 사용하여 출력이 자동으로 암호화됩니다.
Kubernetes Secret
리소스가 대상 클러스터에 없는 경우 정책 위반이 발생합니다. 데이터 키가 대상 클러스터에 없으면 값이 빈 문자열이 됩니다. 대상 클러스터에 Secret
리소스를 적용하는 다음 구성 정책을 확인합니다. PASSWORD
데이터 키의 값은 대상 클러스터의 보안을 참조하는 템플릿입니다.
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-fromsecret namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: apiVersion: v1 data: USER_NAME: YWRtaW4= PASSWORD: '{{ fromSecret "default" "localsecret" "PASSWORD" }}' kind: Secret metadata: name: demosecret namespace: test type: Opaque remediationAction: enforce severity: low
중요: 인증서와 같은 여러 줄 문자열 값을 추가하면 항상 템플릿 파이프라인 끝에 | toRawJson | toLiteral
구문을 추가하여 줄 바꿈을 처리합니다. 예를 들어 Secret
리소스에서 인증서를 복사하여 ConfigMap
리소스에 포함하는 경우 템플릿 파이프라인이 다음 구문과 유사할 수 있습니다.
ca.crt: '{{ fromSecret "openshift-config" "ca-config-map-secret" "ca.crt" | base64dec | toRawJson | toLiteral }}'
toRawJson
템플릿 함수는 입력 값을 YAML 구조에 영향을 미치지 않도록 새 줄이 이스케이프된 JSON 문자열로 변환합니다. toLiteral
템플릿 함수는 출력에서 외부 작은따옴표를 제거합니다. 예를 들어, '{{ 'hello\nworld' | toRawJson }}'
템플릿 파이프라인에 대해 템플릿이 처리되면 key: '"hello\nworld"'
입니다. 키의 출력: '{{ 'hello\nworld' | toRawJson | toLiteral }}'
템플릿 파이프라인은 key: "hello\nworld"
입니다.
2.8.2.2. fromConfigmap 함수
fromConfigMap
함수는 ConfigMap에 지정된 데이터 키의 값을 반환합니다. 함수에 대해 다음 구문을 확인합니다.
func fromConfigMap (ns string, configmapName string, datakey string) (dataValue string, err Error)
이 기능을 사용하는 경우 Kubernetes ConfigMap
리소스의 네임스페이스, 이름 및 데이터 키를 입력합니다. hub 클러스터 템플릿의 기능을 사용하여 정책에 사용되는 동일한 네임스페이스를 사용해야 합니다. 자세한 내용은 템플릿 처리를 참조하십시오. Kubernetes ConfigMap
리소스가 대상 클러스터에 없는 경우 정책 위반이 발생합니다. 데이터 키가 대상 클러스터에 없으면 값이 빈 문자열이 됩니다. 대상 관리 클러스터에 Kubernetes 리소스를 적용하는 다음 구성 정책을 확인합니다. 로그 파일
데이터 키의 값은 ConfigMap에서 로그 파일
의 값을 검색하는 템플릿, default
네임스페이스에서 logs-config
, 로그 수준은
데이터 키 로그 수준으로
설정됩니다.
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-fromcm-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: app-name: sampleApp app-description: "this is a sample app" log-file: '{{ fromConfigMap "default" "logs-config" "log-file" }}' log-level: '{{ fromConfigMap "default" "logs-config" "log-level" }}' remediationAction: enforce severity: low
2.8.2.3. fromClusterClaim 함수
fromClusterClaim
함수는 ClusterClaim
리소스의 Spec.Value
값을 반환합니다. 함수에 대해 다음 구문을 확인합니다.
func fromClusterClaim (clusterclaimName string) (dataValue string, err Error)
이 기능을 사용하는 경우 Kubernetes ClusterClaim
리소스의 이름을 입력합니다. ClusterClaim
리소스가 없는 경우 정책 위반이 발생합니다. 대상 관리 클러스터에 Kubernetes 리소스를 적용하는 구성 정책의 다음 예제를 봅니다. platform
data 키의 값은 platform.open-cluster-management.io
클러스터 클레임의 값을 검색하는 템플릿입니다. 마찬가지로 ClusterClaim
에서 제품
및 버전의
값을 검색합니다.
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-clusterclaims namespace: default spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: kind: ConfigMap apiVersion: v1 metadata: name: sample-app-config namespace: default data: # Configuration values can be set as key-value properties platform: '{{ fromClusterClaim "platform.open-cluster-management.io" }}' product: '{{ fromClusterClaim "product.open-cluster-management.io" }}' version: '{{ fromClusterClaim "version.openshift.io" }}' remediationAction: enforce severity: low
2.8.2.4. 검색 기능
lookup
함수는 Kubernetes 리소스를 JSON 호환 맵으로 반환합니다. 요청된 리소스가 없으면 빈 맵이 반환됩니다. 리소스가 존재하지 않고 값이 다른 템플릿 함수에 제공되는 경우 잘못된 값, 즉 예상 문자열
이라는 오류가 발생할 수 있습니다.
참고: 기본
템플릿 기능을 사용하므로 나중에 템플릿 기능에 올바른 유형이 제공됩니다. 지원되는 Sprig 오픈 소스 기능 섹션을 참조하십시오.
함수에 대해 다음 구문을 확인합니다.
func lookup (apiversion string, kind string, namespace string, name string, labelselector ...string) (value string, err Error)
이 기능을 사용하는 경우 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
2.8.2.5. base64enc 함수
base64enc
함수는 입력 데이터 문자열
의 base64
로 인코딩된 값을 반환합니다. 함수에 대해 다음 구문을 확인합니다.
func base64enc (data string) (enc-data string)
이 함수를 사용하면 문자열 값을 입력합니다. base64enc
함수를 사용하는 구성 정책의 다음 예제를 확인합니다.
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-fromsecret namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: ... data: USER_NAME: '{{ fromConfigMap "default" "myconfigmap" "admin-user" | base64enc }}'
2.8.2.6. base64dec 함수
base64dec
함수는 입력 enc-data 문자열
의 base64
디코딩 값을 반환합니다. 함수에 대해 다음 구문을 확인합니다.
func base64dec (enc-data string) (data string)
이 함수를 사용하면 문자열 값을 입력합니다. base64dec
함수를 사용하는 구성 정책의 다음 예제를 확인합니다.
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-fromsecret namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: ... data: app-name: | "{{ ( lookup "v1" "Secret" "testns" "mytestsecret") .data.appname ) | base64dec }}"
2.8.2.7. 들여쓰기 함수
들여쓰기
함수는 패딩된 데이터 문자열
을 반환합니다. 함수에 대해 다음 구문을 확인합니다.
func indent (spaces int, data string) (padded-data string)
이 함수를 사용하면 특정 수의 공백을 사용하여 데이터 문자열을 입력합니다. 들여쓰기
함수를 사용하는 구성 정책의 다음 예제를 확인합니다.
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-fromsecret namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: ... data: Ca-cert: | {{ ( index ( lookup "v1" "Secret" "default" "mycert-tls" ).data "ca.pem" ) | base64dec | indent 4 }}
2.8.2.8. autoindent 기능
autoindent
함수는 템플릿 앞의 공백 수에 따라 선행 공간 수를 자동으로 결정하는 들여쓰기
함수처럼 작동합니다. autoindent
함수를 사용하는 구성 정책의 다음 예제를 확인합니다.
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-fromsecret namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: ... data: Ca-cert: | {{ ( index ( lookup "v1" "Secret" "default" "mycert-tls" ).data "ca.pem" ) | base64dec | autoindent }}
2.8.2.9. ToInt 기능
toInt
함수는 입력 값의 정수 값을 캐스팅하고 반환합니다. 또한 템플릿의 마지막 기능인 경우 소스 콘텐츠를 추가로 처리합니다. 이는 값이 YAML에서 정수로 해석되도록 하는 것입니다. 함수에 대해 다음 구문을 확인합니다.
func toInt (input interface{}) (output int)
이 함수를 사용하면 정수로 캐스팅해야 하는 데이터를 입력합니다. toInt
함수를 사용하는 구성 정책의 다음 예제를 확인합니다.
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-template-function namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: ... spec: vlanid: | {{ (fromConfigMap "site-config" "site1" "vlan") | toInt }}
2.8.2.10. toBool 기능
toBool
함수는 입력 문자열을 부울로 변환하고 부울을 반환합니다. 또한 템플릿의 마지막 기능인 경우 소스 콘텐츠를 추가로 처리합니다. 이는 값이 YAML에서 부울로 해석되도록 하는 것입니다. 함수에 대해 다음 구문을 확인합니다.
func toBool (input string) (output bool)
이 함수를 사용하는 경우 부울로 변환해야 하는 문자열 데이터를 입력합니다. toBool
함수를 사용하는 구성 정책의 다음 예제를 확인합니다.
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-template-function namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: ... spec: enabled: | {{ (fromConfigMap "site-config" "site1" "enabled") | toBool }}
2.8.2.11. 기능 보호
보호
기능을 사용하면 hub 클러스터 정책 템플릿에서 문자열을 암호화할 수 있습니다. 정책이 평가될 때 관리 클러스터에서 자동으로 암호 해독됩니다. protect
기능을 사용하는 구성 정책의 다음 예제를 확인합니다.
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: demo-template-function namespace: test spec: namespaceSelector: exclude: - kube-* include: - default object-templates: - complianceType: musthave objectDefinition: ... spec: enabled: | {{hub (lookup "v1" "Secret" "default" "my-hub-secret").data.message | protect hub}}
이전 YAML 예제에는 lookup
함수를 사용하도록 정의된 기존 hub 클러스터 정책 템플릿이 있습니다. 관리형 클러스터 네임스페이스의 복제 정책에서 값은 다음 구문과 유사합니다. $ocm_encrypted:okrrBqt72oI+3WT/0vxeI3vGa+wpLD7Z0ZxFMLvL204=
사용되는 각 암호화 알고리즘은 256비트 키를 사용하는 AES-CBC입니다. 각 암호화 키는 관리 클러스터마다 고유하며 30일마다 자동으로 순환됩니다.
이렇게 하면 암호 해독된 값이 관리 클러스터의 정책에 저장되지 않습니다.
즉시 교체하려면 허브 클러스터의 관리 클러스터 네임스페이스의 policy.open-cluster
주석을 삭제합니다. 그런 다음 새 암호화 키를 사용하도록 정책을 다시 처리합니다.
-management.io/last-
rotated
2.8.2.12. ToLiteral 기능
toLiteral
함수는 처리된 후 템플릿 문자열 주위에 따옴표를 모두 제거합니다. 이 함수를 사용하여 ConfigMap 필드에서 매니페스트의 JSON 값으로 JSON 문자열을 변환할 수 있습니다. 다음 함수를 실행하여 키
매개변수 값에서 따옴표를 제거합니다.
key: '{{ "[\"10.10.10.10\", \"1.1.1.1\"]" | toLiteral }}'
toLiteral
기능을 사용하면 다음 업데이트가 표시됩니다.
key: ["10.10.10.10", "1.1.1.1"]
2.8.2.13. copySecretData 함수
copySecretData
함수는 지정된 시크릿의 모든 데이터
콘텐츠를 복사합니다. 함수의 다음 샘플을 확인합니다.
complianceType: musthave objectDefinition: apiVersion: v1 kind: Secret metadata: name: my-secret-copy data: '{{ copySecretData "default" "my-secret" }}'
참고: hub 클러스터 템플릿과 함께 이 기능을 사용하면 보호 기능을 사용하여 출력이 자동으로 암호화됩니다.
2.8.2.14. copyConfigMapData function
copyConfigMapData
함수는 지정된 ConfigMap의 모든 데이터
콘텐츠를 복사합니다. 함수의 다음 샘플을 확인합니다.
complianceType: musthave objectDefinition: apiVersion: v1 kind: ConfigMap metadata: name: my-secret-copy data: '{{ copyConfigMapData "default" "my-configmap" }}'
2.8.2.15. 지원되는 Sprig 오픈 소스 기능
또한 Red Hat Advanced Cluster Management는 sprig
오픈 소스 프로젝트에서 제공되는 다음과 같은 템플릿 기능을 지원합니다.
sprig 라이브러리 | 함수 |
---|---|
암호화 및 보안 |
|
날짜 |
|
Default |
|
사전 및 사전 |
|
정수 계산 |
|
정수 슬라이스 |
|
목록 |
|
문자열 함수 |
|
버전 비교 |
|
2.8.2.16. 추가 리소스
- 자세한 내용은 템플릿 처리를 참조하십시오.
- 사용 사례는 구성 정책의 고급 템플릿 처리를 참조하십시오.
- 라벨 선택기 예제는 Kubernetes 라벨 및 선택기 설명서를 참조하십시오.
- Golang 문서 - 패키지 템플릿 을 참조하십시오.
- 자세한 내용은 Sprig Function 문서를 참조하십시오.
2.8.3. 구성 정책의 고급 템플릿 처리
관리된 클러스터 및 허브 클러스터 템플릿을 모두 사용하여 각 대상 클러스터 또는 정책 정의에서 하드 코드 구성 값에 대한 별도의 정책을 생성할 필요성을 줄일 수 있습니다. 보안을 위해 리소스별 및 허브 클러스터 템플릿의 일반 조회 기능은 허브 클러스터의 정책 네임스페이스로 제한됩니다.
중요: 허브 클러스터 템플릿을 사용하여 보안 또는 기타 민감한 데이터를 전파하면 허브 클러스터의 관리 클러스터 네임스페이스 및 해당 정책이 배포된 관리 클러스터에 중요한 데이터 노출이 발생합니다. 템플릿 콘텐츠는 정책에서 확장되며 정책은 OpenShift Container Platform ETCD 암호화 지원에 의해 암호화되지 않습니다. 이 문제를 해결하려면 시크릿에서 값을 자동으로 암호화하는 fromSecret
또는 copySecretData
를 사용하거나 다른 값을 암호화하도록 보호합니다
.
고급 템플릿 사용 사례에 대해 계속 읽습니다.
2.8.3.1. 재처리를 위한 특수 주석
Hub 클러스터 템플릿은 정책 생성 중에 참조된 리소스의 데이터 또는 참조된 리소스가 업데이트될 때 확인됩니다.
수동으로 업데이트를 시작해야 하는 경우 특수 주석 policy.open-cluster-management.io/trigger-update
를 사용하여 템플릿에서 참조하는 데이터의 변경 사항을 표시합니다. 특수 주석 값을 변경하면 템플릿 처리가 자동으로 시작됩니다. 또한 참조된 리소스의 최신 내용은 관리 클러스터에서 처리를 위해 전파되는 정책 정의에서 읽고 업데이트됩니다. 이 주석을 사용하는 방법은 매번 값을 하나씩 늘리는 것입니다.
2.8.3.2. 오브젝트 템플릿 처리
YAML 문자열 표현으로 오브젝트 템플릿을 설정합니다. object-template-raw
매개변수는 if-else 및 range
함수와 같은 고급 템플릿 사용 사례를 지원하는 선택적 매개변수입니다. 다음 예제는 kinds -category를 추가하도록 정의됩니다.
레이블은 기본
네임스페이스의 모든 ConfigMap에 mammalname
키가 Sea Otter
와 같습니다.
object-templates-raw: | {{- range (lookup "v1" "ConfigMap" "default" "").items }} {{- if eq .data.name "Sea Otter" }} - complianceType: musthave objectDefinition: kind: ConfigMap apiVersion: v1 metadata: name: {{ .metadata.name }} namespace: {{ .metadata.namespace }} labels: species-category: mammal {{- end }} {{- end }}
참고: spec.object-templates
및 spec.object-templates-raw
는 선택 사항이지만 두 매개변수 필드 중 하나만 설정해야 합니다.
고급 템플릿을 사용하여 관리 클러스터에 대한 인프라 MachineSet
오브젝트를 생성하고 구성하는 다음 정책 예제를 확인합니다.
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: create-infra-machineset spec: remediationAction: enforce severity: low object-templates-raw: | {{- /* Specify the parameters needed to create the MachineSet */ -}} {{- $machineset_role := "infra" }} {{- $region := "ap-southeast-1" }} {{- $zones := list "ap-southeast-1a" "ap-southeast-1b" "ap-southeast-1c" }} {{- $infrastructure_id := (lookup "config.openshift.io/v1" "Infrastructure" "" "cluster").status.infrastructureName }} {{- $worker_ms := (index (lookup "machine.openshift.io/v1beta1" "MachineSet" "openshift-machine-api" "").items 0) }} {{- /* Generate the MachineSet for each zone as specified */ -}} {{- range $zone := $zones }} - complianceType: musthave objectDefinition: apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: {{ $infrastructure_id }} name: {{ $infrastructure_id }}-{{ $machineset_role }}-{{ $zone }} namespace: openshift-machine-api spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: {{ $infrastructure_id }} machine.openshift.io/cluster-api-machineset: {{ $infrastructure_id }}-{{ $machineset_role }}-{{ $zone }} template: metadata: labels: machine.openshift.io/cluster-api-cluster: {{ $infrastructure_id }} machine.openshift.io/cluster-api-machine-role: {{ $machineset_role }} machine.openshift.io/cluster-api-machine-type: {{ $machineset_role }} machine.openshift.io/cluster-api-machineset: {{ $infrastructure_id }}-{{ $machineset_role }}-{{ $zone }} spec: metadata: labels: node-role.kubernetes.io/{{ $machineset_role }}: "" taints: - key: node-role.kubernetes.io/{{ $machineset_role }} effect: NoSchedule providerSpec: value: ami: id: {{ $worker_ms.spec.template.spec.providerSpec.value.ami.id }} apiVersion: awsproviderconfig.openshift.io/v1beta1 blockDevices: - ebs: encrypted: true iops: 2000 kmsKey: arn: '' volumeSize: 500 volumeType: io1 credentialsSecret: name: aws-cloud-credentials deviceIndex: 0 instanceType: {{ $worker_ms.spec.template.spec.providerSpec.value.instanceType }} iamInstanceProfile: id: {{ $infrastructure_id }}-worker-profile kind: AWSMachineProviderConfig placement: availabilityZone: {{ $zone }} region: {{ $region }} securityGroups: - filters: - name: tag:Name values: - {{ $infrastructure_id }}-worker-sg subnet: filters: - name: tag:Name values: - {{ $infrastructure_id }}-private-{{ $zone }} tags: - name: kubernetes.io/cluster/{{ $infrastructure_id }} value: owned userDataSecret: name: worker-user-data {{- end }}
2.8.3.3. 템플릿 처리 우회
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
용으로 템플릿 처리가 바이패스됩니다.
2.8.3.4. 추가 리소스
- 자세한 내용은 템플릿 함수 를 참조하십시오.
- 템플릿 처리로 돌아갑니다.
- 자세한 내용은 Kubernetes 구성 정책 컨트롤러 를 참조하십시오.
- Red Hat OpenShift Container Platform etcd 암호화 문서를 참조하십시오.