AI

サービスメッシュ比較:Istio vs Linkerd vs Cilium でKubernetesネットワークを管理する

オープンソースラボ編集部2026年6月13日

サービスメッシュ比較:Istio vs Linkerd vs Cilium でKubernetesネットワークを管理する

マイクロサービス・Kubernetes環境でサービス間通信の相互TLS認証・トラフィック制御・可観測性・ゼロトラストセキュリティを実現するサービスメッシュはクラウドネイティブアーキテクチャの必須コンポーネントになっています。Istio(Google・最大シェア)・Linkerd(CNCF・軽量)・Cilium(eBPFベース・次世代)の3つが2026年のOSSサービスメッシュデファクトスタンダードです。

サービスメッシュが必要な理由

  • 相互TLS(mTLS): サービス間の全通信を自動的に暗号化してゼロトラストネットワーク実現
  • トラフィック管理: カナリアリリース・A/Bテスト・フォールバック・タイムアウト・リトライをコードなしで制御
  • 可観測性: サービス間のレイテンシ・エラーレート・スループット・依存関係マップを自動取得
  • ポリシー: AuthorizationPolicyで「サービスAはサービスBのみが呼び出せる」という通信制御

主要ツールの概要

Istio

2017年公開(Google/IBM/Lyft)、Go製のOSSです。GitHubスター36k+。世界最大シェアのOSSサービスメッシュで、EnvoyプロキシをサイドカーとしてすべてのPodに注入してサービス間通信を制御します。豊富な機能(VirtualService・DestinationRule・AuthorizationPolicy・Telemetry)と強力なトラフィック管理が特徴です。

# Istio インストールとTraffic Management設定
# istioctl install --set profile=production
# kubectl label namespace default istio-injection=enabled

# VirtualService: カナリアリリース(新バージョンに10%のトラフィック)
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: myapp-vs
  namespace: production
spec:
  hosts:
    - myapp
  http:
    - name: canary
      match:
        - headers:
            x-canary:
              exact: "true"
      route:
        - destination:
            host: myapp
            subset: v2
    - name: default
      route:
        - destination:
            host: myapp
            subset: v1
          weight: 90
        - destination:
            host: myapp
            subset: v2
          weight: 10  # 10%の新バージョン

---
# DestinationRule: バージョン別サブセット定義
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: myapp-dr
spec:
  host: myapp
  trafficPolicy:
    connectionPool:
      tcp: { maxConnections: 100 }
      http: { h2UpgradePolicy: UPGRADE, http1MaxPendingRequests: 1000 }
    outlierDetection:
      baseEjectionTime: 30s
      consecutiveGatewayErrors: 5
      interval: 10s
  subsets:
    - name: v1
      labels: { version: v1 }
    - name: v2
      labels: { version: v2 }

---
# AuthorizationPolicy: ゼロトラスト(payment-serviceのみがorder-serviceを呼べる)
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-payment-only
  namespace: production
spec:
  selector:
    matchLabels: { app: order-service }
  action: ALLOW
  rules:
    - from:
        - source:
            principals: ["cluster.local/ns/production/sa/payment-service"]
      to:
        - operation:
            methods: ["POST"]
            paths: ["/api/orders/*"]
# Python: Istio VirtualServiceのカナリア設定をAPIで動的変更
from kubernetes import client, config
import json

def update_canary_weight(namespace: str, vs_name: str, v2_weight: int):
    '''IstioのVirtualServiceのカナリア重みをAPIで更新(段階的ロールアウト)'''
    config.load_incluster_config()  # Pod内から実行
    custom_api = client.CustomObjectsApi()

    vs = custom_api.get_namespaced_custom_object(
        'networking.istio.io', 'v1beta1', namespace, 'virtualservices', vs_name
    )

    # 重みを更新
    routes = vs['spec']['http'][-1]['route']
    for route in routes:
        if route['destination']['subset'] == 'v1':
            route['weight'] = 100 - v2_weight
        elif route['destination']['subset'] == 'v2':
            route['weight'] = v2_weight

    custom_api.patch_namespaced_custom_object(
        'networking.istio.io', 'v1beta1', namespace, 'virtualservices', vs_name, vs
    )
    print(f'カナリア更新: v1={100-v2_weight}% v2={v2_weight}%')

def progressive_rollout(namespace: str, vs_name: str):
    '''段階的にカナリアを100%に移行(0→10→25→50→75→100)'''
    import time
    weights = [10, 25, 50, 75, 100]
    for weight in weights:
        update_canary_weight(namespace, vs_name, weight)
        print(f'待機中... {weight}%でエラーレートを監視')
        time.sleep(300)  # 5分間モニタリング後に次のステップへ
    print('ロールアウト完了')

Linkerd

2016年公開(CNCF)、Rust製のOSSです。GitHubスター11k+。軽量・シンプル・低オーバーヘッドのCNCF卒業サービスメッシュで、Istioより学習曲線が低く、Rustで書かれたマイクロプロキシ(Linkerd Proxy)がEnvoyより軽量でCPU/メモリオーバーヘッドが少ないです。

# Linkerd インストールとセットアップ
curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install | sh
linkerd check --pre  # 前提条件確認
linkerd install --crds | kubectl apply -f -
linkerd install | kubectl apply -f -
linkerd check  # 動作確認

# 既存NamespaceにLinkerd注入
kubectl annotate namespace production linkerd.io/inject=enabled

# mTLSの確認
linkerd viz stat deployment -n production

# トラフィックのトポロジー可視化
linkerd viz top deployment -n production
# Linkerd HTTPRoute: トラフィック分割(SMI/Gateway API対応)
apiVersion: policy.linkerd.io/v1beta2
kind: HTTPRoute
metadata:
  name: myapp-canary
  namespace: production
spec:
  parentRefs:
    - name: myapp
      kind: Service
  rules:
    - backendRefs:
        - name: myapp-v1
          port: 80
          weight: 90
        - name: myapp-v2
          port: 80
          weight: 10

Cilium

2016年公開(Isovalent/Cisco)、Go製のOSSです。GitHubスター21k+。eBPFベースの次世代CNI+サービスメッシュで、LinuxカーネルのeBPFを使ってネットワークポリシー・サービスメッシュ・負荷分散・可観測性をカーネルレベルで実現します。サイドカーなしでサービスメッシュ機能を提供します。

# Cilium: NetworkPolicyでL7ポリシーを定義(eBPFでカーネルレベル適用)
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: myapp-policy
  namespace: production
spec:
  endpointSelector:
    matchLabels:
      app: order-service
  ingress:
    - fromEndpoints:
        - matchLabels:
            app: payment-service
      toPorts:
        - ports:
            - port: "8080"
              protocol: TCP
          rules:
            http:
              - method: POST
                path: /api/orders
    - fromEndpoints:
        - matchLabels:
            app: frontend
      toPorts:
        - ports:
            - port: "8080"
              protocol: TCP
          rules:
            http:
              - method: GET
                path: /api/orders/.*

機能比較表

比較項目IstioLinkerdCilium
サイドカーEnvoyLinkerd Proxy❌(eBPF)
軽量・低オーバーヘッド✅ 最小
機能の豊富さ✅ 最多
L7ポリシー
GitHub Stars36k+11k+21k+

サービスメッシュはDevOpsカテゴリ/categories/devopsのKubernetes・ArgoCD・Prometheusと組み合わせてプログレッシブデリバリー(カナリアデプロイ・フィーチャーフラグ・ブルーグリーン)を自動化します。セキュリティカテゴリ/categories/securityのゼロトラストネットワーク実装としてIstioのAuthorizationPolicyでサービス間通信を最小権限原則で制御する構成が大企業のKubernetes環境で採用されています。

FAQ

Q. Istioでカナリアデプロイを自動化するにはどうすればいいですか?

A. Argo RolloutsとIstioを統合してカナリアデプロイを自動管理するのが最も効果的です。設定: ①helm install argo-rollouts argo/argo-rollouts -n argo-rollouts --create-namespace②Rollout リソースでカナリア設定: strategy.canary.stableServicecanaryServicesteps(weightを段階的に増加)・analysis(エラーレートのメトリクスをPrometheurでチェック)③Argo Rolloutsコントローラーが自動でIstioのVirtualServiceのweightを更新④メトリクスが閾値を超えたら自動ロールバック。ArgoCD統合: ArgoCDのApp-of-AppsでRollout定義をデプロイ→GitOpsでカナリアの設定もコードで管理。

Q. LinkerdとIstioのどちらを選ぶべきですか?

A. シンプルさ・低学習コスト・軽量ならLinkerd高度なトラフィック管理・豊富な機能・Envoyエコシステムならistioが向いています。Linkerd優位: ①Rustのマイクロプロキシでレイテンシオーバーヘッドが低い(p99レイテンシ: Istioの70%以下)②linkerd install1コマンドで簡単インストール③設定が少なくシンプルな運用④CNCF卒業プロジェクトで長期的な安定性。Istio優位: ①VirtualService・DestinationRule等でより細かいトラフィック制御②Wasm拡張でEnvoyフィルターをカスタマイズ③Ambient Mesh(サイドカーレス・CiliumのeBPFに対抗)でオーバーヘッドを大幅削減(Istio 1.18+)④プロバイダー(Google Cloud・AWS)のマネージドIstio対応が充実。

Q. CiliumはIstio・Linkerdとどう違いますか?

A. CiliumはKubernetes CNI(コンテナネットワーキング)とサービスメッシュを統合したeBPFベースのプラットフォームで、Istio/Linkerdのようなサイドカーなしでネットワーク機能を実現します。違い: ①Cilium: LinuxカーネルのeBPFでネットワーク処理→サイドカーコンテナが不要→Podあたりのメモリ使用量が大幅削減②Istio/Linkerd: 各PodにEnvoy/Linkerd Proxyサイドカーを注入→サイドカーがトラフィックをインターセプト→オーバーヘッドあり。Cilium Mesh: cilium install --set kube-proxy-replacement=trueでKube-proxyを完全置き換えてeBPFでサービス負荷分散→Istioの代替としてL7ポリシー・mTLS・可観測性を実装。選択基準: 新規K8s構築でCNIを選択するフェーズならCilium(CNI+メッシュ統合が最もシンプル)、既存IstioクラスターならIstio継続が移行コスト的に現実的。

Q. Istioの可観測性設定でKialiとJaegerを統合するには?

A. IstioのTelemetry APIでPrometheus・Jaeger・Kialiを統合してサービストポロジーとトレースを可視化します。設定: ①istioctl install --set meshConfig.defaultConfig.tracing.zipkin.address=jaeger-collector:9411でJaeger連携②kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/addons/jaeger.yamlkubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.20/samples/addons/kiali.yamlistioctl dashboard kialiでKialiを開く→サービストポロジーマップ・ゴールデンシグナル(レイテンシ・エラーレート・スループット)をリアルタイム可視化。Telemetry API: kind: Telemetryでサービス別のサンプリングレート(トレース100%収集か1%かを制御)を設定。

まとめ

ユースケース推奨ツール
高度なトラフィック管理・Envoy・大規模Istio
軽量・シンプル・低学習コスト・CNCFLinkerd
CNI統合・eBPF・サイドカーレス・最軽量Cilium

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。