GKE LBで、Ingressを使ってTLS/SSL対応する
追記
kube-legoがオワコンになったのでこの記事もオワコンになりました
GitHub - jetstack/kube-lego: Automatically request certificates for Kubernetes Ingress resources from Let's Encrypt
kube-legoのセットアップ
Kubernetes Ingress リソースを使って GCP上にHTTPSロードバランサを構築する
kube-legoを使う
github.com
git clone https://github.com/jetstack/kube-lego.git
lego 作業フォルダに移動
cd kube-lego/examples/gce/lego/
configmap.yamlを編集して、lego.email を適切に設定する
kube-legoのリソースを作成する
kube-lego/examples/gce/lego/配下にあるリソースを作成する
kubectl create -f ./
namespace "kube-lego" created
configmap "kube-lego" created
deployment "kube-lego" created
kube-legonamespace に作成されているか確認する
kubectl get deployment,replicaset,pod,configmap --namespace kube-lego
Ingressリソースを作成する
DeploymentやServiceは作成されているものとする
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-dev
annotations:
kubernetes.io/ingress.global-static-ip-name: "ingress-dev-ip"
kubernetes.io/ingress.class: "gce"
kubernetes.io/tls-acme: "true"
spec:
tls:
- hosts:
- sample.com
- sub.sample.com
secretName: ingress-dev-tls
rules:
- host: sample.com
http:
paths:
- path:
backend:
serviceName: service-dev
servicePort: 80
- host: sub.sample.com
http:
paths:
- path:
backend:
serviceName: service-dev
servicePort: 80
ここで注意することは、
kubernetes.io/ingress.allow-http: "false" のアノテーションを入れないこと、HTTPで認証を行っているので失敗する
作成後、ロードバランサーの疎通と認証が通るまで15分くらい時間かかる
kube-legoのログをみながら認証が通ったか確認する
kubectl logs -f --namespace kube-lego $(kubectl get pod --namespace kube-lego -l app=kube-lego -o name)
認証が通ったらhttps://ドメインで疎通確認