GitOps
GitOps
概要
第1章 GitOps の概要
Red Hat OpenShift Container Platform GitOps および Argo CD は、元のアプリケーションライフサイクル Channel および Subscription モデルと比較して高度な機能を備えた Red Hat Advanced Cluster Management for Kubernetes と統合されています。
Argo CD 開発と GitOps の統合が活発であり、Argo CD の機能拡張や更新に貢献する大規模なコミュニティーも活発です。OpenShift Container Platform GitOps Operator を利用すると、Argo CD 開発の最新の進歩を利用でき、GitOps Operator サブスクリプションからサポートを受けることができます。
Red Hat Advanced Cluster Management for Kubernetes と OpenShift Container Platform GitOps および Argo CD の統合の詳細は、以下のトピックを参照してください。
1.1. GitOps コンソール
統合された OpenShift Container Platform GitOps コンソールの機能について詳しく説明します。ApplicationSet や Argo CD タイプなどのアプリケーションを作成および表示します。ApplicationSet
は、このコントローラーから生成される Argo アプリケーションを表します。
- Launch resource in Search をクリックし、関連リソースを検索します。
-
Search を使用して、各リソースのコンポーネント
kind
別にアプリケーションリソースを検索します。
重要: 利用可能なアクションは割り当てられたロールに基づきます。ロールベースのアクセス制御 のドキュメントで、アクセス要件を確認してください。
1.1.1. 前提条件
以下の前提条件および要件を参照してください。
-
Argo CD
ApplicationSet
を作成するには、Sync policy
からAutomatically sync when cluster state changes
を有効にする必要があります。 -
kustomization
コントローラーを使用する Flux の場合は、kustomize.toolkit.fluxcd.io/name=<app_name>
ラベルが付いた Kubernetes リソースを見つけます。 -
helm
コントローラーを使用する Flux の場合は、helm.toolkit.fluxcd.io/name=<app_name>
ラベルが付いた Kubernetes リソースを見つけます。 -
ApplicationSet
を作成するには、GitOps クラスターリソースと GitOps Operator がインストールされている必要があります。これらの前提条件がないと、コンソールに Argo サーバー オプションが表示されず、ApplicationSet
は作成されません。
1.1.2. Argo CD アプリケーションのクエリー
Argo CD アプリケーションを検索すると、Applications ページに移動します。Search ページから Argo CD アプリケーションにアクセスするには、以下の手順を実行します。
- Red Hat Advanced Cluster Management ハブクラスターにログインします。
- コンソールヘッダーから Search アイコンを選択します。
-
kind:application
およびapigroup:argoproj.io
の値でクエリーをフィルターします。 - 表示するアプリケーションを選択します。アプリケーション ページでは、アプリケーションに関する情報の概要が表示されます。
検索の詳細は、コンソールでの検索 を参照してください。
1.2. マネージドクラスターを Red Hat OpenShift GitOps Operator に登録する
OpenShift GitOps を Push モデルで設定するには、1 つ以上の Red Hat Advanced Cluster Management for Kubernetes マネージドクラスターのセットを OpenShift GitOps Operator のインスタンスに登録します。登録後、アプリケーションをこれらのクラスターにデプロイできます。継続的な OpenShift GitOps 環境を設定して、開発環境、ステージング、および実稼働環境のクラスター全体でアプリケーションの整合性を自動化します。
1.2.1. 前提条件
- Red Hat Advanced Cluster Management for Kubernetes に Red Hat OpenShift GitOps Operator をインストールする必要がある。
- 1 つ以上のマネージドクラスターをインポートする。
- マネージドクラスターを OpenShift GitOps に登録するには、ManagedClusterSet の作成 ドキュメントに記載されている内容を完了してください。
1.2.2. マネージドクラスターを Red Hat OpenShift GitOps に登録する
マネージドクラスターを OpenShift GitOps に登録するには、次の手順を実行します。
-
OpenShift GitOps がデプロイされている namespace にバインドするマネージドクラスターセットを作成します。マネージドクラスターを
openshift-gitops
namespace にバインドする例は、multicloud-integrations
マネージドclusterset
バインディングの例を参照してください。ManagedClusterSetBinding
の作成に関する一般的な情報は、追加リソース セクションの ManagedClusterSetBinding リソースの作成 を参照してください。配置の詳細は、ManagedClusterSets からの ManagedClusters のフィルタリング を参照してください。 マネージドクラスターセットバインディングで使用される namespace で、
Placement
カスタムリソースを作成し、OpenShift GitOps Operator インスタンスに登録するマネージドクラスターのセットを選択します。multicloud-integration
配置例をテンプレートとして使用します。配置情報は、配置での ManagedClusterSets の使用 を参照してください。注記:
- 他の Kubernetes クラスターではなく、OpenShift GitOps Operator インスタンスに登録されるのは、OpenShift Container Platform クラスターのみです。
-
一部の不安定なネットワークシナリオでは、マネージドクラスターが一時的に使用
unavailable
またはunreachable
状態になることがあります。詳細は、Red Hat Advanced Cluster Management および OpenShift GitOps の配置許容範囲の設定 を参照してください。
GitOpsCluster
カスタムリソースを作成し、配置決定から OpenShift GitOps の指定されたインスタンスにマネージドクラスターのセットを登録します。これにより、OpenShift GitOps インスタンスは、これらの Red Hat Advanced Cluster Management マネージドクラスターのいずれかにアプリケーションをデプロイできます。multicloud-integrations
OpenShift GitOps クラスターの例を使用します。注記: 参照される
Placement
リソースは、GitOpsCluster
リソースと同じ namespace に配置されている必要があります。以下の例を参照してください。apiVersion: apps.open-cluster-management.io/v1beta1 kind: GitOpsCluster metadata: name: gitops-cluster-sample namespace: dev spec: argoServer: cluster: local-cluster argoNamespace: openshift-gitops placementRef: kind: Placement apiVersion: cluster.open-cluster-management.io/v1beta1 name: all-openshift-clusters 1
- 1
placementRef.name
の値はall-openshift-clusters
で、argoNamespace: openshift-gitops
にインストールされている OpenShift GitOps インスタンスのターゲットクラスターとして指定されます。argoServer.cluster
仕様にはlocal-cluster
の値が必要です。
- 変更を保存します。これで、OpenShift GitOps ワークフローに従ってアプリケーションを管理できるようになりました。
1.2.3. OpenShift Container Platform クラスター以外のクラスターを Red Hat OpenShift GitOps に登録する
Red Hat Advanced Cluster Management GitOpsCluster
リソースを使用して、OpenShift Container Platform クラスター以外のクラスターを OpenShift GitOps クラスターに登録できるようになりました。この機能では、OpenShift GitOps コンソールを使用して、OpenShift Container Platform クラスター以外のクラスターにアプリケーションリソースをデプロイできます。OpenShift Container Platform クラスター以外のクラスターを OpenShift GitOps クラスターに登録するには、次の手順を実行します。
OpenShift Container Platform 以外の
ManagedCluster
リソースspec
の API サーバー URL に移動し、次のコマンドを実行して検証します。oc get managedclusters eks-1
次の情報のような出力になっていることを確認します。
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE eks-1 true https://5E336C922AB16684A332C10535B8D407.gr7.us-east-2.eks.amazonaws.com True True 37m
OpenShift Container Platform 以外の
MangedCluster
リソースspec
の API サーバー URL が空の場合は、次の手順を実行して手動で更新します。API サーバー URL を完成させるには、次のコマンドを実行して
MangedCluster
リソースspec
を編集します。oc edit managedclusters eks-1
YAML が次のファイルのようになっていることを確認します。
spec: managedClusterClientConfigs: - caBundle: ZW1wdHlDQWJ1bmRsZQo= url: https://5E336C922AB16684A332C10535B8D407.gr7.us-east-2.eks.amazonaws.com
変更を保存し、次のコマンドを実行して API サーバーが完了したことを確認します。
oc get managedclusters eks-1
- 次の情報のような出力になっていることを確認します。
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE eks-1 true https://5E336C922AB16684A332C10535B8D407.gr7.us-east-2.eks.amazonaws.com True True 37m
クラスターシークレットが生成されたことを確認するには、
openshift-gitops
namespace に移動し、GitOpsCluster
リソースのステータスがsuccessful
として報告されていることを確認します。注記:
Red Hat Advanced Cluster Management 2.12 以降では、次のインポートモードを使用すると、すべてのタイプの非 OpenShift Container Platform
ManagedCluster
リソースの API サーバー URL が自動的にレンダリングされます。- 既存クラスターのサーバー URL および API トークンを入力します。
-
既存クラスターの
kubeconfig
ファイルを入力します。
次の場合、
ManagedClusters
リソースの 1 つに対して API サーバー URL が空になる可能性があります。- OpenShift Container Platform クラスター以外のクラスターは、バージョン 2.12 より前の Red Hat Advanced Cluster Management ハブクラスターにインポートされます。
-
OpenShift Container Platform クラスター以外のクラスターは、インポートモード
Run import commands
を使用して、バージョン 2.12 の Red Hat Advanced Cluster Management ハブクラスターに手動でインポートされます。
1.2.4. Red Hat OpenShift GitOps トークン
OpenShift GitOps Operator と統合すると、配置および ManagedClusterSetBinding
カスタムリソースを通じて OpenShift GitOps namespace にバインドされているすべてのマネージドクラスターに対して、ManagedCluster
にアクセスするためのトークンを含むシークレットが OpenShift GitOps インスタンスサーバー namespace に作成されます。
OpenShift GitOps コントローラーは、リソースをマネージドクラスターに同期するためにこのシークレットを必要とします。デフォルトでは、サービスアカウントアプリケーションマネージャーは、マネージドクラスターのクラスター管理者権限を使用して、OpenShift GitOps インスタンスサーバーの namespace に OpenShift GitOps クラスターシークレットを生成します。デフォルトの namepsace は openshift-gitops
です。
このデフォルトが不要な場合は、OpenShift GitOps インスタンスサーバーの namepsace で OpenShift GitOps クラスターシークレットを生成するために、カスタマイズされた権限を持つサービスアカウントをマネージドクラスターで作成します。デフォルトの namepsace は引き続き openshift-gitops
です。詳細は、Argo CD プッシュモデル用のカスタマイズされたサービスアカウントの作成 を参照してください。
1.2.5. 関連情報
詳細は、次のリソースと例を参照してください。
1.3. GitOps のアプリケーション配置許容範囲の設定
Red Hat Advanced Cluster Management は、アプリケーションを Red Hat OpenShift GitOps にデプロイするマネージドクラスターを登録する方法を提供します。
一部の不安定なネットワークシナリオでは、マネージドクラスターが一時的に使用 Unavailable
状態になることがあります。アプリケーションのデプロイを容易にするために Placement
リソースが使用されている場合は、使用できないクラスターを引き続き含めるために、Placement
リソースに次の許容範囲を追加します。次の例は、許容範囲を含む Placement
リソースを示しています。
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: placement namespace: ns1 spec: tolerations: - key: cluster.open-cluster-management.io/unreachable operator: Exists - key: cluster.open-cluster-management.io/unavailable operator: Exists
1.4. プッシュアンドプルモデルを使用した Argo CD の導入
Push モデル 使用して、ハブクラスター上の Argo CD サーバーは、マネージドクラスターにアプリケーションリソースをデプロイします。Pull モデル の場合、アプリケーションリソースは manifestWork
を使用して Propagation controller によってマネージドクラスターに伝播されます。
どちらのモデルでも、同じ ApplicationSet
CRD を使用してアプリケーションをマネージドクラスターにデプロイします。
必要なアクセス権限: クラスターの管理者
1.4.1. 前提条件
Argo CD Pull モデルの次の前提条件を確認している。
重要:
-
openshift-gitops-ArgoCD-application-controller
サービスアカウントがクラスター管理者として割り当てられてい ない 場合、GitOps アプリケーションコントローラーはリソースをデプロイしない可能性があります。アプリケーションのステータスによって、次のようなエラーが送信される場合があります。
cannot create resource "services" in API group "" in the namespace "mortgage",deployments.apps is forbidden: User "system:serviceaccount:openshift-gitops:openshift-gitops-Argo CD-application-controller"
-
マネージドクラスターに
OpenShift Gitops
Operator をインストールした後、同じマネージドクラスターにClusterRoleBinding
クラスター管理者権限を作成する必要があります。 マネージドクラスターに
ClusterRoleBinding
クラスター管理者権限を追加するには、次の YAML の例を参照してください。kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: argo-admin subjects: - kind: ServiceAccount name: openshift-gitops-argocd-application-controller namespace: openshift-gitops roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin
クラスター管理者ではなく、この問題を解決する必要がある場合は、次の手順を実行してください。
- Argo CD アプリケーションがデプロイされる各マネージドクラスター上にすべての namespace を作成します。
managed-by
ラベルを各 namespace に追加します。Argo CD アプリケーションが複数の namespace にデプロイされている場合、各 namespace は Argo CD によって管理される必要があります。managed-by
ラベルを使用した次の例を参照してください。
apiVersion: v1 kind: Namespace metadata: name: mortgage2 labels: argocd.argoproj.io/managed-by: openshift-gitops
-
すべてのアプリケーション宛先 namespace をアプリケーションのリポジトリー内で宣言し、namespace に
managed
ラベルを含める必要があります。namespace を宣言する方法は、Additional resources を参照してください。
Argo CD Pull モデルを使用するには、次の要件を参照してください。
-
GitOps Operator はハブクラスターに、ターゲットのマネージドクラスターを
openshift-gitops
namespace にインストールする必要があります。 - 必要なハブクラスター OpenShift Container Platform GitOps operator はバージョン 1.9.0 以降である必要があります。
- 必要なマネージドクラスター OpenShift Container Platform GitOps Operator はハブクラスターと同じバージョンである必要があります。
- マネージドクラスターの Argo CD アプリケーションテンプレートを伝播するには、ApplicationSet コントローラー が必要です。
すべてのマネージドクラスターは、ハブクラスター上の Argo CD サーバー namespace にクラスターシークレットを持っている必要があります。これは、ArgoCD アプリケーションセットコントローラーがマネージドクラスターの Argo CD アプリケーションテンプレートを伝播するために必要です。
クラスターシークレットを作成するには、
placement
リソースへの参照が含まれるgitOpsCluster
リソースを作成します。placement
リソースは、プルモデルをサポートする必要があるすべてのマネージドクラスターを選択します。GitOps クラスターコントローラーが調整すると、Argo CD サーバーの namespace にマネージドクラスターのクラスターシークレットが作成されます。
1.4.2. アーキテクチャー
Push および Pull モデルの両方で、ハブクラスター上の Argo CD ApplicationSet コントローラー が調整して、ターゲットのマネージドクラスターごとにアプリケーションリソースを作成します。両方のモデルのアーキテクチャーに関する以下の情報を参照してください。
1.4.2.1. アーキテクチャープッシュモデル
- Push モデルを使用すると、OpenShift Container Platform GitOps は、一元化されたハブクラスターからマネージドクラスターにリソースを 直接 適用します。
- ハブクラスター上で実行されている Argo CD アプリケーションは、GitHub リポジトリーと通信し、マニフェストをマネージドクラスターに直接デプロイします。
- Push モデルの実装には、マネージドクラスターの認証情報を持つハブクラスター上の Argo CD アプリケーションのみが含まれます。ハブクラスター上の Argo CD アプリケーションは、アプリケーションをマネージドクラスターにデプロイできます。
- 重要: リソースの適用を必要とするマネージドクラスターが多数ある場合は、OpenShift GitOps コントローラーのメモリーと CPU の使用率に負担がかかる可能性があることを考慮してください。リソース管理を最適化するには、Red Hat OpenShift GitOps ドキュメントの リソースクォータまたはリクエストの設定 を参照してください。
-
デフォルトでは、
apps.open-cluster-management.io/ocm-managed-cluster
およびapps.open-cluster-management.io/pull-to-ocm-managed-cluster
を追加しない限り、アプリケーションのデプロイには Push モデルが使用されます。ApplicationSet
のテンプレートセクションに cluster アノテーションを追加します。
1.4.2.2. アーキテクチャープルモデル
- プルモデルでは、ハブクラスター内のコントローラーのストレスが軽減されるため、プッシュモデルと比較してスケーラビリティーが軽減されますが、より多くのリクエストとステータスレポートが必要になります。
- プルモデルの場合、OpenShift Container Platform GitOps は、一元化されたハブクラスターからマネージドクラスターにリソースを直接適用 しません。Argo CD アプリケーションは、ハブクラスターからマネージドクラスターに伝播されます。
-
Pull モデルの実装では、OpenShift Cluster Manager の登録、配置、
manifestWork
API が適用され、ハブクラスターがハブクラスターとマネージドクラスター間の安全な通信チャネルを使用してリソースをデプロイできるようになります。 - 各マネージドクラスターは個別に GitHub リポジトリーと通信してリソースマニフェストをローカルにデプロイするため、各マネージドクラスターに GitOps オペレーターをインストールして設定する必要があります。
-
Argo CD サーバーは、各ターゲットのマネージドクラスター上で実行されている必要があります。Argo CD アプリケーションリソースはマネージドクラスター上に複製され、ローカルの Argo CD サーバーによってデプロイされます。マネージドクラスター上の分散 Argo CD アプリケーションは、ハブクラスター上の単一の Argo CD
ApplicationSet
リソースを使用して作成されます。 -
マネージドクラスターは、
ocm-managed-cluster
アノテーションの値によって決定されます。 -
Pull モデルを正常に実装するには、Argo CD アプリケーションコントローラーは、
ApplicationSet
のテンプレートセクションにあるargocd.argoproj.io/skip-reconcile
アノテーションを持つプッシュモデルアプリケーションリソースを 無視 する必要があります。 - Pull モデルの場合、マネージドクラスター上の Argo CD アプリケーションコントローラー が調整してアプリケーションをデプロイします。
- ハブクラスター上の Pull モデル Resource sync controller は、各マネージドクラスター上の OpenShift Cluster Manager 検索 V2 コンポーネントに定期的にクエリーを実行し、各 Argo CD アプリケーションのリソースリストとエラーメッセージを取得します。
-
ハブクラスターの Aggregation controller はリソース同期コントローラーからのデータと、
manifestWork
からのステータス情報を使用して、クラスター全体からMulticlusterApplicationSetReport
を作成および更新します。 - デプロイメントのステータスはハブクラスターに収集されますが、すべての詳細情報が送信されるわけではありません。概要を提供するために、追加のステータス更新が定期的に収集されます。ステータスのフィードバックはリアルタイムではなく、各マネージドクラスターの GitOps operator は Git リポジトリーと通信する必要があるため、複数のリクエストが発生します。
1.4.3. ApplicationSet カスタムリソースの作成
Argo CD ApplicationSet
リソースは、マネージドクラスターのリストを取得するために使用されるジェネレーターフィールド内の placement
リソースを含むプッシュまたはプルモデルを使用して、マネージドクラスターにアプリケーションをデプロイするために使用されます。
- プルモデルの場合、次の例に示すように、アプリケーションの宛先をデフォルトのローカル Kubernetes サーバーに設定します。アプリケーションは、マネージドクラスター上のアプリケーションコントローラーによってローカルにデプロイされます。
以下の
ApplicationSet
YAML の例に示されるように、デフォルトの Push モデルを上書きするために必要なアノテーションを追加します。これは、テンプレートアノテーションで Pull モデルを使用します。apiVersion: argoproj.io/v1alpha1 kind: `ApplicationSet` metadata: name: guestbook-allclusters-app-set namespace: openshift-gitops spec: generators: - clusterDecisionResource: configMapRef: ocm-placement-generator labelSelector: matchLabels: cluster.open-cluster-management.io/placement: aws-app-placement requeueAfterSeconds: 30 template: metadata: annotations: apps.open-cluster-management.io/ocm-managed-cluster: '{{name}}'1 apps.open-cluster-management.io/ocm-managed-cluster-app-namespace: openshift-gitops argocd.argoproj.io/skip-reconcile: "true" 2 labels: apps.open-cluster-management.io/pull-to-ocm-managed-cluster: "true" 3 name: '{{name}}-guestbook-app' spec: destination: namespace: guestbook server: https://kubernetes.default.svc project: default sources: [ { repoURL: https://github.com/argoproj/argocd-example-apps.git targetRevision: main path: guestbook } ] syncPolicy: automated: {} syncOptions: - CreateNamespace=true
1.4.4. MulticlusterApplicationSetReport
-
Pull モデルの場合、
MulticlusterApplicationSetReport
はマネージドクラスター全体からアプリケーションステータスを集約します。 - レポートには、リソースのリストと、各マネージドクラスターからのアプリケーションの全体的なステータスが含まれます。
-
Argo CD ApplicationSet リソースごとに個別のレポートリソースが作成されます。レポートは
ApplicationSet
と同じ namespace に作成されます。 レポートには次の項目が含まれます。
- Argo CD アプリケーションのリソースのリスト
- 各 Argo CD アプリケーションの全体的な同期およびヘルスステータス
-
全体的なステータスが
out of sync
、またはunhealthy
各クラスターのエラーメッセージ - 管理対象クラスタのすべての状態を示すサマリーステータス
- Resource sync controller と Aggregation controller は両方とも 10 秒ごとに実行され、レポートを作成します。
次の出力例に示すように、2 つのコントローラーと Propagation コントローラーは、同じ
multicluster-integrations
Pod 内の別々のコンテナーで実行されます。NAMESPACE NAME READY STATUS open-cluster-management multicluster-integrations-7c46498d9-fqbq4 3/3 Running
以下は、guestbook
アプリケーションの MulticlusterApplicationSetReport
YAML ファイルの例です。
apiVersion: apps.open-cluster-management.io/v1alpha1 kind: MulticlusterApplicationSetReport metadata: labels: apps.open-cluster-management.io/hosting-applicationset: openshift-gitops.guestbook-allclusters-app-set name: guestbook-allclusters-app-set namespace: openshift-gitops statuses: clusterConditions: - cluster: cluster1 conditions: - message: 'Failed sync attempt: one or more objects failed to apply, reason: services is forbidden: User "system:serviceaccount:openshift-gitops:openshift-gitops-Argo CD-application-controller" cannot create resource "services" in API group "" in the namespace "guestbook",deployments.apps is forbidden: User <name> cannot create resource "deployments" in API group "apps" in the namespace "guestboo...' type: SyncError healthStatus: Missing syncStatus: OutOfSync - cluster: pcluster1 healthStatus: Progressing syncStatus: Synced - cluster: pcluster2 healthStatus: Progressing syncStatus: Synced summary: clusters: "3" healthy: "0" inProgress: "2" notHealthy: "3" notSynced: "1" synced: "2"
Note: リソースがデプロイに失敗した場合、リソースはリソース一覧に含まれません。詳細は、エラーメッセージを参照してください。
1.4.5. 関連情報
- Red Hat OpenShift GitOps ドキュメントの クラスター設定を使用してアプリケーションをデプロイして OpenShift クラスターの設定 を参照してください。
- Red Hat OpenShift GitOps ドキュメントの Argo CD インスタンスの設定 を参照してください。
1.5. Red Hat OpenShift GitOps を使用したポリシー定義の管理
ArgoCD
リソースを使用する場合、Red Hat Advanced Cluster Management ハブクラスターでポリシーを作成するための OpenShift GitOps アクセスを許可することで、Red Hat OpenShift GitOps を使用してポリシー定義を管理できます。
1.5.1. 前提条件
ハブクラスターにログインしておく。
必要なアクセス権限: クラスターの管理者
非推奨: PlacementRule
1.5.2. OpenShift GitOps 用の ClusterRole リソースの作成
ポリシーと配置の作成、読み取り、更新、削除のアクセス権を持つ OpenShift GitOps の ClusterRole
リソースを作成するには以下を実行します。
コンソールから
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 - configurationpolicies - certificatepolicies - operatorpolicies - 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
注記: - Red Hat Advanced Cluster Management ポリシー定義が OpenShift GitOps でデプロイされると、ハブテンプレートの違いを解決するために、各マネージドクラスター namespace にポリシーのコピーが作成されます。これらのコピーは、複製されたポリシーと呼ばれます。- OpenShift GitOps がこの複製されたポリシーを繰り返し削除したり、Argo CD
Application
が同期されていないことを示したりするのを防ぐために、Red Hat Advanced Cluster Management ポリシーフレームワークによって、各複製されたポリシーにargocd.argoproj.io/compare-options: IgnoreExtraneous
アノテーションが自動的に設定されます。-
Argo CD がオブジェクトを追跡するために使用するラベルとアノテーションがあります。複製されたポリシーが Argo CD にまったく表示されないようにするには、Red Hat Advanced Cluster Management ポリシー定義で
spec.copyPolicyMetadata
をfalse
に設定して、Argo CD 追跡ラベルとアノテーションを無効にします。
1.5.3. ポリシージェネレーターと OpenShift GitOps の統合
OpenShift GitOps を使用すると、GitOps を通じてポリシージェネレーターを使用してポリシーを生成できます。ポリシージェネレーターは OpenShift GitOps コンテナーイメージにプリインストールされていないため、カスタマイズを行う必要があります。
1.5.3.1. 前提条件
- OpenShift GitOps を Red Hat Advanced Cluster Management ハブクラスターにインストールしておく。
- ハブクラスターにログインしておく。
1.5.3.2. OpenShift GitOps からのポリシージェネレーターへのアクセス
OpenShift GitOps からポリシージェネレーターにアクセスするには、Init コンテナーを設定して、Red Hat Advanced Cluster Management Application Subscription コンテナーイメージからポリシージェネレーターバイナリーをコピーする必要があります。Kustomize を実行するときに --enable-alpha-plugins
フラグを指定して OpenShift GitOps を設定する必要もあります。
ポリシージェネレーターを使用してポリシーと配置を作成、読み取り、更新、削除するには、OpenShift GitOps からポリシージェネレーターへのアクセス権を付与します。以下の手順を実行します。
次のコマンドを使用して、OpenShift GitOps
argocd
オブジェクトを編集します。oc -n openshift-gitops edit argocd openshift-gitops
ポリシージェネレーターを新しいバージョンに更新するには、Init コンテナーで使用される
registry.redhat.io/rhacm2/multicluster-Operators-subscription-rhel9
イメージを新しいタグに追加します。<version>
パラメーターは、ArgoCD
リソースの最新の Red Hat Advanced Cluster Management バージョンに置き換えます。ArgoCD
リソースは、次の YAML ファイルのようになります。apiVersion: argoproj.io/v1beta1 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 /policy-generator/PolicyGenerator-not-fips-compliant /policy-generator-tmp/PolicyGenerator command: - /bin/bash image: registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel9:v<version> name: policy-generator-install volumeMounts: - mountPath: /policy-generator-tmp name: policy-generator volumeMounts: - mountPath: /etc/kustomize/plugin/policy.open-cluster-management.io/v1/policygenerator name: policy-generator volumes: - emptyDir: {} name: policy-generator
注記: または、
ArgoCD
マニフェストを含むConfigurationPolicy
リソースを作成し、MultiClusterHub
で設定されたバージョンと一致するバージョンをテンプレート化することもできます。image: '{{ (index (lookup "apps/v1" "Deployment" "open-cluster-management" "multicluster-operators-hub-subscription").spec.template.spec.containers 0).image }}'
ポリシーを生成する前に Kustomize ディレクトリー内で Helm チャート処理を有効にする場合は、
spec.repo.env
フィールドでPOLICY_GEN_ENABLE_HELM
環境変数を"true"
に設定します。env: - name: POLICY_GEN_ENABLE_HELM value: "true"
ポリシーと配置を作成、読み取り、更新、削除するには、
ClusterRoleBinding
オブジェクトを作成し、OpenShift GitOps サービスアカウントに Red Hat Advanced Cluster Management ハブクラスターへのアクセス権を付与します。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
1.5.4. OpenShift GitOps でのポリシーヘルスチェックの設定
ArgoCD
リソースでは、OpenShift GitOps を使用して、リソースの状態に基づいて特定のリソースの現在の健全性を判断するカスタムロジックを定義できます。ポリシーが準拠している場合にのみポリシーが正常であると報告するようにカスタムヘルスチェックを定義します。リソースのヘルスチェックを追加する場合は、resourceHealthChecks
フィールドに group
として追加する必要があります。
重要: インターネットから悪意のあるものをダウンロードしていないことを確認するには、ポリシーを適用する前にすべてのポリシーを確認してください。
リソースの種類のヘルスチェックを定義するには、次の手順を実行します。
CertificatePolicy
リソースのヘルスチェックを設定するには、次のコマンドでArgoCD
リソースを編集します。oc -n openshift-gitops edit argocd openshift-gitops
ArgoCD
リソースは、次の YAML ファイルのようになります。apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: openshift-gitops namespace: openshift-gitops spec: resourceHealthChecks: - group: policy.open-cluster-management.io kind: CertificatePolicy check: | hs = {} if obj.status == nil or obj.status.compliant == nil then hs.status = "Progressing" hs.message = "Waiting for the status to be reported" return hs end if obj.status.compliant == "Compliant" then hs.status = "Healthy" hs.message = "All certificates found comply with the policy" return hs else hs.status = "Degraded" hs.message = "At least one certificate does not comply with the policy" return hs end
CertificatePolicy
、ConfigurationPolicy
、OperatorPolicy
、およびPolicy
リソースにヘルスチェックを追加するには、次のコマンドを実行してargocd-policy-healthchecks.yaml
をダウンロードします。wget https://raw.githubusercontent.com/open-cluster-management-io/policy-collection/main/stable/CM-Configuration-Management/argocd-policy-healthchecks.yaml
argocd-policy-healthchecks.yaml
ポリシーを適用するには、次のコマンドを実行します。oc apply -f ./argocd-policy-healthchecks.yaml
-
ArgoCD
リソースの Summary タブを表示して、ヘルスチェックが期待どおりに機能していることを確認します。Argo CD コンソールから健全性の詳細を表示します。
1.5.5. 関連情報
- OpenShift GitOps について のドキュメントを参照してください。
1.6. GitOps Operator をインストールするためのポリシーの生成
Red Hat Advanced Cluster Management ポリシーの一般的な用途は、Operator を 1 つ以上の Red Hat OpenShift Container Platform マネージドクラスターにインストールすることです。ポリシージェネレーターを使用してポリシーを生成する方法、および生成されたポリシーを使用して OpenShift Container Platform GitOps Operator をインストールする方法は、引き続きお読みください。
1.6.1. OpenShift Container Platform GitOps をインストールするポリシーの生成
Policy Generator を使用して、OpenShift Container Platform GitOps をインストールするポリシーを生成できます。OpenShift Container Platform GitOps Operator は all namespaces インストールモードを提供しており、次の例で確認できます。次の例のように、openshift-gitops-subscription.yaml
という Subscription
マニフェストファイルを作成します。
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 の特定のバージョンに固定するには、パラメーターと値 spec.startingCSV: openshift-gitops-operator.v<version>
を追加します。<version>
を希望のバージョンに置き換えます。
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
生成されたポリシーは、PlacementRule
(非推奨) を含む次のファイルのようになります。
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 ドキュメントの設定ガイダンスを適用できます。
1.6.2. OperatorGroups でのポリシー依存関係の使用
OperatorGroup
マニフェストを使用して Operator をインストールする場合、Subscription
が作成される前に、クラスターに OperatorGroup
が存在している必要があります。ポリシージェネレーターとともにポリシー依存関係機能を使用して、Subscription
ポリシーを実施する前に OperatorGroup
ポリシーが準拠していることを確認します。
必要な順序でマニフェストを一覧表示して、ポリシーの依存関係を設定します。たとえば、namespace ポリシーを最初に作成し、次に OperatorGroup
を作成し、最後に Subscription
を作成することができます。
ポリシージェネレーター設定マニフェストで policyDefaults.orderManifests
パラメーターを有効にし、policyDefaults.consolidateManifests
を無効にして、マニフェスト間の依存関係を自動的に設定します。
1.7. Argo CD プッシュモデル用のカスタマイズされたサービスアカウントの作成
ハブクラスター上に managedserviceaccount
リソースを作成することにより、マネージドクラスター上にサービスアカウントを作成します。clusterpermission
リソースを使用して、特定のパーミッションをサービスアカウントに付与します。
Argo CD プッシュモデルで使用するカスタマイズされたサービスアカウントを作成すると、次の利点があります。
- アプリケーションマネージャーアドオンは、各マネージドクラスター上で実行されます。デフォルトでは、Argo CD コントローラーはサービスアカウントアプリケーションマネージャーを使用して、これらのリソースをマネージドクラスターにプッシュします。
- アプリケーションサブスクリプションアドオンはアプリケーションマネージャーサービスを使用してマネージドクラスターにアプリケーションをデプロイするため、アプリケーションマネージャーサービスアカウントには大規模なアクセスパーミッションのセットがあります。制限された権限セットが必要な場合は、アプリケーションマネージャーサービスアカウントを使用しないでください。
- Argo CD プッシュモデルで使用する別のサービスアカウントを指定できます。Argo CD コントローラーが集中ハブクラスターからマネージドクラスターにリソースをプッシュする場合、デフォルトのアプリケーションマネージャーとは異なるサービスアカウントを使用できます。別のサービスアカウントを使用すると、このサービスアカウントに付与されるアクセス許可を制御できます。
-
サービスアカウントはマネージドクラスター上に存在している必要があります。関連するアクセスパーミッションが割り当てられたサービスアカウントの作成を容易にするには、一元化されたハブクラスターで
managedserviceaccount
リソースと新しいclusterpermission
リソースを使用します。
次の手順をすべて完了すると、マネージドサービスアカウントにクラスターのアクセスパーミッションを付与できます。クラスター権限があると、マネージドサービスアカウントには、マネージドクラスターにアプリケーションリソースをデプロイするために必要な権限が与えられます。以下の手順を実行します。
1.7.1. マネージドサービスアカウントの作成
ハブ上の マネージドサービスアカウント
カスタムリソースを使用すると、マネージドクラスター上に serviceaccounts
を作成する場合に便利です。managedserviceccount
カスタムリソースがハブクラスターの <managed_cluster>
namespace に作成されると、serviceccount
がマネージドクラスターに作成されます。
マネージドサービスアカウントを作成するには、managedserviceaccount アドオンの有効化 を参照してください。
1.7.2. クラスターパーミッションの作成
サービスアカウントの作成時には、パーミッションはそのアカウントに関連付けられません。新規サービスアカウントにパーミッションを付与するには、clusterpermission
リソースを使用します。clusterpermission
リソースは、ハブのマネージドクラスター namespace に作成されます。このリソースを使用すると、ロール、マネージドクラスター上のクラスターロールリソースを作成し、rolebinding
または clusterrolebinding
リソースを使用して、サービスアカウントにバインドする場合に便利です。
<managed-sa-sample>
サービスアカウントのアクセス許可を、<managed cluster>
上の mortgage namespace にデプロイされるサンプルの住宅ローンアプリケーションに付与するには、以下の内容を含む YAML を作成します。apiVersion: rbac.open-cluster-management.io/v1alpha1 kind: ClusterPermission metadata: name: <clusterpermission-msa-subject-sample> namespace: <managed cluster> spec: roles: - namespace: default rules: - apiGroups: ["apps"] resources: ["deployments"] verbs: ["get", "list", "create", "update", "delete", "patch"] - apiGroups: [""] resources: ["configmaps", "secrets", "pods", "podtemplates", "persistentvolumeclaims", "persistentvolumes"] verbs: ["get", "update", "list", "create", "delete", "patch"] - apiGroups: ["storage.k8s.io"] resources: ["*"] verbs: ["list"] - namespace: mortgage rules: - apiGroups: ["apps"] resources: ["deployments"] verbs: ["get", "list", "create", "update", "delete", "patch"] - apiGroups: [""] resources: ["configmaps", "secrets", "pods", "services", "namespace"] verbs: ["get", "update", "list", "create", "delete", "patch"] clusterRole: rules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "list"] roleBindings: - namespace: default roleRef: kind: Role subject: apiGroup: authentication.open-cluster-management.io kind: ManagedServiceAccount name: <managed-sa-sample> - namespace: mortgage roleRef: kind: Role subject: apiGroup: authentication.open-cluster-management.io kind: ManagedServiceAccount name: <managed-sa-sample> clusterRoleBinding: subject: apiGroup: authentication.open-cluster-management.io kind: ManagedServiceAccount name: <managed-sa-sample>
-
YAML ファイルを
cluster-permission.yaml
という名前のファイルとして保存します。 -
oc apply -f cluster-permission.yaml
を実行します。 -
サンプル
<clusterpermission>
は、mortgage namespace に<clusterpermission-msa-subject-sample>
というロールを作成します。mortgage
の namespace が存在しない場合は、この namespace を作成します。 -
<managed cluster>
で作成されたリソースを確認します。
サンプル <clusterpermission>
を作成すると、以下のリソースがサンプルのマネージドクラスターに作成されます。
-
デフォルトの namespace 内の
<clusterpermission-msa-subject-sample>
という名前のロールが 1 つ。 -
ロールをマネージドサービスアカウントにバインドするための default namespace で
<clusterpermission-msa-subject-sample>
という roleBinding が 1 つ。 -
mortgage namespace に
<clusterpermission-msa-subject-sample>
といいうロールが 1 つ。 -
ロールをマネージドサービスアカウントにバインドするための、mortgage namespace 内の
<clusterpermission-msa-subject-sample>
と呼ばれる roleBinding が 1 つ。 -
<clusterpermission-msa-subject-sample>
という clusterRole が 1 つ。 -
clusterRole をマネージドサービスアカウントにバインドするための
<clusterpermission-msa-subject-sample>
という clusterRoleBinding が 1 つ。
1.7.3. GitOpsCluster リソースでの管理サービスアカウントの使用
GitOpsCluster
リソースは、配置を使用して、選択したマネージドクラスターを Argo CD にインポートします。これには、クラスターへのアクセスに使用される情報を含む Argo CD クラスターシークレットの作成が含まれます。デフォルトでは、Argo CD クラスターシークレットは、アプリケーションマネージャーサービスアカウントを使用してマネージドクラスターにアクセスします。
-
マネージドサービスアカウントを使用するように
GitOpsCluster
リソースを更新するには、マネージドサービスアカウントの名前を指定してmanagedServiceAccountRef
プロパティーを追加します。 次のサンプルを
gitops.yaml
ファイルとして保存し、GitOpsCluster
カスタムリソースを作成します。apiVersion: apps.open-cluster-management.io/v1beta1 kind: GitOpsCluster metadata: name: argo-acm-importer namespace: openshift-gitops spec: managedServiceAccountRef: <managed-sa-sample> argoServer: cluster: notused argoNamespace: openshift-gitops placementRef: kind: Placement apiVersion: cluster.open-cluster-management.io/v1beta1 name: all-openshift-clusters namespace: openshift-gitops
-
ファイルを適用するには
oc apply -f gitops.yaml
を実行します。 openshift-gitops
namespace に移動し、<managed cluster-managed-sa-sample-cluster-secret>
という名前の新しい Argo CD クラスターシークレットがあることを確認します。以下のコマンドを実行します。oc get secrets -n openshift-gitops <managed cluster-managed-sa-sample-cluster-secret>
以下の出力を参照して確認します。
NAME TYPE DATA AGE <managed cluster-managed-sa-sample-cluster-secret> Opaque 3 4m2s
1.7.4. Argo CD アプリケーションの作成
プッシュモデルを使用して、Argo CD コンソールから Argo CD アプリケーションをデプロイします。Argo CD アプリケーションは、マネージドサービスアカウント <managed-sa-sample>
でデプロイされます。
- Argo CD コンソールにログインします。
- Create a new application をクリックします。
- クラスター URL を選択します。
-
Argo CD アプリケーションに移動し、
<managed cluster>
に伝播したロールやクラスターロールなど、指定のパーミッションがあることを確認します。
1.7.5. ポリシーを使用したマネージドサービスアカウントおよびクラスターパーミッションの作成
When the GitOpsCluster resource is updated with the `managedServiceAccountRef`, each managed cluster in the placement of this GitOpsCluster needs to have the service account. If you have several managed clusters, it becomes tedious for you to create the managed service account and cluster permission for each managed cluster. You can simply this process by using a policy to create the managed service account and cluster permission for all your managed clusters
managedServiceAccount
リソースと clusterPermission
リソースをハブクラスターに適用すると、このポリシーの配置はローカルクラスターにバインドされます。これらのリソースを、GitOpsCluster リソースの配置内のすべてのマネージドクラスターのマネージドクラスター namespace に複製します。
ポリシーを使用して managedServiceAccount
および clusterPermission
リソースを作成すると、次の属性が含まれます。
-
ポリシー内の
managedServiceAccount
とclusterPermission
オブジェクトテンプレートを更新すると、すべてのマネージドクラスターのmanagedServiceAccount
およびclusterPermission
リソースがすべて更新されます。 -
managedServiceAccount
およびclusterPermission
リソースを直接更新すると、ポリシーが適用されるため、元の状態に戻されます。 GitOpsCluster の配置に関する決定が変更された場合、ポリシーはマネージドクラスターの namespace 内のリソースの作成と削除を管理します。
- マネージドサービスアカウントとクラスター権限を作成するための YAML のポリシーを作成するには、次の内容を含む YAML を作成します。
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: policy-gitops namespace: openshift-gitops annotations: policy.open-cluster-management.io/standards: NIST-CSF policy.open-cluster-management.io/categories: PR.PT Protective Technology policy.open-cluster-management.io/controls: PR.PT-3 Least Functionality spec: remediationAction: enforce disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-gitops-sub spec: pruneObjectBehavior: None remediationAction: enforce severity: low object-templates-raw: | {{ range $placedec := (lookup "cluster.open-cluster-management.io/v1beta1" "PlacementDecision" "openshift-gitops" "" "cluster.open-cluster-management.io/placement=aws-app-placement").items }} {{ range $clustdec := $placedec.status.decisions }} - complianceType: musthave objectDefinition: apiVersion: authentication.open-cluster-management.io/v1alpha1 kind: ManagedServiceAccount metadata: name: <managed-sa-sample> namespace: {{ $clustdec.clusterName }} spec: rotation: {} - complianceType: musthave objectDefinition: apiVersion: rbac.open-cluster-management.io/v1alpha1 kind: ClusterPermission metadata: name: <clusterpermission-msa-subject-sample> namespace: {{ $clustdec.clusterName }} spec: roles: - namespace: default rules: - apiGroups: ["apps"] resources: ["deployments"] verbs: ["get", "list", "create", "update", "delete"] - apiGroups: [""] resources: ["configmaps", "secrets", "pods", "podtemplates", "persistentvolumeclaims", "persistentvolumes"] verbs: ["get", "update", "list", "create", "delete"] - apiGroups: ["storage.k8s.io"] resources: ["*"] verbs: ["list"] - namespace: mortgage rules: - apiGroups: ["apps"] resources: ["deployments"] verbs: ["get", "list", "create", "update", "delete"] - apiGroups: [""] resources: ["configmaps", "secrets", "pods", "services", "namespace"] verbs: ["get", "update", "list", "create", "delete"] clusterRole: rules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "list"] roleBindings: - namespace: default roleRef: kind: Role subject: apiGroup: authentication.open-cluster-management.io kind: ManagedServiceAccount name: <managed-sa-sample> - namespace: mortgage roleRef: kind: Role subject: apiGroup: authentication.open-cluster-management.io kind: ManagedServiceAccount name: <managed-sa-sample> clusterRoleBinding: subject: apiGroup: authentication.open-cluster-management.io kind: ManagedServiceAccount name: <managed-sa-sample> {{ end }} {{ end }} --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-policy-gitops namespace: openshift-gitops placementRef: name: lc-app-placement kind: Placement apiGroup: cluster.open-cluster-management.io subjects: - name: policy-gitops kind: Policy apiGroup: policy.open-cluster-management.io --- apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: lc-app-placement namespace: openshift-gitops spec: numberOfClusters: 1 predicates: - requiredClusterSelector: labelSelector: matchLabels: name: local-cluster
-
YAML ファイルを
policy.yaml
というファイルとして保存します。 -
oc apply -f policy.yaml
を実行します。 -
ポリシーのオブジェクトテンプレートでは、GitOpsCluster に関連付けられた配置の決定を繰り返し処理し、次の
managedServiceAccount
およびclusterPermission
テンプレートを適用します。