executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
istio"Istio in Cloud-Native Engineering - Connect, secure, control, and observe" services.
Independent GitHub snapshot · Automated classification · Original documentation governs
name: istio compatibility: opencode completeness: 95 content-types:
related-skills: cncf-argo, cncf-artifact-hub, cncf-aws-eks, cncf-azure-aks
Category: api-management
Status: Active
Stars: 38,137
Last Updated: 2026-04-22
Primary Language: Go
Documentation: https://istio.io/latest/docs/
Istio is a core component of the cloud-native ecosystem, serving as a service mesh that adds observability, traffic control, and security policies to service-to-service communication without application code changes.
Embedding cross-cutting concerns like traffic management, security, and observability directly into application code. It enables these features declaratively without code changes.
Use Istio when you need a comprehensive service mesh with built-in traffic management, security (mTLS), and observability across your microservices. Consider lighter alternatives if you only need specific features.
Deployment Failures
Performance Issues
Configuration Errors
Integration Problems
This tutorial will guide you through installing, configuring, and using Istio for service mesh management in Kubernetes.
Before beginning, ensure you have:
kubectl configured with cluster-admin permissionsistioctl CLI (for Istio installation and debugging)Verify your setup:
# Check cluster connectivity
kubectl cluster-info
# Verify kubectl configuration
kubectl get nodes
# Check Kubernetes version (1.21+ recommended)
kubectl version --short
# Check if Envoy proxy sidecar injection is supported
kubectl get mutatingwebhookconfigurations
Istio can be installed using istioctl, Helm, or with managed offerings from cloud providers.
# Download istioctl
curl -L https://istio.io/downloadIstio | sh -
# Add istioctl to PATH
export PATH="$PATH:$(pwd)/istio-*/bin"
# Or for Linux:
# export PATH="$PATH:$(pwd)/istio-1.21.0/bin"
# Verify installation
istioctl version
# Or install istioctl via Homebrew (macOS/Linux)
brew install istioctl
# Or via Chocolatey (Windows)
choco install istioctl
# Install with default profile (recommended for production)
istioctl install --set profile=default -y
# Install with demo profile (for learning and testing)
istioctl install --set profile=demo -y
# Install with minimal profile (custom configuration)
istioctl install --set profile=minimal -y
# Install with custom settings
istioctl install --set profile=default \
--set values.gateways.istio-ingressgateway.type=LoadBalancer \
--set values.pilot.resources.requests.memory=1Gi \
-y
# Add the Istio Helm repository
helm repo add istio.io https://istio-release.storage.googleapis.com/charts
helm repo update
# Install Istio base charts
helm install istio-base istio.io/base -n istio-system --create-namespace
# Install Istio control plane
helm install istiod istio.io/istiod -n istio-system \
--set global.sts.tokenAudience=istiod.istio-system.svc.service-account
# Install Istio ingress gateway
helm install istio-ingress istio.io/gateway -n istio-system \
--set service.type=LoadBalancer
# Verify installation
kubectl get pods -n istio-system
# Amazon EKS with AWS Distro for Istio
# See: https://aws.amazon.com/istio/
# Google GKE with Istio
gcloud container clusters update my-cluster \
--update-istio=enabled \
--istio-version=1.21.0
# Azure AKS with Istio
az aks update \
--name myAKSCluster \
--resource-group myResourceGroup \
--enable-istio
# Enable injection on namespace
kubectl label namespace default istio-injection=enabled
# Or use label selector
kubectl label namespace production istio-injection=enabled
# Verify namespace is labeled
kubectl get namespace -L istio-injection
# Manually inject sidecar
kubectl get default -o yaml | istioctl kube-inject -f - | kubectl apply -f -
# Create IstioOperator configuration
cat <<EOF | kubectl apply -f -
apiVersion: istio.io/v1beta1
kind: IstioOperator
metadata:
name: istio-control-plane
namespace: istio-system
spec:
profile: default
components:
pilot:
k8s:
resources:
requests:
memory: "1024Mi"
cpu: "500m"
env:
- name: PILOT_ENABLE_PROTOCOL_SNIFFING_FOR_OUTBOUND
value: "true"
ingressGateways:
- name: istio-ingressgateway
enabled: true
k8s:
service:
type: LoadBalancer
EOF
# Enable mTLS in namespace
cat <<EOF | kubectl apply -f -
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: production
spec:
mtls:
mode: STRICT
---
related-skills: cncf-argo, cncf-artifact-hub, cncf-aws-eks, cncf-azure-aks
# Disable mTLS for specific workloads
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: explicit-disabled
namespace: production
spec:
selector:
matchLabels:
app: monitoring
mtls:
mode: DISABLE
EOF
# Create Gateway for external access
cat <<EOF | kubectl apply -f -
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: myapp-gateway
namespace: production
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- myapp.example.com
EOF
related-skills: cncf-argo, cncf-artifact-hub, cncf-aws-eks, cncf-azure-aks
# Deploy the sleep application (sample app)
kubectl apply -f istio-*/samples/sleep/sleep.yaml
# Verify sidecar injection
kubectl get pods -l app=sleep
# Check injected sidecar
istioctl proxy-status
# Describe pod to see sidecar
kubectl describe pod sleep-xxxxx
# Create a Virtual Service
cat <<EOF | kubectl apply -f -
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: sleep
namespace: default
spec:
hosts:
- sleep
http:
- route:
- destination:
host: sleep
subset: v1
weight: 100
---
related-skills: cncf-argo, cncf-artifact-hub, cncf-aws-eks, cncf-azure-aks
# Create subsets
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: sleep
namespace: default
spec:
host: sleep
subsets:
- name: v1
labels:
version: v1
EOF
# Apply traffic policy
istioctl analyze
# Configure circuit breaking
cat <<EOF | kubectl apply -f -
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
name: myapp-circuit-breaker
namespace: production
spec:
host: myapp.production.svc.cluster.local
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
http:
h2UpgradePolicy: UPGRADE
http1MaxPendingRequests: 100
http2MaxRequests: 1000
outlierDetection:
consecutive5xxErrors: 5
interval: 30s
baseEjectionTime: 30s
maxEjectionPercent: 50
EOF
# Enable Kiali addon
istioctl install --set profile=demo -y
# Access Kiali dashboard
istioctl dashboard kiali
# Or port-forward manually
kubectl -n istio-system port-forward svc/kiali 20001:20001
# Access via browser
open http://localhost:20001
related-skills: cncf-argo, cncf-artifact-hub, cncf-aws-eks, cncf-azure-aks
# Check Istio components status
kubectl get pods -n istio-system
# Check proxy status
istioctl proxy-status
# Verify configuration
istioctl analyze
# Check sidecar injection status
istioctl proxy-status --injection
# View configuration dumps
istioctl proxy-config listeners <pod-name> -n <namespace>
istioctl proxy-config routes <pod-name> -n <namespace>
istioctl proxy-config clusters <pod-name> -n <namespace>
# View Envoy logs
kubectl logs <pod-name> -c istio-proxy -n <namespace>
# View sidecar logs
kubectl logs <pod-name> -c sidecar-redirect -n <namespace>
# Test connectivity
istioctl proxy-status | grep SYMBOLIC-NAME
istioctl proxy-config <pod-name> -n <namespace>
# Check certificate status
istioctl proxy-config <pod-name> -n <namespace> --type certificate
# Verify mTLS status
istioctl proxy-check <pod-name> -n <namespace>
# List all Istio resources
kubectl get virtualservices -A
kubectl get destinationrules -A
kubectl get gateways -A
kubectl get servicesettings -A
# Dry-run configuration
istioctl analyze -I manifest.yaml
# Validate configuration
istioctl validate -f manifest.yaml
# Export configuration
istioctl proxy-config <pod-name> -n <namespace> -o json
# Download new version
curl -L https://istio.io/downloadIstio | sh -
export PATH="$PATH:$(pwd)/istio-1.21.0/bin"
# Validate previous version
istioctl analyze
# Upgrade istioctl
istioctl upgrade --version 1.21.0
# Or use upgrade command
istioctl upgrade -y --version 1.21.0
# Verify upgrade
istioctl version
kubectl get pods -n istio-system
Content generated automatically. Verify against official documentation before production use.
# Virtual Service with traffic splitting for canary deployment
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: myapp
namespace: production
spec:
hosts:
- myapp.production.svc.cluster.local
http:
# Main traffic (90%)
- route:
- destination:
host: myapp.production.svc.cluster.local
subset: main
weight: 90
- destination:
host: myapp.production.svc.cluster.local
subset: canary
weight: 10
headers:
request:
add:
x-deployment: canary
match:
- headers:
x-canary:
exact: "true"
route:
- destination:
host: myapp.production.svc.cluster.local
subset: canary
subsets:
- name: main
labels:
version: v1
- name: canary
labels:
version: v2
# Enforce strict mTLS across the mesh
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: production
spec:
mtls:
mode: STRICT
---
related-skills: cncf-argo, cncf-artifact-hub, cncf-aws-eks, cncf-azure-aks
# Permissive mode for gradual migration
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: production-policy
namespace: production
spec:
mtls:
mode: PERMISSIVE
# Ingress Gateway with TLS termination
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: myapp-gateway
namespace: production
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 443
name: https
protocol: HTTPS
tls:
mode: SIMPLE
credentialName: myapp-tls-cert
hosts:
- myapp.example.com
- port:
number: 80
name: http
protocol: HTTP
hosts:
- myapp.example.com
tls:
httpsRedirect: true
Use this skill when:
Assess Requirements — Understand the use case, scale, integration needs, and existing infrastructure. Checkpoint: Document requirements, constraints, and success criteria.
Design Architecture — Plan component interactions, data flow, and deployment strategy using cloud-native best practices. Checkpoint: Verify the architecture addresses all requirements and follows CNCF conventions.
Implement & Configure — Create manifests, configurations, and deployment scripts. Include resource limits, health checks, and observability hooks. Checkpoint: Validate all YAML against schema and test in a staging environment.
Deploy & Monitor — Apply manifests to the cluster, verify component health, and confirm observability is working. Checkpoint: Confirm all pods/services are running, probes passing, and metrics/alerts configured.
These links are resolved at load time — content is fetched and inlined to provide the latest documentation.