【发布时间】:2020-11-14 03:20:19
【问题描述】:
场景
我正在运行 NGINX 和 Kubernetes。我需要配置 NGINX,以便它将 Host 标头 Host: minio:9000 设置或覆盖到 Pod,以便 Pod 始终为请求提供服务,认为它作为 minio:9000 托管,无论请求来自何处。我相信推荐的方法是使用 NGINX 并修改该 Pod 的入口注释(也许我错了)。
我目前的设置方式
我通过本指南 https://kubernetes.github.io/ingress-nginx/deploy/#using-helm 代替我的 nginx 控制器使用 helm
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install my-release ingress-nginx/ingress-nginx
我这样声明我的入口。指南建议我在入口 YAML 上使用 nginx 注释。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: {{ template "fullname" . }}
labels:
chart: {{ template "chartVersion" . }}
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_input_headers 'Host: minio:9000';
spec:
rules:
- host: {{ .Values.ingress.host }}
http:
paths:
- path: /
backend:
serviceName: {{ template "fullname" . }}
servicePort: {{ .Values.deployment.servicePort }}
许多指南都说这会奏效。我试过了
nginx.ingress.kubernetes.io/upstream-vhost: minio:9000
我也试过
nginx.ingress.kubernetes.io/configuration-snippet: |
access_by_lua_block {
ngx.var.best_http_host = 'minio:9000';
}
这些方法似乎都不会从集群内部更改主机标头。如果我这样做了
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header Host 'minio:9000';
我收到一个 400 响应,说太多 Host 标头(这似乎是由运行 Go 的 Pod 引起的)。但至少我知道注释正在被 nginx 拾取。
问题
- 如何在 kubernetes 中配置 NGINX,以便它从入口内部更改 Host 标头?
- 也许我安装 NGINX 的方式有误?如果通过 helm 安装,从 NGINX 修改 conf 文件似乎并不容易。手动安装 NGINX 而不是通过 k8s 或 helm 安装会更好吗?
【问题讨论】:
-
Ug 原来 nginx.ingress.kubernetes.io/rewrite-target: /$1 nginx.ingress.kubernetes.io/ssl-redirect: "false" 搞砸了我的路径,所以它只是随时调用根目录。
-
您好,在您解决了您的问题后,请提供它作为答案,以便更好地了解。
标签: nginx kubernetes