こんにちは!👋
Istioを学習したり、ICA (Istio Certified Associate) 資格の準備をしていると、最も途方に暮れる瞬間はいつでしょうか?それは、「この状況で一体どのYAMLリソースを使えばいいんだ?」と悩む時です。🤯
VirtualService、DestinationRule、Gateway、ServiceEntry… 名前も似ていて、役割も混乱しますよね?そこで今日は、試験会場に入る前に頭に入れておくべき状況別Istioリソースマッピングチートシートを用意しました。
この記事を一つだけ熟読すれば、複雑なシナリオ問題も怖くなくなるでしょう!🏃♂️💨

🚦 1. トラフィック管理 (Traffic Management)
Q. 「リクエストをどこへ、どのように送るか?」
トラフィック制御の問題は、ICA試験の頻出テーマです。デプロイ戦略やネットワークの回復弾力性(Resilience)に関する要件が出たら、以下のリソースを思い出してください。
🔀 VirtualService (ナビゲーション)
トラフィックがどこへ行くべきか経路を決定する主要なリソースです。
- カナリアデプロイ (Canary): 「新バージョン(v2)にトラフィックの10%だけを送る」 👉 route > weight フィールドを使用
- 条件付きルーティング: 「iPhoneユーザー(ヘッダー)はモバイルページに送る」 👉 match > headers フィールドを使用
- ネットワーク回復: 「応答がない場合、3回再試行する(Retry)」または「2秒以内に応答がなければ切断する(Timeout)」 👉 retries, timeout フィールドを使用
- トラフィック複製: 「実稼働環境に影響を与えずにテストしたい」 👉 mirror フィールドを使用
🛑 DestinationRule (到着後のルール)
トラフィックが目的地(Podグループ)に到着した後、どのように処理されるかを定義します。
- バージョン区分 (Subsets): 「v1 Podとv2 Podを論理的に分ける」 👉 subsets (ラベルで区分)
- サーキットブレーカー (Circuit Breaker): 「同時接続が多すぎる、またはエラーが頻繁なPodは一時的に遮断する」 👉 trafficPolicy > outlierDetection, connectionPool
- ロードバランシング: 「ラウンドロビンではなく、ランダム方式で分散する」 👉 trafficPolicy > loadBalancer
🛡️ 2. セキュリティ (Security)
Q. 「誰がアクセスでき、どのように通信するか?」
セキュリティ問題は、「誰かを許可し、誰かをブロックする」または「暗号化する」という形で出題されます。
👮 AuthorizationPolicy (アクセス制御)
最もよく使われるセキュリティリソースです。誰が(Who)何を(What)できるかを定義します。
- ホワイトリスト: 「『Product』サービスのみアクセスを許可する」 👉 action: ALLOW, rules > from
- メソッド制限: 「GETリクエストのみ許可し、POSTはブロックする」 👉 rules > to > operation > methods: [“GET”]
- 全体遮断: 「このネームスペースの全ての扉を閉じる」 👉 spec: {} (空のルール = 全て拒否)
🔐 PeerAuthentication (mTLS)
サービス間の通信暗号化レベルを設定します。
- 強制暗号化: 「全ての通信は必ずmTLSで行う」 👉 mtls > mode: STRICT
- 柔軟なモード: 「プレーンテキストとmTLSの両方を許可する(移行中)」 👉 mode: PERMISSIVE
🆔 RequestAuthentication (JWT)
- ユーザー認証: 「JWTトークンを検証する」 👉 jwtRules (Issuer, JWKS URI 設定)
🌐 3. 外部接続 & ゲートウェイ (Edge & External)
Q. 「クラスターの外部と内部はどのように接続されるか?」
Istioメッシュの境界線(Edge)を扱う領域です。
🚪 Gateway (玄関)
- 扉を開く: 「外部から入ってくる80番ポートのトラフィックを受け入れる」 👉 servers > port, hosts
- 注意: Gatewayを作成するだけでは、扉を開いただけです。どこへ行くかはVirtualServiceが必要です!
🗺️ ServiceEntry (外部アドレス帳)
- 外部サービス登録: 「メッシュ内からGoogleやYahooのAPIを呼び出す必要がある」 👉 hosts, resolution: DNS
- Istioはデフォルトで未知の外部アドレスをブロックまたは管理しないため、登録が必要です。
📤 Egress TLS (出力時の暗号化)
- TLS Origination: 「内部アプリはHTTPで送信するが、外部に出る際はHTTPSに変換して送信する」 👉 DestinationRuleの trafficPolicy > tls > mode: SIMPLE
💡 4. 最も混乱しやすいポイント: VS vs DR
試験で最も混同しやすい2つのリソースを、一挙に整理します!
| リソース | 役割の比喩 | 主要機能キーワード |
| — | — | — |
| VirtualService (VS) | 🚗 ナビゲーション | 経路探索、%分散、再試行、タイムアウト |
| DestinationRule (DR) | 🅿️ 駐車場ルール | バージョン分け(Subset)、サーキットブレーカー、mTLS設定 |
– Tip: 「経路」や「流れ」を制御するならVS、「Podグループ設定」や「障害遮断」ならDRです。
📝 合格のための試験会場攻略ヒント (Exam Tips)
- ネームスペース(Namespace)確認必須: 問題で要求されている作業がdefaultなのかistio-systemなのか、二重に確認してください。間違った場所に作成すると0点です。😱
- applyは命: YAMLファイルだけきれいに作成して保存しても意味がありません。必ずkubectl apply -f <ファイル>を実行してリソースを作成してください。
- Gateway接続: VirtualServiceを作成する際、gatewaysフィールドに作成したばかりのGateway名を記述し忘れ、外部接続ができないというミスが非常に多いです。必ず接続を確認してください!🔗
まとめ
🚦 1. トラフィック管理 (Traffic Management)
「リクエストをどこへ、どのように送るか?」
| 状況 (Scenario) | 必要なリソース | 主要設定フィールド (Key Fields) |
| — | — | — |
| A/Bテスト、カナリアデプロイ (トラフィック % 分割) | VirtualService | route > weight (例: 90, 10) |
| URLパス、ヘッダーに基づいて異なる場所へ送りたい場合 | VirtualService | match > uri, headers |
| 再試行(Retry)、タイムアウト(Timeout) 設定 | VirtualService | retries, timeout |
| 特定バージョン(v1, v2)グループの定義 | DestinationRule | subsets (ラベルでPodを区分) |
| ロードバランシングアルゴリズムの変更 (RoundRobin, Randomなど) | DestinationRule | trafficPolicy > loadBalancer |
| サーキットブレーカー (接続制限、障害遮断) | DestinationRule | trafficPolicy > connectionPool, outlierDetection |
| トラフィックミラーリング (実際の要求を複製してテスト) | VirtualService | mirror |
—
🛡️ 2. セキュリティ (Security)
「誰がアクセスでき、どのように通信するか?」
| 状況 (Scenario) | 必要なリソース | 主要設定フィールド (Key Fields) |
| — | — | — |
| 特定サービスのみアクセス許可 (ホワイトリスト) | AuthorizationPolicy | action: ALLOW, rules > from, to |
| 特定パス/メソッドの遮断 (拒否) | AuthorizationPolicy | action: DENY, rules (優先度高) |
| mTLSモード設定 (Strict, Permissive) | PeerAuthentication | mtls > mode: STRICT |
| JWTトークン認証 (エンドユーザー認証) | RequestAuthentication | jwtRules > issuer, jwksUri |
| ネームスペース全体を閉じたい場合 | AuthorizationPolicy | spec: {} (空のルール = 全て遮断) |
—
🌐 3. 外部接続 & ゲートウェイ (Edge & External)
「クラスターの外部と内部の接続」
| 状況 (Scenario) | 必要なリソース | 主要設定フィールド (Key Fields) |
| — | — | — |
| 外部トラフィック受信 (Ingressポートを開く) | Gateway | servers > port, hosts |
| 受信したトラフィックを内部サービスへルーティング | VirtualService | gatewaysにGateway名を明記 |
| 外部サービス(Google, Yahooなど)の登録 | ServiceEntry | hosts, ports, resolution: DNS |
| 出力トラフィックをHTTPSに変換 (TLS Origination) | DestinationRule | trafficPolicy > tls > mode: SIMPLE |
| 特定ノード(Egress Gateway)経由でのみ出力させる | Gateway (Egress用) + VirtualService | gateways: [mesh, egress-gw] |
このチートシートが皆さんのICA合格に役立つことを願っています!Istioは複雑に見えますが、状況に応じて適切なツールをうまく組み合わせれば、十分に攻略できます。頑張ってください!💪✨
ご質問や追加で取り上げてほしい内容があれば、コメントで教えてください!
コメントを残す