为什么在Kubernetes中需要cacerts更新

时间:2018-11-01 03:08:03

标签: java google-cloud-storage google-kubernetes-engine

从在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从容器中的存储桶中读取的正确方法是什么?

2 个答案:

答案 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个修复程序是实现此目的的正确方法