Istio не направляет трафик c в указатель c pod - PullRequest
0 голосов
/ 09 июля 2020

Я установил кучу контейнеров на k8s. На каждом модуле работает один контейнер. Существует модуль обратного прокси, который вызывает службу в контейнере среды выполнения. Я установил два модуля времени выполнения v1 и v2. Моя цель - использовать istio для маршрутизации всего трафика c из модуля обратного прокси в модуль времени выполнения v1.

Я настроил istio, и приведенные ниже снимки экрана дадут вам представление о среде. [! [введите здесь описание изображения] [1]] [1]

Мой yaml k8s выглядит так:

#Assumes create-docker-store-secret.sh used to create dockerlogin secret
#Assumes create-secrets.sh used to create key file, sam admin, and cfgsvc secrets
apiVersion: storage.k8s.io/v1beta1
# Create StorageClass with gidallocate=true to allow non-root user access to mount
# This is used by PostgreSQL container
kind: StorageClass
metadata:
   name: ibmc-file-bronze-gid
   labels:
     kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-file
parameters:
   type: "Endurance"
   iopsPerGB: "2"
   sizeRange: "[1-12000]Gi"
   mountOptions: nfsvers=4.1,hard
   billingType: "hourly"
   reclaimPolicy: "Delete"
   classVersion: "2"
   gidAllocate: "true"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ldaplib
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 50M
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ldapslapd
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 50M
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: ldapsecauthority
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 50M
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgresqldata
spec:
  storageClassName: ibmc-file-bronze-gid
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 50M
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: isamconfig
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 50M
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: openldap
  labels:
    app: openldap
spec:
  selector:
    matchLabels:
      app: openldap
  replicas: 1
  template:
    metadata:
      labels:
        app: openldap
    spec:
      volumes:
        - name: ldaplib
          persistentVolumeClaim:
            claimName: ldaplib
        - name: ldapslapd
          persistentVolumeClaim:
            claimName: ldapslapd
        - name: ldapsecauthority
          persistentVolumeClaim:
            claimName: ldapsecauthority
        - name: openldap-keys
          secret:
            secretName: openldap-keys
      containers:
        - name: openldap
          image: ibmcom/isam-openldap:9.0.7.0
          ports:
            - containerPort: 636
          env:
            - name: LDAP_DOMAIN
              value: ibm.com
            - name: LDAP_ADMIN_PASSWORD
              value: Passw0rd
            - name: LDAP_CONFIG_PASSWORD
              value: Passw0rd
          volumeMounts:
            - mountPath: /var/lib/ldap
              name: ldaplib
            - mountPath: /etc/ldap/slapd.d
              name: ldapslapd
            - mountPath: /var/lib/ldap.secAuthority
              name: ldapsecauthority
            - mountPath: /container/service/slapd/assets/certs
              name: openldap-keys
# This line is needed when running on Kubernetes 1.9.4 or above
          args: [ "--copy-service"]

# useful for debugging startup issues - can run bash, then exec to the container and poke around
#          command: [ "/bin/bash"]
#          args: [ "-c", "while /bin/true ; do sleep 5; done" ]
# Just this line to get debug output from openldap startup
#          args: [ "--loglevel" , "trace","--copy-service"]
---
# for external service access, see https://console.bluemix.net/docs/containers/cs_apps.html#cs_apps_public_nodeport
apiVersion: v1
kind: Service
metadata:
  name: openldap
  labels:
    app: openldap
spec:
  ports:
    - port: 636
      name: ldaps
      protocol: TCP
  selector:
    app: openldap
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgresql
  labels:
    app: postgresql
spec:
  selector:
    matchLabels:
      app: postgresql
  replicas: 1
  template:
    metadata:
      labels:
        app: postgresql
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser: 70
        fsGroup: 0
      volumes:
        - name: postgresqldata
          persistentVolumeClaim:
            claimName: postgresqldata
        - name: postgresql-keys
          secret:
            secretName: postgresql-keys
      containers:
        - name: postgresql
          image: ibmcom/isam-postgresql:9.0.7.0
          ports:
            - containerPort: 5432
          env:
            - name: POSTGRES_USER
              value: postgres
            - name: POSTGRES_PASSWORD
              value: Passw0rd
            - name: POSTGRES_DB
              value: isam
            - name: POSTGRES_SSL_KEYDB
              value: /var/local/server.pem
            - name: PGDATA
              value: /var/lib/postgresql/data/db-files/
          volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: postgresqldata
            - mountPath: /var/local
              name: postgresql-keys
# useful for debugging startup issues - can run bash, then exec to the container and poke around
#          command: [ "/bin/bash"]
#          args: [ "-c", "while /bin/true ; do sleep 5; done" ]
---
# for external service access, see https://console.bluemix.net/docs/containers/cs_apps.html#cs_apps_public_nodeport
apiVersion: v1
kind: Service
metadata:
  name: postgresql
spec:
  ports:
    - port: 5432
      name: postgresql
      protocol: TCP
  selector:
    app: postgresql
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: isamconfig
  labels:
    app: isamconfig
spec:
  selector:
    matchLabels:
      app: isamconfig
  replicas: 1
  template:
    metadata:
      labels:
        app: isamconfig
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser:    6000
      volumes:
        - name: isamconfig
          persistentVolumeClaim:
            claimName: isamconfig
        - name: isamconfig-logs
          emptyDir: {}
      containers:
        - name: isamconfig
          image: ibmcom/isam:9.0.7.1_IF4
          volumeMounts:
            - mountPath: /var/shared
              name: isamconfig
            - mountPath: /var/application.logs
              name: isamconfig-logs
          env:
            - name: SERVICE
              value: config
            - name: CONTAINER_TIMEZONE
              value: Europe/London
            - name: ADMIN_PWD
              valueFrom:
                secretKeyRef:
                  name: samadmin
                  key: adminpw
          readinessProbe:
            tcpSocket:
              port:  9443
            initialDelaySeconds: 5
            periodSeconds: 10
          livenessProbe:
            tcpSocket:
              port: 9443
            initialDelaySeconds: 120
            periodSeconds: 20
#          command: [ "/sbin/bootstrap.sh" ]
      imagePullSecrets:
        - name: dockerlogin
---
# for external service access, see https://console.bluemix.net/docs/containers/cs_apps.html#cs_apps_public_nodeport
apiVersion: v1
kind: Service
metadata:
  name: isamconfig
spec:
# To make the LMI internet facing, make it a NodePort
  type: NodePort
  ports:
    - port: 9443
      name: isamconfig
      protocol: TCP
# make this one statically allocated
      nodePort: 30442
  selector:
    app: isamconfig
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: isamwrprp1
  labels:
    app: isamwrprp1
spec:
  selector:
    matchLabels:
      app: isamwrprp1
  replicas: 1
  template:
    metadata:
      labels:
        app: isamwrprp1
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser:    6000
      volumes:
        - name: isamconfig
          emptyDir: {}
        - name: isamwrprp1-logs
          emptyDir: {}
      containers:
        - name: isamwrprp1
          image: ibmcom/isam:9.0.7.1_IF4
          ports:
            - containerPort: 443
          volumeMounts:
            - mountPath: /var/shared
              name: isamconfig
            - mountPath: /var/application.logs
              name: isamwrprp1-logs
          env:
            - name: SERVICE
              value: webseal
            - name: INSTANCE
              value: rp1
            - name: CONTAINER_TIMEZONE
              value: Europe/London
            - name: AUTO_RELOAD_FREQUENCY
              value: "5"
            - name: CONFIG_SERVICE_URL
              value: https://isamconfig:9443/shared_volume
            - name: CONFIG_SERVICE_USER_NAME
              value: cfgsvc
            - name: CONFIG_SERVICE_USER_PWD
              valueFrom:
                secretKeyRef:
                  name: configreader
                  key: cfgsvcpw
          livenessProbe:
            exec:
              command:
              - /sbin/health_check.sh
              - livenessProbe
            initialDelaySeconds: 10
            periodSeconds: 10
            timeoutSeconds: 2
          readinessProbe:
            exec:
              command:
              - /sbin/health_check.sh
            initialDelaySeconds: 10
            periodSeconds: 10
            timeoutSeconds: 2
      imagePullSecrets:
        - name: dockerlogin
---
# for external service access, see https://console.bluemix.net/docs/containers/cs_apps.html#cs_apps_public_nodeport
apiVersion: v1
kind: Service
metadata:
  name: isamwrprp1
spec:
  type: NodePort
  sessionAffinity: ClientIP
  ports:
    - port: 443
      name: isamwrprp1
      protocol: TCP
      nodePort: 30443
  selector:
    app: isamwrprp1
---
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: isamwrpmobile
  labels:
    app: isamwrpmobile
spec:
  selector:
    matchLabels:
      app: isamwrpmobile
  replicas: 1
  template:
    metadata:
      labels:
        app: isamwrpmobile
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser:    6000
      volumes:
        - name: isamconfig
          emptyDir: {}
        - name: isamwrpmobile-logs
          emptyDir: {}
      containers:
        - name: isamwrpmobile
          image: ibmcom/isam:9.0.7.1_IF4
          ports:
            - containerPort: 443
          volumeMounts:
            - mountPath: /var/shared
              name: isamconfig
            - mountPath: /var/application.logs
              name: isamwrpmobile-logs
          env:
            - name: SERVICE
              value: webseal
            - name: INSTANCE
              value: mobile
            - name: CONTAINER_TIMEZONE
              value: Europe/London
            - name: AUTO_RELOAD_FREQUENCY
              value: "5"
            - name: CONFIG_SERVICE_URL
              value: https://isamconfig:9443/shared_volume
            - name: CONFIG_SERVICE_USER_NAME
              value: cfgsvc
            - name: CONFIG_SERVICE_USER_PWD
              valueFrom:
                secretKeyRef:
                  name: configreader
                  key: cfgsvcpw
          livenessProbe:
            exec:
              command:
              - /sbin/health_check.sh
              - livenessProbe
            initialDelaySeconds: 10
            periodSeconds: 10
            timeoutSeconds: 2
          readinessProbe:
            exec:
              command:
              - /sbin/health_check.sh
            initialDelaySeconds: 10
            periodSeconds: 10
            timeoutSeconds: 2
      imagePullSecrets:
        - name: dockerlogin
---
# for external service access, see https://console.bluemix.net/docs/containers/cs_apps.html#cs_apps_public_nodeport
apiVersion: v1
kind: Service
metadata:
  name: isamwrpmobile
spec:
  type: NodePort
  sessionAffinity: ClientIP
  ports:
    - port: 443
      name: isamwrpmobile
      protocol: TCP
      nodePort: 30444
  selector:
    app: isamwrpmobile
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: isamruntime-v1
  labels:
    app: isamruntime
spec:
  selector:
    matchLabels:
      app: isamruntime
      version: v1
  replicas: 1
  template:
    metadata:
      labels:
        app: isamruntime
        version: v1
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser:    6000
      volumes:
        - name: isamconfig
          emptyDir: {}
        - name: isamruntime-logs
          emptyDir: {}
      containers:
        - name: isamruntime
          image: ibmcom/isam:9.0.7.1_IF4
          ports:
            - containerPort: 443
          volumeMounts:
            - mountPath: /var/shared
              name: isamconfig
            - mountPath: /var/application.logs
              name: isamruntime-logs
          env:
            - name: SERVICE
              value: runtime
            - name: CONTAINER_TIMEZONE
              value: Europe/London
            - name: AUTO_RELOAD_FREQUENCY
              value: "5"
            - name: CONFIG_SERVICE_URL
              value: https://isamconfig:9443/shared_volume
            - name: CONFIG_SERVICE_USER_NAME
              value: cfgsvc
            - name: CONFIG_SERVICE_USER_PWD
              valueFrom:
                secretKeyRef:
                  name: configreader
                  key: cfgsvcpw
          livenessProbe:
            exec:
              command:
              - /sbin/health_check.sh
              - livenessProbe
            initialDelaySeconds: 10
            periodSeconds: 10
            timeoutSeconds: 2
          readinessProbe:
            exec:
              command:
              - /sbin/health_check.sh
            initialDelaySeconds: 10
            periodSeconds: 10
            timeoutSeconds: 2
      imagePullSecrets:
        - name: dockerlogin
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: isamruntime-v2
  labels:
    app: isamruntime
spec:
  selector:
    matchLabels:
      app: isamruntime
      version: v2
  replicas: 1
  template:
    metadata:
      labels:
        app: isamruntime
        version: v2
    spec:
      securityContext:
        runAsNonRoot: true
        runAsUser:    6000
      volumes:
        - name: isamconfig
          emptyDir: {}
        - name: isamruntime-logs
          emptyDir: {}
      containers:
        - name: isamruntime
          image: ibmcom/isam:9.0.7.1_IF4
          ports:
            - containerPort: 443
          volumeMounts:
            - mountPath: /var/shared
              name: isamconfig
            - mountPath: /var/application.logs
              name: isamruntime-logs
          env:
            - name: SERVICE
              value: runtime
            - name: CONTAINER_TIMEZONE
              value: Europe/London
            - name: AUTO_RELOAD_FREQUENCY
              value: "5"
            - name: CONFIG_SERVICE_URL
              value: https://isamconfig:9443/shared_volume
            - name: CONFIG_SERVICE_USER_NAME
              value: cfgsvc
            - name: CONFIG_SERVICE_USER_PWD
              valueFrom:
                secretKeyRef:
                  name: configreader
                  key: cfgsvcpw
          livenessProbe:
            exec:
              command:
              - /sbin/health_check.sh
              - livenessProbe
            initialDelaySeconds: 10
            periodSeconds: 10
            timeoutSeconds: 2
          readinessProbe:
            exec:
              command:
              - /sbin/health_check.sh
            initialDelaySeconds: 10
            periodSeconds: 10
            timeoutSeconds: 2
      imagePullSecrets:
        - name: dockerlogin
---
apiVersion: v1
kind: Service
metadata:
  name: isamruntime
spec:
  ports:
    - port: 443
      name: isamruntime
      protocol: TCP
  selector:
    app: isamruntime
---

У меня есть файл yaml для шлюза, который выглядит так:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: isamruntime-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 443
      name: https
      protocol: HTTPS
    hosts:
    - "*"
    tls:
      mode: SIMPLE
      serverCertificate: /tmp/tls.crt
      privateKey: /tmp/tls.key
---

и мой yaml-файл маршрутизации выглядит следующим образом:

---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: isamruntime
spec:
  hosts:
    - isamruntime
  gateways:
    - isamruntime-gateway
  http:
  - route:
    - destination:
        host: isamruntime
        subset: v1
        port:
           number: 443
      weight: 100
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: isamruntime
spec:
  host: isamruntime
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2

Поток идет от инструмента «Почтальон» -> входящий IP-адрес -> контейнер, который запускает обратный прокси -> контейнер времени выполнения Моя цель состоит в том, чтобы гарантировать, что только контейнер в модуле среды выполнения v1 получает трафик c. Однако трафик c направляется как в v1, так и в v2.

В чем моя ошибка? Может ли кто-нибудь мне помочь?

С уважением, Пранам

Я пробовал следующее, но это не помогло. Трафик c направляется на v1 и v2.

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: isamruntime
spec:
  hosts:
    - isamruntime
  gateways:
    - isamruntime-gateway
  http:
  - route:
    - destination:
        host: isamruntime
        subset: v1
        port:
           number: 443
      weight: 100
    - destination:
        host: isamruntime
        subset: v2
        port:
           number: 443
      weight: 0
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: isamruntime-v1
spec:
  host: isamruntime
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
---

Я попытался изменить свой виртуальный сервис, чтобы он выглядел так:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: isamruntime
spec:
  hosts:
    - isamruntime.com
  gateways:
    - isamruntime-gateway
  http:
  - route:
    - destination:
        host: isamruntime
        subset: v1
        port:
           number: 443
      weight: 100
    - destination:
        host: isamruntime
        subset: v2
        port:
           number: 443
      weight: 0
---

Затем я использовал curl, как показано ниже

pranam@UNKNOWN kubernetes % curl -k -v -H "host: isamruntime.com" https://169.50.228.2:30443
*   Trying 169.50.228.2...
* TCP_NODELAY set
* Connected to 169.50.228.2 (169.50.228.2) port 30443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Request CERT (13):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: C=US; O=Policy Director; CN=isamconfig
*  start date: Feb 18 15:33:30 2018 GMT
*  expire date: Feb 14 15:33:30 2038 GMT
*  issuer: C=US; O=Policy Director; CN=isamconfig
*  SSL certificate verify result: self signed certificate (18), continuing anyway.
> GET / HTTP/1.1
> Host: isamruntime.com
> User-Agent: curl/7.64.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< content-length: 13104
< content-type: text/html
< date: Fri, 10 Jul 2020 13:45:28 GMT
< p3p: CP="NON CUR OTPi OUR NOR UNI"
< server: WebSEAL/9.0.7.1
< x-frame-options: DENY
< x-content-type-options: nosniff
< cache-control: no-store
< x-xss-protection: 1
< content-security-policy: frame-ancestors 'none'
< strict-transport-security: max-age=31536000; includeSubDomains
< pragma: no-cache
< Set-Cookie: PD-S-SESSION-ID=1_2_0_cGgEZiwrYKP0QtvDtZDa4l7-iPb6M3ZsW4I+aeUhn9HuAfAd; Path=/; Secure; HttpOnly
< 
<!DOCTYPE html>
<!-- Copyright (C) 2015 IBM Corporation -->
<!-- Copyright (C) 2000 Tivoli Systems, Inc. -->
<!-- Copyright (C) 1999 IBM Corporation -->
<!-- Copyright (C) 1998 Dascom, Inc. -->
<!-- All Rights Reserved. -->
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
    <title>LoginPage</title>
    <style>

Команда curl возвращает ожидаемую страницу входа в систему обратного прокси. Моя служба времени выполнения находится за обратным прокси. Обратный прокси вызовет службу времени выполнения. Я где-то видел в документации, что можно использовать -me sh. Это тоже не помогло моему делу.

Я выполнил другую команду curl, которая фактически запускает вызов обратного прокси, а обратный прокси вызывает среду выполнения. это конечная точка, которая разрешает только HTTP POST. [1]: https://i.stack.imgur.com/dOMnD.png

Ответы [ 3 ]

1 голос
/ 10 июля 2020

трафик c направляется как в v1, так и в v2

Это, скорее всего, означает, что Istio не обрабатывает трафик c, а K8s Service выполняет простой циклический перебор .

Я думаю, вы видите точную ситуацию, описанную в Debugging Istio: How to Fix a Broken Service Me sh (Cloud Next '19) session.

Это действительно полезный сеанс для изучения возможностей istioctl и отладки неожиданного поведения, но, короче говоря, для вашего случая вам нужно будет настроить определение службы.

---
apiVersion: v1
kind: Service
metadata:
  name: isamruntime
spec:
  ports:
    - port: 443
      name: http-isamruntime # Add prefix of http
      protocol: TCP
  selector:
    app: isamruntime

Ref: https://istio.io/latest/docs/reference/config/networking/virtual-service/#VirtualService

ПРИМЕЧАНИЕ. Приведенный выше префикс http- предполагает, что вы завершаете TLS до обращения к Сервису. В зависимости от вашего варианта использования вам также может потребоваться настроить VirtualService.

1 голос
/ 13 июля 2020

У меня поток работает. Мне не нужен был шлюз, так как мой трафик c идет от обратного прокси -> времени выполнения. Обратный прокси-сервер и среда исполнения находятся внутри cluser k8s и являются трафиком восток-запад c. Моему сервису нужен tcp-, а моей виртуальной службе - tcp-сопоставление. Файлы yaml приведены ниже. Я благодарю вас всех, кто направил меня в правильном направлении. мой сервис yaml:

---
apiVersion: v1
kind: Service
metadata:
  name: isamruntime
spec:
  ports:
    - port: 443
      name: tcp-isamruntime # Add prefix of tcp to match traffic type
      protocol: TCP
  selector:
    app: isamruntime

мой виртуальный сервис и правило назначения yaml:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: isamruntime
spec:
  hosts:
    - isamruntime
  tcp:
    - match:
      - port: 443
      route:
      - destination:
          host: isamruntime.default.svc.cluster.local
          port:
            number: 443
          subset: v1
        weight: 0
      - destination:
          host: isamruntime.default.svc.cluster.local
          port:
            number: 443
          subset: v2
        weight: 100
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: isamruntime
spec:
  host: isamruntime.default.svc.cluster.local
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
---

Спасибо всем

0 голосов
/ 10 июля 2020

jt97

Спасибо, что посмотрели вопрос. Я пробовал ваши предложения, используя это:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: isamruntime
spec:
  hosts:
    - isamruntime
  gateways:
    - isamruntime-gateway
  http:
  - route:
    - destination:
        host: isamruntime
        subset: v1
        port:
           number: 443
      weight: 100
    - destination:
        host: isamruntime
        subset: v2
        port:
           number: 443
      weight: 0
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: isamruntime-v1
spec:
  host: isamruntime
  subsets:
  - name: v1
    labels:
      version: v1
#  - name: v2
#    labels:
#      version: v2
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: isamruntime-v2
spec:
  host: isamruntime
  subsets:
  - name: v2
    labels:
      version: v2
#  - name: v2
#    labels:
#      version: v2

Но это не сработало.

Это связано с именем хоста. Должно ли у него быть пространство имен, например - isamruntime.default.sv c .cluster.local, или мои контейнеры должны работать в пространстве имен не по умолчанию?

С уважением к Pranam

...