You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Ingress规则Host后无法连接Ingress Nginx准入Webhook

Argo CD Ingress修改后报错的解决方法

问题概述

修改Argo CD Ingress的host字段后,出现两个关键错误:

  1. 操作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
  1. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:01:29