【发布时间】:2020-03-17 15:36:59
【问题描述】:
问题
我想在不同路径下的单个域名上托管多个服务。问题是我无法使用nginx-ingress 进行请求路径重写。
我的尝试
我已经使用these instructions 安装了 nginx-ingress:
helm install stable/nginx-ingress --name nginx-ingress --set controller.publishService.enabled=true
CHART APP VERSION
nginx-ingress-0.3.7 1.5.7
该示例非常适合基于主机名的后端:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-kubernetes-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: first.testdomain.com
http:
paths:
- backend:
serviceName: hello-kubernetes-first
servicePort: 80
但是,我无法让路径重写工作。此版本将请求重定向到 hello-kubernetes-first 服务,但不执行路径重写,因此我从该服务收到 404 错误,因为它正在该服务中查找 /foo 目录(该目录不存在)。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-kubernetes-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: first.testdomain.com
http:
paths:
- backend:
serviceName: hello-kubernetes-first
servicePort: 80
path: /foo
我也尝试过this example 用于路径/重写:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: hello-kubernetes-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- host: first.testdomain.com
http:
paths:
- backend:
serviceName: hello-kubernetes-first
servicePort: 80
path: /foo(/|$)(.*)
但是这些请求甚至没有被定向到hello-kubernetes-first 服务。
看来我的重写配置没有进入/etc/nginx/nginx.conf 文件。当我运行以下命令时,我没有得到任何结果:
kubectl exec nginx-ingress-nginx-ingress-XXXXXXXXX-XXXXX cat /etc/nginx/nginx.conf | grep rewrite
如何让路径重写工作?
其他信息:
- kubectl/kubernetes 版本:
v1.14.8 - 在 Azure Kubernetes 服务 (AKS) 上托管
【问题讨论】:
-
请附上你的入口控制器的 YAML。您使用
kubernetes.io/ingress.class: nginx,但不清楚如何运行入口控制器。它应该有 - '--ingress-class=nginx' 作为命令字段的参数 -
@KonstantinVustin - 我正在使用 helm 安装前端。看起来它将类指定为
nginx:github.com/helm/charts/blob/master/stable/nginx-ingress/…
标签: nginx kubernetes url-rewriting kubernetes-ingress nginx-ingress