Nginx入口控制器仍重定向到SSL

时间:2018-12-21 10:26:29

标签: kubernetes

我遇到了这个问题。我的应用程序仅需要使用WebSocket在SSL下接收连接。应该强制HTTP请求不被重定向。我的入口配置是

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 name: in-camonline
 namespace: cl5
 annotations: 
  kubernetes.io/ingress.class: "nginx"
  nginx.org/websocket-services: "svc-ws-api"
  nginx.ingress.kubernetes.io/ssl-redirect: "false"
  nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
  ingress.kubernetes.io/affinity: "ClientIP"
spec:
 tls:
  - hosts:
    - foo.bar.com
    secretName: cl5-secret
 rules:
 - host:  foo.bar.com
   http:
    paths:
     - path: /socket.io
       backend:
        serviceName: svc-ws-api
        servicePort: 8000
     - path: /
       backend:
        serviceName: svc-http-service
        servicePort: 80

我还禁用了ssl-redirect,将全局项添加到ConfigMap中

kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
data:
        #use-proxy-protocol: "false"
 ssl-redirect: "false"

现在,如果我确实使用curl请求,请求将不会被重定向。如果我尝试运行前端应用程序,则WSS之后的每个请求都将被强制重定向为使用HTTPS

Request URL: http://foo.bar.com/2/symbols
Request Method: OPTIONS
Status Code: 307 Internal Redirect
Referrer Policy: no-referrer-when-downgrade

关于如何实现这一目标的任何建议?

2 个答案:

答案 0 :(得分:1)

最后,我整理了一下。如果有人正在阅读此书,那么您并不孤单!

开个玩笑,driver.takeScreenshot()在第一个HTTPS调用之后设置了头文件nginx-controller(在我的情况下是socket.io轮询)。此标头强制浏览器将TLS用于下一个请求。您可以在https://developer.mozilla.org/it/docs/Web/HTTP/Headers/Strict-Transport-Security

处了解有关此标头的更多信息

我所做的是禁用在Strict-Transport-Security的ConfigMap对象上添加条目hsts: false的选项。 您可以在这里https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#hsts找到更多 希望这可以帮助您:)

答案 1 :(得分:0)

还有另一种解决方法。

如果要禁用HSTS,只需将最大年龄设为零即可。像这样!

nginx.ingress.kubernetes.io/configuration-snippet: |  
if ($scheme = https) {   
  add_header  Strict-Transport-Security "max-age=0;";  
}

链接:https://justin-g.tistory.com/176