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 data nos segredos

  • o campo caBundle no MutatingWebhookConfiguration

  • ValidatingWebhookConfiguration recursos.

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 ignoreDifferences para o aplicativo do controlador Admission Controller. O restante do conteúdo fornece contexto sobre como configurar o aplicativo ArgoCD e fornece um exemplo completo.