2016-07-15 6 views
1

Google Cloud Platformでkberbernetesクラスターを実行しています。このクラスターでは、ヘイゼルキャストベースの8つのレプリカを含むデプロイメントが作成されます。私たちは月を超えるため、この実行中の罰金を持っていたが、最近、我々は我々の展開を開始しようとしたときに(非関連のスタックフレームは省略)以下のエラーメッセージの受信を開始:デベロッパー作成時にKubernetes "fatal alert:protocol_version"エラーが発生する

2016-07-15 12:58:02,117 [My-hazelcast.my-deployment-368708980-8v7ig @ my-deployment-368708980-8v7ig] ERROR - [10.68.5.3]:5701 [MyProject] [3.6.2] Error executing: GET at: https://kubernetes.default.svc/api/v1/namespaces/default/endpoints/my-service. Cause: Received fatal alert: protocol_version 

io.fabric8.kubernetes.client.KubernetesClientException: Error executing: GET at: https://kubernetes.default.svc/api/v1/namespaces/default/endpoints/my-service. Cause: Received fatal alert: protocol_version 
    at io.fabric8.kubernetes.client.dsl.base.OperationSupport.requestException(OperationSupport.java:272) ~[kubernetes-client-1.3.66.jar:na] 
    at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:205) ~[kubernetes-client-1.3.66.jar:na] 
    at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleGet(OperationSupport.java:196) ~[kubernetes-client-1.3.66.jar:na] 
    at io.fabric8.kubernetes.client.dsl.base.BaseOperation.handleGet(BaseOperation.java:483) ~[kubernetes-client-1.3.66.jar:na] 
    at io.fabric8.kubernetes.client.dsl.base.BaseOperation.get(BaseOperation.java:108) ~[kubernetes-client-1.3.66.jar:na] 
    at com.noctarius.hazelcast.kubernetes.ServiceEndpointResolver.resolve(ServiceEndpointResolver.java:62) ~[hazelcast-kubernetes-discovery-0.9.2.jar:na] 
    at com.noctarius.hazelcast.kubernetes.HazelcastKubernetesDiscoveryStrategy.discoverNodes(HazelcastKubernetesDiscoveryStrategy.java:74) ~[hazelcast-kubernetes-discovery-0.9.2.jar:na] 
    at com.hazelcast.spi.discovery.impl.DefaultDiscoveryService.discoverNodes(DefaultDiscoveryService.java:74) ~[hazelcast-all-3.6.2.jar:3.6.2] 
    .... 
Caused by: javax.net.ssl.SSLException: Received fatal alert: protocol_version 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) ~[na:1.7.0_95] 
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:154) ~[na:1.7.0_95] 
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1991) ~[na:1.7.0_95] 
    ... 
    at io.fabric8.kubernetes.client.dsl.base.OperationSupport.handleResponse(OperationSupport.java:203) ~[kubernetes-client-1.3.66.jar:na] 
... 18 common frames omitted 

私はこのエラーをグーグルとき、私はTLSプロトコルのバージョンの不一致について多くのヒットを得る。明らかに、Java 8はJava 7および6(TLS 1.0)とは異なるTLSプロトコルバージョン(TLS 1.2)を想定しています。しかし、すべてのコンテナはJava 7に基づいた同じドッカーイメージ(hazelcast/hazelcast:3.6.2イメージに基づいています)を実行します。そのため、プロトコルバージョンの不一致はありません(イメージのこのレイヤーは変更されません)。

このエラーを解決するために、すべての最近の変更を元に戻してみましたが、無駄です。そして率直に言って、私たちのチームの誰もSSLやHazelcast Kubernetesディスカバリメカニズムに関連するものは誰も変更していません。最近Google Cloud SDKツール(「一部のCloud SDKコンポーネントで利用可能な更新プログラム」)を求めてGoogleのGoogle Cloud SDKコンポーネント(gcloud components update)を更新しました。現在、Google Clouds SDKのバージョン117.0.0を使用していますが、release notesではSSLやTLSに関連する大きな変更はありません。

kubernetesポッドでこの「fatal alert: protocol_version」というエラーメッセージが突然表示されるのはなぜですか。どのように解決できますか?

答えて

3

これはTLSバージョンのエラー(バージョン1.0と1.2の互換性がない)であることを示す初期のGoogle検索が有用であることが判明しました。 This answer同様のSSLExceptionに関する質問にprotocol_versionエラーが正しい方向に私を指摘しています。

私は実行するテストコンテナを持って、そして容器にインタラクティブbashシェルを起動するkubectl exec my-test-pod -i -t -- /bin/bash -ilを使用して、私はHazelcastディスカバリサービスががTLS 1.0を使用して接続することができませんでしたが、TLS 1.2を使用して可能性があると判断:

/opt/hazelcast# curl -k --tlsv1.0 https://kubernetes.default.svc/api/v1/namespaces/default/endpoints/my-service 
curl: (35) error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version 

/opt/hazelcast# curl -k --tlsv1.2 https://kubernetes.default.svc/api/v1/namespaces/default/endpoints/my-service 
Unauthorized    # <-- Unauthorized is expected, as I didn't specify a user/passwd. 

私は(Javaの7は、すべての後に、人生の終わりである)、Googleのクラウドサービス内で何かおそらく、我々が使用するパブリックドッカーコンテナの可能性層、まだ正確に何が変更されたかわからない、とHazelcastで罰金の人々はおそらく提案REST APIが更新されました。しかし、明らかに何かが変更されたため、クライアントはTLSバージョン1.2にクライアントを期待していました。

$ pwd 
/home/jdoe/devel/hazelcast-docker-3.6.2/hazelcast-oss 
$ head -n3 Dockerfile 
FROM java:8 
ENV HZ_VERSION 3.6.2 
ENV HZ_HOME /opt/hazelcast/ 

出来上がりを:

ソリューションは、我々が使用して、およびJava 8の代わりに、Javaの7を使用するように微調整した後、私たち自身の開発サンドボックス内で画像を再構築したdownload the Hazelcast Docker imageにしました!私たちの展開は再び実行されています。

関連する問題