2017-06-22 10 views
1

これは私のクラスタ情報だから、httpsを通じてkubernetesサービスにアクセスするには?

kubectl cluster-info 
Kubernetes master is running at https://129.146.10.66:6443 
Heapster is running at https://129.146.10.66:6443/api/v1/proxy/namespaces/kube-system/services/heapster 
KubeDNS is running at https://129.146.10.66:6443/api/v1/proxy/namespaces/kube-system/services/kube-dns 

ですが、私はNodePortと設定はこの

kubectl describe svc mysqlbrokerservice 
Name:      mysqlbrokerservice 
Namespace:    mysqlbroker 
Labels:      <none> 
Annotations:    <none> 
Selector:    app=mysqlbroker 
Type:      NodePort 
IP:      10.99.194.191 
Port:      mysqlbroker  8080/TCP 
NodePort:    mysqlbroker  30000/TCP 
Endpoints:    10.244.1.198:8080 
Session Affinity:  None 
Events:      <none> 

のように見えるように私はのパブリックIPを介してサービスにアクセスすることができます実行しているサービス(mysqlbrokerservice)を持っていますポッドが実行されているノード(http://129.146.34.181:30000/v2/catalog)。

次に、httpsを通じてサービスにアクセスできるかどうかを確認したいと考えていました。私は指示に従いましたhttps://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/#manually-constructing-apiserver-proxy-urls

私はこの例に従い、curlを使ってリソースを取得しました。 ここにコマンドがあります。 129.146.10.66:6443は私のマスターIPです。

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET https://129.146.10.66:6443/api/v1/namespaces/mysqlbroker/services/mysqlbrokerservice:8080/proxy/v2/catalog --header "Authorization: Bearer $TOKEN" --insecure 
HTTP/1.0 200 Connection established 

カールは応答なしでそこに座っています。私はその後、私のポッドのログを見て、それは受け取ったすべての要求が表示されません。

誰かが私がここで間違っていることを説明できますか? httpsを通じてサービスを公開したい場合、理想的なソリューションは何ですか?

答えて

0

ドキュメントには、番号ではなくポート名が必要とされています。あなたは次のことを試しましたか?

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET https://129.146.10.66:6443/api/v1/namespaces/mysqlbroker/services/mysqlbrokerservice:mysqlbroker/proxy/v2/catalog --header "Authorization: Bearer $TOKEN" --insecure 
+0

はい、これは同じです。 – user686730

0

あなたはkubectl cluster-infoにより提供されたURLのいずれかをクリックすると、あなたのブラウザが安全でないTLS接続を受け入れるようにプロンプ​​トを表示していることがわかります。

この特定のアドレスでHTTPSが機能するには、ホスト名(この場合はIPアドレスであり、IPアドレスの証明書を購入することはできません)に対して発行されたTLS証明書を購入する必要があります。もう一つの選択肢は、Kubernetesクラスタのルート証明書をコンピュータの信頼されたルートに追加することですが、他のコンピュータでは動作しません。

だから私はあなただけでHTTPS経由で、外の世界へのアクセスKubernetes上で動作するアプリケーションを作成しようとしていると仮定します。

そのために、私は買って、実際にドメイン名を購入する(またはサブドメインを再利用)をお勧めしますそのホスト名用のSSL/TLS証明書、およびIngressを使用してロードバランサをHTTPS終端で設定することです。 https://kubernetes.io/docs/concepts/services-networking/ingress/#tls(GKE、Google Load Balancerの場合は、このタスクを実行するためにローカルのnginxインスタンスを設定します)

+0

でもサービスには到達できません。信頼できる証明書とドメインを購入するのは、私が開発環境の外でセットアップしたいときです。 Kubernetesは自己署名入りの証明書を持っており、今のところそれを使用することができます。私が指摘していた問題は、外部からマスターを介してどのようにサービスに到達できるかということです。 kub-dnsサービス。 – user686730

関連する問題