Kubernetes https入口400响应

Kubernetes https入口400响应,https,kubernetes,nginx-ingress,Https,Kubernetes,Nginx Ingress,我有一个裸机kubernetes集群(1.13),正在运行nginx ingress controller(通过helm部署到默认名称空间v0.22.0) 我在另一个名称空间中有一个入口,试图使用nginx控制器 #ingress.yaml kind: Ingress apiVersion: extensions/v1beta1 metadata: name: myapp annotations: kubernetes.io/backend-protocol: https nginx

我有一个裸机kubernetes集群(1.13),正在运行nginx ingress controller(通过helm部署到默认名称空间v0.22.0)

我在另一个名称空间中有一个入口,试图使用nginx控制器

#ingress.yaml
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: myapp
annotations:
  kubernetes.io/backend-protocol: https
  nginx.ingress.kubernetes.io/enable-rewrite-log: "true"
  nginx.ingress.kubernetes.io/rewrite-target: "/$1"
spec:
  tls:
  - hosts:
    - my-host
    secretName: tls-cert
  rules:
  - host: my-host
    paths:
    - backend:
        servicename: my-service
        servicePort: https
      path: "/api/(.*)"
nginx控制器成功地找到入口,并表示存在端点。如果我到达终点,我会得到400分,没有内容。如果我打开,那么我会从nginx得到一个404;我的发球没有被击中。根据,url正在被正确地重新写入

我还直接从吊舱内点击了服务,这也很有效

#service.yaml
kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  ports:
  - name: https
    protocol: TCP
    port: 5000
    targetPort: https
  selector:
    app: my-app
  clusterIP: <redacted>
  type: ClusterIP
  sessionAffinity: None
#service.yaml
种类:服务
版本:v1
元数据:
姓名:我的服务
规格:
端口:
-名称:https
协议:TCP
港口:5000
目标端口:https
选择器:
应用程序:我的应用程序
集群:
类型:集群
会话相关性:无
出了什么问题


编辑:全面禁用https仍然会产生相同的错误。但是,如果我的应用程序需要HTTPS请求,而nginx正在发送HTTP请求,则请求将到达应用程序(但它无法处理它们)

如果请求头无效(如其中的特殊字符),nginx将以400作为默认值失败。您可以使用tcpdump调试它。

您的服务是否使用有效的SSL证书?Nginx将拒绝连接到具有无效证书的服务。有效是什么意思?证书是自签名的。事实上,我不确定这些天是否需要有效的证书(在旧版本中需要)。你能检查一下Nginx日志中的400个错误吗?我在日志中看到了400个错误,但不是从哪里来的(即使在-v=5上),如果Nginx没有给出400的原因,那么400不是由Nginx生成的。你应该检查你的应用程序日志。