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
コンテナクラスタは作成されている前提で進める
yuki-toida.hatenablog.com
kube-lego をクローンする
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-lego
namespace に作成されているか確認する
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://ドメイン
で疎通確認