0

我正在使用 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 部署、服务和 ingress 本身都响应更改,尽管在 ingress.yaml 中的注释中添加乱码似乎并没有破坏任何东西。

我究竟做错了什么?

4

2 回答 2

1

这可能取决于您是否实际上在入口本身上启用了 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"
于 2018-08-17T14:26:23.143 回答
-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"
于 2018-08-07T00:50:37.233 回答