Estuve intentando durante los últimos 3 días configurar cert-manager en un clúster K8S (v1.19.8) en un entorno OpenStack con 1 maestro y 2 nodos. Funcionó antes (como hace 1 mes), pero como volví a crear el clúster, no se pueden crear desafíos de pod ACME debido a este error:
Status: Presented: false Processing: true Reason: pods "cm-acme-http-solver-" is forbidden: PodSecurityPolicy: unable to admit pod: [] State: pending Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Started 8m25s cert-manager Challenge scheduled for processing Warning PresentError 3m18s (x7 over 8m23s) cert-manager Error presenting challenge: pods "cm-acme-http-solver-" is forbidden: PodSecurityPolicy: unable to admit pod: []Probé diferentes versiones de ingress-nginx, diferentes versiones de cert-manager, diferentes versiones de k8s, pero fue en vano. Me estoy volviendo loco..., por favor ayuda. Muchas gracias :)
kubectl create namespace ingress-nginx && \ helm install ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx && \ kubectl create namespace cert-manager && \ helm install cert-manager jetstack/cert-manager \ --namespace cert-manager \ --version v1.1.0 \ --set installCRDs=trueEditor
apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: letsencrypt-prod spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: email@example.com preferredChain: "ISRG Root X1" privateKeySecretRef: name: letsencrypt-prod solvers: - http01: ingress: class: nginxIngreso
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: main-ingress annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/from-to-www-redirect: "true" cert-manager.io/issuer: "letsencrypt-prod" spec: tls: - hosts: - host.com secretName: the-secret-name rules: - host: host.com http: paths: - path: / pathType: Prefix backend: service: name: api-nginx port: number: 80Después de un poco de depuración y mucha ayuda del proveedor de alojamiento, encontramos el problema y la solución.
Estábamos usando la versión más reciente (del maestro) de Magnum/OpenStack, que obtuvo una actualización que instalaba de forma predeterminada un controlador PodSecurityPolicy. Eso impidió que cert-manager creara pods ACME.
Recrear el clúster sin un controlador de políticas resolvió el problema:
openstack coe cluster create \ --cluster-template v1.kube1.20.4 \ --labels \ admission_control_list="NodeRestriction,NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,TaintNodesByCondition,Priority,DefaultTolerationSeconds,DefaultStorageClass,StorageObjectInUseProtection,PersistentVolumeClaimResize,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,RuntimeClass" \ --merge-labels ...Un año tarde, pero agregando otra solución en caso de que ayude a otros a encontrar esto. Tuve el mismo problema de que PSP bloqueaba el pod de desafío, pero realmente no quería tener que volver a crear/reconfigurar mi clúster, así que finalmente resolví el problema agregando esto a los valores del gráfico de timón.yaml: https:// github.com/cert-manager/cert-manager/blob/master/deploy/charts/cert-manager/values.yaml
global: podSecurityPolicy: enabled: true useAppArmor: falseEn mi caso, esto es parte de una implementación de Gitlab, así que lo agregué bajo la clave certmanager, de la siguiente manera:
certmanager: install: true global: podSecurityPolicy: enabled: true useAppArmor: false(etiquetas para la búsqueda: gitlab helm chart certmanager PodSecurityPolicy "no se puede admitir el pod" bloqueado)