我最近开始研究istio,并对目标规则配置感到困惑。
说我有一个服务A,它后面有10个吊舱。我推送了一个目标规则,该规则包含两个带有标签version = v1和version = v2的子集。
所以我想知道引擎盖下的10个豆荚会发生什么情况?会自动将它们分为两个子集还是不加标签?还是只有在Pod本身标记有version = v1和version = v2时,子集才有效?
非常感谢!
答案 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同时执行多个版本的服务时,子集用于分配流量。