apiVersion: networking.gke.io/v1beta1
kind: ManagedCertificate
metadata:
name: example-certificate
spec:
domains:
- example.com
のように kind: ManagedCertificate
を使うと k8s が GCP の Managed Certificate (Let's encrypt を使って証明書を発行して自動更新してくれるサービス)を作ってくれる。
ref. https://cloud.google.com/kubernetes-engine/docs/how-to/managed-certs
しかし、このやり方だとGCPのマネージドSSL証明書を k8s が作成することになり気持ち悪かった(個人の見解です)ので、予めマネージドSSL証明書をTerraformで作成して設定するようにしたメモ。
やり方
GCP で Managed Certificate を作っておく。terraform だとこんな感じ。
provider "google-beta" {
project = "<project-name>"
}
resource "google_compute_managed_ssl_certificate" "api-cert" {
provider = "google-beta"
name = "api-cert"
managed {
domains = ["api.sslcert.tf-test.club"]
}
}
あとは k8s で kind: Ingress の ingress.gcp.kubernetes.io/pre-shared-cert
にあらかじめて作っておいた cert を指定する。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: api-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: "api-ip"
ingress.gcp.kubernetes.io/pre-shared-cert: "api-cert"
spec:
backend:
serviceName: api
servicePort: 80