Skip to content

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, ReferenceGrantLoad 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 モード:

モード説明ユースケース
TerminateTLS は Gateway で termination され、backend は平文を受信標準 HTTPS、証明書の一元管理
PassthroughTLS はそのまま backend に渡されるエンドツーエンド暗号化、backend による証明書管理
yaml
listeners:
  - name: https
    protocol: HTTPS
    tls:
      mode: Terminate  # or Passthrough

4. HTTPRoute でトラフィック分割(weight)を実装するにはどうしますか?

A. trafficSplit フィールドを使用する B. 複数の backendRefsweight フィールドを指定する C. canary アノテーションを使用する D. 個別の TrafficSplit CRD を作成する

解答を表示

解答: B. 複数の backendRefsweight フィールドを指定する

解説: HTTPRoute でのトラフィック分割:

yaml
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 の使用方法:

yaml
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レスポンスヘッダーの追加、変更、削除
URLRewriteURL のパスまたは host を変更
RequestRedirect別の URL へリダイレクト(3xx レスポンス)
RequestMirrorトラフィックをミラーリング(shadow Service にコピー)
yaml
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
Istioistio.io/gateway-controller
Ciliumio.cilium/gateway-controller
Envoy Gatewaygateway.envoyproxy.io/gatewayclass-controller
AWS Gateway API Controllerapplication-networking.k8s.aws/gateway-api-controller
Contourprojectcontour.io/gateway-controller
NGINX Gateway Fabricgateway.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 annotationGateway API
nginx.ingress.kubernetes.io/rewrite-targetHTTPRoute filter: URLRewrite
nginx.ingress.kubernetes.io/ssl-redirectHTTPRoute filter: RequestRedirect
nginx.ingress.kubernetes.io/canary-weightHTTPRoute 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 設定:

yaml
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.servicepath.method B. method.servicemethod.method C. grpc.servicegrpc.method D. rpc.servicerpc.method

解答を表示

解答: B. method.servicemethod.method

解説: GRPCRoute のマッチング:

yaml
apiVersion: gateway.networking.k8s.io/v1
kind: GRPCRoute
spec:
  rules:
    - matches:
        - method:
            service: "myapp.UserService"
            method: "GetUser"
      backendRefs:
        - name: user-service
          port: 50051

gRPC のルーティングオプション:

  • 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 の比較:

機能IngressGateway API
リソース数1 (Ingress)複数(GatewayClass、Gateway、Routes など)
ロール分離なし3 層分離
TCP/UDP非対応ネイティブサポート
トラフィック分割Annotationネイティブ(weight)
拡張性制限ありCRD ベース

Gateway API はより多くのリソースタイプを使用しますが、これによりロール分離と柔軟性が実現されます。


追加学習リソース