ArgoCDのインストール

Kubernetesリソースを管理するためにArgoCDを使用している場合、ArgoCDを使用してSUSE Security Admission Controllerをインストールしたいかもしれません。これは可能ですが、いくつかの考慮事項があります。Admission Controller v1.17.0以降、cert-managerの依存関係は削除されました。新しい証明書リコンシリエーターがあり、証明書を自動的に更新します。これは、Admission Controllerコントローラーが証明書の作成と更新を行うことを意味します。これには、ルートCAとすべてのWebhook証明書が含まれます。

初期のルートCAとWebhook証明書の作成は、利用可能なHelm関数を使用してHelmチャートのインストール中に行われます。したがって、Helmチャートのレンダリング中に、インストールは証明書がすでに作成されているかどうかを確認し、作成されていない場合はそれを作成します。

これは、ArgoCDがテンプレートをレンダリングするためにHelmのみを使用し、すべてのリソースライフサイクル管理をArgoCDが行うため、問題を引き起こします。ArgoCDがHelmチャートをレンダリングして、クラスターアプリケーションがチャート定義から逸脱していないことを確認するたびに、再度証明書の作成を試みます。その結果、証明書とWebhook設定を保存するシークレットが非同期としてマークされます。

この問題を解決するには、ArgoCDアプリケーションを次のように構成する必要があります:

  • シークレット内の`data`フィールド

  • `caBundle`内の`MutatingWebhookConfiguration`フィールド

  • `ValidatingWebhookConfiguration`リソース。

これを行うには、ArgoCDアプリケーションに`ignoreDifferences`フィールドを追加します:

kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: application-collection-repo
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: helm
  name: application-collection
  url: dp.apps.rancher.io/charts
  enableOCI: "true"
  username: <your-username>
  password: <your-token>
EOF

kubectl create namespace suse-sec-adm-controller

kubectl create secret docker-registry application-collection \
  --namespace suse-sec-adm-controller \
  --docker-server=dp.apps.rancher.io \
  --docker-username=<your-username> \
  --docker-password=<your-token>
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: suse-sec-adm-controller
  namespace: argocd
spec:
  project: default
  source:
    repoURL: dp.apps.rancher.io/charts
    chart: suse-security-admission-controller
    targetRevision: 1.1.0
    helm:
      valuesObject:
        global:
          imagePullSecrets:
            - application-collection
  destination:
    server: https://kubernetes.default.svc
    namespace: suse-sec-adm-controller
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:     # Sync options which modifies sync behavior
      # When syncing changes, respect fields ignored by the ignoreDifferences configuration
      - RespectIgnoreDifferences=true
  # ignoreDifferences is the important configuration to avoid ArgoCD marking
  # the secrets and # webhook configurations as unsynchronized
  ignoreDifferences:
  - group: ""
    kind: "Secret"
    name: kubewarden-ca
    namespace: suse-sec-adm-controller
    jsonPointers:
      - /data
  - group: ""
    kind: "Secret"
    name: kubewarden-webhook-server-cert
    namespace: suse-sec-adm-controller
    jsonPointers:
      - /data
  - group: ""
    kind: "Secret"
    name: kubewarden-audit-scanner-client-cert
    namespace: suse-sec-adm-controller
    jsonPointers:
      - /data
  - group: "admissionregistration.k8s.io"
    kind: "MutatingWebhookConfiguration"
    jqPathExpressions:
      - '.webhooks[]?.clientConfig.caBundle'
  - group: "admissionregistration.k8s.io"
    kind: "ValidatingWebhookConfiguration"
    jqPathExpressions:
      - '.webhooks[]?.clientConfig.caBundle'

この例では、重要な要素は`ignoreDifferences`設定であり、Admission Controllerコントローラーアプリケーションです。残りの内容は、ArgoCDアプリケーションの設定方法と完全な例を提供するための文脈を提供します。