cert-manager: для этой задачи нельзя использовать настроенные решатели задач

Я выполнил эту инструкцию, чтобы настроить диспетчер сертификатов в моем кластере EKS https://cert-manager.io/docs/tutorials/acme/ingress/.

вот мой вход

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test
  annotations:
    kubernetes.io/ingress.class: "nginx"
    cert-manager.io/issuer: "letsencrypt-staging"
spec:
  tls:
  - hosts:
      - '*.test.com'
    secretName: test-tls
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: test-service
                port:
                  number: 80

Вот эмитент. Просто скопировал конфиг из инструкции

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: [email protected]
    privateKeySecretRef:
      name: letsencrypt-staging
    solvers:
      - http01:
          ingress:
            class: nginx

После развертывания я обнаружил, что состояние готовности сертификата неверно.

kubectl get certificate
NAME          READY   SECRET        AGE
test-tls   False   test-tls   2m45s

Затем я выполнил это, чтобы устранить неполадки https://cert-manager.io/docs/faq/troubleshooting/

Я запустил kubectl describe certificaterequest <request name>, обнаружил ошибку Waiting on certificate issuance from order test-tls-xxx: "pending"

затем запустил kubectl describe order test-tls-xxx, обнаружил ошибку Warning Solver 20m cert-manager Failed to determine a valid solver configuration for the set of domains on the Order: no configured challenge solvers can be used for this challenge.

Есть идеи, почему он не может определить действительный решатель? как проверить, работает ли решатель?


person user3908406    schedule 02.07.2021    source источник


Ответы (1)


Это не работает, поскольку вы используете промежуточный URL-адрес в cluster issuer для проверки изображения.

Пожалуйста, попробуйте с производственным URL.

вот простой и правильный пример Clusterissuer и входящего YAML (обратите внимание, что вы пытались использовать промежуточный API https://acme-staging-v02.api.letsencrypt.org/directory, если возможно, используйте адрес производственного сервера, чтобы он правильно работал со всеми браузерами)

Пример:

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: cluster-issuer-name
  namespace: development
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: [email protected]
    privateKeySecretRef:
      name: secret-name
    solvers:
    - http01:
        ingress:
          class: nginx-class-name
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx-class-name
    cert-manager.io/cluster-issuer: cluster-issuer-name
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: example-ingress
spec:
  rules:
  - host: sub.example.com
    http:
      paths:
      - path: /api
        backend:
          serviceName: service-name
          servicePort: 80
  tls:
  - hosts:
    - sub.example.com
    secretName: secret-name

Примечание. При повторной попытке попробуйте сначала удалить старые объекты, такие как ingress, Clusterissuer.

person Harsh Manvar    schedule 02.07.2021
comment
может возникнуть проблема из-за того, что вы используете подстановочный знак в имени хоста, поэтому сначала оформите заказ без подстановочного символа, поскольку шифрование не поддерживает сертификаты с подстановочными знаками. - person Harsh Manvar; 02.07.2021
comment
Благодарность! У меня сотни поддоменов, если я не могу использовать подстановочные знаки, можно ли как-нибудь обойтись? - person user3908406; 02.07.2021
comment
Кстати, просто попробовал ваше предложение. Изменил стадию на prod, а эмитент на clusterissuer, также удалил все и выполнил новое повторное развертывание, по-прежнему получая ту же ошибку Failed to determine a valid solver configuration for the set of domains on the Order: no configured challenge solvers can be used for this challenge. Единственное, что я не пробовал, это менять подстановочные знаки в хостах, так как я не знаю, как обрабатывать сотни доменов. - person user3908406; 02.07.2021
comment
какой решатель вы используете? http или dns? - person Harsh Manvar; 02.07.2021
comment
http `` `решатели: - http01: ingress: class: nginx` ` - person user3908406; 02.07.2021