Kubernetes 入口不强制将 hsts 插入标头

问题描述 投票:0回答:3

我正在使用 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 中的注释中添加乱码似乎不会破坏任何内容。

我做错了什么?

hsts kubernetes-ingress
3个回答
1
投票

这可能取决于您是否确实在 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"

1
投票

您不能直接在 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";

以上解决方案已经过尝试和测试!

这是我提到的链接:配置片段


-1
投票

尽管我通过 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"
© www.soinside.com 2019 - 2024. All rights reserved.