如何解决当我放置 2 条路径时,带有 nginx 入口控制器的入口不起作用
我是 K8s 的初学者,我正在测试多个场景,所以我遇到了下一个问题:
当我应用具有 2 个路径的 Ingress 时,每个 URI 的服务器响应 404
这是我的入口 YAML 文件
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
namespace: pruebas
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: parking.io
http:
paths:
- backend:
serviceName: front
servicePort: 80
path: /front
- backend:
serviceName: back
servicePort: 80
path: /api
我做了几次测试,结果如下:
- 只有 1 条路径带有“/”作为“front”:有效 ✅
- 只有 1 条路径以“/”表示“后退”:有效 ✅
- 只有 1 个带有“/front”的“front”路径:不起作用 ❌
- “前端”和“/后端”只有 1 个路径:不起作用 ❌
- “前”和“后”的 2 个路径(上面的 YAML 文件):不起作用 ❌
API 服务 YAML:
apiVersion: v1
kind: Service
metadata:
name: back
namespace: pruebas
spec:
type: ClusterIP
selector:
type: backend
ports:
- protocol: TCP
port: 80
targetPort: 80
附加信息:我做了一个测试,为 Nginx 的 hello-world 创建了 2 个服务,我做了和我之前说的一样的,它工作正常,所以,我猜我有问题使用我的服务或 Pod,但我不知道它会是什么。
更多附加信息它在带有 GKE 的 GCP 上运行。
更新我把这个 (nginx.org/rewrites: "serviceName=back rewrite=/") 和 API 的路由有效,但不适用于子路由(api/随便)
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
namespace: pruebas
annotations:
# nginx.ingress.kubernetes.io/rewrite-target: /
nginx.org/rewrites: "serviceName=back rewrite=/"
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: parking.io
http:
paths:
# - backend:
# serviceName: front
# servicePort: 80
# path: /app
- backend:
serviceName: nginx-2
servicePort: 80
path: /hello
- backend:
serviceName: back
servicePort: 80
path: /api
我的命名空间“pruebas”中的所有信息:
解决方法
我通过进行这些更改解决了我的问题:
- 卸载我的入口控制器,然后删除服务、pod 和所有与之相关的内容。
- 我的入口控制器位于不同的命名空间 (infra),因此,我再次将 NGINX 入口控制器安装在我的服务和 Pod (pruebas) 的同一命名空间中
- 我在与其他 Pod、服务等相同的命名空间中配置了我的入口。
我的集群是在 GKE 上配置的,所以不知道这个方案是否适用于不同的服务。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。