有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反映出来?我该怎么做?
答案 0 :(得分:3)
我认为它必须是不必是。只是之前没有。我不知道为什么This和this都可以。False
中的大写字母F。
❯ 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 在配置文件中进行任何更改之后
所以您有两个选择
由于使用deployment
部署了Nginx Pod,因此您只能删除Pod,而kubernetes会使用更新的配置重新创建Pod。
来自3个文档here
通常,ConfigMap或Secrets作为配置文件注入到容器中,或者有其他外部依赖项更改需要滚动Pod。根据应用程序的不同,可能需要重启后再进行后续头盔升级,但是如果部署规范本身没有变化,则应用程序将继续使用旧配置运行,从而导致部署不一致。
sha256sum
函数可用于确保在另一个文件更改的情况下更新部署的注释部分:
kind: Deployment
spec:
template:
metadata:
annotations:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
[...]