Gateway API クイズ
このクイズでは、Kubernetes Gateway API のリソースモデル、実装、および Ingress からの移行に関する理解を確認します。
クイズ問題
1. Gateway API が既存の Ingress API を改善している点ではないものはどれですか?
A. ロールベースのリソース分離(インフラストラクチャプロバイダー、クラスターオペレーター、アプリケーション開発者) B. TCP、UDP、gRPC などのさまざまなプロトコルのネイティブサポート C. アノテーションではなく標準化されたフィールドによる機能実装 D. すべてのネットワーク機能を単一のリソースに統合
解答を表示
解答: D. すべてのネットワーク機能を単一のリソースに統合
解説: Gateway API の改善点:
- ロール分離: GatewayClass(インフラストラクチャ)、Gateway(オペレーター)、Routes(開発者)に責任を分離
- 複数プロトコル: HTTPRoute、GRPCRoute、TCPRoute、TLSRoute、UDPRoute
- 標準化: アノテーションを使用せず、明示的なフィールドで機能を定義
- 拡張性: CRD に基づき新機能を容易に追加
Gateway API は複数のリソースに分離されているため、「単一リソースへの統合」は誤りです。
2. Gateway API のロール分離において、GatewayClass を管理するのは誰ですか?
A. アプリケーション開発者 B. クラスターオペレーター C. インフラストラクチャプロバイダー D. セキュリティ管理者
解答を表示
解答: C. インフラストラクチャプロバイダー
解説: Gateway API のロール分離:
| ロール | 管理対象リソース | 責任 |
|---|---|---|
| インフラストラクチャプロバイダー | GatewayClass | 基本インフラストラクチャ設定の定義、controller の指定 |
| クラスターオペレーター | Gateway, ReferenceGrant | Load Balancer のプロビジョニング、namespace 権限の管理 |
| アプリケーション開発者 | HTTPRoute, GRPCRoute, etc. | アプリケーションルーティングルールの定義 |
GatewayClass はクラウドプロバイダーまたはネットワークチームによって定義されます。
3. Gateway における TLS termination と passthrough の正しい違いは何ですか?
A. Terminate は TLS を backend に渡し、Passthrough は Gateway で termination する B. Terminate は Gateway で TLS を termination し、Passthrough は TLS を backend に渡す C. 両方のモードは同じ動作をする D. Terminate は HTTP のみをサポートし、Passthrough は HTTPS のみをサポートする
解答を表示
解答: B. Terminate は Gateway で TLS を termination し、Passthrough は TLS を backend に渡す
解説: TLS モード:
| モード | 説明 | ユースケース |
|---|---|---|
| Terminate | TLS は Gateway で termination され、backend は平文を受信 | 標準 HTTPS、証明書の一元管理 |
| Passthrough | TLS はそのまま backend に渡される | エンドツーエンド暗号化、backend による証明書管理 |
listeners:
- name: https
protocol: HTTPS
tls:
mode: Terminate # or Passthrough4. HTTPRoute でトラフィック分割(weight)を実装するにはどうしますか?
A. trafficSplit フィールドを使用する B. 複数の backendRefs に weight フィールドを指定する C. canary アノテーションを使用する D. 個別の TrafficSplit CRD を作成する
解答を表示
解答: B. 複数の backendRefs に weight フィールドを指定する
解説: HTTPRoute でのトラフィック分割:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
spec:
rules:
- backendRefs:
- name: app-stable
port: 80
weight: 90 # 90%
- name: app-canary
port: 80
weight: 10 # 10%ユースケース:
- Canary Deployment
- A/B テスト
- Blue-green Deployment
weight の合計は 100 である必要はなく、比率として計算されます。
5. ReferenceGrant の主な目的は何ですか?
A. Gateway リソースの権限管理 B. namespace をまたぐ参照を許可する C. API バージョンの互換性管理 D. TLS 証明書の認可
解答を表示
解答: B. namespace をまたぐ参照を許可する
解説: ReferenceGrant の使用方法:
apiVersion: gateway.networking.k8s.io/v1beta1
kind: ReferenceGrant
metadata:
name: allow-routes
namespace: backend-services
spec:
from:
- group: gateway.networking.k8s.io
kind: HTTPRoute
namespace: frontend
to:
- group: ""
kind: Serviceユースケース:
- 他の namespace にある Service の参照を許可
- Gateway が他の namespace にある Secret(TLS 証明書)を参照
- セキュリティのための明示的な認可
namespace をまたぐ参照はデフォルトでブロックされます。
6. Gateway API の Standard channel に含まれないリソースはどれですか?
A. GatewayClass B. Gateway C. HTTPRoute D. TCPRoute
解答を表示
解答: D. TCPRoute
解説: Gateway API の channel 分類:
Standard Channel (GA):
- GatewayClass
- Gateway
- HTTPRoute
- ReferenceGrant
Experimental Channel (Beta/Alpha):
- GRPCRoute
- TCPRoute
- TLSRoute
- UDPRoute
Standard channel のリソースは gateway.networking.k8s.io/v1 API バージョンを使用し、Experimental では v1alpha2 または v1beta1 を使用します。
7. リクエストを別の URL に変更する HTTPRoute filter type はどれですか?
A. RequestHeaderModifier B. ResponseHeaderModifier C. URLRewrite D. RequestMirror
解答を表示
解答: C. URLRewrite
解説: HTTPRoute filter type:
| Filter | 説明 |
|---|---|
| RequestHeaderModifier | リクエストヘッダーの追加、変更、削除 |
| ResponseHeaderModifier | レスポンスヘッダーの追加、変更、削除 |
| URLRewrite | URL のパスまたは host を変更 |
| RequestRedirect | 別の URL へリダイレクト(3xx レスポンス) |
| RequestMirror | トラフィックをミラーリング(shadow Service にコピー) |
filters:
- type: URLRewrite
urlRewrite:
path:
type: ReplacePrefixMatch
replacePrefixMatch: /new-api
hostname: "new-api.example.com"8. Gateway API をサポートする実装ではないものはどれですか?
A. Istio B. Cilium C. kube-proxy D. Envoy Gateway
解答を表示
解答: C. kube-proxy
解説: Gateway API の実装:
| 実装 | Controller |
|---|---|
| Istio | istio.io/gateway-controller |
| Cilium | io.cilium/gateway-controller |
| Envoy Gateway | gateway.envoyproxy.io/gatewayclass-controller |
| AWS Gateway API Controller | application-networking.k8s.aws/gateway-api-controller |
| Contour | projectcontour.io/gateway-controller |
| NGINX Gateway Fabric | gateway.nginx.org/nginx-gateway-controller |
kube-proxy は Service の ClusterIP/NodePort ルーティングを処理するものであり、Gateway API とは無関係です。
9. Ingress から Gateway API へ移行する際、Ingress annotation に対応する Gateway API の機能は何ですか?
A. Gateway metadata B. HTTPRoute matches と filters C. GatewayClass parameters D. ReferenceGrant spec
解答を表示
解答: B. HTTPRoute matches と filters
解説: Ingress annotation → Gateway API の対応:
| Ingress annotation | Gateway API |
|---|---|
nginx.ingress.kubernetes.io/rewrite-target | HTTPRoute filter: URLRewrite |
nginx.ingress.kubernetes.io/ssl-redirect | HTTPRoute filter: RequestRedirect |
nginx.ingress.kubernetes.io/canary-weight | HTTPRoute backendRefs weight |
| パスベースのルーティング | HTTPRoute matches path |
| ヘッダーベースのルーティング | HTTPRoute matches headers |
Gateway API はアノテーションではなく明示的なフィールドを使用するため、より高い移植性を実現します。
10. Gateway で特定の namespace からの Routes のみを許可する設定は何ですか?
A. allowedRoutes.namespaces.from: All B. allowedRoutes.namespaces.from: Same C. allowedRoutes.namespaces.from: Selector D. B と C の両方が可能
解答を表示
解答: D. B と C の両方が可能
解説: Gateway の allowedRoutes 設定:
listeners:
- name: https
allowedRoutes:
namespaces:
from: All # All namespaces
# or
from: Same # Only same namespace as Gateway
# or
from: Selector # Select by label selector
selector:
matchLabels:
gateway-access: "true"- All: すべての namespace からの Routes を許可
- Same: Gateway と同じ namespace からのみ許可
- Selector: 特定のラベルを持つ namespace からのみ許可
11. GRPCRoute で特定の Service の特定の method へルーティングするための matches 設定は何ですか?
A. path.service と path.method B. method.service と method.method C. grpc.service と grpc.method D. rpc.service と rpc.method
解答を表示
解答: B. method.service と method.method
解説: GRPCRoute のマッチング:
apiVersion: gateway.networking.k8s.io/v1
kind: GRPCRoute
spec:
rules:
- matches:
- method:
service: "myapp.UserService"
method: "GetUser"
backendRefs:
- name: user-service
port: 50051gRPC のルーティングオプション:
- Service のみ: その Service のすべての method
- Service + method: 特定の method のみ
- ヘッダーベースのルーティングもサポート
12. Gateway API と Ingress API の比較として正しくないものはどれですか?
A. Gateway API はロールベースの分離をサポートするが、Ingress はサポートしない B. Gateway API は TCP/UDP をネイティブサポートするが、Ingress はサポートしない C. Gateway API はトラフィック分割をネイティブサポートするが、Ingress ではアノテーションが必要 D. Gateway API は Ingress より少ないリソースタイプを使用する
解答を表示
解答: D. Gateway API は Ingress より少ないリソースタイプを使用する
解説: Gateway API と Ingress の比較:
| 機能 | Ingress | Gateway API |
|---|---|---|
| リソース数 | 1 (Ingress) | 複数(GatewayClass、Gateway、Routes など) |
| ロール分離 | なし | 3 層分離 |
| TCP/UDP | 非対応 | ネイティブサポート |
| トラフィック分割 | Annotation | ネイティブ(weight) |
| 拡張性 | 制限あり | CRD ベース |
Gateway API はより多くのリソースタイプを使用しますが、これによりロール分離と柔軟性が実現されます。