Redhat ubi8-micro 容器没有受信任的根 CA 证书

Redhat ubi8-micro 容器没有受信任的根 CA 证书

我想在registry.access.redhat.com/ubi8/ubi-micro图像上运行一个简单的 GO 应用程序。

但不幸的是,x509: certificate signed by unknown authority我的应用程序出现错误,因为 ubi8-micro 容器上似乎没有根 ca 信任库。

在我的 Dockerfile 中尝试了类似的操作,但没有成功:

FROM registry.access.redhat.com/ubi8/go-toolset as build

USER root

RUN yum update ca-certificates && \
    update-ca-trust

COPY . .

RUN go mod tidy && \
    go build .

FROM registry.access.redhat.com/ubi8/ubi-micro


COPY --from=build /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt /etc/pki/tls/certs/ca-bundle.trust.crt
COPY --from=build /opt/app-root/src/my-app .


RUN ./my-app  # Go app gives 509 error on GET https://google.com

Go中的main函数

func main() {
    _, err := http.Get("https://www.google.com")
    if err != nil {
        log.Printf("Error during Get is: %s", err) // throw 509
    }
}

更新/解决方案

通过使用作为运行器ubi8-minimal来修复它ubi8-micro

另请参阅(提交): https://github.com/michelmeeuwissen/redhat-go-example

答案1

目前尚不清楚您在哪个阶段遇到了错误,因此我将介绍所有内容。

在主机上,您需要将自定义 CA 证书添加到系统信任存储区 ( /etc/pki/ca-trust/source/anchors) 并运行update-ca-trust

在构建容器时,我建议始终将主机信任存储公开给容器,即使您只在访问网络时才真正需要它(buildah build --volume /etc/pki/ca-trust:/etc/pki/ca-trust:ro)。

运行容器时,将主机信任存储公开给容器(--volume /etc/pki/ca-trust:/etc/pki/ca-trust:rocreate或期间run)。

由于 go 本身会查看你的系统信任存储,这与许多其他需要你重写的运行时不同,所以这应该是你所需要的。

相关内容