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

How to remove the server header from Kubernetes deployed applications

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

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

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

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

在您的每个 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: /
    nginx.ingress.kubernetes.io/configuration-snippet: |
          more_clear_headers "Server";    
spec:
  tls:
  - hosts:

关键部分是:

nginx.ingress.kubernetes.io/configuration-snippet: |
          more_clear_headers "Server";

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

瞧,服务器 header 不见了。

您可以在设置 ConfigMap 中为整个 nginx 入口控制器执行此操作:

服务器令牌:“假”