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 について のドキュメントを参照してください。