标签在istio的DestinationRule中的作用

时间:2019-08-29 07:02:49

标签: kubernetes istio

我正在查看istio文档中的traffic management section

DestinationRule示例中,它配置了几个服务子集。

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: my-destination-rule
spec:
  host: my-svc
  trafficPolicy:
    loadBalancer:
      simple: RANDOM
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN
  - name: v3
    labels:
      version: v3

我的问题(由于文档上不清楚)是关于spec.subsets.name.labels的作用

这些labels是否指的是:

  • 相应k8s Deployment中的标签?

    Deployment的广告连播中有
  • 标签吗?

以上k8s确切地(就labels而言)驻留在什么地方?

1 个答案:

答案 0 :(得分:1)

Istio坚持使用labeling paradigm on Kubernetes来标识集群中的资源。

由于这个特定的DestinationRule旨在在网络级别确定哪些后端将处理请求,因此将其定位为Deployment中的Pod,而不是Deployment本身(因为这是没有任何网络功能的抽象资源)

Istio sample application repository中就是一个很好的例子:

Deployment没有任何version: v1标签。但是,分组在其中的豆荚可以:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tcp-echo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tcp-echo
      version: v1
  template:
    metadata:
      labels:
        app: tcp-echo
        version: v1
    spec:
      containers:
      - name: tcp-echo
        image: docker.io/istio/tcp-echo-server:1.1
        imagePullPolicy: IfNotPresent
        args: [ "9000", "hello" ]
        ports:
        - containerPort: 9000

DestinationRule通过其版本标签选择这些对象:

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