web-dev-qa-db-ja.com

KubernetesアプリケーションでSSLを取得する方法は?

単純な流星アプリをkubernetesにデプロイしています。外部IPアドレスをサーバーに関連付け、クラスター内からアクセスできるようにしました。今、私はそれをインターネットに公開し、(HTTPSプロトコルを使用して)保護する必要があります。誰でもこのセクションの簡単な指示を与えることができますか?

13
fay

私の意見では、 kube-lego はGKEの最適なソリューションです。理由をご覧ください:

  • Let's Encrypt をCAとして使用します
  • 完全に自動化された登録と更新
  • 単一のConfigMapオブジェクトでの最小限の構成
  • nginx-ingress-controller で動作します( example を参照)
  • GKEのHTTPロードバランサー で動作します( を参照)
  • 1つのIPで複数のhttpsサイトをホストする仮想ホストを含​​む、完全にサポートされる複数のドメイン(nginx-ingress-controllerのSNIサポート付き)

設定例(それだけです!):

kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-lego
  namespace: kube-lego
data:
  lego.email: "your@email"
  lego.url: "https://acme-v01.api.letsencrypt.org/directory"

Ingressの例(これらをさらに作成できます):

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: site1
  annotations:
    # remove next line if not using nginx-ingress-controller
    kubernetes.io/ingress.class: "nginx"
    # next line enable kube-lego for this Ingress
    kubernetes.io/tls-acme: "true"
spec:
  tls:
  - hosts:
    - site1.com
    - www.site1.com
    - site2.com
    - www.site2.com
    secretName: site12-tls
  rules:
    ...
14
Janos Lenart

Sslエンドポイントをセットアップするにはいくつかの方法がありますが、ソリューションでは2つの問題を解決する必要があります。まず、有効な証明書とキーを取得する必要があります。次に、インフラストラクチャにsslエンドポイントをセットアップする必要があります。

K8s 入力コントローラー をご覧ください。入力コントローラに k8sシークレットストア からの証明書/キーシークレットを提供して、SSLエンドポイントをセットアップできます。もちろん、これには既に有効な証明書とキーが必要です。

Kubernetes Letsencrypt Controller のような証明書を発行および使用するためのk8s固有のソリューションを見ることができますが、私はそれらを使用したことはなく、それらがどれだけうまく機能するかを言うことはできません。

SSL証明書を発行して使用するための一般的なアイデアを次に示します。

1.有効なSSL証明書とキーを取得する

[〜#〜] aws [〜#〜]

AWSで実行している場合、最も簡単な方法は、SSL証明書を自動的に発行できるELBをセットアップすることです。

LetsEncrypt

LetsEncrypt を参照して、ドメインの無料証明書を発行することもできます。それの良いところは、証明書発行プロセスを自動化できることです。

[〜#〜] ca [〜#〜]

もちろん、常に昔ながらの方法で、信頼できるプロバイダーから証明書を発行できます。

2. sslエンドポイントのセットアップ

[〜#〜] aws [〜#〜]

繰り返しますが、ELBがある場合、それはすでにエンドポイントとして機能し、完了です。もちろん、クライアント<-> ELB接続は暗号化されていますが、ELB <-> k8s-clusterは暗号化されていません。

k8sイングレスコントローラー

上記のように、使用するk8sバージョンに応じて、TLS 入力コントローラー をセットアップすることもできます。

k8sプロキシサービス

もう1つのオプションは、k8sクラスター内にサービスをセットアップすることです。これにより、SSL接続が終了し、暗号化されていないmeteorアプリケーションへのトラフィックがプロキシされます。これのプロキシとしてnginxを使用できます。この場合、証明書のキーを k8s secret store に保存し、nginxコンテナー内にマウントすることをお勧めします。 [〜#〜] never [〜#〜]証明書キーなどの秘密が内部に保存されているコンテナを出荷します!もちろん、暗号化されたトラフィックを何らかの方法でk8sノードに送信する必要があります。これを実現する方法はいくつかあります。最も簡単なのは、k8sノードを指すようにDNSエントリを変更することですが、理想的にはTCPLB。

9
fishi0x01