我最近开始研究 istio,对目标规则配置感到困惑。
假设我有一个服务 A,它后面运行了 10 个 pod。我推送了一个目标规则,它有两个标签为 version=v1 和 version=v2 的子集。
所以我想知道引擎盖下的 10 个吊舱会发生什么?它们会自动分成两个子集还是不加标签?或者子集只有在 pod 本身被标记为 version=v1 和 version=v2 时才有效?
非常感谢!
我最近开始研究 istio,对目标规则配置感到困惑。
假设我有一个服务 A,它后面运行了 10 个 pod。我推送了一个目标规则,它有两个标签为 version=v1 和 version=v2 的子集。
所以我想知道引擎盖下的 10 个吊舱会发生什么?它们会自动分成两个子集还是不加标签?或者子集只有在 pod 本身被标记为 version=v1 和 version=v2 时才有效?
非常感谢!
通用目的是设置DestinationRule
资源以指定网络流量将如何到达您的底层 Kubernetes 集群 Pod。
Subsets
Istio 中的参数定义了标识版本特定实例的标签。
下面的 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 中有多种资源可以扩展功能以实现网络管理,如官方文档中所述。
DestinationRule 只是简单地“定义”了底层 pod 的子集。任何具有子集中指定标签的 pod 都被视为该子集的一部分,然后可以在 VirtualService 中路由到。如果您的 pod 没有对应于任何已定义子集的标签,那么它们将不会接收路由到特定子集的流量。例如,如果您在 VirtualService 中设置了一条规则,将 100% 的流量发送到子集 v1,并且您没有带有相应 version=v1 标签的 Pod,那么您的 Pod 将不会接收流量,并且客户端调用将失败。请注意,您不必将流量路由到子集,您还可以设置规则以仅路由到实现服务的任何 pod。当您有 pod 同时运行多个版本的服务时,子集用于分配流量。