質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

769閲覧

Kubernetes で SSL 化

shaw

総合スコア209

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

1グッド

0クリップ

投稿2018/06/16 15:23

実現したいこと

kubernetes を使って SSL 化された web アプリを公開したい。

現在の状況

Docker の image は作成済みです。
また、単純に http で公開することはできました。

しかし、SSL 化するため Ingress というものを挟んで行おうとするとうまく行きません。

うまく行かない箇所

サービスの公開を NodePort で行うのですが、下記に記載の通り EXTERNAL IP が none になってしまいます。

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hoge-brdcs NodePort 10.55.243.11 <none> 8080:31642/TCP 31m

ここが原因で Ingress からサービスに繋がってないと考えています。

Ingress 側では 「Some backend services are in UNKNOWN state
」 のように出ています。

最後に

上記を解決いただければ嬉しいのですが、他に SSL 化する方法などございましたらご教授ください。

sequelanonymous👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Ingressを利用する場合は以下のような構成となるはずで、グローバルIPは Ingress に対して設定することになります
[Ingress]<->[NodePort(Service)]<->[Webサーバー]

なので、インターネットに公開されているのは Ingress となるので、Service の EXTERNAL-IP は none の状態が正しいです

"Some backend services are in UNKNOWN state" とエラーが出ているのは、何らかの原因で Ingress の spec.backend で設定しているサービスが見つけられないからだと考えられます
以下を確認してみてください

  • Ingress の spec.backend.serviceName と、Service の metadata.name が同じ値に設定されているか
  • Ingress の spec.backend.servicePort と Service の spec.ports が同じ値に設定されているか

詳細はこちらの記事の説明がわかりやすかったです
https://codezine.jp/article/detail/10523

仮に Ingress が上手くいかない場合は、Webサーバーの Pod に SSL 証明書を設定したものを利用すればできると思います
この場合だと SSL 証明書の更新の度に Webサーバーを全てアップデートする必要があるので手間がかかります

投稿2018/08/28 02:43

Chanmoro

総合スコア97

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sequelanonymous

2018/12/03 04:43

横入りですみません、私も同じような悩みを抱えています。 下記は、どうすればできるようになるのかご存知でしたらご教示頂けませんでしょうか? > Webサーバーの Pod に SSL 証明書を設定したものを利用すればできると思います
Chanmoro

2018/12/12 02:18 編集

ご質問ありがとうございます。 > Webサーバーの Pod に SSL 証明書を設定したものを利用 こちらは簡単にいうと、SSL証明書が設定済みの nginx の docker イメージを作るということですね。 ただ nginx の設定ファイルも含めて docker image にまとめてしまうと設定変更の度に docker build が必要になってしまって非常に不便になります。 そのため僕は ConfigMap を使って nignx の設定ファイルはそこから注入する形で設定していました。 いずれにしてもこれは一時的な解決策で中長期の運用には向かないので、 Ingress に SSL 証明書を設定する方が良いと思います。 過去に私が上手くいった例だと、こんな感じの設定で Ingress を使っていました。 ```yaml apiVersion: extensions/v1beta1 kind: Ingress metadata: name: public-interface annotations: kubernetes.io/ingress.global-static-ip-name: "application-global-ip" # 固定のグローバルIPを設定したい場合 spec: tls: - secretName: letsencrypt-certs # let's encript で取得した SSL 証明書を secrets に保存しておき参照 backend: serviceName: nginx # リバースプロキシ用の nginx では SSL を使わない servicePort: 80 ```
sequelanonymous

2018/12/12 05:35

ご回答ありがとうございます。何れにせよ、ingressは必要ということでしょうか?
sequelanonymous

2018/12/12 05:43

というのも、現状、ingressとnordportの組み合わせていて、ingressをつかわず、nordportをloadbalancerにとりかえ、そのloadbalancerにssl証明をかませることができたりしないのかなと思った次第です。
Chanmoro

2018/12/12 12:41

なるほど。 必ずしもingressが必要というわけではないですね。 SSLを終端するロードバランサーの役割を想定して ingress が用意されているようなので、あくまで便利ですよというだけです。 > nordportをloadbalancerにとりかえ、そのloadbalancerにssl証明をかませる ここで仰っている load balancer が何を指しているかが分からなかったのですが、具体的にどういった設定をしようとされているか教えていただくことはできますか?
sequelanonymous

2018/12/12 14:42

ingress > nordport > nginx > cluster ip > application という順番でアクセスする構成にしています。ここでingressとnginxのつなぐ役割としてnordportを使っています。 が、これをload balancer > nginx > cluster ip > application という構成にした場合、ingressをつかわずにhttps化したい場合にはどうすればよいのだろう?ということを考えています。
Chanmoro

2018/12/17 04:54

すみません、ご返信が遅くなりました。 ご説明ありがとうございます。 その構成で load balancer に SSL 証明書を設定することも可能だと思います。 具体的な設定方法はインフラに依存するところなので分からないですが、結局のところ SSL の終端をどこで行うかという話なので Kubernetes の外にあるロードバランサに SSL 証明書を持たせるという形でも設定できるはずです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問