ArgoCD-Installation
Wenn Sie ArgoCD verwenden, um Ihre Kubernetes-Ressourcen zu verwalten, möchten Sie möglicherweise SUSE Security Admission Controller mit ArgoCD installieren. Das ist möglich, aber es gibt bestimmte Überlegungen. Seit Admission Controller v1.17.0 wurde die Abhängigkeit cert-manager entfernt. Es gibt einen neuen Zertifikatsreconciler, der die Zertifikate automatisch erneuert. Das bedeutet, dass der Admission Controller-Controller sich um die Erstellung und Erneuerung der Zertifikate für Sie kümmert. Dies umfasst sowohl die Root-CA als auch alle Webhook-Zertifikate.
Die anfängliche Erstellung der Root-CA und des Webhook-Zertifikats erfolgt während der Helm-Chart-Installation unter Verwendung der verfügbaren Helm-Funktionen. Während des Renderns des Helm-Charts überprüft die Installation, ob die Zertifikate bereits erstellt wurden, und wenn nicht, erstellt sie diese.
Dies stellt ein Problem dar, wenn Sie ArgoCD verwenden, da es Helm ausschließlich zum Rendern der Vorlagen nutzt, während das gesamte Ressourcenlebenszyklusmanagement von ArgoCD übernommen wird. Immer wenn ArgoCD das Helm-Chart rendert, um sicherzustellen, dass die Clusteranwendung nicht von der Chart-Definition abweicht, versucht es erneut, Zertifikate zu erstellen. Infolgedessen markiert es die Geheimnisse, die die Zertifikate und die Webhook-Konfiguration speichern, als unsynchronisiert.
Um dieses Problem zu lösen, ist es notwendig, die ArgoCD-Anwendung so zu konfigurieren, dass sie ignoriert:
-
das
data-Feld in Geheimnissen -
das
caBundle-Feld in derMutatingWebhookConfiguration -
ValidatingWebhookConfigurationRessourcen.
Sie tun dies, indem Sie das ignoreDifferences Feld in der ArgoCD-Anwendung hinzufügen:
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'
|
Im Beispiel ist der Schlüsselbereich die |