es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comunicación de Pod a Pod basada en subconjunto/etiqueta mediante istio.

Tengo 4 microservicios.

Solo service-1 tiene dos implementaciones detrás de él, por lo que tiene dos pods detrás de service-1. Se puede llamar despliegue de blue green.

Los otros tres servicios tienen una implementación y un pod.

Si quiero enviar tráfico externo a server-1/pod-v2, puedo controlarlo a través del subconjunto en las reglas de destino. El pod de Service-2 puede llamar los pods de service-1 a través del nombre del servicio.

¿Cómo puedo configurar Istio para que el pod de service-2 solo pueda llamar al pod de service-1/pod-v2 a través del nombre del servicio y que otro servicio solo pueda llamar al pod de service-1/pod-v1 a través del nombre del servicio?

Service Architecture: https://i.stack.imgur.com/bZPNy.png

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para configurar Istio para que el servicio-2/pod solamente pueda llamar al servicio-1/pod-v2 a través del nombre del servicio y otros servicios solamente llamen al servicio-1/pod-v1 a través del nombre del servicio, se deben seguir los siguientes pasos:

    1. Primero, crear un subconjunto para los pods del servicio-1. En este caso, crear dos subconjuntos; uno para pod-v1 y otro para pod-v2. Esto se puede hacer modificando la regla de destino para el servicio-1.
    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: service-1
    spec:
      host: service-1
      subsets:
      - name: pod-v1
        labels:
          version: v1
      - name: pod-v2
        labels:
          version: v2
    
    1. A continuación, crear un servicio virtual para el servicio-1 que enrute el tráfico al subconjunto apropiado. En este caso, queremos enrutar todo el tráfico al subconjunto pod-v1, excepto para el tráfico del servicio-2 al subconjunto pod-v2.
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: service-1
    spec:
      hosts:
      - service-1
      http:
      - match:
        - uri:
            prefix: /
        route:
        - destination:
            host: service-1
            subset: pod-v1
      - match:
        - uri:
            prefix: /
        route:
        - destination:
            host: service-1
            subset: pod-v2
          weight: 100
        websocketUpgrade: true
        sourceLabels:
          app: service-2
    
    1. Por último, actualizar el servicio virtual para el servicio-2 para permitirle comunicarse solamente con el subconjunto pod-v2 del servicio-1. Esto se puede hacer modificando el servicio virtual existente para el servicio-2.
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: service-2
    spec:
      hosts:
      - service-2
      http:
      - match:
        - uri:
            prefix: /
        route:
        - destination:
            host: service-1
            subset: pod-v2
          websocketUpgrade: true
    

    Con estos cambios, el servicio-2 solamente podrá comunicarse con el subconjunto pod-v2 del servicio-1 a través del nombre del servicio, mientras que otros servicios solamente podrán comunicarse con el subconjunto pod-v1 del servicio-1 a través del nombre del servicio.

Comments are closed.