Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado.

Esta es documentación inédita para Admission Controller 1.34-dev.

Instalación de ArgoCD

Si estás utilizando ArgoCD para gestionar tus recursos de Kubernetes, puede que desees instalar SUSE Security Admission Controller utilizando ArgoCD. Esto es posible, pero hay ciertas consideraciones. Desde la versión Admission Controller v1.17.0, la dependencia cert-manager ha sido eliminada. Hay un nuevo reconciliador de certificados que renueva automáticamente los certificados. Esto significa que el controlador Admission Controller se encarga de crear y renovar los certificados por ti. Esto incluye tanto la CA raíz como todos los certificados de webhook.

La creación inicial de la CA raíz y del certificado de webhook se realiza durante la instalación del chart de Helm utilizando las funciones de Helm disponibles. Así que, durante el renderizado del chart de Helm, la instalación verifica si los certificados ya están creados, y si no, los crea.

Esto plantea un problema al usar ArgoCD, ya que utiliza Helm únicamente para renderizar las plantillas, con toda la gestión del ciclo de vida de los recursos a cargo de ArgoCD. Cada vez que ArgoCD renderiza el chart de Helm para comprobar que la aplicación del clúster no se desvía de la definición del chart, intenta crear los certificados de nuevo. Como resultado, marca los secretos que almacenan los certificados y la configuración del webhook como no sincronizados.

Para resolver este problema, es necesario configurar la aplicación ArgoCD para ignorar:

  • el campo data en los secretos

  • el campo caBundle en el MutatingWebhookConfiguration

  • ValidatingWebhookConfiguration recursos.

Lo haces añadiendo el campo ignoreDifferences en la aplicación de ArgoCD:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: kubewarden-crds
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://charts.kubewarden.io
    chart: kubewarden-crds
    targetRevision: 1.13.0
  destination:
    server: https://kubernetes.default.svc
    namespace: kubewarden-system
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: kubewarden-controller
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://charts.kubewarden.io
    chart: kubewarden-controller
    targetRevision: 4.1.0
  destination:
    server: https://kubernetes.default.svc
    namespace: kubewarden-system
  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: kubewarden-system
    jsonPointers:
      - /data
  - group: ""
    kind: "Secret"
    name: kubewarden-webhook-server-cert
    namespace: kubewarden-system
    jsonPointers:
      - /data
  - group: ""
    kind: "Secret"
    name: kubewarden-audit-scanner-client-cert
    namespace: kubewarden-system
    jsonPointers:
      - /data
  - group: "admissionregistration.k8s.io"
    kind: "MutatingWebhookConfiguration"
    jqPathExpressions:
      - '.webhooks[]?.clientConfig.caBundle'
  - group: "admissionregistration.k8s.io"
    kind: "ValidatingWebhookConfiguration"
    jqPathExpressions:
      - '.webhooks[]?.clientConfig.caBundle'
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: kubewarden-defaults
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://charts.kubewarden.io
    chart: kubewarden-defaults
    targetRevision: 2.8.0
  destination:
    server: https://kubernetes.default.svc
    namespace: kubewarden-system
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

En el ejemplo, el aspecto clave es la configuración del ignoreDifferences para la aplicación del controlador Admission Controller. El resto del contenido proporciona contexto sobre cómo configurar la aplicación ArgoCD y ofrecer un ejemplo completo.