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 リソースを作成するには以下を実行します。

  1. コンソールから 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
  2. 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 アノテーションが自動的に設定されます。

  3. Argo CD がオブジェクトを追跡するために使用するラベルとアノテーションがあります。複製されたポリシーが Argo CD にまったく表示されないようにするには、Red Hat Advanced Cluster Management ポリシー定義で spec.copyPolicyMetadatafalse に設定して、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 からポリシージェネレーターへのアクセス権を付与します。以下の手順を実行します。

  1. 次のコマンドを使用して、OpenShift GitOps argocd オブジェクトを編集します。

    oc -n openshift-gitops edit argocd openshift-gitops
  2. ポリシージェネレーターを新しいバージョンに更新するには、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 }}'
  3. ポリシーを生成する前に Kustomize ディレクトリー内で Helm チャート処理を有効にする場合は、spec.repo.env フィールドで POLICY_GEN_ENABLE_HELM 環境変数を "true" に設定します。

    env:
    - name: POLICY_GEN_ENABLE_HELM
      value: "true"
  4. ポリシーと配置を作成、読み取り、更新、削除するには、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 として追加する必要があります。

重要: インターネットから悪意のあるものをダウンロードしていないことを確認するには、ポリシーを適用する前にすべてのポリシーを確認してください。

リソースの種類のヘルスチェックを定義するには、次の手順を実行します。

  1. 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
  2. CertificatePolicyConfigurationPolicyOperatorPolicy、および 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
  3. argocd-policy-healthchecks.yaml ポリシーを適用するには、次のコマンドを実行します。

    oc apply -f ./argocd-policy-healthchecks.yaml
  4. ArgoCD リソースの Summary タブを表示して、ヘルスチェックが期待どおりに機能していることを確認します。Argo CD コンソールから健全性の詳細を表示します。

1.5.5. 関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.