入口将流量发送到域根

时间:2019-09-08 14:31:14

标签: kubernetes kubernetes-ingress

我有一个工作负载,该工作负载通过名称为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/

仍然是相同的行为。

2 个答案:

答案 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或其他支持重写注释的第三方入口控制器。