implementing-service-mesh について
Kubernetes 環境向けのサービスメッシュ実装スキルで、サービス間通信の保護、トラフィック管理、段階的デリバリーを支援します。Istio、Linkerd、Ciliumを扱い、マルチクラスター構成とトラブルシューティングも含みます。
主な機能
- 01Istio、Linkerd、Ciliumの比較
- 02mTLSと認可ポリシーの設定
- 03ルーティング、リトライ、サーキットブレーカーの管理
- 04カナリアおよびブルーグリーンデプロイの実装
- 05マルチクラスター構成と問題の調査
活用シーン
- 01マイクロサービスに相互TLSとデフォルト拒否ポリシーを設定
- 02新バージョンへトラフィックの一部を切り替え
- 03Kubernetesクラスター間にメッシュを構築
- 04メッシュの認証やルーティングの問題を調査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ancoleman/ ai-design-components --skill implementing-service-meshインストール後、Claude Code で/implementing-service-meshを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
outputs.yamlexamples/cilium/network-policy.yamlexamples/istio/canary-deployment.yamlmtls-authorization.yamlexamples/linkerd/traffic-split.yamlreferences/cilium-patterns.mddecision-tree.mdistio-patterns.mdlinkerd-patterns.mdmulti-cluster.mdprogressive-delivery.mdsecurity-patterns.mdtroubleshooting.md詳細
サービスメッシュの実装
目的
Kubernetes 環境向けにサービスメッシュのインフラストラクチャを構成してデプロイします。相互 TLS によるサービス間のセキュアな通信を有効にし、トラフィック管理ポリシーを実装し、認可制御を構成して、プログレッシブデリバリー戦略を設定します。ネットワークの複雑さを抽象化しながら、マイクロサービスの可観測性、セキュリティ、レジリエンスを提供します。
使用するタイミング
次の場合にこのスキルを呼び出します。
- 「mTLS を使用してサービスメッシュをセットアップする」
- 「Istio のトラフィックルーティングを構成する」
- 「カナリアデプロイを実装する」
- 「マイクロサービス間の通信を保護する」
- 「サービスに認可ポリシーを追加する」
- 「バージョン間でトラフィックを分割する」
- 「マルチクラスターのサービスメッシュをセットアップする」
- 「アンビエントモードとサイドカーを構成する」
- 「サーキットブレーカーの構成をセットアップする」
- 「分散トレーシングを有効にする」
サービスメッシュの選択
要件と制約に基づいて選択します。
Istio Ambient(多くの場合に推奨):
- mTLS 使用時のレイテンシーオーバーヘッドは 8%(サイドカーモードでは 166%)
- エンタープライズ機能、マルチクラウド、高度な L7 ルーティング
- サイドカー不要の L4(ztunnel)+オプションの L7(waypoint)
Linkerd(シンプルさを優先):
- レイテンシーオーバーヘッドは 33%(サイドカー方式で最小)
- Rust ベースのマイクロプロキシ、自動 mTLS
- 小規模から中規模のチームに最適で、導入が容易
Cilium(eBPF ネイティブ):
- レイテンシーオーバーヘッドは 99%、カーネルレベルで適用
- 高度なネットワーキング、設計上サイドカー不要
- eBPF インフラストラクチャに最適で、将来性にも優れる
詳細な比較表とアーキテクチャ上のトレードオフについては、references/decision-tree.md を参照してください。
基本概念
データプレーンアーキテクチャ
サイドカー: Pod ごとのプロキシ。きめ細かな L7 制御が可能ですが、オーバーヘッドは大きくなります サイドカー不要: 共有ノードプロキシ(Istio Ambient)または eBPF(Cilium)を使用し、オーバーヘッドを抑えます
Istio Ambient のコンポーネント:
- ztunnel:mTLS 用のノードごとの L4 プロキシ
- waypoint:HTTP ルーティング用の、任意で設定する名前空間ごとの L7 プロキシ
トラフィック管理
ルーティング: パス、ヘッダー、重みに基づくトラフィック分配 レジリエンス: リトライ、タイムアウト、サーキットブレーカー、フォールトインジェクション ロードバランシング: ラウンドロビン、最小接続数、コンシステントハッシュ
セキュリティモデル
mTLS: 自動暗号化、証明書のローテーション、アプリケーションの変更不要 モード: STRICT(平文を拒否)、PERMISSIVE(どちらも受け入れ) 認可: デフォルト拒否、ID ベース(IP ベースではない)、L7 ポリシー
Istio の構成
Istio はトラフィック管理とセキュリティにカスタムリソース定義を使用します。
VirtualService(ルーティング)
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
DestinationRule(トラフィックポリシー)
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
PeerAuthentication(mTLS)
apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: STRICT
AuthorizationPolicy(アクセス制御)
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/*"]
フォールトインジェクション、ミラーリング、ゲートウェイなどの高度なパターンについては、references/istio-patterns.md を参照してください。
Linkerd の構成
Linkerd は自動 mTLS によるシンプルさを重視しています。
HTTPRoute(トラフィック分割)
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
ServiceProfile(リトライ/タイムアウト)
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
AuthorizationPolicy
apiVersion: policy.linkerd.io/v1alpha1
kind: AuthorizationPolicy
metadata:
name: allow-frontend
spec:
targetRef:
kind: Server
name: backend-api
requiredAuthenticationRefs:
- name: frontend-identity
kind: MeshTLSAuthentication
パターンの全容と mTLS の検証については、references/linkerd-patterns.md を参照してください。
Cilium の構成
Cilium はカーネルレベルでの適用に eBPF を使用します。
CiliumNetworkPolicy(L3/L4/L7)
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/.*"
DNS ベースのエグレス
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"
SPIRE を使用した mTLS と eBPF のパターンについては、references/cilium-patterns.md を参照してください。
セキュリティの実装
ゼロトラストアーキテクチャ
- 厳格な mTLS を有効にします(すべてのトラフィックを暗号化します)
- デフォルト拒否の認可ポリシーを設定します
- 明示的な許可ルールを設定します(最小権限)
- ID ベースのアクセス制御を設定します
- 監査ログを有効にします
例(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: {}
証明書管理
- 自動ローテーション(デフォルトの TTL は 24 時間)
- ダウンタイムなしの更新
- 外部 CA との連携(cert-manager)
- ワークロード ID に SPIFFE/SPIRE を使用
JWT 認証と外部認可(OPA)については、references/security-patterns.md を参照してください。
プログレッシブデリバリー
カナリアデプロイ
トラフィックを徐々に切り替えながら監視します。
ステージ:
- v2 をトラフィック 0% でデプロイします
- v2 に 10% をルーティングし、メトリクスを監視します
- 25% → 50% → 75% → 100% の順に増やします
- v1 のデプロイをクリーンアップします
監視項目: エラー率、レイテンシ(P95/P99)、スループット
ブルー/グリーンデプロイ
迅速なロールバックが可能な即時切り替えです。
手順:
- ブルーと並行してグリーンをデプロイします
- ヘッダールーティングを使ってグリーンをテストします
- グリーンへ即時に切り替えます
- 必要に応じてブルーにロールバックします
自動ロールバック(Flagger)
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
A/B テストと詳細なパターンについては、references/progressive-delivery.md を参照してください。
マルチクラスターメッシュ
Kubernetes クラスター間にメッシュを拡張します。
ユースケース: HA、地理的分散、コンプライアンス、DR
Istio マルチプライマリー:
# 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 マルチクラスター:
# Link clusters
linkerd multicluster link --cluster-name cluster2 | \
kubectl apply -f -
# Export service
kubectl label svc/backend mirror.linkerd.io/exported=true
完全なセットアップとクラスター間のパターンについては、references/multi-cluster.md を参照してください。
インストール
Istio アンビエントモード
curl -L https://istio.io/downloadIstio | sh -
istioctl install --set profile=ambient -y
kubectl label namespace production istio.io/dataplane-mode=ambient
Linkerd
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
Cilium
helm install cilium cilium/cilium \
--namespace kube-system \
--set meshMode=enabled \
--set authentication.mutual.spire.enabled=true
トラブルシューティング
mTLS の問題
# 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
完全なデバッグガイドと解決策については、references/troubleshooting.md を参照してください。
他のスキルとの連携
kubernetes-operations: クラスターのセットアップ、名前空間、RBAC security-hardening: コンテナセキュリティ、シークレット管理 infrastructure-as-code: メッシュデプロイ用の Terraform/Helm building-ci-pipelines: 自動カナリア、統合テスト performance-engineering: レイテンシのベンチマーク、最適化
参考ファイル
references/decision-tree.md- サービスメッシュの選定と比較references/istio-patterns.md- Istio の設定例references/linkerd-patterns.md- Linkerd のパターンとベストプラクティスreferences/cilium-patterns.md- Cilium の eBPF ポリシーと mTLSreferences/security-patterns.md- ゼロトラストと認可references/progressive-delivery.md- カナリア、ブルー/グリーン、A/B テストreferences/multi-cluster.md- マルチクラスターのセットアップとフェデレーションreferences/troubleshooting.md- よくある問題とデバッグ