GatewayとHTTPRouteとManaged Certificateを利用してGKEクラスターで動作するサービスをHttpsで公開する
記事の内容
GatewayとHTTPRouteを利用してGKEクラスターで動作するサービス(Pod)に、ロードバランサーを通してインターネットからhttpsアクセスできるように設定します。
SSL証明書はGoogleのmanagedのものを利用します。
記事の長さ
2分で読めます
GKEクラスターの作成
この記事ではGKEクラスター自体の作成方法は取り上げません。
こちらの記事でGKEクラスターをTerraformで作成する方法を公開していますので、クラスターの作成についてはこちらをご参照ください。
Certificateを準備する
GKE上にGatewayを設定する前にそのGatewayで利用するSSL証明書をGoogleのManaged Certificateを利用して取得しておきます。
resource "google_compute_managed_ssl_certificate" "this" {
project = var.project_id
name = "certificate-name"
managed {
domains = [
"example.com."
]
}
}
このTerraformのソースコードをapplyすると証明書を発行できます。
Nginxサービスを起動する
Gatewayへのアクセスを確認しやすいように、Nginxの初期画面が表示されるServiceとPodを作成します。
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
type: ClusterIP
selector:
name: nginx
---
apiVersion: v1
kind: Pod
metadata:
labels:
name: nginx
name: nginx
spec:
containers:
- image: nginx
name: nginx
ports:
- containerPort: 80
このマニフェストファイルをkubectl apply
して、nginx
サービスに対して80ポートでトラフィックを流せばnginxの初期画面が表示されるように実装してください。
GatewayとHTTP Routeを設定する
証明書とnginxサービスの準備が完了したので、最後にGatewayとHTTP Routeを作成します。
gateway.yaml
kind: Gateway
apiVersion: gateway.networking.k8s.io/v1beta1
metadata:
name: example-domain
spec:
gatewayClassName: gke-l7-global-external-managed
listeners:
- name: https
protocol: HTTPS
port: 443
tls:
mode: Terminate
options:
networking.gke.io/pre-shared-certs: certificate-name
http-route.yaml
kind: HTTPRoute
apiVersion: gateway.networking.k8s.io/v1beta1
metadata:
name: example-domain
spec:
parentRefs:
- kind: Gateway
name: example-domain
hostnames:
- "example.com"
rules:
- backendRefs:
- name: nginx
port: 80
この二つをkubectl apply
して、GKEクラスターにGatewayとHTTP Routeを作成してください。
Apply後に以下のコマンドを実行して、Gateway
マニフェストによって自動で付与されたグローバルIPアドレスの値を調べます。
$ kubectl get gateway
NAME CLASS ADDRESS PROGRAMMED AGE
example-domain gke-l7-global-external-managed 111.111.111.11 True 78m
DNSレコードを設定する
GatewayがGCP上に作成したロードバランサーのIP Addressが判明したので、最後にこのIPアドレスをドメインのAレコードのバリューとしてDNS設定してください。
- レコードタイプ: A
- レコードバリュー:
<IP Address>
レコードが正常に設定されると対象のドメイン名でインターネットからHttpsアクセスをした際にnginxの初期画面が表示されるようになります。
まとめ
GatewayとHTTP Routeを利用してGKE上にHTTPSアクセスできる入り口を作る方法を紹介しました。
従来のIngressと異なり、GatewayとHTTP Routeを利用することで柔軟なネットワーク構成が可能になります。
note
勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。
Discussion