如何从 Kubernetes 部署的应用程序中删除服务器标头

Ian*_*son 5 kubernetes kubernetes-ingress nginx-ingress

我以先问后答的方式问这个问题。

如果您为 Helm 图表或常规“kubectl apply”部署创建 Ingress 对象,则在部署到集群后,您可能会在响应中看到服务器标头。这被视为安全问题。它不应该存在。

在此处输入图片说明

您可能无法控制集群或入口控制器。如何删除有问题的标题?

Ian*_*son 12

您可能无法控制集群或入口控制器,但您可以控制入口清单。

在您的每个 Ingress 清单文件中(可能在您的 Helm 图表中),您可以更新您的 Ingress 定义。

apiVersion: networking.k8s.io/v1beta1 # for versions before 1.14 use extensions/v1beta1
kind: Ingress
metadata:
  name: {{ .Release.Name}}-{{ .Values.baseName }}-ingress-spa
  namespace: {{ .Values.global.config.namespace }}
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/configuration-snippet: |
          more_clear_headers "Server";    
spec:
  tls:
  - hosts:
Run Code Online (Sandbox Code Playgroud)

关键部分是:

nginx.ingress.kubernetes.io/configuration-snippet: |
          more_clear_headers "Server";
Run Code Online (Sandbox Code Playgroud)

这会指示 nginx 清除服务器标头。重新部署应用程序后,您现在应该看到:

在此处输入图片说明

瞧,服务器标头不见了。