- Authors

- Name
- Youngju Kim
- @fjvbn20031
- はじめに
- 1. Istio Installation & Configuration(問題 1-8)
- 2. Traffic Management(問題 9-40)
- 3. Resilience & Fault Injection(問題 41-48)
- 4. Securing Workloads(問題 49-64)
- 5. Observability(問題 65-72)
- 6. Advanced Topics(問題 73-80)
- まとめ
はじめに
ICA(Istio Certified Associate)試験は、Istioサービスメッシュのコアコンセプトと実践的な活用能力を検証する資格です。この記事では、試験ドメイン別の80問を通じて実践対策ができるように構成しました。
試験ドメイン構成
| ドメイン | 比重 | 問題数 |
|---|---|---|
| Istio Installation & Configuration | 10% | 8 |
| Traffic Management | 40% | 32 |
| Resilience & Fault Injection | 10% | 8 |
| Securing Workloads | 20% | 16 |
| Observability | 10% | 8 |
| Advanced Topics | 10% | 8 |
1. Istio Installation & Configuration(問題 1-8)
問題 1: Istioのインストールプロファイルで、本番環境に推奨されるデフォルトプロファイルは?
- A) minimal
- B) default
- C) demo
- D) preview
正解: B) default
defaultプロファイルは本番デプロイに推奨されるプロファイルです。istiodとIngress Gatewayを含みます。demoプロファイルはすべてのコンポーネントを含みますがリソース要件が低く、学習/テスト用です。minimalはistiodのみ、previewは実験的機能を含みます。
問題 2: istioctlを使用してIstioをインストールする正しいコマンドは?
- A)
istioctl apply --set profile=default - B)
istioctl install --set profile=default - C)
istioctl setup --profile=default - D)
istioctl init --set profile=default
正解: B) istioctl install --set profile=default
istioctl installがクラスターにIstioをインストールする標準的な方法です。--set profile=フラグでインストールプロファイルを指定できます。apply、setup、initは有効なistioctlサブコマンドではありません。
問題 3: IstioOperatorリソースで特定のコンポーネントを無効にするフィールドは?
- A)
spec.components.NAME.disabled: true - B)
spec.components.NAME.enabled: false - C)
spec.components.NAME.install: false - D)
spec.values.NAME.enabled: false
正解: B) spec.components.NAME.enabled: false
IstioOperator CRDでは、各コンポーネントはspec.componentsの下に位置し、enabled: falseで無効化できます。例えばIngress Gatewayを無効化するにはspec.components.ingressGateways[0].enabled: falseと設定します。
問題 4: Istioのrevisionベースのカナリアアップグレードで新バージョンのコントロールプレーンをインストールする正しい方法は?
- A)
istioctl install --set revision=canary - B)
istioctl upgrade --canary - C)
istioctl install --set tag=canary - D)
istioctl canary install
正解: A) istioctl install --set revision=canary
revisionベースのカナリアアップグレードは--set revision=フラグを使用して、既存のコントロールプレーンと並行して新しいインスタンスをインストールします。その後、ネームスペースラベルをistio.io/rev=canaryに変更してワークロードを段階的に移行します。
問題 5: サイドカー自動注入を特定のネームスペースで有効にするラベルは?
- A)
sidecar.istio.io/inject: "true" - B)
istio-injection: enabled - C)
istio.io/sidecar: "true" - D)
inject.istio.io: "true"
正解: B) istio-injection: enabled
ネームスペースにistio-injection: enabledラベルを設定すると、そのネームスペースのすべてのPodにEnvoyサイドカーが自動注入されます。revisionベースのインストールではistio.io/rev=REVISION_NAMEラベルを使用します。
問題 6: istioctl analyzeコマンドの主な目的は?
- A) クラスターのネットワークパフォーマンス分析
- B) Istio構成の潜在的な問題点の検出
- C) Envoyプロキシのメモリ使用量分析
- D) サービス間のトラフィックパターン分析
正解: B) Istio構成の潜在的な問題点の検出
istioctl analyzeはIstio構成を静的に分析し、潜在的な問題点、誤った構成、ベストプラクティス違反などを検出します。ライブクラスターまたはローカルファイルセットに対して実行できます。
問題 7: Istioのコントロールプレーンコンポーネントであるistiodが統合する従来のコンポーネントの正しい組み合わせは?
- A) Pilot、Mixer、Galley
- B) Pilot、Citadel、Galley
- C) Pilot、Citadel、Mixer
- D) Envoy、Pilot、Citadel
正解: B) Pilot、Citadel、Galley
istiodはIstio 1.5からPilot(トラフィック管理/xDS)、Citadel(証明書管理/CA)、Galley(構成検証)を単一バイナリに統合しました。MixerはIstio 1.8で削除され、Envoyはデータプレーンプロキシです。
問題 8: istioctl proxy-statusコマンドで確認できないものは?
- A) プロキシとistiod間の同期状態
- B) プロキシが受信したxDS構成バージョン
- C) プロキシのCPU/メモリ使用量
- D) プロキシのCDS、LDS、EDS、RDS状態
正解: C) プロキシのCPU/メモリ使用量
istioctl proxy-statusは各プロキシのxDS同期状態(SYNCED、NOT SENT、STALE)を表示します。CDS、LDS、EDS、RDSの同期状態とバージョンを確認できますが、リソース使用量はPrometheusメトリクスやkubectl topで確認する必要があります。
2. Traffic Management(問題 9-40)
問題 9: VirtualServiceで2つのサービスバージョンにトラフィックを分割する正しい設定は?
- A)
spec.http.routeに複数のdestinationをweightと共に定義 - B)
spec.tcp.splitに比率を定義 - C)
spec.http.mirrorに2つの宛先を定義 - D)
spec.http.redirectに比率を定義
正解: A) spec.http.routeに複数のdestinationをweightと共に定義
VirtualServiceのspec.http[].route[]に複数のdestinationを定義し、それぞれにweightを設定してトラフィックを分割します。例えばv1に80%、v2に20%を送るカナリアデプロイが可能です。
問題 10: DestinationRuleでsubsetを定義するフィールドは?
- A)
spec.subsets[].labels - B)
spec.trafficPolicy.subsets - C)
spec.host.subsets - D)
spec.subsets[].nameとspec.subsets[].labels
正解: D) spec.subsets[].nameとspec.subsets[].labels
DestinationRuleのsubsetはnameで識別し、labelsで含めるPodを選択します。VirtualServiceはこのsubset nameを参照してトラフィックをルーティングします。
問題 11: Istio Gatewayリソースのserversフィールドの役割は?
- A) バックエンドサーバーのアドレスを定義
- B) ゲートウェイがリッスンするポートとプロトコルを定義
- C) サービスディスカバリに使用するサーバーリストを定義
- D) Envoyプロキシサーバーの数を定義
正解: B) ゲートウェイがリッスンするポートとプロトコルを定義
Gatewayのspec.servers[]はゲートウェイがリッスンするポート、プロトコル(HTTP/HTTPS/TCPなど)、ホスト名を定義します。TLS設定もここに含まれます。実際のルーティングはVirtualServiceで行います。
問題 12: ServiceEntryの主な用途は?
- A) メッシュ内部サービスの登録
- B) 外部サービスをIstioメッシュのサービスレジストリに追加
- C) Kubernetes Serviceの作成
- D) DNSサーバー構成の変更
正解: B) 外部サービスをIstioメッシュのサービスレジストリに追加
ServiceEntryを使用すると、メッシュ外部のサービス(外部API、データベースなど)をIstioのサービスレジストリに登録できます。これにより外部サービスにもトラフィック管理、mTLS、モニタリングポリシーを適用できます。
問題 13: VirtualServiceでHTTPヘッダーベースのルーティングを設定するフィールドは?
- A)
spec.http[].match[].headers - B)
spec.http[].route[].headers - C)
spec.http[].filter.headers - D)
spec.http[].headerMatch
正解: A) spec.http[].match[].headers
HTTPマッチ条件のheadersフィールドで特定のヘッダー値に基づいてルーティングできます。exact、prefix、regexマッチングをサポートします。
問題 14: DestinationRuleの接続プール設定の正しい位置は?
- A)
spec.trafficPolicy.connectionPool - B)
spec.connectionPool - C)
spec.policy.pool - D)
spec.trafficPolicy.connections
正解: A) spec.trafficPolicy.connectionPool
接続プール設定はspec.trafficPolicy.connectionPoolの下にtcpとhttpセクションに分かれます。TCPではmaxConnections、HTTPではh2UpgradePolicy、maxRequestsPerConnectionなどを設定します。
問題 15: VirtualServiceのtimeout設定の単位は?
- A) ミリ秒のみ
- B) 秒単位(例:"10s")
- C) 分単位のみ
- D) 整数のみ(単位なし)
正解: B) 秒単位(例:"10s")
VirtualServiceのspec.http[].timeoutはDuration形式で指定し、"10s"、"0.5s"などで表現します。デフォルトはタイムアウトなし(0s)で、この設定はEnvoyのroute timeoutに変換されます。
問題 16: VirtualServiceでURIリライトを設定する正しい方法は?
- A)
spec.http[].rewrite.uri - B)
spec.http[].route[].rewrite - C)
spec.http[].redirect.uri - D)
spec.http[].transform.uri
正解: A) spec.http[].rewrite.uri
spec.http[].rewriteフィールドでuriとauthorityを書き換えられます。rewriteはリクエストをプロキシしながらURIを変更し、redirectはクライアントに3xxレスポンスを返します。
問題 17: Sidecarリソースのegress設定でhostsフィールドの形式は?
- A) サービス名のみ(例:"reviews")
- B) namespace/hostname形式(例:"./"、"istio-system/")
- C) IPアドレスのみ
- D) URL形式(例:"http://reviews:9080")
正解: B) namespace/hostname形式(例:"./"、"istio-system/")
Sidecarのegress.hostsは"namespace/dnsName"形式を使用します。"./"は同じネームスペースのすべてのサービス、"istio-system/"はistio-systemのすべてのサービスを意味します。これによりサイドカーが知る必要のあるサービス範囲を制限してメモリを節約します。
問題 18: VirtualServiceでトラフィックミラーリング(シャドウイング)を設定するフィールドは?
- A)
spec.http[].mirror - B)
spec.http[].shadow - C)
spec.http[].duplicate - D)
spec.http[].copy
正解: A) spec.http[].mirror
spec.http[].mirrorはトラフィックを別のサービスにミラーリング(複製)します。ミラーリングされたリクエストは「fire and forget」方式で送信され、レスポンスは無視されます。mirrorPercentageでミラーリング比率を調整できます。
問題 19: GatewayリソースでTLSをSIMPLEモードに設定する際に必要なものは?
- A) クライアント証明書のみ
- B) サーバー証明書と秘密鍵
- C) CA証明書のみ
- D) 証明書なしで可能
正解: B) サーバー証明書と秘密鍵
SIMPLE TLSモードは一方向TLSで、サーバー証明書(credentialNameで参照されるSecret)が必要です。MUTUALモードはクライアント証明書も要求し、PASSHTHROUGHはTLS終端なしで通過させます。
問題 20: VirtualServiceで正規表現を使用したURIマッチングフィールドは?
- A)
spec.http[].match[].uri.regex - B)
spec.http[].match[].uri.pattern - C)
spec.http[].match[].uri.regexp - D)
spec.http[].match[].uri.match
正解: A) spec.http[].match[].uri.regex
URIマッチングのregexフィールドはRE2正規表現構文を使用します。exact(完全一致)、prefix(プレフィックス一致)、regex(正規表現一致)の3つの方式をサポートします。
問題 21: DestinationRuleでサポートされないロードバランシングアルゴリズムは?
- A) ROUND_ROBIN
- B) LEAST_CONN
- C) RANDOM
- D) WEIGHTED_RESPONSE_TIME
正解: D) WEIGHTED_RESPONSE_TIME
Istio DestinationRuleはROUND_ROBIN(デフォルト)、LEAST_CONN、RANDOM、PASSHTHROUGHをサポートします。consistentHashを使用したセッションアフィニティもサポートします。WEIGHTED_RESPONSE_TIMEはIstioでサポートされないアルゴリズムです。
問題 22: consistentHashロードバランシングでサポートされないハッシュキーは?
- A) httpHeaderName
- B) httpCookie
- C) useSourceIp
- D) httpMethod
正解: D) httpMethod
consistentHashはhttpHeaderName、httpCookie、useSourceIp、httpQueryParameterNameをハッシュキーとしてサポートします。HTTPメソッド(GET、POSTなど)はハッシュキーとして使用できません。
問題 23: VirtualServiceをGatewayにバインドする正しい設定は?
- A)
spec.hostsとspec.gatewaysの両方を設定 - B)
spec.hostsのみ設定 - C)
spec.gateway(単数形)で設定 - D)
spec.bindでGatewayを参照
正解: A) spec.hostsとspec.gatewaysの両方を設定
VirtualServiceをGatewayにバインドするには、spec.gateways[]にGateway名を指定し、spec.hosts[]にGatewayのserver hostと一致するホストを設定します。メッシュ内部トラフィックにも適用するには"mesh"をgatewaysに追加します。
問題 24: VirtualServiceで特定のソースワークロードからのトラフィックにのみルールを適用する方法は?
- A)
spec.http[].match[].sourceLabels - B)
spec.http[].match[].source - C)
spec.http[].from - D)
spec.http[].match[].sourceNamespaceとspec.http[].match[].sourceLabels
正解: D) spec.http[].match[].sourceNamespaceとspec.http[].match[].sourceLabels
match条件でsourceLabelsでソースワークロードのラベルをマッチし、sourceNamespaceでソースネームスペースを制限できます。特定のサービスからのリクエストにのみ異なるルーティングルールを適用できます。
問題 25: VirtualServiceでリクエストヘッダーを追加/変更する正しい位置は?
- A)
spec.http[].headers.request.set - B)
spec.http[].route[].headers.request - C)
spec.http[].addHeaders - D)
spec.http[].requestHeaders
正解: A) spec.http[].headers.request.set
VirtualServiceのheadersフィールドでrequestとresponseそれぞれに対してset(上書き)、add(追加)、remove(削除)操作を実行できます。routeレベルでもヘッダー操作が可能です。
問題 26: ServiceEntryでresolutionフィールドをSTATICに設定すると?
- A) DNSを通じてエンドポイントを解決
- B) endpointsフィールドに指定されたIPを直接使用
- C) メッシュ内部のKubernetes Serviceを参照
- D) mTLSを無効化して平文通信
正解: B) endpointsフィールドに指定されたIPを直接使用
resolutionがSTATICの場合、endpointsフィールドに明示されたIPアドレスを直接使用します。DNSはDNSサーバーを通じて解決し、NONEは接続時に元のリクエストアドレスを使用します。
問題 27: VirtualServiceでHTTP redirectを設定する際のレスポンスコードのデフォルト値は?
- A) 301(Moved Permanently)
- B) 302(Found)
- C) 307(Temporary Redirect)
- D) 308(Permanent Redirect)
正解: A) 301(Moved Permanently)
VirtualServiceのspec.http[].redirectでredirectCodeを指定しない場合、デフォルトは301です。redirectCodeフィールドで301、302、303、307、308などを明示的に設定できます。
問題 28: DestinationRuleのTLSモードISTIO_MUTUALの意味は?
- A) 手動で証明書を指定したmTLS
- B) Istioが自動管理するmTLS
- C) TLSなしの平文通信
- D) 一方向TLSのみ使用
正解: B) Istioが自動管理するmTLS
ISTIO_MUTUALはIstioのCA(Citadel)が自動的にプロビジョニングした証明書を使用するmTLSです。MUTUALはユーザーが直接証明書を指定する方式、SIMPLEは一方向TLS、DISABLEはTLS無効化です。
問題 29: Gatewayリソースで特定のワークロードを選択するフィールドは?
- A)
spec.workloadSelector - B)
spec.selector - C)
spec.podSelector - D)
spec.targetRef
正解: B) spec.selector
Gatewayのspec.selectorはmatchLabelsを使用して、このGateway構成を適用するIstio Ingress/Egress Gateway Podを選択します。一般的にistio: ingressgatewayラベルを使用します。
問題 30: VirtualServiceでdelegateを使用する目的は?
- A) 他のVirtualServiceにルーティングルールを委任
- B) サービスアカウント権限を委任
- C) TLS証明書管理を委任
- D) メトリクス収集を他のコンポーネントに委任
正解: A) 他のVirtualServiceにルーティングルールを委任
delegateを使用すると、特定のパスプレフィックスに対するルーティングルールを他のVirtualServiceに委任できます。大規模環境でルーティング構成を分散管理できます。
問題 31: VirtualServiceのexportToフィールドのデフォルト値は?
- A) "."(現在のネームスペースのみ)
- B) "*"(すべてのネームスペース)
- C) "~"(どこにも公開しない)
- D) デフォルト値なし(必須フィールド)
正解: B) "*"(すべてのネームスペース)
exportToのデフォルトは"*"ですべてのネームスペースに公開されます。"."は現在のネームスペースのみ、"~"は公開しないことを意味します。特定のネームスペースを指定することもできます。
問題 32: GatewayのTLS PASSHTHROUGHモードの動作は?
- A) TLSを終端して平文でバックエンドに転送
- B) TLS接続を終端せずそのままバックエンドに転送
- C) mTLSにアップグレードしてバックエンドに転送
- D) TLSを終端して新しいTLSで再暗号化
正解: B) TLS接続を終端せずそのままバックエンドに転送
PASSHTHROUGHモードではゲートウェイがTLS接続を終端せず、SNIヘッダーを基にルーティングします。バックエンドサービスが直接TLSを処理する場合に使用されます。
問題 33: VirtualServiceでmatch条件なしにrouteのみ定義すると?
- A) エラー発生
- B) すべてのリクエストにルーティングルールが適用
- C) どのリクエストにも適用されない
- D) デフォルトルーティングのみ適用
正解: B) すべてのリクエストにルーティングルールが適用
match条件のないHTTPルートはすべてのリクエストにマッチします。「catch-all」ルールとして使用され、通常VirtualServiceの最後のルールとして配置します。
問題 34: Sidecarリソースの主な用途でないものは?
- A) サイドカーのインバウンド/アウトバウンドトラフィック範囲の制限
- B) Envoyのメモリ使用量の最適化
- C) 特定ポートのプロトコル明示
- D) ワークロード間のmTLSモード設定
正解: D) ワークロード間のmTLSモード設定
Sidecarリソースはサイドカープロキシの可視性範囲を制限してメモリを節約し、インバウンド/アウトバウンドリスナーを細かく構成します。mTLSモード設定はPeerAuthenticationとDestinationRuleで行います。
問題 35: VirtualServiceで複数のmatch条件はどのように評価されますか?
- A) すべての条件がANDで結合
- B) すべての条件がORで結合
- C) 同じmatch内の条件はAND、異なるmatchブロックはOR
- D) 優先順位に従って1つだけ評価
正解: C) 同じmatch内の条件はAND、異なるmatchブロックはOR
1つのmatchブロック内の条件(headers、uri、methodなど)はANDで結合されます。複数のmatchブロックはORで評価され、いずれかがマッチすれば対応するrouteが適用されます。
問題 36: ServiceEntryでlocationフィールドがMESH_INTERNALの場合の意味は?
- A) サービスがメッシュ外部にある
- B) サービスがメッシュ内部にあるがKubernetes Serviceではない
- C) サービスがローカルプロキシからのみアクセス可能
- D) サービスが同じネームスペースにのみ公開
正解: B) サービスがメッシュ内部にあるがKubernetes Serviceではない
MESH_INTERNALはサービスがメッシュの一部だがKubernetes Serviceとして登録されていない場合です(例:VMワークロード)。MESH_EXTERNALはメッシュ外部のサービス(外部APIなど)を意味します。
問題 37: VirtualServiceのretries設定でattemptsフィールドの意味は?
- A) 総リクエスト試行回数(元のリクエスト含む)
- B) 元のリクエスト失敗後のリトライ回数
- C) 同時リトライ回数
- D) 1秒あたりの最大リトライ回数
正解: B) 元のリクエスト失敗後のリトライ回数
retries.attemptsは元のリクエスト失敗後に追加でリトライする回数です。例えばattemptsが3の場合、最大4回(元の1回+リトライ3回)のリクエストが発生します。retryOnでリトライ条件を設定します。
問題 38: EnvoyFilterリソースのapplyToフィールドで有効でない値は?
- A) CLUSTER
- B) LISTENER
- C) ROUTE_CONFIGURATION
- D) SERVICE
正解: D) SERVICE
EnvoyFilterのapplyToはCLUSTER、LISTENER、ROUTE_CONFIGURATION、NETWORK_FILTER、HTTP_FILTER、HTTP_ROUTE、VIRTUAL_HOSTなどをサポートします。SERVICEは有効な値ではありません。
問題 39: VirtualServiceでcorsPolicyを設定する正しい位置は?
- A)
spec.http[].corsPolicy - B)
spec.corsPolicy - C)
spec.http[].route[].corsPolicy - D)
spec.http[].headers.cors
正解: A) spec.http[].corsPolicy
CORSポリシーはspec.http[].corsPolicyで設定します。allowOrigins、allowMethods、allowHeaders、exposeHeaders、maxAgeなどを構成できます。
問題 40: VirtualServiceのHTTP routeの適用順序は?
- A) アルファベット順
- B) 作成時間順
- C) 定義された順序(上から下へ、最初のマッチが適用)
- D) weight値の降順
正解: C) 定義された順序(上から下へ、最初のマッチが適用)
VirtualServiceのHTTPルールは定義された順序で評価され、最初にマッチするルールが適用されます。そのため、より具体的なルールを先に配置する必要があります。
3. Resilience & Fault Injection(問題 41-48)
問題 41: DestinationRuleのサーキットブレーカー(outlierDetection)設定でconsecutive5xxErrorsの意味は?
- A) 5xxエラー率の閾値
- B) 連続5xxエラー回数の閾値
- C) 5xxエラーの累積総数
- D) 5秒間のエラー数
正解: B) 連続5xxエラー回数の閾値
consecutive5xxErrorsはエンドポイントが連続で5xxエラーを返す回数の閾値です。この閾値を超えると、そのエンドポイントはロードバランシングプールから一時的に除外(ejection)されます。
問題 42: outlierDetectionのbaseEjectionTimeの意味は?
- A) サーキットブレーカーが活性化するまでの待機時間
- B) エンドポイントがプールから除外される最小時間
- C) エラー検出間隔
- D) 回路全体が開く時間
正解: B) エンドポイントがプールから除外される最小時間
baseEjectionTimeはエンドポイントがロードバランシングプールから除外される基本時間です。実際の除外時間はbaseEjectionTime x ejection回数で計算され、繰り返し失敗すると徐々に長くなります。
問題 43: VirtualServiceでfault injectionによる遅延(delay)注入設定の正しい形式は?
- A)
spec.http[].fault.delay.fixedDelayとspec.http[].fault.delay.percentage - B)
spec.http[].delay.time - C)
spec.http[].fault.latency - D)
spec.http[].inject.delay
正解: A) spec.http[].fault.delay.fixedDelayとspec.http[].fault.delay.percentage
fault injectionのdelayはfixedDelayで遅延時間を、percentage.valueで遅延が適用されるリクエスト比率を設定します。例えばfixedDelay: 5s、percentage.value: 10で10%のリクエストに5秒の遅延が追加されます。
問題 44: fault injectionのabortでhttpStatusフィールドで指定するものは?
- A) abortがトリガーされる条件のステータスコード
- B) クライアントに返すHTTPステータスコード
- C) バックエンドサービスの健全性ステータスコード
- D) プロキシ内部ステータスコード
正解: B) クライアントに返すHTTPステータスコード
fault.abort.httpStatusはリクエストを中断してクライアントに返すHTTPステータスコード(例:500、503)を指定します。percentage.valueと共に使用して一定比率のリクエストを意図的に失敗させます。
問題 45: DestinationRuleのconnectionPoolでhttp1MaxPendingRequestsの役割は?
- A) HTTP/1.1最大接続数
- B) 接続待ちの最大リクエスト数
- C) 1秒あたりの最大リクエスト数
- D) 最大アイドル接続数
正解: B) 接続待ちの最大リクエスト数
http1MaxPendingRequestsは接続プールの接続を待つ待機キューの最大サイズです。この値を超えるとサーキットブレーカーが作動して503を返します。デフォルトは2^32-1(事実上無制限)です。
問題 46: outlierDetectionのintervalフィールドの意味は?
- A) ejection後に再確認する間隔
- B) エラー統計を分析する周期
- C) プロキシがヘルスチェックを実行する間隔
- D) ロードバランサーがエンドポイントを更新する間隔
正解: B) エラー統計を分析する周期
intervalはoutlier detection分析を実行する時間間隔です。デフォルトは10秒です。各intervalごとに各エンドポイントのエラー統計を確認してejectionの可否を判断します。
問題 47: VirtualServiceのretriesでretryOnフィールドに設定できない条件は?
- A) 5xx
- B) gateway-error
- C) connect-failure
- D) client-error
正解: D) client-error
retryOnには5xx、gateway-error、connect-failure、retriable-4xx、refused-stream、retriable-status-codes、reset、retriable-headersなどを設定できます。client-errorは有効なretryOn条件ではありません。
問題 48: DestinationRuleのconnectionPoolでmaxRequestsPerConnectionの意味は?
- A) クラスター全体の最大リクエスト数
- B) 1つの接続で処理する最大リクエスト数(以降接続終了)
- C) 1秒あたり接続ごとの最大リクエスト数
- D) 同時接続ごとの最大リクエスト数
正解: B) 1つの接続で処理する最大リクエスト数(以降接続終了)
maxRequestsPerConnectionは単一の接続で処理できる最大リクエスト数です。この値に達すると接続が閉じられ、新しい接続が作成されます。1に設定するとKeep-Aliveを無効化する効果があります。
4. Securing Workloads(問題 49-64)
問題 49: PeerAuthenticationのmTLSモードSTRICTの意味は?
- A) mTLSを完全に無効化
- B) mTLS接続のみ許可、平文を拒否
- C) mTLSと平文の両方を許可
- D) 選択的にmTLSを適用
正解: B) mTLS接続のみ許可、平文を拒否
STRICTモードではmTLS接続のみが許可されます。サイドカーのないサービスからの平文リクエストは拒否されます。PERMISSIVEはmTLSと平文の両方を許可、DISABLEはmTLSを無効化します。
問題 50: PeerAuthenticationでPERMISSIVEモードが有用なシナリオは?
- A) セキュリティが最優先の本番環境
- B) サイドカーのあるサービスとないサービスが混在する場合
- C) 外部APIと通信する場合
- D) 証明書を手動管理する場合
正解: B) サイドカーのあるサービスとないサービスが混在する場合
PERMISSIVEモードはmTLSと平文トラフィックの両方を受け入れます。サイドカー注入を段階的に適用する移行過程で特に有用です。すべてのサービスにサイドカーが注入された後にSTRICTに切り替えます。
問題 51: AuthorizationPolicyでactionがDENYの場合の評価順序は?
- A) ALLOWを先に評価、次にDENY
- B) DENYを先に評価、次にALLOW
- C) CUSTOMを先に、次にDENY、最後にALLOW
- D) すべてのポリシーを同時に評価
正解: C) CUSTOMを先に、次にDENY、最後にALLOW
AuthorizationPolicyの評価順序はCUSTOM -> DENY -> ALLOWです。CUSTOMアクションが拒否すればリクエストが拒否されます。DENYポリシーにマッチすれば拒否されます。最後にALLOWポリシーにマッチすれば許可されます。どのALLOWポリシーにもマッチしなければ拒否されます。
問題 52: RequestAuthenticationでJWTトークンを検証するために必要な設定は?
- A)
spec.jwtRules[].issuerとspec.jwtRules[].jwksUri - B)
spec.jwt.secret - C)
spec.authentication.token - D)
spec.rules[].jwt.key
正解: A) spec.jwtRules[].issuerとspec.jwtRules[].jwksUri
RequestAuthenticationのjwtRulesでissuer(トークン発行者)とjwksUri(公開鍵セットURL)を設定してJWTトークンを検証します。jwks(インラインキー)を直接提供することもできます。
問題 53: AuthorizationPolicyでrulesが空の場合(空のspec)の動作は?
- A) すべてのリクエストを許可
- B) すべてのリクエストを拒否
- C) ポリシーが無視される
- D) エラー発生
正解: B) すべてのリクエストを拒否
actionがALLOWのAuthorizationPolicyでrulesが空の場合、どのリクエストもマッチしないためすべてのリクエストが拒否されます。逆にrulesなしの空のspecでDENYを使用すると、何も拒否されません。
問題 54: AuthorizationPolicyのsource.principalsフィールドの形式は?
- A) Kubernetes ServiceAccount名
- B) SPIFFE ID形式(例:"cluster.local/ns/NAMESPACE/sa/SERVICE_ACCOUNT")
- C) Pod IPアドレス
- D) ユーザー名
正解: B) SPIFFE ID形式(例:"cluster.local/ns/NAMESPACE/sa/SERVICE_ACCOUNT")
source.principalsはSPIFFE形式のピアIDを使用します。Istioでは各ワークロードがKubernetes ServiceAccountを基にSPIFFE IDを付与されます。ワイルドカード(*)も使用可能です。
問題 55: Istioのワークロード証明書のデフォルト有効期間は?
- A) 1時間
- B) 12時間
- C) 24時間
- D) 7日
正解: C) 24時間
Istioでワークロードに発行されるX.509証明書のデフォルト有効期間は24時間です。証明書は期限前に自動的にローテーションされます。この値はistiod環境変数で調整できます。
問題 56: PeerAuthenticationをメッシュ全体に適用するにはどのネームスペースに作成しますか?
- A) default
- B) kube-system
- C) istio-system
- D) すべてのネームスペースに個別作成
正解: C) istio-system
istio-systemネームスペース(またはIstioルートネームスペース)にPeerAuthenticationを作成するとメッシュ全体に適用されます。ネームスペースレベルのポリシーはそのネームスペースのすべてのワークロードに適用され、ワークロードレベルが最も高い優先度を持ちます。
問題 57: AuthorizationPolicyのoperation.methodsフィールドで制限できるものは?
- A) Kubernetes APIメソッド
- B) HTTPメソッド(GET、POSTなど)
- C) gRPCメソッド
- D) Envoy内部メソッド
正解: B) HTTPメソッド(GET、POSTなど)
operation.methodsはHTTPメソッド(GET、POST、PUT、DELETEなど)を基準にアクセスを制御します。operation.pathsでパス、operation.portsでポートを追加で制限できます。
問題 58: AuthorizationPolicyのsource.namespacesの動作は?
- A) ソースPodのネームスペースを基準にフィルタリング
- B) 宛先Podのネームスペースを基準にフィルタリング
- C) サービスレジストリのネームスペースを参照
- D) Kubernetes Namespaceリソースのラベルを確認
正解: A) ソースPodのネームスペースを基準にフィルタリング
source.namespacesはリクエストを送信するソースワークロードのネームスペースに基づいてアクセスを制御します。mTLSを通じてソースのIDが確認されるため、mTLSが有効化されている必要があります。
問題 59: PeerAuthenticationでポート別のmTLSモードを設定する方法は?
- A)
spec.portLevelMtlsにポート番号とモードをマッピング - B)
spec.mtls.portsにポートリストを指定 - C)
spec.selector.portsでポートを選択 - D) ポート別設定はサポートされない
正解: A) spec.portLevelMtlsにポート番号とモードをマッピング
spec.portLevelMtlsは特定のポートに対して個別のmTLSモードを設定できます。例えばヘルスチェックポートのみDISABLEにして残りはSTRICTに設定できます。
問題 60: AuthorizationPolicyのCUSTOMアクションの用途は?
- A) カスタムHTTPステータスコードの返却
- B) 外部認可サービス(例:OPA)に認可判断を委任
- C) カスタムロギング
- D) カスタムメトリクス生成
正解: B) 外部認可サービス(例:OPA)に認可判断を委任
CUSTOMアクションはspec.provider.nameに指定された外部認可プロバイダーに認可判断を委任します。OPA(Open Policy Agent)、OAuth2 Proxyなどを外部認可サービスとして使用できます。
問題 61: RequestAuthenticationでJWTトークンがないリクエストはどう処理されますか?
- A) 常に拒否
- B) 常に許可
- C) リクエストを受け入れるが認証されていないものとして処理
- D) 500エラーを返す
正解: C) リクエストを受け入れるが認証されていないものとして処理
RequestAuthenticationはJWTがあれば有効性を検証し、無効であれば拒否します。しかしJWTがないリクエストは受け入れつつ認証されていないものとして処理します。JWTがないリクエストも拒否するにはAuthorizationPolicyを併用する必要があります。
問題 62: Istioで証明書を発行するコンポーネントは?
- A) Pilot
- B) Galley
- C) istiod(Citadel機能)
- D) Envoy
正解: C) istiod(Citadel機能)
istiodに統合されたCitadel機能がワークロード証明書を発行します。istio-agent(Pod内)がCSRを生成してistiodに送信し、istiodが署名して証明書を返します。SDS(Secret Discovery Service)を通じてEnvoyに配信されます。
問題 63: AuthorizationPolicyのwhen条件のkeyとして使用できないものは?
- A)
request.headers[x-custom-header] - B)
source.ip - C)
request.auth.claims[groups] - D)
destination.labels[app]
正解: D) destination.labels[app]
when条件のkeyとしてrequest.headers、source.ip、source.namespace、request.auth.claims、request.auth.presenterなどを使用できます。destination.labelsはサポートされず、宛先ワークロードの選択にはselectorを使用します。
問題 64: trust domainが"cluster.local"の場合、defaultネームスペースのhttpbin ServiceAccountのSPIFFE IDは?
- A)
spiffe://cluster.local/httpbin/default - B)
spiffe://cluster.local/ns/default/sa/httpbin - C)
cluster.local/default/httpbin - D)
spiffe://default/sa/httpbin
正解: B) spiffe://cluster.local/ns/default/sa/httpbin
SPIFFE IDの形式はspiffe://TRUST_DOMAIN/ns/NAMESPACE/sa/SERVICE_ACCOUNTです。trust domainがcluster.local、ネームスペースがdefault、ServiceAccountがhttpbinの場合、上記のようになります。
5. Observability(問題 65-72)
問題 65: Istioでデフォルトで生成されるPrometheusメトリクスでないものは?
- A)
istio_requests_total - B)
istio_request_duration_milliseconds - C)
istio_tcp_sent_bytes_total - D)
istio_request_messages_total
正解: D) istio_request_messages_total
Istioはデフォルトでistio_requests_total(リクエスト数)、istio_request_duration_milliseconds(リクエストレイテンシ)、istio_request_bytes(リクエストサイズ)、istio_response_bytes(レスポンスサイズ)、istio_tcp_sent_bytes_total、istio_tcp_received_bytes_totalなどを生成します。
問題 66: Kialiの主要機能でないものは?
- A) サービスメッシュトポロジーグラフの可視化
- B) Istio構成の検証
- C) 自動カナリアデプロイの実行
- D) ワークロードの健全性モニタリング
正解: C) 自動カナリアデプロイの実行
Kialiはサービスメッシュの可視化、構成検証、健全性モニタリング、トラフィックフロー確認ツールです。カナリアデプロイの自動化はFlaggerのようなプログレッシブデリバリーツールの役割です。Kialiでトラフィック分割を視覚的に確認することはできます。
問題 67: 分散トレーシングでIstioが使用するデフォルトのトレース伝播ヘッダーは?
- A) X-Request-IDのみ
- B) B3ヘッダーとW3C TraceContext
- C) OpenTelemetryヘッダーのみ
- D) カスタムIstioヘッダー
正解: B) B3ヘッダーとW3C TraceContext
IstioはB3ヘッダー(x-b3-traceid、x-b3-spanid、x-b3-parentspanid、x-b3-sampled)とW3C TraceContext(traceparent、tracestate)をサポートします。エンドツーエンドトレーシングにはアプリケーションがこれらのヘッダーを伝播する必要があります。
問題 68: Istioのトレースサンプリング比率のデフォルト値は?
- A) 0.1%(1000分の1)
- B) 1%(100分の1)
- C) 10%(10分の1)
- D) 100%(すべてのリクエスト)
正解: B) 1%(100分の1)
Istioのデフォルトのトレースサンプリング比率は1%です。MeshConfigのdefaultConfig.tracing.samplingで調整できます。本番環境では低い比率を、デバッグ時には高い比率を使用します。
問題 69: IstioのTelemetry APIでメトリクスを無効化する設定は?
- A)
spec.metrics[].providers[].nameを"none"に設定 - B)
spec.metrics[].disabled: true - C)
spec.metrics[].overrides[].disabled: true - D)
spec.metrics: []空の配列に設定
正解: C) spec.metrics[].overrides[].disabled: true
Telemetry APIではspec.metrics[].overrides[]を使用して特定のメトリクスを無効化したりタグを追加/削除したりできます。match条件で特定のメトリクスのみ選択的に無効化できます。
問題 70: Envoyアクセスログを有効にする正しい方法は?
- A) MeshConfigのaccessLogFile設定
- B) Telemetry APIのaccessLogging設定
- C) EnvoyFilterでアクセスログフィルターを追加
- D) 上記すべて可能
正解: D) 上記すべて可能
EnvoyアクセスログはMeshConfigのaccessLogFile("/dev/stdout")、Telemetry APIのaccessLogging、またはEnvoyFilterで有効化できます。Telemetry APIが最も推奨される方法です。
問題 71: istio_requests_totalメトリクスに含まれないデフォルトラベルは?
- A) response_code
- B) source_workload
- C) destination_service
- D) request_path
正解: D) request_path
istio_requests_totalにはresponse_code、source_workload、source_workload_namespace、destination_service、destination_workload、request_protocol、connection_security_policyなどが含まれます。request_pathはカーディナリティが高いためデフォルトラベルではありません。
問題 72: 分散トレーシングでアプリケーションが必ず行うべきことは?
- A) 各リクエストに対して新しいスパンを作成
- B) インバウンドリクエストのトレースヘッダーをアウトバウンドリクエストに伝播
- C) トレースデータを直接収集システムに送信
- D) Envoyプロキシにトレース完了を通知
正解: B) インバウンドリクエストのトレースヘッダーをアウトバウンドリクエストに伝播
Istio/Envoyは自動的にスパンを作成しますが、トレースコンテキストが接続されるにはアプリケーションがインバウンドリクエストのトレースヘッダー(B3、W3C TraceContextなど)をアウトバウンドリクエストに伝播する必要があります。
6. Advanced Topics(問題 73-80)
問題 73: Istio Ambient Meshでztunnelの役割は?
- A) L7トラフィック処理およびルーティング
- B) ノードレベルのL4プロキシ、mTLSおよびL4認可処理
- C) Istioコントロールプレーンコンポーネント
- D) 証明書の発行および管理
正解: B) ノードレベルのL4プロキシ、mTLSおよびL4認可処理
ztunnel(Zero Trust Tunnel)は各ノードにDaemonSetとしてデプロイされるL4プロキシです。mTLS暗号化/復号、L4認可、HBONEトンネリングを処理します。L7機能はwaypoint proxyが担当します。
問題 74: Ambient Meshでwaypoint proxyのデプロイ単位は?
- A) Podごとに1つ
- B) ノードごとに1つ
- C) ネームスペースごと(またはサービスアカウントごと)
- D) クラスターに1つだけ
正解: C) ネームスペースごと(またはサービスアカウントごと)
waypoint proxyはネームスペースまたはサービスアカウント単位でデプロイされます。Kubernetes Gateway APIを使用して作成し、L7トラフィック管理、L7認可ポリシーなどを処理します。
問題 75: Ambient Meshにワークロードを登録する方法は?
- A) Podにsidecar.istio.io/inject: "true"アノテーションを追加
- B) ネームスペースにistio.io/dataplane-mode: ambientラベルを追加
- C) IstioOperatorでambientプロファイルを選択
- D) Podにambient-mesh: enabledラベルを追加
正解: B) ネームスペースにistio.io/dataplane-mode: ambientラベルを追加
ネームスペースにistio.io/dataplane-mode=ambientラベルを追加すると、そのネームスペースのワークロードがAmbient Meshに登録されます。サイドカー注入なしでメッシュ機能を有効化します。
問題 76: HBONE(HTTP-Based Overlay Network Environment)の主な特徴は?
- A) gRPCベースのトンネリングプロトコル
- B) HTTP/2 CONNECTベースのトンネリングでmTLSトラフィックを転送
- C) UDPベースの軽量トンネリング
- D) IPsecベースのネットワーク暗号化
正解: B) HTTP/2 CONNECTベースのトンネリングでmTLSトラフィックを転送
HBONEはHTTP/2 CONNECTを使用してポート15008でmTLSトンネルを作成します。ztunnel間またはztunnelとwaypoint proxy間の通信に使用され、既存のネットワークインフラと互換性があります。
問題 77: Istioマルチクラスターデプロイでprimary-remoteモデルの特徴は?
- A) 両方のクラスターが独立したコントロールプレーンを実行
- B) 1つのクラスターがコントロールプレーンをホスティングし、もう1つはリモートで接続
- C) 外部コントロールプレーンを使用
- D) 各クラスターが異なるIstioバージョンを実行
正解: B) 1つのクラスターがコントロールプレーンをホスティングし、もう1つはリモートで接続
primary-remoteモデルでは、primaryクラスターがistiodを実行し、remoteクラスターはprimaryのistiodに接続して構成を受け取ります。primary-primaryモデルでは両方がistiodを実行します。
問題 78: WasmPluginリソースの用途は?
- A) EnvoyプロキシにWebAssembly拡張をデプロイ
- B) ワークロードをWebAssemblyランタイムで実行
- C) Istioコントロールプレーンのプラグイン管理
- D) サービスメッシュの自動スケーリング
正解: A) EnvoyプロキシにWebAssembly拡張をデプロイ
WasmPluginはEnvoyプロキシにWebAssemblyモジュールをデプロイしてカスタムロジックを追加します。認証、変換、メトリクス収集など様々な機能を拡張でき、EnvoyFilterより安全で管理しやすいです。
問題 79: Istioで外部サービスへのトラフィックに対してoutboundTrafficPolicyをREGISTRY_ONLYに設定すると?
- A) すべての外部トラフィックが許可される
- B) ServiceEntryに登録された外部サービスのみアクセス可能
- C) 外部トラフィックがEgress Gatewayを通じてのみ出る
- D) DNSベースの外部サービスのみ許可
正解: B) ServiceEntryに登録された外部サービスのみアクセス可能
REGISTRY_ONLYモードではIstioサービスレジストリに登録されたサービスのみアクセスできます。登録されていない外部サービスへのリクエストは502エラーを返します。ALLOW_ANY(デフォルト)はすべての外部トラフィックを許可します。
問題 80: Istioのrevisionベースのカナリアアップグレードで安定バージョンに完全移行後、以前のコントロールプレーンを削除するコマンドは?
- A)
istioctl uninstall --revision old - B)
istioctl x uninstall --revision old - C)
istioctl install --set revision=old --purge - D)
kubectl delete istiooperator old -n istio-system
正解: A) istioctl uninstall --revision old
以前のrevisionのコントロールプレーンを削除するにはistioctl uninstall --revision OLD_REVISIONを使用します。すべてのワークロードが新しいrevisionに移行された後に実行する必要があります。--purgeフラグはすべてのIstioリソースを削除する際に使用します。
まとめ
80問すべてを解いたら、ドメイン別に弱点を把握してください:
| ドメイン | 問題範囲 | 正解数 |
|---|---|---|
| Installation & Configuration | 1-8 | /8 |
| Traffic Management | 9-40 | /32 |
| Resilience & Fault Injection | 41-48 | /8 |
| Securing Workloads | 49-64 | /16 |
| Observability | 65-72 | /8 |
| Advanced Topics | 73-80 | /8 |
| 合計 | 1-80 | /80 |
ICA試験では特にTraffic Management(40%)とSecuring Workloads(20%)の比重が高いため、これらの領域を重点的に学習してください。