我正在使用 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 的迹象。
我尝试通过配置映射实现此目的,但它也不起作用。 我使用 quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.12.0 作为 ingresscontroller,我的 kubectl 服务器版本是 v1.8.6。
ingress 部署、服务和 ingress 本身都会响应更改,但在 ingress.yaml 中的注释中添加乱码似乎不会破坏任何内容。
我做错了什么?
这可能取决于您是否确实在 ingress 本身上启用了 HTTPS。就我而言,我在 AWS ELB 上卸载 SSL,因此似乎必须强制使用 HSTS 标头。您可能想先尝试较短的
max-age
然后退出 includeSubDomains
。如果您知道自己在做什么,请使用;-) 查看此问题
您可以使用类似于下面的配置映射来强制它:
---
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"
您不能直接在 ingress-nginx yml 的注释部分添加 hsts 标头。因为,hsts header 在 ingress-nginx 注释中不可用。
您可以使用
configuration-snippet
在 ingress-nginx 注释中添加其他标头。
只需按照下面提到的添加即可,
annotations:
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_headers "Strict-Transport-Security: max-age=31536000; includeSubDomains; preload";
以上解决方案已经过尝试和测试!
这是我提到的链接:配置片段
尽管我通过 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"