我有一个工作负载,该工作负载通过名称为NodePort
的{{1}}服务公开。此工作负载具有online-forms-lib-service
路线。
我还有以下入口:
/version
问题是apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
spec:
rules:
- host: example.com
http:
paths:
- backend:
serviceName: online-forms-lib-service
servicePort: 80
path: /formslib/
路由在以下位置不可用:
/version
如何解决这个问题?
更新
当我致电时,它会转到应用程序的根目录:
example.com/formslib/version
从那里添加任何路径会将我定向到默认后端
更新 添加了注释:
example.com/formslib/
仍然是相同的行为。
答案 0 :(得分:1)
实际上,Ingress资源主要依赖于K8s集群中实现的Ingress controller,目的是传播Ingress规则并提供负载平衡和流量路由功能。
正如@ UtkuÖzdemir在评论中提到的那样,市场上大多数云提供商都提出了原生Ingress控制器支持,即 Google Cloud 中的Ingress-gce,从而可以创建外部{{ 3}},通过特定的Ingress资源。
此外,您可能会发现很多第三方Ingress控制器HTTP(S) load balancer,它们可以根据客户端需求扩展 L7网络流量功能。
在类似的情况下,我已经检查了您当前的Ingress配置,并且在特定后端服务的根应用程序路径之前,采用通配符*
匹配规则管理了正确的子路径路由:>
- backend:
serviceName: online-forms-lib-service
servicePort: 80
path: /formslib/*
答案 1 :(得分:0)
此行为由rewrite批注控制。
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
截至2019年9月,GKE入口不支持rewrite
规则。
https://github.com/kubernetes/ingress-gce/issues/109
也没有发布实施它的计划。
唯一的解决方案是nginx或其他支持重写注释的第三方入口控制器。