在istio中推送目的地规则后会发生什么

时间:2018-07-11 03:58:19

标签: kubernetes istio kubernetes-pod

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

说我有一个服务A,它后面有10个吊舱。我推送了一个目标规则,该规则包含两个带有标签version = v1和version = v2的子集。

所以我想知道引擎盖下的10个豆荚会发生什么情况?会自动将它们分为两个子集还是不加标签?还是只有在Pod本身标记有version = v1和version = v2时,子集才有效?

非常感谢!

2 个答案:

答案 0 :(得分:2)

一般目的是设置DestinationRule资源,以指定网络流量如何到达您的基础Kubernetes集群Pod。 Istio中的Subsets参数定义用于标识特定于版本的实例的标签。

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

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

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

Istio中有几种资源可以扩展功能,以实现Official documentation中所述的网络管理目的。

答案 1 :(得分:1)

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