Los recursos esenciales en Istio comprenden varios componentes clave que permiten la gestión del tráfico dentro de una malla de servicios:
1. Gateway
Este recurso representa un proxy perimetral que gestiona el tráfico entrante y saliente de la malla. El Gateway define un balanceador de carga que opera en los bordes de la red de servicios, aceptando conexiones HTTP/TCP entrantes o salientes y dirigiéndolas hacia destinos específicos, ya sean servicios internos o externos a la malla.
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: entrada-principal
spec:
selector:
app: proxy-ingreso
servers:
- port:
number: 443
name: https
protocol: HTTPS
hosts:
- "ejemplo.com"
tls:
mode: SIMPLE
credentialName: certificado-tls
2. VirtualService
Este componente establece reglas de enrutamiento detalladas para las solicitudes que cumplen ciertos criteiros. Cada VirtualService contiene múltiples reglas que especifican cómo deben coincidir las solicitudes y hacia dónde deben dirigirse. Se asocia típicamente con gateways específicos y define rutas basadas en diferentes condiciones de coincidencia.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ruta-servicio-web
spec:
hosts:
- "servicio-web.local"
gateways:
- entrada-principal
http:
- match:
- headers:
versión-api:
exact: "v2"
route:
- destination:
host: servicio-web
subset: version-2
port:
number: 9080
- route:
- destination:
host: servicio-web
subset: version-1
port:
number: 9080
3. DestinationRule
Define conjunttos específicos de destinos (como versiones nombradas de servicios) y establece políticas de tráfico para lllegar a esos objetivos. Trabaja en conjunto con VirtualService para enrutar solicitudes hacia versiones particulares de servicios. También permite configurar políticas de transporte que se aplican después del enrutamiento realizado por VirtualService.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: politica-servicio-backend
spec:
host: servicio-backend
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
http:
http1MaxPendingRequests: 50
maxRequestsPerConnection: 10
outlierDetection:
consecutiveErrors: 7
interval: 30s
baseEjectionTime: 60s
subsets:
- name: produccion
labels:
ambiente: prod
- name: pruebas
labels:
ambiente: test
4. ServiceEntry
Permite integrar servicios externos al registro interno de Istio, facilitando que los servicios dentro de la malla puedan comunicarse con recursos fuera del entorno de la malla. Es especialmente útil cuando se necesita conectar con bases de datos externas, APIs de terceros u otros servicios no gestionados por Istio.
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: api-externa
spec:
hosts:
- api.externo.com
ports:
- number: 80
name: http
protocol: HTTP
- number: 443
name: https
protocol: HTTPS
location: MESH_EXTERNAL
resolution: DNS
endpoints:
- address: 203.0.113.25
ports:
https: 443
Estos recursos forman la base de la arquitectura de control de tráfico en Istio. Los archivos de configuración pueden adaptarse según los requisitos específicos y aplicarse mediante comandos como kubectl apply -f archivo-configuracion.yaml.
Es fundamental ajustar los nombres de hosts, puertos, etiquetas y otros parámetros según el entorno real donde se implemente. La documentación oficial de Istio debe consultarse regularmente ya que las especificaciones pueden evolucionar entre versiones.