2.8. テンプレート処理の概要
設定ポリシーは、オブジェクト定義での Golang テキストテンプレートの追加をサポートします。これらのテンプレートは、そのクラスターに関連する設定を使用して、ハブクラスターまたはターゲットのマネージドクラスターでランタイム時に解決されます。これにより、動的コンテンツで設定ポリシーを定義でき、ターゲットクラスターに、カスタマイズされた Kubernetes リソースを通知したり、強制的に実行したりできます。
設定ポリシー定義には、ハブクラスターとマネージドクラスターのテンプレートの両方を含めることができます。ハブクラスターテンプレートは、先にハブクラスターで処理され、解決されたハブクラスターテンプレートを使用したポリシー定義がターゲットクラスターに伝播されます。マネージドクラスターでは、ConfigurationPolicyController はポリシー定義内のマネージドクラスターテンプレートを処理し、その後、完全に解決されたオブジェクト定義を有効にするか、検証します。
テンプレートは Golang テンプレート言語仕様に準拠し、解決されたテンプレートから生成されるリソース定義は有効な YAML にする必要があります。詳細は、Golang ドキュメントの Package templates を参照してください。テンプレート検証のエラーは、ポリシー違反として認識されます。カスタムのテンプレート関数を使用する場合、値はランタイム時に置き換えられます。
重要:
-
ハブクラスターテンプレートを使用してシークレットや他の機密データを伝播すると、機密データはハブクラスターにあるマネージドクラスターの namespace か、そのポリシーが配布されているマネージドクラスター上に存在します。テンプレートの内容はポリシーで拡張され、ポリシーは OpenShift Container Platform ETCD 暗号化サポートでは暗号化されません。これに対処するには、
fromSecretまたはcopySecretDataを使用して、シークレットの値を自動的に暗号化するか、他の値を暗号化するためのprotectを使用します。 証明書などの複数行の文字列値を追加する場合は、改行を処理するために、テンプレートパイプラインの最後に常に
| toRawJson | toLiteral構文を追加します。たとえば、Secretリソースから証明書をコピーしてConfigMapリソースに含めると、テンプレートパイプラインは次の構文のようになります。ca.crt: '{{ fromSecret "openshift-config" "ca-config-map-secret" "ca.crt" | base64dec | toRawJson | toLiteral }}'toRawJsonテンプレート関数は、YAML 構造に影響を与えないように改行をエスケープした入力値を JSON 文字列に変換します。toLiteralテンプレート関数は、出力から外側の単一引用符を削除します。たとえば、テンプレートがkey: '{{ 'hello\nworld' | toRawJson }}'テンプレートパイプラインに対して処理されると、出力はkey: '"hello\nworld"'になります。key: '{{ 'hello\nworld' | toRawJson | toLiteral }}'テンプレートパイプラインの出力は、key: "hello\nworld"です。
ハブクラスターとマネージドクラスターのテンプレートの比較は、以下の表を参照してください。
2.8.1. ハブクラスターとマネージドクラスターのテンプレートの比較 リンクのコピーリンクがクリップボードにコピーされました!
| テンプレート | ハブクラスター | マネージドクラスター |
|---|---|---|
| 構文 | Golang テキストテンプレートの仕様 | Golang テキストテンプレートの仕様 |
| デリミター | {{hub … hub}} | {{ … }} |
| コンテキスト |
| コンテキスト変数はありません |
| アクセス制御 |
| クラスターの任意のリソースを参照できます。 |
| 関数 | Kubernetes リソースおよび文字列操作への動的なアクセスをサポートするテンプレート関数のセット。詳細は、Template functions を参照してください。検索制限は、アクセス制御の行を参照してください。
ハブクラスターの
同等の呼び出しは、次の構文を使用する場合があります: | テンプレート関数セットは、Kubernetes リソースおよび文字列操作への動的なアクセスをサポートします。詳細は、Template functions を参照してください。 |
| 関数出力ストレージ |
テンプレート関数の出力は、マネージドクラスターに同期される前に、マネージドクラスターで適用可能な各マネージドクラスター namespace の | テンプレート関数の出力は、ポリシー関連のリソースオブジェクトには保存されません。 |
| 処理 | 複製されたポリシーのクラスターへの伝播中に、ハブクラスターのランタイムで処理が発生します。ポリシーと、そのポリシー内にあるハブクラスターのテンプレートは、テンプレートの作成時または更新時にのみハブクラスターで処理されます。 |
処理は、マネージドクラスターの |
| エラーの処理 | ハブクラスターテンプレートからのエラーは、ポリシーの適用先のマネージドクラスターの違反として表示されます。 | マネージドクラスターテンプレートからのエラーは、違反が発生した特定のターゲットクラスターの違反として表示されます。 |
次のトピックを引き続きお読みください。
2.8.2. テンプレート関数 リンクのコピーリンクがクリップボードにコピーされました!
リソース固有および汎用の lookup テンプレート関数など、テンプレート関数は、ハブクラスター ({{hub … hub}} 区切り文字の使用) またはマネージドクラスター ({{ … }} 区切り文字の使用) 上の Kubernetes リソースを参照するために用意されています。詳細は、Template processing を参照してください。リソース固有の関数は利便性があり、リソースの内容の使いやすさを高めます。より高度な汎用関数 lookup を使用する場合は、検索されるリソースの YAML 構造をよく理解してください。これらの関数に加えて、base64enc、base64dec、indent、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 リソースの namespace、名前、およびデータキーを入力します。ハブクラスターテンプレートの関数を使用する場合は、ポリシーに使用されるのと同じ namespace を使用する必要があります。詳細は、Template processing を参照してください。
注意: この関数をハブクラスターテンプレートで使用すると、保護関数 を使用して出力が自動的に暗号化されます。
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 テンプレート関数は、出力から外側の単一引用符を削除します。たとえば、テンプレートが key: '{{ 'hello\nworld' | toRawJson }}' テンプレートパイプラインに対して処理されると、出力は key: '"hello\nworld"' になります。key: '{{ '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 リソースの namespace、名前、およびデータキーを入力します。ハブクラスターテンプレートの関数を使用するポリシーに使用されるのと同じ namespace を使用する必要があります。詳細は、Template processing を参照してください。Kubernetes ConfigMap リソースまたはデータキーがターゲットクラスターに存在しない場合は、ポリシー違反が表示されます。データキーがターゲットクラスターに存在しない場合は、値が空の文字列になります。以下で、ターゲットのマネージドクラスターで Kubernetes リソースを有効にする設定ポリシーを表示します。log-file データキーの値は、ConfigMap から log-file、default namespace から log-config の値を取得するテンプレートであり、log-level はデータキーの log-level に設定されます。
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 データキーの値は、platform.open-cluster-management.io クラスター要求の値を取得するテンプレートです。同様に、product と version の値は 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 関数 リンクのコピーリンクがクリップボードにコピーされました!
lookup 関数は、JSON と互換性のあるマップとして Kubernetes リソースを返します。要求されたリソースが存在しない場合は、空のマップが返されます。リソースが存在せず、値が別のテンプレート関数に提供されている場合は、エラー invalid value; expected string が発生する可能性があります。
注記: default テンプレート関数を使用して、後のテンプレート関数に正しい型が提供されるようにします。サポートされている Sprig オープンソース関数 セクションを参照してください。
関数については、以下の構文を確認してください。
func lookup (apiversion string, kind string, namespace string, name string, labelselector ...string) (value string, err Error)
この関数を使用する場合は、Kubernetes リソースの API バージョン、種類、namespace、名前、およびオプションのラベルセレクターを入力します。ハブクラスターテンプレート内のポリシーに使用されるものと同じ namespace を使用する必要があります。詳細は、Template processing を参照してください。ラベルセレクターの例は、Additional resources セクションにある Kubernetes labels and selectors ドキュメントへのリファレンスを参照してください。以下で、ターゲットのマネージドクラスターで Kubernetes リソースを有効にする設定ポリシーの例を確認してください。metrics-url データキーの値は、default namespace から v1/Service Kubernetes リソースの metrics を取得するテンプレートであり、クエリーされたリソースにある 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 関数は、入力 data string を 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. indent 関数 リンクのコピーリンクがクリップボードにコピーされました!
indent 関数により、パディングされた データ文字列 が返されます。関数については、以下の構文を確認してください。
func indent (spaces int, data string) (padded-data string)
この関数を使用する場合は、特定のスペース数でデータ文字列を入力します。以下は、indent 関数を使用する設定ポリシーの例になります。
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 関数は、indent 関数のように機能し、テンプレートの前のスペース数に基づいて自動的に先頭のスペース数を決定します。以下は、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. protect 関数 リンクのコピーリンクがクリップボードにコピーされました!
protect 機能により、ハブクラスターポリシーテンプレートで文字列を暗号化できます。これは、ポリシーの評価時にマネージドクラスターで自動的に復号化されます。以下は、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 関数を使用するために定義した既存のハブクラスターポリシーテンプレートがあります。マネージドクラスターの namespace に複製されたポリシーでは、値は $ocm_encrypted:okrrBqt72oI+3WT/0vxeI3vGa+wpLD7Z0ZxFMLvL204= のようになります。
それぞれの暗号化アルゴリズムは、256 ビットキーを使用した AES-CBC です。各暗号化キーはマネージドクラスターごとに一意で、30 日ごとに自動的にローテーションされます。
これにより、復号化された値がマネージドクラスターのポリシーに保存されることはありません。
即時のローテーションを強制するには、ハブクラスターのマネージドクラスター namespace の policy-encryption-key Secret で policy.open-cluster-management.io/last-rotated アノテーションを削除します。その後、ポリシーが再処理され、新しい暗号化キーが使用されます。
2.8.2.12. toLiteral 関数 リンクのコピーリンクがクリップボードにコピーされました!
toLiteral 関数は、処理後にテンプレート文字列を囲む引用符をすべて削除します。この関数を使用して、JSON 文字列を ConfigMap フィールドからマニフェストの JSON 値に変換できます。次の関数を実行して、key パラメーター値から引用符を削除します。
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 関数は、指定されたシークレットのすべての data コンテンツをコピーします。次の関数のサンプルをご覧ください。
complianceType: musthave
objectDefinition:
apiVersion: v1
kind: Secret
metadata:
name: my-secret-copy
data: '{{ copySecretData "default" "my-secret" }}'
注意: この関数をハブクラスターテンプレートで使用すると、保護関数 を使用して出力が自動的に暗号化されます。
2.8.2.14. copyConfigMapData 関数 リンクのコピーリンクがクリップボードにコピーされました!
copyConfigMapData 関数は、指定された ConfigMap のすべての data コンテンツをコピーします。次の関数のサンプルをご覧ください。
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 ライブラリー | 関数 |
|---|---|
| Cryptographic and security |
|
| Date |
|
| Default |
|
| Dictionaries and dict |
|
| Integer math |
|
| Integer slice |
|
| Lists |
|
| String functions |
|
| Version comparison |
|
2.8.2.16. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
- 詳細は、Template processing を参照してください。
- 使用例は 設定ポリシーでの高度なテンプレート処理 を参照してください。
- ラベルセレクターの例は、Kubernetes のラベルとセレクター のドキュメントを参照してください。
- Golang ドキュメント - パッケージテンプレート を参照してください。
- 詳細は、Sprig 関数のドキュメント を参照してください。
2.8.3. 設定ポリシーでの高度なテンプレート処理 リンクのコピーリンクがクリップボードにコピーされました!
マネージドクラスターとハブクラスターの両方のテンプレートを使用すると、ターゲットクラスターごとに個別のポリシーを作成したり、ポリシー定義で設定値をハードコードしたりする必要性が軽減されます。セキュリティーを確保するには、ハブクラスターテンプレートのリソース固有および一般的なルックアップ機能の両方が、ハブクラスターのポリシーの namespace に制限されます。
重要: ハブクラスターテンプレートを使用して機密データやその他の機密データを伝播すると、ハブクラスター上のマネージドクラスターの namespace と、そのポリシーが配布されているマネージドクラスターで機密データが漏洩する原因になります。テンプレートの内容はポリシーで拡張され、ポリシーは OpenShift Container Platform ETCD 暗号化サポートでは暗号化されません。これに対処するには、fromSecret または copySecretData を使用して、シークレットの値を自動的に暗号化するか、他の値を暗号化するための protect を使用します。
高度なテンプレートの使用例は、引き続きお読みください。
2.8.3.1. 再処理のための特別なアノテーション リンクのコピーリンクがクリップボードにコピーされました!
ハブクラスターテンプレートは、ポリシーの作成中、または参照されたリソースが更新されたときに、参照されたリソースのデータに解決されます。
更新を手動で開始する必要がある場合は、特別なアノテーション policy.open-cluster-management.io/trigger-update を使用して、テンプレートによって参照されるデータの変更を示します。特別なアノテーション値を変更すると、テンプレート処理が自動的に開始されます。さらに、参照されたリソースの最新のコンテンツが読み取られ、ポリシー定義で更新されます。ポリシー定義は、マネージドクラスターでの処理のために伝達されます。このアノテーションを使用する方法の 1 つは、値を毎回 1 ずつインクリメントすることです。
2.8.3.2. オブジェクトテンプレートの処理 リンクのコピーリンクがクリップボードにコピーされました!
YAML 文字列表現を使用してオブジェクトテンプレートを設定します。object-template-raw パラメーターは、if-else や range 関数などの高度なテンプレートのユースケースをサポートするオプションのパラメーターです。次の例は、Sea Otter と等しい name キーを持つ defaultの namespace 内の任意の ConfigMap に species-category: mammal ラベルを追加するように定義されています。
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 はオプションですが、2 つのパラメーターフィールドのいずれかを設定する必要があります。
高度なテンプレートを使用して、マネージドクラスターのインフラストラクチャー 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 の ConfigurationPolicy セクションに policy.open-cluster-management.io/disable-templates: "true" のアノテーションを追加します。このアノテーションを追加する場合に、1 つ前の回避策は必要ありません。ConfigurationPolicy のテンプレート処理はバイパスされます。
2.8.3.4. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
- 詳細は、テンプレート関数 を参照してください。
- テンプレート処理 に戻ります。
- 詳細は、Kubernetes 設定ポリシーコントローラー を参照してください。
- Red Hat OpenShift Container Platform の etcd 暗号化のドキュメント も参照してください。