Kubernetes ingress没有强制将hsts插入标题

时间:2018-04-10 19:21:54

标签: hsts kubernetes-ingress

我正在使用kubectl在AWS上的Kops控制集群上运行Kubernetes。我想将Strict-Transport-Security标头插入从我们网站提供的页面中。我的入口当前强制所有流量都是HTTPS,但忽略了我在

中的注释

ingress.yaml:

nginx.ingress.kubernetes.io/hsts: "true"

当我运行kubectl get ingress <ingressname> -o yaml时,我可以看到{"annotations":{"nginx.ingress.kubernetes.io/hsts":"true",但据我所知,标题中没有HSTS的迹象。

我试图从configmap中实现这一点,但它也不起作用。 我使用quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.12.0作为ingresscontroller,我的kubectl服务器版本是v1.8.6。

入口部署,服务和入口本身都会响应变化,尽管在ingress.yaml中的注释中加入了乱码并不会破坏任何内容。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

尽管我通过configmap应用更改,但我似乎也遇到了同样的问题。

Kubernetes:1.8.6

图片:gcr.io/google_containers/nginx-ingress-controller:0.9.0-beta.15

这是我设置的配置:

 kind: ConfigMap
 apiVersion: v1
 metadata:
   name: nginx-ingress
   namespace: kube-ingress
   labels:
     k8s-addon: nginx-ingress.addons.k8s.io
 data:
   allow-backend-server-header: "true"
   hsts: "true"
   hsts-include-subdomains: "true"
   hsts-max-age: "31536000"
   hsts-preload: "true"
   use-proxy-protocol: "true"

答案 1 :(得分:0)

这可能取决于您是否实际上在入口本身上启用了HTTPS。就我而言,我要在AWS ELB上卸载SSL,因此似乎不得不强制使用HSTS标头。您可能需要先尝试缩短max-age并退出includeSubDomains。如果您知道自己在做什么,请使用;-) Check out this issue

您可以使用类似于以下内容的配置映射来强制使用它:

---
apiVersion: v1
data:
  Strict-Transport-Security: "max-age=15768000 ; includeSubDomains"
kind: ConfigMap
metadata:
  name: custom-headers-external-sts
  namespace: ingress-nginx
---
kind: ConfigMap
apiVersion: v1
metadata:
  name: nginx-configuration
  namespace: ingress-nginx
  labels:
    app: ingress-nginx
data:
  add-headers: "ingress-nginx/custom-headers-external-sts"