単純な流星アプリをkubernetesにデプロイしています。外部IPアドレスをサーバーに関連付け、クラスター内からアクセスできるようにしました。今、私はそれをインターネットに公開し、(HTTPSプロトコルを使用して)保護する必要があります。誰でもこのセクションの簡単な指示を与えることができますか?
私の意見では、 kube-lego はGKEの最適なソリューションです。理由をご覧ください:
設定例(それだけです!):
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:
...
Sslエンドポイントをセットアップするにはいくつかの方法がありますが、ソリューションでは2つの問題を解決する必要があります。まず、有効な証明書とキーを取得する必要があります。次に、インフラストラクチャにsslエンドポイントをセットアップする必要があります。
K8s 入力コントローラー をご覧ください。入力コントローラに k8sシークレットストア からの証明書/キーシークレットを提供して、SSLエンドポイントをセットアップできます。もちろん、これには既に有効な証明書とキーが必要です。
Kubernetes Letsencrypt Controller のような証明書を発行および使用するためのk8s固有のソリューションを見ることができますが、私はそれらを使用したことはなく、それらがどれだけうまく機能するかを言うことはできません。
SSL証明書を発行して使用するための一般的なアイデアを次に示します。
[〜#〜] aws [〜#〜]
AWSで実行している場合、最も簡単な方法は、SSL証明書を自動的に発行できるELBをセットアップすることです。
LetsEncrypt
LetsEncrypt を参照して、ドメインの無料証明書を発行することもできます。それの良いところは、証明書発行プロセスを自動化できることです。
[〜#〜] ca [〜#〜]
もちろん、常に昔ながらの方法で、信頼できるプロバイダーから証明書を発行できます。
[〜#〜] aws [〜#〜]
繰り返しますが、ELBがある場合、それはすでにエンドポイントとして機能し、完了です。もちろん、クライアント<-> ELB接続は暗号化されていますが、ELB <-> k8s-clusterは暗号化されていません。
k8sイングレスコントローラー
上記のように、使用するk8sバージョンに応じて、TLS 入力コントローラー をセットアップすることもできます。
k8sプロキシサービス
もう1つのオプションは、k8sクラスター内にサービスをセットアップすることです。これにより、SSL接続が終了し、暗号化されていないmeteorアプリケーションへのトラフィックがプロキシされます。これのプロキシとしてnginxを使用できます。この場合、証明書のキーを k8s secret store に保存し、nginxコンテナー内にマウントすることをお勧めします。 [〜#〜] never [〜#〜]証明書キーなどの秘密が内部に保存されているコンテナを出荷します!もちろん、暗号化されたトラフィックを何らかの方法でk8sノードに送信する必要があります。これを実現する方法はいくつかあります。最も簡単なのは、k8sノードを指すようにDNSエントリを変更することですが、理想的にはTCPLB。