🔒
GKE Gateway を TLS 対応させてみる
概要
前回の記事で GKE Gateway を利用した API のデプロイまでを行ったので、今回はその API を TLS 対応 ( HTTPS 化 ) させてみようと思います。
事前準備
TLS 証明書を発行するためドメインを用意します。
今回は gateway.tetsuya28.com
を利用するため Cloud DNS にゾーンを作成しました。
resource "google_dns_managed_zone" "gateway" {
name = "gateway"
dns_name = "gateway.tetsuya28.com."
description = "gateway"
}
手順
証明書を発行する
Gateway API に利用する証明書はいくつか発行手段があります。
今回は Google のマネージド証明書を利用して TLS 化を行います。
その他手段は公式のドキュメントをご覧ください。
resource "google_compute_managed_ssl_certificate" "default" {
name = "gateway"
managed {
domains = [
"gateway.tetsuya28.com",
]
}
}
適用後暫くすると証明書が利用出来るようになります。
Gateway API の TLS 化
先ほど作成した証明書を Gateway に付与します。
以下のマニフェストを適用することでロードバランサを TLS 化することが出来ます。
kind: Gateway
apiVersion: gateway.networking.k8s.io/v1beta1
metadata:
name: gateway
spec:
gatewayClassName: gke-l7-gxlb
listeners:
- name: https
protocol: HTTPS # TLS 化に必要
port: 443 # TLS 化に必要
tls:
mode: Terminate
options:
networking.gke.io/pre-shared-certs: gateway # 先ほど作成した証明書名
暫くするとロードバランサに設定が適用されます。
動作確認
▶ curl -i https://gateway.tetsuya28.com/
HTTP/2 200
server: Werkzeug/2.2.2 Python/3.10.9
date: Sat, 08 Apr 2023 08:51:48 GMT
content-type: application/json
content-length: 375
access-control-allow-origin: *
via: 1.1 google
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
{
"cluster_name": "tetsuya28",
"gce_instance_id": "3864015078128664451",
"gce_service_account": "tetsuya28.svc.id.goog",
"host_header": "gateway.tetsuya28.com",
"metadata": "store-v1",
"pod_name": "store-v1-84c89967f8-hdxnw",
"pod_name_emoji": "💇🏻♂",
"project_id": "tetsuya28",
"timestamp": "2023-04-08T08:51:48",
"zone": "asia-northeast1-c"
}
Discussion