1

在 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

如果我将java/jdk-10.0.2/lib/security/cacerts下载 OpenJDK 时获得的默认文件替换为我桌面上的默认文件,则上面的代码可以正常工作。

这是为什么?什么是使 Java API 从容器内的存储桶中读取的正确方法?

4

2 回答 2

0

默认情况下,许多基本容器映像可能不包含通常安装在每台计算机上的 CA 证书。(因为不是每个人都需要在容器中使用 TLS。)您通常需要在 Dockerfile 中使用“apt-get install”或类似的方法来安装这些证书。

如果容器中没有 CA 证书,您的代码将无法信任 storage.googleapis.com。

请参阅此答案中将 CA 证书添加到容器所需的命令:https ://superuser.com/a/633853/35769理想情况下,您不应从台式机复制这些证书。

于 2018-11-09T23:36:23.477 回答
0

这个问题是通过改变两件事来解决的。
a)将 storage-rw 添加到集群范围和
b)我创建 kubernetes 密码的方式有误

不知道替换 cacerts 文件如何或为什么有帮助,但上述 2 个修复是正确的方法

于 2018-11-18T03:13:24.563 回答