我正在使用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中的注释中加入了乱码并不会破坏任何内容。
我做错了什么?
答案 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"