Help us understand the problem. What is going on with this article?

GKEのingressに中間証明書をインストールするよ

More than 1 year has passed since last update.

GKE内のサービスをTLSで外部に公開したい場合、kubernetesのingressを使ってGCPのL7LBをたてるのが楽ですが、その時のTSL証明書の設定で苦戦したのでメモよりのメモ

証明書の結合ファイルを作る

ingressはGCPのhttpLBのように中間証明書をインストールするディレクティブがありません。そこで中間証明書等がある場合はサーバ証明書に中間証明書を結合してあげる必要があります。

$ cat wildcard.example.com_20190430.cer tyukan_cert.cer >> cert.pem

このようにコマンドで結合するとマジ卍です。

secretを作る

次に結合した証明書と鍵をkubernetesのsecretとして登録します。
secretは値をbase64でエンコードする必要があるのですが、kubectlコマンドを使うと簡単にkubernetesの定義ファイルを吐き出すことができます。

$ kubectl create secret tls wildcard-example-com-20190420 --key=wildcard.example.com_20190430.key --cert=cert.pem -o yaml --dry-run > tls_secret.template.yaml

作成した定義ファイルを適用すればsecretの完成です。

$ kubectl apply -f tls_secret.template.yaml

ドメイン

予めドメインと静的IPアドレスのヒモ付は行っておいて下さい。
管理はterraformを使うと便利なので一応tfファイルの書き方ものせておきます。

resource "google_compute_global_address" "example-lb" {
  name = "example-lb"
}
resource "google_dns_record_set" "test_example_com" {
  managed_zone = "XXX"
  name         = "test.example.com."
  type         = "A"
  ttl          = 300
  rrdatas      = ["${google_compute_global_address.example-lb.address}"]
}

これでexample-lbという名前の静的IPアドレスがGCP上に登録されます。

ingressを作る

あとはingressをたてるだけです。
ingressには先程作成した静的IPアドレスをannotationsに、secretをtlsディレクティブに指定します。

example-ingress.yaml
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    kubernetes.io/ingress.allow-http: "false"
    kubernetes.io/ingress.global-static-ip-name: example-lb #ここに静的IPアドレスの名前
spec:
  tls:
  - secretName: wildcard-example-com-20190420 #ここにsecretの名前
  rules:
  - host: test.example.com
    http:
      paths:
      - backend:
          serviceName: example-service
          servicePort: 9000

上記の定義ファイルをkubectlでapplyするとしばらくすると(10分程度)httpsLoadbalancerが動き始めます。テンアゲ!

$ kubectl apply -f example-ingress.yaml

確認

確認は確認用のサイトを使うといいでしょう。
ブラウザからの確認だと中間証明書がうまく設定できてなくても普通に通信できてしまったりします。
下記のサイト等を使って証明書にエラーが無いことを確認すると良いです。

GeoTrustCryptoReport

参考記事

SSLサーバー証明書に中間証明書を結合する [(全部俺)何でも Advent Calendar 2013 8日目]

cyberagent
サイバーエージェントは「21世紀を代表する会社を創る」をビジョンに掲げ、インターネットテレビ局「AbemaTV」の運営や国内トップシェアを誇るインターネット広告事業を展開しています。インターネット産業の変化に合わせ新規事業を生み出しながら事業拡大を続けています。
http://www.cyberagent.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away