簡體   English   中英

K8S cert-manager 創建 acme challenge pod 時出錯

[英]K8S cert-manager error creating acme challenge pods

在過去的 3 天里,我一直在嘗試在具有 1 個主節點和 2 個節點的 OpenStack 環境中的 K8S 集群(v1.19.8)上設置證書管理器。 它以前工作過(比如 1 個月前),但自從我重新創建集群后,由於此錯誤無法創建 pod ACME 挑戰:

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: []

我嘗試了不同版本的ingress-nginx、不同版本的cert-manager、不同版本的k8s,但都無濟於事。 我快瘋了...,請幫忙。 非常感謝:)

集群設置

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=true

發行人

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: nginx

入口

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: 80

經過一些調試和托管服務提供商的大力幫助,我們找到了問題和解決方案。

我們使用的是最新(來自主)版本的 Magnum/OpenStack,它有一個更新,默認安裝 PodSecurityPolicy controller。 這阻止了 cert-manager 創建 ACME pod。

在沒有策略 controller 的情況下重新創建集群解決了該問題:

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
  ...

晚了一年,但添加了另一個解決方案,以防它幫助其他人找到這個。 我遇到了同樣的挑戰吊艙被 PSP 阻止的問題,但我真的不想重新創建/重新配置我的集群,所以我最終通過將其添加到 helm 圖表值中解決了這個問題。yaml:https:// github.com/cert-manager/cert-manager/blob/master/deploy/charts/cert-manager/values.yaml

  global:
    podSecurityPolicy:
      enabled: true 
      useAppArmor: false

就我而言,這是 Gitlab 部署的一部分,因此我將其添加到 certmanager 鍵下,如下所示:

certmanager:
  install: true
  global:
    podSecurityPolicy:
      enabled: true 
      useAppArmor: false

(搜索標簽:gitlab helm chart certmanager PodSecurityPolicy "unable to admit pod" blocked)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM