修改Ingress规则Host后无法连接Ingress Nginx准入Webhook
Argo CD Ingress修改后报错的解决方法
问题概述
修改Argo CD Ingress的host字段后,出现两个关键错误:
- 操作Ingress时的Webhook调用错误:
Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": failed to call webhook: Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s": EOF
- Nginx Pod日志中的证书缺失错误:
local SSL certificate argocd/argocd-secret was not found
用户当前Ingress配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: argocd-server-http-ingress namespace: argocd annotations: cert-manager.io/cluster-issuer: letsencrypt-issuer kubernetes.io/ingress.class: nginx kubernetes.io/tls-acme: 'true' nginx.ingress.kubernetes.io/ssl-passthrough: "true" nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" spec: rules: - host: argocd.example.com http: paths: - path: / pathType: Prefix backend: service: name: argocd-server port: name: http tls: - hosts: - argocd.example.com secretName: argocd-secret
环境中Nginx Ingress Service状态:
~ kubectl get svc -n ingress-nginx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller LoadBalancer 10.0.74.44 172.19.0.8 80:31645/TCP,443:32194/TCP 4d8h ingress-nginx-controller-admission ClusterIP 10.0.54.183 <none> 443/TCP 4d8h
问题原因
- Webhook EOF错误:Ingress Nginx的Admission Webhook Pod运行异常,或网络通信受阻;修改Host后证书生成流程异常也可能触发该问题。
- 证书缺失错误:
argocd-secret是Argo CD默认存储加密密钥、管理员密码的Secret,并非用于存储Ingress TLS证书。修改Host后,cert-manager尝试往该Secret写入新证书,与原有内容冲突,导致证书无法正常加载。
解决步骤
1. 修复Admission Webhook问题
- 检查Ingress Nginx命名空间下的Admission Pod状态:
kubectl get pods -n ingress-nginx
- 若Pod处于异常状态(如CrashLoopBackOff),直接删除Pod触发重建:
kubectl delete pod -n ingress-nginx <admission-pod-name>
- 紧急情况下可临时禁用Webhook验证(后续需恢复):
kubectl delete validatingwebhookconfigurations ingress-nginx-admission
2. 修正证书存储配置
- 更换Ingress的证书Secret名称:避免使用Argo CD默认的
argocd-secret,修改Ingress的tls.secretName为新名称,例如argocd-ingress-tls,修改后的配置片段:
tls: - hosts: - argocd.example.com secretName: argocd-ingress-tls
- 删除旧的关联证书资源(若存在):
kubectl delete certificate argocd-secret -n argocd
- 重新应用Ingress配置,触发cert-manager生成新证书:
kubectl apply -f <你的Ingress配置文件路径>
- 检查证书签发状态,确认
READY状态为True:
kubectl get certificates -n argocd
3. 重置Nginx配置与缓存
- 重启Nginx Ingress Controller Pod,确保配置重新加载:
kubectl delete pods -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
- 验证Argo CD默认的
argocd-secret未被篡改:
kubectl describe secret argocd-secret -n argocd
内容的提问来源于stack exchange,提问作者Kevvv
相关产品推荐
相关产品推荐

