设置:DigitalOcean K8S 集群,带有 2 个节点和 1 个 Ingress-NGINX LoadBalancer(无特殊配置)
我想知道为什么证书请求会失败,并在挑战的日志中发现,自检 GET 请求超时了:
Waiting for http-01 challenge propagation: failed to perform self check GET request 'http...'
... dial tcp PUBLIC_LOADBALANCE_IP:80 connect: connection timed out
仔细观察后发现,当我尝试发出 curl 请求时,问题似乎从正在运行的 Pod 内部到我的 LoadBalancer 公共 IP,仅限 LoadBalancer 当前所在节点上运行的 Pod不指向可以成功发出请求。来自其他节点上运行的 pod 的所有其他请求都会超时。
有什么建议吗?
编辑:
进一步挖掘后,我发现在 ingress-nginx 服务中设置“externalTrafficPolicy”
externalTrafficPolicy: Local
到
externalTrafficPolicy: Cluster
似乎解决了这个问题。现在来自所有 pod 的请求(无论它们在哪个节点上运行)都可以成功发出请求。这引出了我的另一个问题:
我在设置时是否遗漏了某些内容?我想是的,否则我不明白为什么文档或任何教程都没有提示这个潜在问题。
答案1
您在设置过程中没有遗漏任何内容。
有一个问题报告此行为,它看起来与您描述的非常相似。不幸的是,这个问题仍然悬而未决,因此目前还没有解决方案。
唯一的可能性是使用你的解决方法externalTrafficPolicy
将从更改Local
为Cluster
。