问题
我想在不同路径下的单个域名上托管多个服务。问题是我无法使用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目录(不存在)。 / p>
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
如何使路径重写起作用?
其他信息:
v1.14.8
答案 0 :(得分:0)
这不是AKS的问题,因为您使用的组件正在Kubernetes层上运行。但是,如果要确保可以在本地将其部署在minikube之上,然后查看问题是否仍然存在。
还有其他几件事要考虑:
本文向您展示了如何在以下位置部署NGINX入口控制器 Azure Kubernetes服务(AKS)群集。证书经理项目是 用于自动生成和配置“让我们加密” 证书。最后,两个应用程序在AKS集群中运行, 每个都可以通过一个IP地址访问。
Traefik是现代的HTTP反向代理和负载均衡器,用于 轻松部署微服务。
操作人员通常希望将此组件安装到
kube-system
名称空间,该名称空间的默认服务帐户 将确保有足够的特权来观看Ingress资源 整个集群。
请让我知道是否有帮助。