Kubernetes nginx入口控制器不转发带有下划线的标头
Posted
技术标签:
【中文标题】Kubernetes nginx入口控制器不转发带有下划线的标头【英文标题】:Kubernetes nginx ingress controller not forwarding headers with underscores 【发布时间】:2020-11-06 23:58:23 【问题描述】:我的 kubernetes nginx 入口控制器不转发带有下划线的标头时遇到问题。
我使用以下条目创建了一个名为 my-release-ingress-nginx-controller
的 configMap。
enable-underscores-in-headers: "true"
在此之后,我通过描述 nginx 入口控制器 pod 使用此命令 kubectl exec -it my-release-ingress-nginx-controller-d7648bcc8-6lfxv cat nginx.conf
检查了 nginx.conf 文件。我在那里找到了这个underscores_in_headers on;
。即使在此切换之后,nginx 仍然不会转发带有下划线的标头。
配置映射:
apiVersion: v1
kind: ConfigMap
metadata:
name: my-release-ingress-nginx-controller
namespace: default
data:
enable-underscores-in-headers: "true"
ignore-invalid-headers: "false"
ConfigMap 描述:
Name: my-release-ingress-nginx-controller
Namespace: default
Labels: <none>
Annotations:
Data
====
enable-underscores-in-headers:
----
true
ignore-invalid-headers:
----
false
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CREATE 27s nginx-ingress-controller ConfigMap default/my-release-ingress-nginx-controller
部署描述
Args:
/nginx-ingress-controller
--publish-service=default/my-release-ingress-nginx-controller
--election-id=ingress-controller-leader
--ingress-class=nginx
--configmap=default/my-release-ingress-nginx-controller
入口描述:
Name: ingress-resource-1
Namespace: default
Address: 172.31.14.220
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
Host Path Backends
---- ---- --------
api.dev.com
/ faq-dev:10013 (172.17.0.3:10013)
Annotations: kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal UPDATE 3m10s (x2443 over 20h) nginx-ingress-controller Ingress default/ingress-resource-1
Normal UPDATE 2m10s (x2483 over 20h) nginx-ingress-controller Ingress default/ingress-resource-1
PS:我在 AWS ec2 服务器内使用 minikube 设置了一个单节点 kubernetes 集群。此外,入口被配置为部署而不是守护程序集。配置的入口是来自此存储库的 kubernetes 之一 - https://github.com/kubernetes/ingress-nginx
【问题讨论】:
【参考方案1】:请试试这个
apiVersion: v1
kind: ConfigMap
data:
enable-underscores-in-headers: "true"
ignore-invalid-headers: "false"
metadata:
name: nginx-configuration
namespace: default
并在 nginx-ingress-controller-deployment 中包含相同的内容
containers:
- name: nginx-ingress-controller
image: <YOUR NGINX INGRSS IMAGE_NAME>
args:
- /nginx-ingress-controller
- --configmap=$(POD_NAMESPACE)/nginx-configuration
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
【讨论】:
您知道您可以编辑原始答案以改进或扩展它 @DashrathMundkar 我收到此错误 -cannot parse 'enable-underscores-in-headers' as bool: strconv.ParseBool: parsing "on": invalid syntax
@PremkumarTejnani 尝试使用“true”
@DashrathMundkar 我将 "on" 更改为 "true" ,并创建了 configMap,但问题仍然存在
@PremkumarTejnani,您是否将exec
放入入口以确保正确添加configmap
?【参考方案2】:
apiVersion: v1
kind: ConfigMap
data:
enable-underscores-in-headers: "true"
metadata:
name: nginx-configuration
namespace: default
enabling underscore in headers
将此添加到配置后,需要滚动重启才能获取配置。
【讨论】:
以上是关于Kubernetes nginx入口控制器不转发带有下划线的标头的主要内容,如果未能解决你的问题,请参考以下文章
使用 nginx 入口控制器的 minikube Kubernetes 集群上没有入口地址
Kubernetes NGINX 入口控制器未获取 TLS 证书