ancoleman/implementing-service-mesh
Implement production-ready service mesh deployments with Istio, Linkerd, or Cilium. Configure mTLS, authorization policies, traffic routing, and progressive delivery patterns for secure, observable microservices. Use when setting up service-to-service communication, implementing zero-trust security, or enabling canary deployments.
npx skills add https://github.com/ancoleman/ai-design-components --skill implementing-service-mesh
Configure and deploy service mesh infrastructure for Kubernetes environments. Enable secure service-to-service communication with mutual TLS, implement traffic management policies, configure authorization controls, and set up progressive delivery strategies. Abstracts network complexity while providing observability, security, and resilience for microservices.
Invoke this skill when:
Choose based on requirements and constraints.
Istio Ambient (Recommended for most):
Linkerd (Simplicity priority):
Cilium (eBPF-native):
For detailed comparison matrix and architecture trade-offs, see references/decision-tree.md.
Sidecar: Proxy per pod, fine-grained L7 control, higher overhead
Sidecar-less: Shared node proxies (Istio Ambient) or eBPF (Cilium), lower overhead
Istio Ambient Components:
Routing: Path, header, weight-based traffic distribution
Resilience: Retries, timeouts, circuit breakers, fault injection
Load Balancing: Round robin, least connections, consistent hash
mTLS: Automatic encryption, certificate rotation, zero app changes
Modes: STRICT (reject plaintext), PERMISSIVE (accept both)
Authorization: Default-deny, identity-based (not IP), L7 policies
Istio uses Custom Resource Definitions for traffic management and security.
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: backend-canary
spec:
hosts:
- backend
http:
- route:
- destination:
host: backend
subset: v1
weight: 90
- destination:
host: backend
subset: v2
weight: 10
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: backend-circuit-breaker
spec:
host: backend
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
http:
http1MaxPendingRequests: 10
outlierDetection:
consecutiveErrors: 5
interval: 30s
baseEjectionTime: 30s
apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: STRICT
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: allow-frontend
namespace: production
spec:
selector:
matchLabels:
app: backend
action: ALLOW
rules:
- from:
- source:
principals:
- cluster.local/ns/production/sa/frontend
to:
- operation:
methods: ["GET", "POST"]
paths: ["/api/*"]
For advanced patterns (fault injection, mirroring, gateways), see references/istio-patterns.md.
Linkerd emphasizes simplicity with automatic mTLS.
apiVersion: policy.linkerd.io/v1beta2
kind: HTTPRoute
metadata:
name: backend-canary
spec:
parentRefs:
- name: backend
kind: Service
rules:
- backendRefs:
- name: backend-v1
port: 8080
weight: 90
- name: backend-v2
port: 8080
weight: 10
apiVersion: linkerd.io/v1alpha2
kind: ServiceProfile
metadata:
name: backend.production.svc.cluster.local
spec:
routes:
- name: GET /api/data
condition:
method: GET
pathRegex: /api/data
timeout: 3s
retryBudget:
retryRatio: 0.2
minRetriesPerSecond: 10
apiVersion: policy.linkerd.io/v1alpha1
kind: AuthorizationPolicy
metadata:
name: allow-frontend
spec:
targetRef:
kind: Server
name: backend-api
requiredAuthenticationRefs:
- name: frontend-identity
kind: MeshTLSAuthentication
For complete patterns and mTLS verification, see references/linkerd-patterns.md.
Cilium uses eBPF for kernel-level enforcement.
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: backend-access
spec:
endpointSelector:
matchLabels:
app: backend
ingress:
- fromEndpoints:
- matchLabels:
app: frontend
toPorts:
- ports:
- port: "8080"
rules:
http:
- method: GET
path: "/api/.*"
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: external-api-access
spec:
endpointSelector:
matchLabels:
app: backend
egress:
- toFQDNs:
- matchName: "api.github.com"
toPorts:
- ports:
- port: "443"
For mTLS with SPIRE and eBPF patterns, see references/cilium-patterns.md.
Example (Istio):
# Strict mTLS
apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
name: strict-mtls
namespace: production
spec:
mtls:
mode: STRICT
---
# Deny all by default
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
name: deny-all
namespace: production
spec: {}
For JWT authentication and external authorization (OPA), see references/security-patterns.md.
Gradually shift traffic with monitoring.
Stages:
Monitor: Error rate, latency (P95/P99), throughput
Instant cutover with quick rollback.
Process:
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
name: backend
spec:
targetRef:
kind: Deployment
name: backend
service:
port: 8080
analysis:
interval: 1m
threshold: 5
maxWeight: 50
stepWeight: 10
metrics:
- name: request-success-rate
thresholdRange:
min: 99
For A/B testing and detailed patterns, see references/progressive-delivery.md.
Extend mesh across Kubernetes clusters.
Use Cases: HA, geo-distribution, compliance, DR
Istio Multi-Primary:
# Install on cluster 1
istioctl install --set values.global.meshID=mesh1 \
--set values.global.multiCluster.clusterName=cluster1
# Exchange secrets for service discovery
istioctl x create-remote-secret --context=cluster2 | \
kubectl apply -f - --context=cluster1
Linkerd Multi-Cluster:
# Link clusters
linkerd multicluster link --cluster-name cluster2 | \
kubectl apply -f -
# Export service
kubectl label svc/backend mirror.linkerd.io/exported=true
For complete setup and cross-cluster patterns, see references/multi-cluster.md.
curl -L https://istio.io/downloadIstio | sh -
istioctl install --set profile=ambient -y
kubectl label namespace production istio.io/dataplane-mode=ambient
curl -sL https://run.linkerd.io/install-edge | sh
linkerd install --crds | kubectl apply -f -
linkerd install | kubectl apply -f -
kubectl annotate namespace production linkerd.io/inject=enabled
helm install cilium cilium/cilium \
--namespace kube-system \
--set meshMode=enabled \
--set authentication.mutual.spire.enabled=true
# Istio: Check mTLS status
istioctl authn tls-check frontend.production.svc.cluster.local
# Linkerd: Check edges
linkerd edges deployment/frontend -n production
# Cilium: Check auth
cilium bpf auth list
# Istio: Analyze config
istioctl analyze -n production
# Linkerd: Tap traffic
linkerd tap deployment/backend -n production
# Cilium: Observe flows
hubble observe --namespace production
For complete debugging guide and solutions, see references/troubleshooting.md.
kubernetes-operations: Cluster setup, namespaces, RBAC
security-hardening: Container security, secret management
infrastructure-as-code: Terraform/Helm for mesh deployment
building-ci-pipelines: Automated canary, integration tests
performance-engineering: Latency benchmarking, optimization
references/decision-tree.md - Service mesh selection and comparisonreferences/istio-patterns.md - Istio configuration examplesreferences/linkerd-patterns.md - Linkerd patterns and best practicesreferences/cilium-patterns.md - Cilium eBPF policies and mTLSreferences/security-patterns.md - Zero-trust and authorizationreferences/progressive-delivery.md - Canary, blue/green, A/B testingreferences/multi-cluster.md - Multi-cluster setup and federationreferences/troubleshooting.md - Common issues and debuggingTake ancoleman/implementing-service-mesh from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.