istio 虚拟服务主机无法从 pod 内部解析

问题描述 投票:0回答:1

使用 istio,我想创建一个虚拟服务来为集群内的虚拟域/主机提供服务。因此集群内的 pod 可以请求“http://internal.service.com/path”来到达特定的目标服务。

一种方式是使用make all "internal.service.com" host calls去

istio-ingressgateway.istio-system
,让gateway envoy处理路由。但是这样就失去了服务MESH的目的。

所以,我想创建一个虚拟服务,

host=internal.service.com
gateway=mesh
这样路由规则就可以注入到所有 pod 的 sidecar 中,并且可以在 pod 内部访问主机+路径。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: internal-service-vs
spec:
  hosts:
    - "internal.service.com"
  gateways:
    - mesh
  http:
    - match:
        - uri:
            prefix: /path
      route:
        - destination:
            host: a-service.namespace.svc.cluster.local
            port:
              number: 5000

但是在pod里面,当我请求

internal.service.com
时,它说无法解析主机的DNS。


似乎虚拟服务只是在创建一个

inbound
路由规则,我认为它可以作为出站规则。

所以我需要请求任何服务(带有标头

Host: internal.service.com
)以使用入站路由规则。

但是如何请求到当前pod的sidecar?我不想让请求在请求 pod 之外,因为单个目标将承担所有负载。

  • 可接受的请求目的地是:
    any-service.ns
    ,
    any-service.ns.svc.cluster.local
    ,
    service cluster ip
  • 我发现不可接受的请求目的地:
    pod ip
    (为什么?),
    127.0.0.1:15001
    (chatgpt 告诉我这是 sidecar 的 HTTP 入站端口)
istio
1个回答
0
投票

主机的dns需要先在集群中解析。所以我需要先创建一个 ServiceEntry 来使 internal.service.com 成为一个有效的主机。

然后 sidecar 出站路由拦截器可以处理请求并解析主机。

© www.soinside.com 2019 - 2024. All rights reserved.