【问题标题】:Multiple Frontends using Istio Ingress and Route Rules使用 Istio 入口和路由规则的多个前端
【发布时间】:2018-03-09 14:33:20
【问题描述】:

是否可以使用下图描述的路由规则进行流量路由?流量路由需要在流量进入集群后立即进行。

我们一直在摆弄它们,但一旦我们有两个路由规则并在其中一个规则中使用了 uri 正则表达式,我们总是会碰壁。

我们的想法是像这样配置 istio ingress

# Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gateway
  annotations:
    kubernetes.io/ingress.class: "istio"
spec:
  backend:
    serviceName: frontend
    servicePort: 8080

然后根据uri头配置分流的路由规则。以下是我们如何配置产品路由规则的示例:

apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:
  name: products-rule
spec:
  destination:
    name: frontend
  precedence: 2
  match:
    request:
      headers:
        uri:
          regex: "^/(?:.*?)/?products(?:/.*)?$"
  route:
  - labels:
      fe-app: products

这种设置可以用 istio 实现吗?

【问题讨论】:

  • 可以将istio-ingressroute-rule 结合使用。您在使用此配置时遇到任何问题吗?在我看来是有效的。
  • 一个问题是 uri 正则表达式路由规则不起作用。我只能让前缀 uri 规则起作用,这并不能解决我们在此之前拥有项目密钥 url 参数的问题。
  • 您在浏览器中尝试的 URI 是什么,结果是什么?您还可以查看 ingress pod 日志
  • 当我转到 /foo/products 时,我得到一个 404。[2018-03-09T15:38:02.936Z] "GET /foo/products HTTP/1.1" 404 ...

标签: kubernetes istio kubernetes-ingress


【解决方案1】:

更新:似乎 Kubernetes Ingress 不支持正则表达式,请参阅 https://github.com/kubernetes/ingress-nginx/issues/1360所以下面的答案是行不通的。

我将创建三个不同的服务:productssettingscustomers,并使用 Kubernetes Ingress fanout。我会使用你的正则表达式作为路径。我会先用一个没有kubernetes.io/ingress.class: "istio" 注释的普通Kubernetes Ingress 来试试。如果它可以工作,我会添加 Istio 注释并验证它是否也可以作为 Istio Ingress 工作。

【讨论】:

  • 是的,这也是我们一直在考虑的一个选项,但我们找不到任何有关使用正则表达式路径规则的文档。
  • 嗯,我搜索了它,它可能不起作用 - 这是一个针对 Kubernetes 的问题打开 github.com/kubernetes/ingress-nginx/issues/1360。我需要检查 Istio Ingress 发生了什么。
  • 似乎正则表达式不适用于 Ingress,将更新答案。
猜你喜欢
  • 2019-01-20
  • 2018-10-23
  • 2021-05-05
  • 2019-07-24
  • 1970-01-01
  • 2018-04-24
  • 2018-09-24
  • 1970-01-01
  • 2021-08-10
相关资源
最近更新 更多