mcpField
I
implementing-service-mesh

implementing-service-mesh

github.com/ancolemanクラウド・DevOps52558 回インストール46 週間前に更新
リポジトリ

implementing-service-mesh について

Kubernetes 環境向けのサービスメッシュ実装スキルで、サービス間通信の保護、トラフィック管理、段階的デリバリーを支援します。Istio、Linkerd、Ciliumを扱い、マルチクラスター構成とトラブルシューティングも含みます。

主な機能

  1. 01Istio、Linkerd、Ciliumの比較
  2. 02mTLSと認可ポリシーの設定
  3. 03ルーティング、リトライ、サーキットブレーカーの管理
  4. 04カナリアおよびブルーグリーンデプロイの実装
  5. 05マルチクラスター構成と問題の調査

活用シーン

  1. 01マイクロサービスに相互TLSとデフォルト拒否ポリシーを設定
  2. 02新バージョンへトラフィックの一部を切り替え
  3. 03Kubernetesクラスター間にメッシュを構築
  4. 04メッシュの認証やルーティングの問題を調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ancoleman/ai-design-components --skill implementing-service-mesh

インストール後、Claude Code で/implementing-service-meshを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

outputs.yaml
examples/cilium/
network-policy.yaml
examples/istio/
canary-deployment.yaml
mtls-authorization.yaml
examples/linkerd/
traffic-split.yaml
references/
cilium-patterns.md
decision-tree.md
istio-patterns.md
linkerd-patterns.md
multi-cluster.md
progressive-delivery.md
security-patterns.md
troubleshooting.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 を参照してください。

セキュリティの実装

ゼロトラストアーキテクチャ
  1. 厳格な mTLS を有効にします(すべてのトラフィックを暗号化します)
  2. デフォルト拒否の認可ポリシーを設定します
  3. 明示的な許可ルールを設定します(最小権限)
  4. ID ベースのアクセス制御を設定します
  5. 監査ログを有効にします

例(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 を参照してください。

プログレッシブデリバリー

カナリアデプロイ

トラフィックを徐々に切り替えながら監視します。

ステージ:

  1. v2 をトラフィック 0% でデプロイします
  2. v2 に 10% をルーティングし、メトリクスを監視します
  3. 25% → 50% → 75% → 100% の順に増やします
  4. v1 のデプロイをクリーンアップします

監視項目: エラー率、レイテンシ(P95/P99)、スループット

ブルー/グリーンデプロイ

迅速なロールバックが可能な即時切り替えです。

手順:

  1. ブルーと並行してグリーンをデプロイします
  2. ヘッダールーティングを使ってグリーンをテストします
  3. グリーンへ即時に切り替えます
  4. 必要に応じてブルーにロールバックします
自動ロールバック(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 ポリシーと mTLS
  • references/security-patterns.md - ゼロトラストと認可
  • references/progressive-delivery.md - カナリア、ブルー/グリーン、A/B テスト
  • references/multi-cluster.md - マルチクラスターのセットアップとフェデレーション
  • references/troubleshooting.md - よくある問題とデバッグ

コメント