1

我最近开始研究 istio,对目标规则配置感到困惑。

假设我有一个服务 A,它后面运行了 10 个 pod。我推送了一个目标规则,它有两个标签为 version=v1 和 version=v2 的子集。

所以我想知道引擎盖下的 10 个吊舱会发生什么?它们会自动分成两个子集还是不加标签?或者子集只有在 pod 本身被标记为 version=v1 和 version=v2 时才有效?

非常感谢!

4

2 回答 2

2

通用目的是设置DestinationRule资源以指定网络流量将如何到达您的底层 Kubernetes 集群 Pod。 SubsetsIstio 中的参数定义了标识版本特定实例的标签。

下面的 IstioDestinationRule配置示例演示了它是如何工作的,并且可能会重现您的案例:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2

实际上,labelversion: v1表示只有 Kubernetes 中标记了相同标签的 Pod 才会接收网络流量;因此,相同的方法适用于 label version: v2

Istio 中有多种资源可以扩展功能以实现网络管理,如官方文档中所述。

于 2018-07-11T09:49:25.153 回答
1

DestinationRule 只是简单地“定义”了底层 pod 的子集。任何具有子集中指定标签的 pod 都被视为该子集的一部分,然后可以在 VirtualService 中路由到。如果您的 pod 没有对应于任何已定义子集的标签,那么它们将不会接收路由到特定子集的流量。例如,如果您在 VirtualService 中设置了一条规则,将 100% 的流量发送到子集 v1,并且您没有带有相应 version=v1 标签的 Pod,那么您的 Pod 将不会接收流量,并且客户端调用将失败。请注意,您不必将流量路由到子集,您还可以设置规则以仅路由到实现服务的任何 pod。当您有 pod 同时运行多个版本的服务时,子集用于分配流量。

于 2018-07-17T20:22:20.267 回答