从在GKE或GCE中运行的容器中的Google存储桶读取文件时。以下代码失败:
public String readSmallTextFileFromBucket(String bucketName, String textFile) {
Blob blob = storage.get(bucketName, textFile);
String fileContent = new String(blob.getContent());
return fileContent;
}
出现错误:
com.google.cloud.storage.StorageException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
如果我替换从桌面下载OpenJDK时获得的默认java/jdk-10.0.2/lib/security/cacerts
文件,则上面的代码有效。
那是为什么?以及使Java API从容器中的存储桶中读取的正确方法是什么?
答案 0 :(得分:0)
默认情况下,许多基本容器映像可能不包括通常在每台计算机上安装的CA证书。 (因为并非每个人都需要在容器中使用TLS。)您通常需要在Dockerfile中“ apt-get install”或类似内容来安装这些证书。
在容器中没有CA证书的情况下,您的代码无法信任storage.googleapis.com。
在此答案中,请参阅将CA证书添加到您的容器所需的命令:https://superuser.com/a/633853/35769理想情况下,您不应从台式机复制这些证书。
答案 1 :(得分:0)
通过更改2项内容解决了此问题。
a)将storage-rw添加到集群作用域和
b)我如何创建kubernetes机密
不知道替换cacerts文件如何或为何有所帮助,但是上述2个修复程序是实现此目的的正确方法