当前位置: 首页 > 知识库问答 >
问题:

Istio虚拟服务与普通Kubernetes服务的关系

包建义
2023-03-14

我正在Istio服务网格上观看Pluralsight视频。演示文稿的一部分是这样说的:

VirtualService使用库伯内特斯服务查找所有pod的IP地址。VirtualService不会通过[库伯内特斯]服务路由任何流量,但它只是使用它来获取流量可能去往的endpoint列表。

它显示了这个图形(显示pod发现,而不是流量路由):

我对此有点困惑,因为我不知道IstioVirtualService如何知道要查看哪个库伯内特斯Service。我在示例IstioVirtualServiceyaml文件中没有看到任何对库伯内特斯Service的引用。

我从理论上推测,DestinationRules上可能有足够的标签来减少到只需要的pod,但这些示例只使用标签v1v2。仅靠一个版本似乎不太可能只提供所需的 pod。(许多不同的服务可能位于 v1v2 上。

IstioVirtualService如何知道要关联到哪个库伯内特斯Service

或者说另一种方式,

Istio 虚拟服务如何知道如何从集群中的所有 Pod 中找到正确的 Pod?

共有2个答案

越源
2023-03-14

阿拉法特的回答是正确的。

我想从关于主机的文档中添加以下部分,这将使事情更加清楚。https://istio.io/latest/docs/reference/config/networking/virtual-service/#VirtualService

[...Kubernetes用户注意:当使用短名称时(例如“reviews”而不是“reviews . default . SVC . cluster . local”),Istio将根据规则的名称空间而不是服务来解释短名称。包含主机“reviews”的“default”命名空间中的规则将被解释为“reviews . default . SVC . cluster . local”,而不考虑与reviews服务相关联的实际命名空间。为了避免潜在的错误配置,建议始终使用完全限定的域名,而不是简称。

因此,当您编写 host: app-service 并且 VirtualService 位于默认命名空间中时,主机被解释为 app-service.default.svc.cluster.local,这是 kubernetes 服务的 FQDN。如果应用服务位于另一个命名空间中,例如 dev,则需要将主机设置为主机:app-service.dev.svc.cluster.local

DestinationRur也是如此,其中kubernetes服务的FQDN也被定义为主机。https://istio.io/latest/docs/reference/config/networking/destination-rule/#DestinationRule

VirtualServiceDestination规则是为主机配置的。VirtualService定义了流量应该去哪里(例如主机,不同版本的权重,...)和Destination规则定义了流量应该如何处理,(例如负载平衡算法和版本是如何定义的。

因此,流量不是这样路由的

网关-

网关-

敖毅
2023-03-14

创建虚拟服务时,您可以在< code>route.destination部分定义要查找的服务

< code>port:在端口上运行的服务

主机:服务的名称

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: test
spec:
  hosts:
  - "example.com"
  gateways:
  - test-gateway
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        port:
          number: 80
        host: app-service

所以

< code > app-pod -

 类似资料:
  • 我正在尝试用以下结构为我的服务创建一个舵手图: 安装helm chart后,部署和服务已成功创建,但virtualservice尚未创建。 我的 istio 虚拟服务 yaml 文件如下所示: 令人惊讶的是,如果我在helm安装完成部署应用程序之后应用上面的yaml,那么就会创建virtualservice。 请帮我调试这个问题,如果需要更多的调试信息,请告诉我。

  • 在sites-available目录中创建新的虚拟服务器。 为此新虚拟服务器配置并指定单独的SQL数据库。 将此虚拟服务器链接到启用站点(sites-available)的目录。 在client.conf文件中将VPN服务器定义为客户端,并使用virtual_server指令强制将此新虚拟服务器用于RADIUS请求。 sites-available目录下的buffered-sql虚拟服务器可以用作

  • FreeRADIUS 2.x分支的一个主要新功能是引入虚拟服务器。 这个概念并不新鲜,并且在2.x分支诞生时已经被Web服务器使用。 然而,freeradius是第一个将虚拟服务器引入到radius中的。 本章将更深入地了解RADIUS中虚拟服务器的世界。 在本章中,我们将: 了解您使用虚拟服务器的原因 了解如何定义和启用虚拟服务器 探索监听和客户端部分 发现预定义的虚拟服务器 让我们继续吧...

  • (我没有ssh密码t_t)当我试图从Dell服务器面板启动虚拟终端时,服务器会给我一个文件:“viewer.jnlp…”。我用javaws运行这个文件。它有一些错误: 请求对系统进行无限制访问的无签名应用程序以下资源已使用弱签名算法MD5with RSA签名,并被视为无签名。 我怎么解决?

  • 我正在尝试一个非常简单的Istio设置Docker桌面库伯内特斯安装。 我有2个Spring Boot微服务,并在我的K8s“集群”中部署了这2个服务,没有任何复制。我的YAML文件中只有这两个服务的服务和部署。 我已经安装了 istio,我可以看到我的 pod 中有 2 个容器。一个是Spring靴应用程序,另一个是istio sidecar。 我像这样从服务2向服务1发出一个rest调用,它工

  • 我已经使用kubeadm在ubuntu服务器上设置了kubernetes集群。我已经创建了一个部署,并使用NodePort服务公开了该部署。如何访问运行pod的API(使用Ubuntu主机服务器的IP)? 在此处输入图像描述