istio
GKE クラスタに2 つの有効なサービスをデプロイしました。
istio
バージョンは1.1.5
あり、GKE はオンですv1.15.9-gke.24
istio
でインストールされていますglobal.mtls.enabled=true
serviceA
適切に通信します
serviceB
どうやらTLS関連の問題があります。
テストのためだけに有効化されていないデプロイをスピンアップし、これら 2 つのサービス エンドポイントistio
に対してこのテスト ポッドに実行します。curl
/ # curl -v serviceA
* Rebuilt URL to: serviceA/
* Trying 10.8.61.75...
* TCP_NODELAY set
* Connected to serviceA (10.8.61.75) port 80 (#0)
> GET / HTTP/1.1
> Host: serviceA
> User-Agent: curl/7.57.0
> Accept: */*
>
< HTTP/1.1 200 OK
< content-type: application/json
< content-length: 130
< server: istio-envoy
< date: Sat, 25 Apr 2020 09:45:32 GMT
< x-envoy-upstream-service-time: 2
< x-envoy-decorator-operation: serviceA.mynamespace.svc.cluster.local:80/*
<
{"application":"Flask-Docker Container"}
* Connection #0 to host serviceA left intact
/ # curl -v serviceB
* Rebuilt URL to: serviceB/
* Trying 10.8.58.228...
* TCP_NODELAY set
* Connected to serviceB (10.8.58.228) port 80 (#0)
> GET / HTTP/1.1
> Host: serviceB
> User-Agent: curl/7.57.0
> Accept: */*
>
* Recv failure: Connection reset by peer
* Closing connection 0
curl: (56) Recv failure: Connection reset by peer
問題のあるサービスのenvoy
プロキシを実行し、トレース レベルのログをオンにすると、このエラーが表示されます
serviceB-758bc87dcf-jzjgj istio-proxy [2020-04-24 13:15:21.180][29][debug][connection] [external/envoy/source/extensions/transport_sockets/tls/ssl_socket.cc:168] [C1484] handshake error: 1
serviceB-758bc87dcf-jzjgj istio-proxy [2020-04-24 13:15:21.180][29][debug][connection] [external/envoy/source/extensions/transport_sockets/tls/ssl_socket.cc:201] [C1484] TLS error: 268435612:SSL routines:OPENSSL_internal:HTTP_REQUEST
両方のコンテナーの envoy サイドカーは、証明書のデバッグ時に同様の情報を表示します。
これを確認するには、両方のistio
コンテナーに実行し、cd-ing し/etc/certs/..data
て実行します
openssl x509 -in root-cert.pem -noout -text
2つroot-cert.pem
は同じです!
これらの 2 つの istio プロキシは、証明書に関してまったく同じ tls 構成を持っているため、なぜこの不可解な SSL エラーが発生するのserviceB
でしょうか?
FWIWserviceB
は、非 istio 対応postgres
サービスと通信します。
それが問題を引き起こしている可能性がありますか?
curling
ただし、from 自体のコンテナはserviceB
正常な応答を返します。