Instalación y configuración inicial de Istio
Este documento explica cómo instalar y configurar inicialmente Istio en un clúster de Amazon EKS.
Tabla de contenido
- Requisitos previos
- Elección de un método de instalación
- Instalación con istioctl
- Instalación con Helm
- Instalación con Istio Operator
- Perfiles de instalación
- Verificación de la instalación
- Despliegue de aplicación de ejemplo
- Eliminación de Istio
- Solución de problemas
Requisitos previos
Antes de instalar Istio, se deben cumplir los siguientes requisitos:
1. Clúster de Amazon EKS
- Versión de Kubernetes: 1.28 o superior (recomendado: 1.34)
- Tipo de nodo: Mínimo 2 nodos de trabajo (recomendado: 3 o más)
- Tamaño de nodo: Mínimo 2 vCPU, 4GB de RAM (recomendado: t3.medium o superior)
2. Instalación y configuración de kubectl
# Verify kubectl installation
kubectl version --client
# Verify EKS cluster connection
kubectl get nodes3. Herramientas necesarias
- AWS CLI: 2.x o superior
- eksctl: (Opcional) Para la administración de clústeres
- Helm: 3.x o superior (si se utiliza el método de instalación con Helm)
4. Recursos del clúster
Requisitos mínimos de recursos:
- Control Plane: 1 vCPU, 1.5GB de RAM
- Sidecar (por Pod): 0.1 vCPU, 128MB de RAM
Elección de un método de instalación
Istio proporciona tres métodos principales de instalación:
| Método | Ventajas | Desventajas | Caso de uso recomendado |
|---|---|---|---|
| istioctl | Simple y rápido, proporciona funciones de validación | Difícil de automatizar | Entornos de desarrollo y prueba |
| Helm | Compatible con GitOps, gestión de versiones sencilla | La configuración puede ser compleja | Entornos de producción, pipelines de CI/CD |
| Istio Operator | Gestión declarativa, actualizaciones automáticas | Se necesitan recursos adicionales | Entornos de producción a gran escala |
Instalación con istioctl
istioctl es la herramienta CLI oficial de Istio y el método de instalación más sencillo.
1. Instalar istioctl
# Download istioctl (latest version)
curl -L https://istio.io/downloadIstio | sh -
# Or download a specific version
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.28.0 sh -
# Add istioctl to PATH
cd istio-1.28.0
export PATH=$PWD/bin:$PATH
# Verify installation
istioctl version2. Validación del clúster previa a la instalación
# Verify cluster meets Istio installation requirements
istioctl x precheck3. Instalar Istio
# Install with default profile
istioctl install --set profile=default -y
# Check installation progress
kubectl get pods -n istio-system4. Verificar la instalación
# Check Istio components
kubectl get all -n istio-system
# Check istiod logs
kubectl logs -n istio-system -l app=istiodInstalación con Helm
Helm es un administrador de paquetes de Kubernetes adecuado para flujos de trabajo de GitOps.
1. Agregar el repositorio de Helm
# Add Istio Helm repository
helm repo add istio https://istio-release.storage.googleapis.com/charts
helm repo update2. Instalar istio-base
istio-base instala los CRD (Custom Resource Definitions) de Istio.
# Create istio-system namespace
kubectl create namespace istio-system
# Install istio-base chart
helm install istio-base istio/base \
-n istio-system \
--version 1.28.03. Instalar istiod
istiod es el Control Plane de Istio.
# Install istiod chart
helm install istiod istio/istiod \
-n istio-system \
--version 1.28.0 \
--wait4. Instalar Istio Ingress Gateway (opcional)
# Create istio-ingress namespace
kubectl create namespace istio-ingress
# Install Istio Ingress Gateway
helm install istio-ingress istio/gateway \
-n istio-ingress \
--version 1.28.0 \
--wait5. Instalación personalizada con values.yaml
# values.yaml
global:
hub: docker.io/istio
tag: 1.28.0
pilot:
autoscaleEnabled: true
autoscaleMin: 2
autoscaleMax: 5
resources:
requests:
cpu: 500m
memory: 2048Mi
# AWS EKS specific settings
meshConfig:
accessLogFile: /dev/stdout
enableTracing: true
defaultConfig:
tracing:
sampling: 100.0# Install using values.yaml file
helm install istiod istio/istiod \
-n istio-system \
--version 1.28.0 \
-f values.yaml \
--waitInstalación con Istio Operator
Istio Operator administra Istio de manera declarativa.
1. Instalar Istio Operator
# Install Operator
istioctl operator init
# Verify Operator installation
kubectl get pods -n istio-operator2. Crear el recurso IstioOperator
# istio-operator.yaml
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
name: istio-control-plane
namespace: istio-system
spec:
profile: default
meshConfig:
accessLogFile: /dev/stdout
components:
pilot:
k8s:
resources:
requests:
cpu: 500m
memory: 2Gi
limits:
cpu: 1000m
memory: 4Gi
hpaSpec:
minReplicas: 2
maxReplicas: 53. Instalar Istio mediante Operator
# Apply IstioOperator resource
kubectl create ns istio-system
kubectl apply -f istio-operator.yaml
# Check installation progress
kubectl get istiooperator -n istio-systemPerfiles de instalación
Istio proporciona varios perfiles para distintos casos de uso.
Perfiles disponibles
| Perfil | Descripción | Componentes | Uso recomendado |
|---|---|---|---|
| default | Configuración predeterminada para despliegues de producción | istiod, ingress gateway | La mayoría de los entornos de producción |
| demo | Todas las funciones habilitadas, para aprendizaje | istiod, ingress gateway, egress gateway, muestreo de trazas alto | Desarrollo y demostraciones |
| minimal | Solo se instalan los componentes mínimos | solo istiod | Entornos con recursos limitados |
| remote | Para clúster remoto en un entorno multiclúster | - | Configuración multiclúster |
| empty | Sin configuración predeterminada | - | Configuración totalmente personalizada |
| preview | Incluye funciones experimentales | Diversas funciones experimentales | Entornos de prueba |
Consultar perfiles
# List available profiles
istioctl profile list
# Check specific profile configuration
istioctl profile dump default
# Compare two profiles
istioctl profile diff default demoInstalación por perfil
# Install with demo profile
istioctl install --set profile=demo -y
# Install with minimal profile
istioctl install --set profile=minimal -yPersonalización de perfiles
# Modify specific settings based on profile
istioctl install --set profile=default \
--set meshConfig.accessLogFile=/dev/stdout \
--set values.pilot.resources.requests.memory=2Gi \
-yVerificación de la instalación
1. Comprobar el Control Plane
# Check all resources in istio-system namespace
kubectl get all -n istio-system
# Check istiod status
kubectl get deployment istiod -n istio-system
# Check istiod logs
kubectl logs -n istio-system -l app=istiod --tail=1002. Comprobar la versión de Istio
# Control Plane version
istioctl version
# Or
kubectl get pods -n istio-system -o yaml | grep image:3. Validar la configuración de Istio
# Check Istio installation status
istioctl verify-install
# Analyze Istio configuration
istioctl analyze -A4. Comprobar los Webhooks
# Check MutatingWebhookConfiguration
kubectl get mutatingwebhookconfiguration
# Check ValidatingWebhookConfiguration
kubectl get validatingwebhookconfigurationDespliegue de aplicación de ejemplo
Istio incluye una aplicación de ejemplo llamada Bookinfo.
1. Habilitar la inyección automática de Sidecar para el Namespace
# Add label to default namespace
kubectl label namespace default istio-injection=enabled
# Verify label
kubectl get namespace -L istio-injection2. Desplegar la aplicación Bookinfo
# Deploy Bookinfo application
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
# Check pods (each pod should have 2 containers)
kubectl get pods
# Check services
kubectl get services3. Verificar el acceso a la aplicación
# Test productpage service
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" \
-c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"4. Configurar Ingress Gateway
# Create Bookinfo Gateway
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
# Check Gateway
kubectl get gateway
# Check VirtualService
kubectl get virtualservice5. Configurar el acceso externo
# Get Ingress Gateway External IP
export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway \
-o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway \
-o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
# Access application
echo "http://$GATEWAY_URL/productpage"
# Access in browser or verify with curl
curl -s "http://$GATEWAY_URL/productpage" | grep -o "<title>.*</title>"Eliminación de Istio
Eliminación con istioctl
# Remove sample application
kubectl delete -f samples/bookinfo/platform/kube/bookinfo.yaml
kubectl delete -f samples/bookinfo/networking/bookinfo-gateway.yaml
# Remove Istio
istioctl uninstall --purge -y
# Remove istio-system namespace
kubectl delete namespace istio-system
# Remove Istio label
kubectl label namespace default istio-injection-Eliminación con Helm
# Remove Ingress Gateway
helm delete istio-ingress -n istio-ingress
# Remove istiod
helm delete istiod -n istio-system
# Remove istio-base
helm delete istio-base -n istio-system
# Remove namespaces
kubectl delete namespace istio-system
kubectl delete namespace istio-ingressEliminación con Istio Operator
# Remove IstioOperator resource
kubectl delete istiooperator istio-control-plane -n istio-system
# Remove Operator
istioctl operator remove
# Remove namespaces
kubectl delete namespace istio-system
kubectl delete namespace istio-operatorSolución de problemas
Problemas comunes
1. Error en la inyección automática de Sidecar
Síntoma: El sidecar de Envoy no se inyecta en el Pod
Solución:
# Check namespace label
kubectl get namespace -L istio-injection
# Add label if missing
kubectl label namespace default istio-injection=enabled
# Check Webhook
kubectl get mutatingwebhookconfiguration2. El Pod de istiod no se inicia
Síntoma: El Pod de istiod está en estado Pending o CrashLoopBackOff
Solución:
# Check pod status
kubectl get pods -n istio-system
# Check pod events
kubectl describe pod -n istio-system -l app=istiod
# Check logs
kubectl logs -n istio-system -l app=istiod
# Check resources
kubectl top nodes
kubectl describe nodes3. Ingress Gateway no recibe una IP externa
Síntoma: El Service de tipo LoadBalancer está en estado Pending
Solución:
# Check service status
kubectl get svc -n istio-system istio-ingressgateway
# Check AWS Load Balancer Controller
kubectl get deployment -n kube-system aws-load-balancer-controller
# Check events
kubectl describe svc -n istio-system istio-ingressgatewayHerramientas de depuración
istioctl analyze
# Analyze entire cluster
istioctl analyze -A
# Analyze specific namespace
istioctl analyze -n defaultistioctl proxy-status
# Check all proxy status
istioctl proxy-status
# Check specific pod proxy status
istioctl proxy-status <POD_NAME>.<NAMESPACE>istioctl dashboard
# Launch Kiali dashboard
istioctl dashboard kiali
# Launch Grafana dashboard
istioctl dashboard grafana
# Launch Prometheus dashboard
istioctl dashboard prometheus
# Envoy admin interface
istioctl dashboard envoy <POD_NAME>.<NAMESPACE>Recopilación de logs
# Control Plane logs
kubectl logs -n istio-system -l app=istiod
# Ingress Gateway logs
kubectl logs -n istio-system -l app=istio-ingressgateway
# Envoy logs for specific pod
kubectl logs <POD_NAME> -c istio-proxy
# Save all Istio-related logs to file
istioctl bug-reportPróximos pasos
¡La instalación de Istio está completa! Ahora consulte los siguientes documentos para empezar a usar Istio:
- Conceptos básicos: Comprenda los conceptos fundamentales y la arquitectura de Istio
- Gestión del tráfico: Aprenda sobre Gateway, VirtualService, DestinationRule
- Seguridad: Configure mTLS, autenticación y autorización