Kubernetes Nginx控制器不工作时基于路径的路由
我一直在尝试使用基于Nginx路径的路由,但是,在花了将近4个小时之后,我不明白,为什么它不起作用。在有人对我的问题进行降级之前,我已经看过了几乎所有关于StackOverflow的可能答案,但没有一个对我有效Kubernetes Nginx控制器不工作时基于路径的路由,kubernetes,kubernetes-ingress,nginx-ingress,Kubernetes,Kubernetes Ingress,Nginx Ingress,我一直在尝试使用基于Nginx路径的路由,但是,在花了将近4个小时之后,我不明白,为什么它不起作用。在有人对我的问题进行降级之前,我已经看过了几乎所有关于StackOverflow的可能答案,但没有一个对我有效 apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: ingress-path-based annotations: nginx.ingress.kubernetes.io/rewrite-
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-path-based
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: nginx.example.com
http:
paths:
- path: /nginx1
backend:
serviceName: nginx1
servicePort: 80
- path: /nginx2
backend:
serviceName: nginx2
servicePort: 80
我所做的是:
helm安装我的版本nginx稳定/nginx入口
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-path-based
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: nginx.example.com
http:
paths:
- path: /nginx1
backend:
serviceName: nginx1
servicePort: 80
- path: /nginx2
backend:
serviceName: nginx2
servicePort: 80
当我直接访问服务时,它工作正常,但是当我尝试访问-curl时http://nginx.example.com/nginx1
或卷曲http://nginx.example.com/nginx2
-我发现404未找到
错误
我希望收到与基于主机的路由相同的响应。但是它似乎不起作用。所以最后我不得不使用清单来安装控制器,而不是使用头盔图表(edge版本) 我从这里安装了它(),将NodePort更改为LoadBalancer以获得LoadBalancer IP。我用的是纯金属
$ POD_NAME=$(kubectl get pods -n $POD_NAMESPACE -l app.kubernetes.io/component=controller -o jsonpath='{.items[0].metadata.name}')
$ kubectl exec -it $POD_NAME -n $POD_NAMESPACE -- /nginx-ingress-controller --version
-------------------------------------------------------------------------------
NGINX Ingress controller
Release: 0.32.0
Build: git-446845114
Repository: https://github.com/kubernetes/ingress-nginx
nginx version: nginx/1.17.10
-------------------------------------------------------------------------------
$
我的入口资源看起来和我提问时发布的一样
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-path-based
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: nginx.gofork8s.com
http:
paths:
- path: /nginx1
backend:
serviceName: nginx1
servicePort: 80
- path: /nginx2
backend:
serviceName: nginx2
servicePort: 80
在/etc/hosts文件中修改了新的LoadBalancer IP以使域工作
192.168.0.1 nginx.example.com
现在,我可以访问-和
我希望它能帮助别人。我仍然需要使用Helm图表确定设置。nginx ingress控制器版本?我看到您在基于路径的路由中使用“nginx.ingress.kubernetes.io/rewrite-target:/”,是否有重写的具体原因?你能试着删除它一次吗?@NaveenKulkarni我已经测试了几乎所有的实现方法,不管有没有它,它都不起作用。尽管我在提出一个问题时提到了它。@ArghyaSadhu-我已经用ingress controller版本编辑了我的问题。我一直在想这个版本肯定有问题。我计划手动安装它,而不是让helm检查它,但这也应该可以。如果版本是0.22或更高,那么您需要使用capture group
192.168.0.1 nginx.example.com