У меня есть кластер kubernetes с входом nginx в службу, которую я пытаюсь настроить с доступом https с использованием cert-manager
и ACME ClusterIssuer
.
Шаги, которые я выполнил из cert-manager, меня вполне устраивают, но в настоящее время я нахожусь на стадии, когда возникает проблема с http-решателем, который cert-manager настроил в кластере как часть процесса проверки. Когда я описываю сгенерированный сервисом вызов, я вижу, что его состояние ожидает выполнения:
Reason: Waiting for http-01 challenge propagation: failed to perform self check GET request 'http://www.example.com/.well-known/acme-challenge/nDWOHEMXgy70_wxi53ijEKjUHFlzg_UJJS-sv_ahGzg': Get "http://www.example.com/.well-known/acme-challenge/nDWOHEMXgy70_wxi53ijEKjUHFlzg_UJJS-sv_ahGzg": dial tcp xx.xx.xx.xxx:80: connect: connection timed out
Когда я вызываю URL-адрес решателя с моего хост-сервера k8s:
curl -H "Host: www.example.com" http://192.168.1.11:31344/.well-known/acme-challenge/nDWOHEMXgy70_wxi53ijEKjUHFlzg_UJJS-sv_ahGzg
Я получаю 200 ок.
ПРИМЕЧАНИЕ. Адрес 192.168.1.11 - это IP-адрес узла k8s, на котором запущен модуль http-решателя. А порт 31344 - это внутренний порт службы nodeIp для модуля http-решателя.
Я пытаюсь понять, почему время ожидания само по себе истекает, и я не получаю обратно 200 очков.
Я протестировал URL-адрес http-решателя со своего мобильного телефона через 4g (вместо Wi-Fi), и таким образом я получил 200 OK, поэтому это говорит мне, что http-решатель доступен извне через брандмауэр и через nginx в службу и под Правильно? Итак, если это так, то по какой другой причине Let's Encrypt не может получить токен с того же URL-адреса?
--- ТЕКУЩИЕ НАСТРОЙКИ ---
Эмитент кластера:
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
namespace: cert-manager
spec:
acme:
# The ACME server URL
server: https://acme-staging-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: [email protected]
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-staging
# Enable the HTTP-01 challenge provider
solvers:
- selector: {}
http01:
ingress:
class: nginx
Вход:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ing-myservice-web
namespace: myservice
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer: "letsencrypt-staging"
spec:
tls:
- hosts:
- www.example.com
secretName: secret-myservice-web-tls
rules:
- host: www.example.com
http:
paths:
- backend:
serviceName: svc-myservice-web
servicePort: 8080
path: /
- host: www.example.co.uk
http:
paths:
- backend:
serviceName: svc-myservice-web
servicePort: 8080
path: /
curl -I -H "Host: www.place.com" http://192.168.1.11:30421/.well-known/acme-challenge/nDWOHEMXgy70_wxi53ijEKjUHFlzg_UJJS-sv_ahGzg
. Этот вызов возвращает 200 OK. - person Going Bananas   schedule 16.10.2020nginx controller
LoadBalance
d с публичным провайдером и гдеhttp solver
может звонить во всемирную паутину и обратно (что мой провайдер не позволяет). - person Going Bananas   schedule 18.12.2020