Ingress规则无法连接到ingress nginx控制器准入webhook

hfwmuf9z  于 12个月前  发布在  Nginx
关注(0)|答案(1)|浏览(225)

在为我的argo cd安装创建入口规则时,我得到以下错误

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

字符串
我的入口规则:

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资源正在运行。我有nginx设置在我的vnet中使用私有IP(Azure中的私有链接服务)。

~  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


我不明白的部分是,我最初重新创建了集群,它很好。然后我更改了我的ingress规则的host部分,这就是它崩溃的原因。例如,将argocd-prod.example.com更改为示例ingress规则中显示的内容,argocd.example.com .我还在学习kubernetes,所以我不完全理解我所做的事情的含义,但似乎在某个地方可能有某种缓存数据?因为我在nginx pod日志中看到了这个错误

local SSL certificate argocd/argocd-secret was not found

chy5wohz

chy5wohz1#

当在Kubernetes中遇到Ingress规则的问题时,特别是遇到像failed calling webhook "validate.nginx.ingress.kubernetes.io"这样的webhook故障时,您可以采取几个步骤来诊断和解决问题:
验证ingress-nginx-controller-admission服务是否可操作。使用kubectl get svc

kubectl get endpoints.

确认argocd命名空间kubectl get secret argocd-secret -n argocdargocd-secret TLS secret的存在性和正确性。


kubectl get nodes
kubectl create namespace argocd
kubectl config set-context --current --namespace=argocd

字符串


kubectl get pods


对于未使用负载均衡服务的场景,您可以建立类似于以下示例的Ingress规则。包含ssl-passthrough注解至关重要,因为Argo CD在单个端口(特别是端口443)上同时使用各种协议,包括gRPC和HTTPS。此注解可确保正确处理这些混合协议。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: argocd-server-ingress
  namespace: argocd
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
  rules:
  - host: argocd.example.com
    http:
      paths:
      - backend:
          serviceName: argocd-server
          servicePort: https


确保Ingress规则中的annotations配置正确。如果使用SSL passthrough(nginx.ingress.kubernetes.io/ssl-passthrough: "true"),nginx ingress控制器需要--enable-ssl-passthrough标志。

  • 如果您更改了主机名(例如,从argocd-prod.example.com更改为argocd.example.com),请确保DNS正确更新为指向您的入口控制器的外部IP。最后,如果所有这些都没有帮助,您可以尝试重新启动nginx入口控制器kubectl rollout restart deployment <deployment-name> -n ingress-nginx

参考文件:ArgoCDGitHub ArgoCDOfficial ArgoCD doc for configuring ingress

相关问题