やりたいことは、test.com
とapi.test.com
のようなドメインで同じSSL証明書を使用することです
kube-legoやkubernetesのページ読んでも複数ドメインの対応は書いてあったけど、http前提で書いててつらくなっていました
結局ingress.yamlの書き方で解決できたのでメモ
環境はGKEを使用しています
サブドメイン対応のingress.yaml
とりあえず書き方だけ見たい時用にyaml
tls: hosts:下に2つサブドメインも含め書けばいいだけです
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: tetetest-loadbalancer
annotations:
kubernetes.io/ingress.global-static-ip-name: "tetetest-loadbalancer-ip" # GCPで作成した静的IPアドレスの名前
kubernetes.io/tls-acme: "true" # HTTPS対応する
kubernetes.io/ingress.class: "gce" # GCPを使うのでgce
spec:
tls:
- hosts: # ここの下に2つドメインを記述する
- test.com # 普通のドメイン
- api.test.com # サブドメイン
secretName: test-loadbalancer-tls # k8sに作成されるsecrets名
rules:
- host: test.com # フロントエンド用のドメイン
http:
paths:
- path: /*
backend:
serviceName: test-angular # フロントエンド用サービス名
servicePort: 80 # フロントエンド公開ポート NodePort
- host: api.test.com # API用のサブドメイン
http:
paths:
- path: /*
backend:
serviceName: test-api # API用サービス名
servicePort: 9000 # API公開ポート NodePort
参考
ingressを使ってのwebページ公開の手順
deployment等でpodを作成 -> そのpodをNodePortでservice公開(例えば8080番) -> ingressでGoogleCloudLoadBalancingの作成(service名とポート指定してフォワーディング先を決定)
kube-legoでHTTPS対応
kube-legoを使ってHTTPS対応のwebページ公開の手順
kube-lego example
kube-legoディレクトリの下にnamespace, configmap, deploymentを作成してLet'sEncryptから証明書を取得できるようにします
そして最初に書いたようなingress.yamlを作成してLBを設定します