G-gen の佐々木です。当記事では、GKE で Gateway API を使用して作成したアプリケーションロードバランサーに対して、HTTP リクエストを HTTPS にリダイレクトするように設定する手順を解説します。
- はじめに
- HTTPS リダイレクト構成前の動作確認
- HTTPS リダイレクト専用の Namespace を作成する
- Gateway リソースに HTTP 用のリスナーを記述する
- リダイレクト用の HTTPRoute リソースを作成する
- 動作確認

はじめに
Gateway API について
Gateway API は、Kubernetes でレイヤ7の高度なトラフィックルーティングを提供するための Kubernetes アドオンであり、Google Cloud では GKE で L7 ロードバランサー(アプリケーションロードバランサー)を利用したい場合に使用されます。
従来から同様の用途で使用されていた Ingress API に様々な改良が加えられたものであり、高度なルーティング(ヘッダーベース、重み付けなど)や、異なる Namespace にあるリソースへのアクセスなどがネイティブにサポートされています。
Gateway API の基本については以下の記事を参照してください。
アプリケーションロードバランサーの HTTPS リダイレクト機能
Google Cloud で提供されているアプリケーションロードバランサーには、ロードバランサーに対する HTTP リクエストを HTTPS にリダイレクトする(HTTPS を強制する)機能があります。
この機能では、HTTPS リクエストを処理するように構成されたロードバランサーに加えて、そのロードバランサーに対して HTTP リクエストをリダイレクトするためのロードバランサーが構成されます。この2つのロードバランサーは同一の IP アドレスを持ちます。
リダイレクト用のロードバランサーは HTTP リクエストを受信し、そのリクエストを HTTPS リクエストを処理するロードバランサーにリダイレクトする役割を持ちます。これにより、バックエンドサービスのユーザーに HTTPS の使用を強制することができます。

Gateway API における HTTPS リダイレクト機能
GKE で Gateway API を使用してアプリケーションロードバランサーを作成する場合でも、HTTPS リダイレクト機能を利用することができます。
Gateway API で作成されるロードバランサーの種類を定義する GatewayClass と、それぞれの HTTPS リダイレクト機能のサポート状況を以下の表に示します。
| GatewayClass | ロードバランサーの種類 | HTTPS リダイレクトのサポート |
|---|---|---|
| gke-l7-global-external-managed | グローバル外部アプリケーション ロードバランサー | ○ |
| gke-l7-global-external-managed-mc | グローバル外部アプリケーション ロードバランサー(マルチクラスタ) | ○ |
| gke-l7-regional-external-managed | リージョン外部アプリケーション ロードバランサー | ○ |
| gke-l7-regional-external-managed-mc | リージョン外部アプリケーション ロードバランサー(マルチクラスタ) | ○ |
| gke-l7-rilb | 内部アプリケーション ロードバランサー | ○ |
| gke-l7-rilb-mc | 内部アプリケーション ロードバランサー(マルチクラスタ) | ○ |
| gke-l7-gxlb | 従来のアプリケーション ロードバランサー | × |
| gke-l7-gxlb-mc | 従来のアプリケーション ロードバランサー | × |
- 参考 : Deploying Gateways - Configure HTTP-to-HTTPS redirects
- 参考 : GatewayClass capabilities - Frontend security
当記事の構成について
当記事では、以下の記事で作成した Gateway API リソースと nginx のバックエンドを持つ環境に対して、HTTPS リダイレクトを追加で構成していきます。以降の手順の前提となるサンプル環境を構成するためのマニフェストファイルについては、同記事を参照してください。


HTTPS リダイレクト構成前の動作確認
サンプル構成では HTTPS リダイレクトを構成しておらず、また Gateway リソースに HTTP リスナーを設定していないため、HTTP リクエストがロードバランサーを通過することはありません。

HTTPS リダイレクト専用の Namespace を作成する
まず、HTTPS リダイレクト用の HTTPRoute を作成するための Namespace を作成します。
HTTPS リダイレクト用の HTTPRoute リソースは、Gateway リソースと別の Namespace に作成する必要があります。もし両方とも同じ Namespace に作成した場合、Gateway が受信した HTTP リクエストは HTTPS にリダイレクトされず、そのままバックエンドサービスにルーティングされてしまいます。
# redirect-namespace.yaml apiVersion: v1 kind: Namespace metadata: name: http-redirect labels: otherInfra: httpToHttps
Gateway リソースに HTTP 用のリスナーを記述する
Gateway リソースを定義しているサンプル構成のマニフェストファイル(gateway.yaml)に対して、以下のように HTTP 用のリスナーを追記します。HTTP のリスナーとして、先ほど作成した HTTPS リダイレクト用 Namespace の HTTPRoute リソースを指定しておくことがポイントです。
# gateway.yaml apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: external-https-gateway annotations: networking.gke.io/certmap: "my-cert-map" spec: gatewayClassName: gke-l7-global-external-managed listeners: - name: https-listener protocol: HTTPS port: 443 - name: http-listener # HTTP 用のリスナーを追加する protocol: HTTP port: 80 allowedRoutes: kinds: - kind: HTTPRoute namespaces: from: Selector selector: matchLabels: otherInfra: httpToHttps # リダイレクト用 Namespace のラベル
このマニフェストファイルを適用すると、HTTPS 用のロードバランサーとは別に、HTTP をリダイレクトするためのロードバランサーも作成されます。

リダイレクト用の HTTPRoute リソースを作成する
HTTPS リダイレクト用の設定を定義した、新たな HTTPRoute リソースを作成します。マニフェストファイルは以下のようになります。
# http-redirect.yaml kind: HTTPRoute apiVersion: gateway.networking.k8s.io/v1 metadata: name: http-redirect namespace: http-redirect # リダイレクト用 Namespace に作成する spec: parentRefs: - name: external-https-gateway # Gateway リソースの名前 sectionName: http-listener # Gateway リソースで定義している HTTP リスナーの名前 rules: - filters: - type: RequestRedirect # リクエストをリダイレクトする設定 requestRedirect: scheme: https # HTTPS にリダイレクトする
作成した HTTPRoute リソースの設定を確認すると、Spec.Rules にリダイレクトの設定が存在することが確認できます。
# 作成した HTTPS リダイレクト用 HTTPRoute の設定を確認する $ kubectl describe httproutes -n http-redirect Name: http-redirect Namespace: http-redirect Labels: <none> Annotations: <none> API Version: gateway.networking.k8s.io/v1 Kind: HTTPRoute Metadata: Creation Timestamp: 2025-08-31T07:47:01Z Generation: 2 Resource Version: 1756626613357455008 UID: 143532f1-8f96-4b95-bd28-8294d21e38eb Spec: Parent Refs: Group: gateway.networking.k8s.io Kind: Gateway Name: external-https-gateway Namespace: default Section Name: http-listener Rules: Filters: Request Redirect: Scheme: https Status Code: 302 Type: RequestRedirect Matches: Path: Type: PathPrefix Value: /
動作確認
まず、ブラウザから HTTP でアクセスしてみます。HTTPS でサービスに接続できていることがわかります。

リダイレクトの動作を確認するため、curl コマンドで HTTP リクエストを送信してみます。HTTP/1.1 302 Found、https://example.com:443/ より、リクエストが HTTPS にリダイレクトされていることがわかります。
# ロードバランサーに HTTP リクエストを送信してリダイレクトの動作を確認する $ curl -v http://example.com ----- 出力例 ----- * Trying xxx.xxx.xxx.xxx:80... * Connected to example.com (xxx.xxx.xxx.xxx) port 80 (#0) > GET / HTTP/1.1 > Host: example.com > User-Agent: curl/7.88.1 > Accept: */* > < HTTP/1.1 302 Found < Cache-Control: private < Location: https://example.com:443/ < Content-Length: 0 < Date: Sun, 31 Aug 2025 07:53:13 GMT < Content-Type: text/html; charset=UTF-8 < * Connection #0 to host example.com left intact
佐々木 駿太 (記事一覧)
G-gen最北端、北海道在住のクラウドソリューション部エンジニア
2022年6月にG-genにジョイン。Google Cloud Partner Top Engineer 2025 Fellowに選出。好きなGoogle CloudプロダクトはCloud Run。
趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。
Follow @sasashun0805