首页 > 解决方案 > VirtualService 路由只使用一台主机

问题描述

我有以下虚拟服务:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: external-vs
  namespace: dev
spec:
  hosts:
    - "*"
  gateways:
    - http-gateway
  http:
    - name: "postauth"
      match:
      - uri:
        exact: /postauth
      route:
        - destination:
            port:
              number: 8080
            host: postauth
    - name: "frontend"
      match:
        - uri:
          exact: /app
      route:
        - destination:
            port:
              number: 8081
            host: sa-frontend

我希望对 /postauth 端点的调用将被路由到 postauth 服务,对 /app 端点的调用将被路由到 sa-frontend 服务。发生的事情是所有调用最终都被路由到文件中的第一个路由器,在上述情况下是 postauth,但是如果我更改顺序,它将是 sa-frontend

所有服务和部署都在同一个命名空间 (dev) 中。

这是某种预期的行为吗?我的解释是,上面应该只允许调用 /postauth 和 /app 端点而不是其他任何东西,并将它们路由到它们各自的服务。

标签: networkingkubernetesistio

解决方案


根据HTTPMatchRequest 中Istio 1.3 的文档,您可以找到

字段:名称,类型:字符串

我比较了 1.1 和 1.3 版本之间的这些设置:在 1.3.4 版本中,此参数工作正常,并且路由使用名称传播:

[
    {
        "name": "http.80",
        "virtualHosts": [
            {
                "name": "*:80",
                "domains": [
                    "*",
                    "*:80"
                ],
                "routes": [
                    {
                        "name": "ala1",
                        "match": {
                            "prefix": "/hello1",
                            "caseSensitive": true
                        },
                        "route": {
                            "cluster": "outbound|9020||hello1.default.svc.cluster.local",
.
.
.

                    {
                        "name": "ala2",
                        "match": {
                            "prefix": "/hello2",
                            "caseSensitive": true
                        },
                        "route": {
                            "cluster": "outbound|9030||hello2.default.svc.cluster.local",

在 1.1 版中,它无法正常工作。在这些情况下,请使用适当的版本验证您的设置。

此外,请参阅故障排除部分。

您可以在集群内验证您应用的配置(更改),fe:Envoy 实例的配置方式:

istioctl proxy-config cluster -n istio-system your_istio-ingressgateway-name

验证服务的路由配置和虚拟主机:

istioctl proxy-config routes -n istio-system your_istio-ingressgateway-name -o json

希望这有帮助。


推荐阅读