Helm Nginx Ingress:如何关闭服务器令牌?

时间:2020-06-19 03:35:25

标签: kubernetes kubernetes-helm

a setting可以关闭NGINX Server标头,但是我是Kubernetes和Helm的新手,所以我实际上并不知道如何设置它。

我试图像这样关闭服务器令牌:

helm upgrade --reuse-values nginx-ingress stable/nginx-ingress -ndefault --set controller.config.server-tokens='"false"'

当我读回图表值时,确实反映出以下几点:

❯ helm get values nginx-ingress -ndefault

USER-SUPPLIED VALUES:
controller:
  config:
    server-tokens: '"false"'
  publishService:
    enabled: true

在YAML中:

❯ kubectl get -n default configmap  ingress-controller-leader-nginx -oyaml
apiVersion: v1
data:
  server-tokens: "false"
kind: ConfigMap
metadata:
  ...

但是似乎不适用于内部nginx.conf

❯ kubectl exec -ndefault nginx-ingress-controller-b545558d8-829dz -- cat /etc/nginx/nginx.conf | grep tokens
        server_tokens on;

我的网络服务器仍在发送server:标头。

我是否必须重新启动服务才能使ConfigMap反映出来?我该怎么做?

2 个答案:

答案 0 :(得分:3)

我认为它必须是False中的大写字母F。不必是。只是之前没有。我不知道为什么Thisthis都可以。

❯ kubectl get configmap -ndefault nginx-ingress-controller -oyaml
apiVersion: v1
data:
  server-tokens: "False"
kind: ConfigMap
metadata:
  annotations:
    meta.helm.sh/release-name: nginx-ingress
    meta.helm.sh/release-namespace: default
  creationTimestamp: "2020-06-19T06:37:21Z"
  labels:
    app: nginx-ingress
    app.kubernetes.io/managed-by: Helm
    chart: nginx-ingress-1.37.0
    component: controller
    heritage: Helm
    release: nginx-ingress
  name: nginx-ingress-controller
  namespace: default
  resourceVersion: "7130237"
  selfLink: /api/v1/namespaces/default/configmaps/nginx-ingress-controller
  uid: 633efe3a-73cf-4c40-8e40-581937e367e2

您可以通过kubectl edit configmap编辑配置映射,然后删除控制器窗格来手动完成此操作,也可以通过helm值对其进行设置:

helm get values nginx-ingress -ndefault -oyaml > tmp/nginx-ingress-values.yaml

更改为:

controller:
  config:
    server-tokens: "False"
  publishService:
    enabled: true

并应用它:

helm upgrade nginx-ingress stable/nginx-ingress -f tmp/nginx-ingress-values.yaml -ndefault

删除控制器吊舱以保持良好状态。

复制它:

kubectl exec -ndefault nginx-ingress-controller-b545558d8-gmz64  -- cat /etc/nginx/nginx.conf | grep tokens

在Chrome开发工具中确认标题:


也许更简单地行之有效:

helm upgrade --reuse-values nginx-ingress stable/nginx-ingress -ndefault --set-string controller.config.server-tokens=false

但是我的配置现在可以正常工作了,所以我不会尝试。

答案 1 :(得分:2)

来自nginx入口控制器的docs

此Ingress控制器的目标是配置文件(nginx.conf)的汇编。此要求的主要含义是需要重新加载NGINX 在配置文件中进行任何更改之后

所以您有两个选择

  1. 由于使用deployment部署了Nginx Pod,因此您只能删除Pod,而kubernetes会使用更新的配置重新创建Pod。

  2. 来自3个文档here

通常,ConfigMap或Secrets作为配置文件注入到容器中,或者有其他外部依赖项更改需要滚动Pod。根据应用程序的不同,可能需要重启后再进行后续头盔升级,但是如果部署规范本身没有变化,则应用程序将继续使用旧配置运行,从而导致部署不一致。

sha256sum函数可用于确保在另一个文件更改的情况下更新部署的注释部分:

kind: Deployment
spec:
  template:
    metadata:
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
[...]
相关问题