Kubernetes https入口400响应
我有一个裸机kubernetes集群(1.13),正在运行nginx ingress controller(通过helm部署到默认名称空间v0.22.0) 我在另一个名称空间中有一个入口,试图使用nginx控制器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
#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生成的。你应该检查你的应用程序日志。