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アプリケーションの設定方法と完全な例を提供するための文脈を提供します。 |