Выдача сертификата Sagemaker у Kubernetes - PullRequest
0 голосов
/ 03 декабря 2018

Я создал докер-контейнер, который использует Sagemaker через java sdk.Этот контейнер развернут в кластере k8s с несколькими репликами.

Контейнер выполняет простые запросы к Sagemaker, чтобы перечислить некоторые модели, которые мы обучили и развернули.Однако сейчас у нас проблемы с некоторыми сертификатами Java.Я довольно новичок в k8s и сертификатах, поэтому буду признателен, если вы поможете решить эту проблему.

Вот некоторые следы из журнала, когда он пытается перечислить конечные точки:

org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394)
    at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353)
    at com.amazonaws.http.conn.ssl.SdkTLSSocketFactory.connectSocket(SdkTLSSocketFactory.java:132)
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:141)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.amazonaws.http.conn.ClientConnectionManagerFactory$Handler.invoke(ClientConnectionManagerFactory.java:76)
    at com.amazonaws.http.conn.$Proxy67.connect(Unknown Source)
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
    at com.amazonaws.http.apache.client.impl.SdkHttpClient.execute(SdkHttpClient.java:72)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1236)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1056)
    ... 70 common frames omitted
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397)
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302)
    at sun.security.validator.Validator.validate(Validator.java:262)
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1621)
    ... 97 common frames omitted
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141)
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126)
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:392)
    ... 103 common frames omitted 

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Я думаю, что нашел ответ на свою проблему.Я установил еще один кластер k8s и развернул там контейнер.Они работают нормально и проблем с сертификатами не возникает.Исследуя больше, я заметил, что у них были некоторые проблемы с разрешением DNS на первом кластере k8s.Фактически, контейнеры с проблемами сертификатов не могли, например, пропинговать google.com.Я исправил проблему с DNS, не полагаясь на core-dns и установив конфигурацию DNS в файле deploy.yaml.Я не уверен, что понимаю, почему именно, но это, похоже, решило проблему с сертификатом.

0 голосов
/ 12 декабря 2018

Сообщение об ошибке, которое вы получаете, появляется, когда Java не знает о корневом сертификате, возвращенном конечной точкой TLS.Это часто происходит, если вы меняете доступные корневые сертификаты.

Per https://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/JSSERefGuide.html#Customization:

"If a truststore named <java-home>/lib/security/jssecacerts is found, it is used. 
If not, then a truststore named <java-home>/lib/security/cacerts is searched for and used (if it exists).
Finally, if a truststore is still not found, then the truststore managed by the TrustManager will be a new empty truststore."

Openssl - хороший инструмент для устранения таких проблем с сертификатами.Вы можете использовать следующую команду для получения сертификата, возвращенного конечной точкой.Это может помочь вам определить, как выглядит цепочка сертификатов.

openssl s_client -showcerts -connect www.example.com:443 </dev/null

Вы можете просмотреть список сертификатов, которые Java знает об использовании keytool , утилиты, поставляемой с JRE.

keytool -list -cacerts

Некоторые системные администраторы перезаписывают сертификаты по умолчанию, записывая альтернативный файл склада доверенных сертификатов в папку по умолчанию.В других случаях команды могут переопределить значение по умолчанию, используя системное свойство javax.net.ssl.trustStore .

Наконец, вы можете использовать утилиту jps , также предоставляемую сJRE, чтобы увидеть системные свойства, установленные для работающего процесса Java.

jps -v
0 голосов
/ 04 декабря 2018

Скорее всего, это связано с тем, что администратор добавил в вашу сеть какой-нибудь собственный путь сертификации SSL.Возможно, вы захотите проверить корневые сертификаты SSL, открыв любой защищенный веб-сайт в браузере и щелкнув ссылку «Безопасная» слева от адресной строки (по крайней мере, так оно и есть в Chrome).Вы увидите всплывающее окно с информацией о сертификате и сертификации.Перейдите к его пути сертификата и посмотрите сертификат ROOT. Если это какой-то собственный сертификат, вам нужно добавить его в файл cacerts.Прочитайте эту ссылку для более подробной информации

...