パパエンジニアのポエム

奥さんと娘ちゃんへの愛が止まらない

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-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://ドメインで疎通確認