Kubernetes https入口400响应

时间:2019-05-16 12:53:11

标签: https kubernetes nginx-ingress

我有一个裸机kubernetes集群(1.13),并且正在运行nginx入口控制器(通过头盔部署到默认名称空间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,没有任何内容。如果我打开custom-http-headers,则会从nginx收到404。我的服务没有受到影响。根据{{​​3}}的说法,该网址已正确重写。

我也直接从吊舱内部点击了服务,效果也很好。

#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

出什么问题了?

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

1 个答案:

答案 0 :(得分:2)

如果请求标头无效(如其中的特殊字符),Nginx将以400静默失败。您可以使用tcpdump进行调试。