1.2. テンプレート処理
設定ポリシーと Operator ポリシーは、Golang テキストテンプレートの組み込みをサポートしています。これらのテンプレートは、そのクラスターに関連する設定を使用して、ハブクラスターまたはターゲットのマネージドクラスターでランタイム時に解決されます。これにより、動的コンテンツでポリシーを定義でき、ターゲットクラスターに、カスタマイズされた Kubernetes リソースを通知したり、強制的に実行したりできます。
ポリシー定義には、ハブクラスターテンプレートとマネージドクラスターテンプレートの両方を含めることができます。ハブクラスターテンプレートは、先にハブクラスターで処理され、解決されたハブクラスターテンプレートを使用したポリシー定義がターゲットクラスターに伝播されます。マネージドクラスターのコントローラーは、ポリシー定義内のマネージドクラスターテンプレートを処理し、その後、完全に解決されたオブジェクト定義を有効にするか、検証します。
テンプレートは 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"です。
ハブクラスターとマネージドクラスターのテンプレートの比較は、以下の表を参照してください。
1.2.1. ハブクラスターとマネージドクラスターのテンプレートの比較 リンクのコピーリンクがクリップボードにコピーされました!
| テンプレート | ハブクラスター | マネージドクラスター |
|---|---|---|
| 構文 | Golang テキストテンプレートの仕様 | Golang テキストテンプレートの仕様 |
| デリミター | {{hub … hub}} | {{ … }} |
| コンテキスト |
コンテキスト変数 |
|
| アクセス制御 |
デフォルトでは、
または、
注記: サービスアカウントには、ハブクラスターテンプレートで検索されるすべてのリソースに対する | クラスターの任意のリソースを参照できます。 |
| 関数 | Kubernetes リソースおよび文字列操作への動的なアクセスをサポートするテンプレート関数のセット。詳細は、Template functions を参照してください。検索制限は、アクセス制御の行を参照してください。
ハブクラスターの
同等の呼び出しは、次の構文を使用する場合があります: | テンプレート関数セットは、Kubernetes リソースおよび文字列操作への動的なアクセスをサポートします。詳細は、Template functions を参照してください。 |
| 関数出力ストレージ |
テンプレート関数の出力は、マネージドクラスターに同期される前に、マネージドクラスターで適用可能な各マネージドクラスター namespace の | テンプレート関数の出力は、ポリシー関連のリソースオブジェクトには保存されません。 |
| 処理 | 複製されたポリシーのクラスターへの伝播中に、ハブクラスターのランタイムで処理が発生します。ポリシーと、そのポリシー内にあるハブクラスターのテンプレートは、テンプレートの作成時または更新時にのみハブクラスターで処理されます。 | 処理はマネージドクラスターで実行されます。設定ポリシーは定期的に処理され、参照されるリソースのデータを使用して解決されたオブジェクト定義を自動的に更新します。参照されているリソースが変更されるたびに、Operator ポリシーが自動的に更新されます。 |
| エラーの処理 | ハブクラスターテンプレートからのエラーは、ポリシーの適用先のマネージドクラスターの違反として表示されます。 | マネージドクラスターテンプレートからのエラーは、違反が発生した特定のターゲットクラスターの違反として表示されます。 |
次のトピックを引き続きお読みください。