Skip to content

Istio

Amazon EKS で Istio Service Mesh を活用するための実践ガイドです。

目次

  1. Service Mesh は本当に必要ですか?
  2. インストールと初期設定
  3. 基本概念
  4. アーキテクチャ
  5. AWS 統合
  6. 用語集
  7. トラフィック管理
  8. セキュリティ
  9. 可観測性
  10. レジリエンス
  11. 高度な機能
  12. トラブルシューティング
  13. ベストプラクティス
  14. 代替案の比較

Istio とは?

Istio は、マイクロサービスを接続、保護、制御、監視するためのオープンソースの Service Mesh プラットフォームです。複雑なマイクロサービスアーキテクチャにおけるサービス間通信を管理し、トラフィック制御、セキュリティ、可観測性を提供します。

Service Mesh の概念

Istio Service Mesh

Service Mesh は、マイクロサービス間の通信を管理するインフラストラクチャレイヤーです。Istio は各サービスとともに Sidecar Proxy(Envoy)をデプロイし、すべてのネットワークトラフィックをインターセプトして制御します。これにより、アプリケーションコードを変更せずに次の機能を提供します。

  • トラフィックルーティング: インテリジェントルーティング、ロードバランシング、Canary デプロイメント
  • セキュリティ: 自動 mTLS、認証、認可
  • 可観測性: メトリクス、ログ、分散トレーシング
  • レジリエンス: Circuit Breaking、Retry、Timeout

実践的な利用例

Istio を使用しないアプリケーション
Istio を使用しないアプリケーション

Istio を使用するアプリケーション
Istio を使用するアプリケーション - 各サービスに Sidecar としてデプロイされた Envoy Proxy

Istio を適用すると、各マイクロサービスに sidecar コンテナとして Envoy Proxy が自動的にデプロイされ、すべてのネットワークトラフィックを透過的にインターセプトして制御します。

Service Mesh は本当に必要ですか?

Service Mesh は強力なツールですが、すべての状況に適しているわけではありません。導入前に慎重な検討が必要です。

判断フロー

Service Mesh が必要な場合 ✅

1. 複雑なマイクロサービス環境

推奨基準:

  • ✅ マイクロサービスが 10 個以上
  • ✅ サービス間通信(East-West トラフィック)が頻繁に発生する
  • ✅ 複数のプログラミング言語(Polyglot)を使用している
  • ✅ 複数のチームがサービスを独立して開発している

2. Zero Trust セキュリティ要件

Service Mesh が提供する機能:

  • サービス間の自動 mTLS 暗号化
  • SPIFFE ベースの Identity 管理
  • きめ細かな認証/認可ポリシー
  • 暗号化通信の保証

代替手段では実現が難しいこと:

  • 各サービスにおけるセキュリティロジック実装の重複
  • 手動での証明書管理の複雑さ
  • 一貫性のないセキュリティポリシー

3. 高度なトラフィック管理

yaml
# Canary Deployment (Traffic Distribution)
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1
      weight: 90
    - destination:
        host: reviews
        subset: v2
      weight: 10  # Only 10% to new version

必要となる場合:

  • Canary デプロイメント、A/B テスト
  • Header/path ベースのルーティング
  • Traffic Mirroring(Shadow Testing)
  • Fault Injection(Chaos Engineering)
  • Circuit Breaking、Retry、Timeout

4. 統合された可観測性

Service Mesh の利点:

  • アプリケーションコードを変更せずにメトリクスを自動収集
  • Distributed Tracing の自動実装
  • 統一されたログ形式
  • サービストポロジーの可視化(Kiali)

Service Mesh が不要な場合 ❌

1. シンプルなアーキテクチャ

代わりに使用するもの:

  • Kubernetes Ingress Controller(NGINX、Traefik)
  • シンプルなロードバランサー
  • アプリケーションレベルの実装

2. 少数のマイクロサービス(10 未満)

オーバーヘッドの方が大きい場合:

  • Service Mesh の運用の複雑さ > 得られるメリット
  • 5~10 個のサービスは手動で管理可能
  • NetworkPolicy で十分なセキュリティを提供できる

代替案:

yaml
# Kubernetes NetworkPolicy is sufficient
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-frontend-to-backend
spec:
  podSelector:
    matchLabels:
      app: backend
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend

3. 運用リソースの不足

Service Mesh の運用要件:

  • Istio/Envoy の専門知識
  • Control Plane の監視と管理
  • アップグレードおよびパッチ管理
  • トラブルシューティング能力(デバッグの複雑さが増加)

チームに必要な準備:

  • 少なくとも 1~2 名の Service Mesh エキスパート
  • 継続的な学習とアップデートの追跡
  • 十分なテスト環境

4. パフォーマンスが極めて重要な場合

Service Mesh のオーバーヘッド:

  • レイテンシー: +1~3ms(P50)、+5~10ms(P99)
  • CPU: Pod あたり +10~20%
  • メモリ: Pod あたり +50~100MB(Sidecar モード)

代替案を検討:

  • Ambient Mode(リソース使用量を 90% 削減)
  • CNI ベースのソリューション(Cilium)
  • アプリケーションレベルの最適化

代替ソリューションの比較

機能Service MeshCNI(Cilium)Ingress Controllerアプリケーションレベル
L7 トラフィック管理✅ 完全対応⚠️ 制限あり⚠️ Ingress のみ✅ 可能
mTLS 自動化✅ 完全対応✅ 可能❌ 非対応❌ 手動実装
Distributed Tracing✅ 自動❌ 非対応❌ 非対応⚠️ 手動実装
L3/L4 ポリシー✅ 対応✅ 完全対応❌ 非対応❌ 非対応
運用の複雑さ🔴 高🟡 中🟢 低🟡 中
リソースオーバーヘッド

🔴 高(Sidecar)
🟢 低(Ambient)

🟢 低🟢 低🟢 なし
適した規模10 以上のサービスすべての規模小規模小規模

CNI ベースのソリューション(Cilium)

Cilium は eBPF をベースに、ネットワークレベルで多くの機能を提供します。

Cilium がより適している場合:

  • L3/L4 ネットワークポリシーが主な目的である
  • 高パフォーマンスが中核要件である
  • Service Mesh の運用負荷を避けたい
  • シンプルな mTLS と可観測性のみが必要である

参照: Cilium ドキュメント

判断チェックリスト

導入前に次の質問に回答してください。

アーキテクチャ:

  • [ ] マイクロサービスが 10 個以上ありますか?
  • [ ] サービス間通信は複雑ですか?
  • [ ] 複数のプログラミング言語を使用していますか?

セキュリティ:

  • [ ] Zero Trust セキュリティモデルが必要ですか?
  • [ ] サービス間の mTLS 暗号化は必須ですか?
  • [ ] きめ細かなアクセス制御が必要ですか?

トラフィック管理:

  • [ ] Canary デプロイメント、A/B テストが必要ですか?
  • [ ] 高度なルーティングルールが必要ですか?
  • [ ] 多くのサービスに Circuit Breaking、Retry が必要ですか?

可観測性:

  • [ ] 分散トレーシングは必須ですか?
  • [ ] 統合されたメトリクス収集が必要ですか?
  • [ ] サービストポロジーの可視化が必要ですか?

運用:

  • [ ] Service Mesh のエキスパートがいますか?
  • [ ] 運用の複雑さに対応できますか?
  • [ ] リソースオーバーヘッドを許容できますか?

結果:

  • ✅ 10 個以上にチェック: Service Mesh を強く推奨
  • 🟡 5~9 個にチェック: 慎重な評価が必要。小規模から始める(Ambient Mode を推奨)
  • ❌ 4 個以下にチェック: 代替ソリューション(CNI、Ingress、アプリケーションレベル)を検討

段階的な導入戦略

Service Mesh が必要と判断した場合は、段階的に導入してください。

推奨順序:

  1. パイロットプロジェクト(1~2 個の namespace)
  2. 可観測性を優先(メトリクス、ログ、トレース)
  3. セキュリティを適用(mTLS PERMISSIVE → STRICT)
  4. トラフィック管理(VirtualService、DestinationRule)
  5. 全社展開

主な機能

  1. トラフィック管理

    Traffic Routing
    • インテリジェントルーティングとロードバランシング
    • A/B テスト、Canary デプロイメント、Blue/Green デプロイメント
    • Circuit Breaking、Retry、Timeout の制御
    • Traffic Mirroring と Fault Injection
  2. セキュリティ

    Security Architecture
    • サービス間の自動 mTLS 暗号化
    • 強力な認証と認可
    • きめ細かなアクセス制御ポリシー
    • ネットワーク分離とセキュリティポリシー
  3. 可観測性

    Kiali Service Graph
    • メトリクス、ログ、トレースの自動生成
    • Prometheus、Grafana、Jaeger、Kiali との統合
    • サービストポロジーの可視化
    • リアルタイムトラフィック監視
  4. レジリエンス

    • Circuit Breaker パターン
    • Rate Limiting
    • Outlier Detection
    • Zone Aware Routing

Istio アーキテクチャ

Istio Architecture

Istio は Control Plane と Data Plane で構成されます。

Control Plane(istiod):

  • Pilot: Service discovery、トラフィックルーティングルールの管理
  • Citadel: 証明書の生成と管理、mTLS の有効化
  • Galley: 設定の検証とデプロイ

Data Plane:

  • Envoy Proxy: 各 Pod に sidecar としてデプロイされ、すべてのネットワークトラフィックをインターセプトして制御する

Amazon EKS で Istio を使用する利点

  1. マイクロサービス管理の容易さ
    • アプリケーションコードを変更せずにトラフィックを管理
    • 宣言的設定による一貫したポリシー適用
    • Kubernetes Native API を使用
  2. セキュリティの強化
    • サービス間の自動暗号化
    • AWS IAM と統合された認証
    • きめ細かな権限制御
  3. 可観測性の向上
    • Amazon CloudWatch との統合
    • AWS X-Ray による分散トレーシング
    • 詳細なメトリクスとログ
  4. AWS サービスとの統合
    • Application Load Balancer(ALB)との統合
    • AWS Certificate Manager(ACM)との統合
    • Amazon EBS CSI Driver と互換

はじめに

Gateway API Architecture

Istio を初めて使用する場合は、次の順序でドキュメントをお読みください。

  1. インストールと初期設定: EKS クラスターに Istio をインストールする
  2. 基本概念: Istio の中核概念を理解する
  3. トラフィック管理: Gateway、VirtualService、DestinationRule を学ぶ
  4. セキュリティ: mTLS、認証、認可を設定する
  5. 可観測性: メトリクス、ログ、トレースを収集する
  6. ベストプラクティス: 本番環境向けの推奨事項

ハンズオン例

各セクションには、動作する YAML 例が含まれています。すべての例は、クリックしてコピーできるように構成されています。

yaml
# Example VirtualService
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v1

参考資料

クイズ

この章で学んだ内容を確認するために、以下のクイズに挑戦してください。