rest - 带有 NGINX 入口控制器的 REST URI
问题描述
我正在尝试将 NGINX Ingress 控制器配置为我的 Kubernetes 集群的正确入口点。在集群内部,我创建了两个 REST Web 服务以及前端应用程序。我正在尝试实现以下场景。
- 当入口 IP 在没有任何参数的情况下被命中时,它应该被路由到前端应用程序。示例:
192.168.1.20
应该导致端口 80 上的前端服务。 - 给定参数后,应将请求路由到正确的 REST 服务。示例:
192.168.1.20/first-rest/api/flower?id=1
应该将请求路由到 first-rest 服务,以便它可以返回 id = 1 的花。
我可以正确访问前端应用程序,但是在尝试访问任何 REST 服务时,我收到 404 错误或根本没有响应。First-rest、Second-rest 和 frontend 运行正常,并且在配置为 LoadBalancer 服务时可以访问。使用 Nginx,它们被配置为 ClusterIp 服务。
我的入口配置------------------------
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: main-routes
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /first-rest(/|$)(.*)
backend:
serviceName: first-rest
servicePort: 8090
- path: /second-rest(/|$)(.*)
backend:
serviceName: second-rest
servicePort: 9000
- path: /(.*)
backend:
serviceName: frontend
servicePort: 80
似乎 NGINX 正在缩短我的 REST API 所需的 URL 参数。
有什么方法可以传递正确的 URL 路径,以便 `192.168.1.20/first-rest/api/flower?id=1` 被路由到 `[first-rest add and port]/api/flower?id=1 ` ?
解决方案
否则,您需要指定入口路径类型,具体取决于入口类的特定实现,它将默认为精确或前缀(我假设在您的情况下它默认为精确)
所以,你需要做类似的事情
spec:
rules:
- http:
paths:
- path: /first-rest
pathType: Prefix
backend:
serviceName: first-rest
servicePort: 8090
在此处查看有关入口路径的文档
推荐阅读
- html - 导航栏不会居中,我错过了什么吗?
- c++ - 在 Chromebook 上运行 Linux vm 时,我需要做什么来编译和运行 C++ 程序?
- python - 如果熊猫列中只有单词,如何在熊猫数据框中删除一行
- websocket - 由于缺少 Keep-Alive 标头,Socket.io 在 HTTP 2 上永久断开连接
- php - 即使使用准备好的语句,PDO 查询也会因某些输入而崩溃
- python-3.x - Groupby().transform() 熊猫
- python - 在 Python 中使用带有已定义类方法的列表
- python - 重命名数据帧索引中的值,然后 sort_index() 对重命名前的值抛出错误
- azure - 无法使用 Web API 门户上传视频,未经授权的 401 错误 Azure 视频索引器
- nginx - 如何使用 Nginx 在本地 Ubuntu 上使用自定义 DNS?