Instalação do ArgoCD
Se você está usando o ArgoCD para gerenciar seus recursos do Kubernetes, pode querer instalar SUSE Security Admission Controller usando o ArgoCD. Isso é possível, mas há certas considerações. Desde a versão Admission Controller v1.17.0, a dependência do cert-manager foi removida. Há um novo reconciliador de certificados que renova automaticamente os certificados. Isso significa que o controlador Admission Controller cuida da criação e renovação dos certificados para você. Isso inclui tanto a CA raiz quanto todos os certificados de webhook.
A criação inicial da CA raiz e do certificado de webhook ocorre durante a instalação do Helm chart usando as funções disponíveis do Helm. Assim, durante a renderização do Helm chart, a instalação verifica se os certificados já foram criados e, se não, os cria.
Isso representa um problema ao usar o ArgoCD, pois ele usa o Helm apenas para renderizar os templates, com todo o ciclo de vida dos recursos gerenciado pelo ArgoCD. Sempre que o ArgoCD renderiza o Helm chart para verificar se a aplicação do cluster não se desvia da definição do chart, ele tenta criar os certificados novamente. Como resultado, ele marca os segredos que armazenam os certificados e a configuração do webhook como não sincronizados.
Para resolver esse problema, é necessário configurar o aplicativo ArgoCD para ignorar:
-
o campo
datanos segredos -
o campo
caBundlenoMutatingWebhookConfiguration -
ValidatingWebhookConfigurationrecursos.
Você faz isso adicionando o campo ignoreDifferences no aplicativo 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'
|
No exemplo, o aspecto chave é a configuração |