Installation d’ArgoCD
Si vous utilisez ArgoCD pour gérer vos ressources Kubernetes, vous souhaiterez peut-être installer SUSE Security Admission Controller en utilisant ArgoCD. C’est possible, mais il y a certaines considérations. Depuis la version Admission Controller v1.17.0, la dépendance cert-manager a été supprimée. Il y a un nouveau réconciliateur de certificats qui renouvelle automatiquement les certificats. Cela signifie que le contrôleur Admission Controller s’occupe de créer et de renouveler les certificats pour vous. Cela inclut à la fois le CA racine et tous les certificats de webhook.
La création initiale du CA racine et du certificat de webhook se fait lors de l’installation du chart Helm en utilisant les fonctions Helm disponibles. Ainsi, lors du rendu du chart Helm, l’installation vérifie si les certificats sont déjà créés, et si ce n’est pas le cas, elle les crée.
Cela pose un problème lors de l’utilisation d’ArgoCD, car il utilise Helm uniquement pour rendre les modèles, avec toute la gestion du cycle de vie des ressources par ArgoCD. Chaque fois qu’ArgoCD rend le chart Helm pour vérifier que l’application du cluster ne s’écarte pas de la définition du chart, il tente à nouveau de créer le certificat. En conséquence, il marque les secrets qui stockent les certificats et la configuration du webhook comme non synchronisés.
Pour résoudre ce problème, il est nécessaire de configurer l’application ArgoCD pour ignorer :
-
le champ
datadans les secrets -
le champ
caBundledans leMutatingWebhookConfiguration -
ValidatingWebhookConfigurationles ressources.
Vous faites cela en ajoutant le champ ignoreDifferences dans l’application ArgoCD :
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'
|
Dans l’exemple, l’aspect clé est la configuration |