英文:
Cloud Storage can't manage files in production, oauth2: cannot fetch token
问题
我正在将我的Go项目作为scratch镜像上传到GKE。按照这个教程,使用一个密钥作为secret来传递我的服务账号。我的部署通过Ingress暴露,并且Google为应用程序端点生成了一个受信任的SSL证书。该密钥具有Storage Object Admin角色。
在我的计算机上,服务账号密钥可以正常工作,但在GKE上,它会抛出以下错误,导致无法上传或下载文件。
# 上传
Post "https://storage.googleapis.com/upload/storage/v1/b/1.0.0.0/o?alt=json&name=cloud%2Ftest%-e7c7-4e9a--9a75d&prettyPrint=false&projection=full&uploadType=multipart": oauth2: 无法获取令牌: Post "https://oauth2.googleapis.com/token": x509: 由未知机构签名的证书
# 下载
Get "https://storage.googleapis.com/1.0.0.0/folder/test/4e882f59.png": oauth2: 无法获取令牌: Post "https://oauth2.googleapis.com/token": x509: 由未知机构签名的证书
我还阅读了这篇帖子,错误似乎相似,但即使使用alpine镜像并安装ca-certificates也无法解决问题。
英文:
I'm uploading my Go project to GKE as a scratch image. Following this tutorial to deliver my service account key using a secret. My deployment is exposed by a Ingress and Google generate a trusted SSL Certificate for the application endpoint. The key has Storage Object Admin role.
On my computer the service account key works but on GKE it throws the following error and I can't upload or download files.
# UPLOAD
Post "https://storage.googleapis.com/upload/storage/v1/b/1.0.0.0/o?alt=json&name=cloud%2Ftest%-e7c7-4e9a--9a75d&prettyPrint=false&projection=full&uploadType=multipart": oauth2: cannot fetch token: Post "https://oauth2.googleapis.com/token": x509: certificate signed by unknown authority
# DOWNLOAD
Get "https://storage.googleapis.com/1.0.0.0/folder/test/4e882f59.png": oauth2: cannot fetch token: Post "https://oauth2.googleapis.com/token": x509: certificate signed by unknown authority
I also read this post, the error seems to be similar but it didn't work either using an alpine image and installing ca-certificates
答案1
得分: 0
解决方案
我缺少了update-ca-certificates命令,这是我的Dockerfile,希望对某人有帮助
RUN apk add --no-cache ca-certificates && update-ca-certificates
完整的Dockerfile
# BUILD STAGE
FROM golang:1.18.5-alpine3.16 as build
ENV CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
WORKDIR /go/src/ms-gcp
COPY . .
RUN go build cmd/ms-gcp/main.go
# PROD STAGE
FROM alpine:3.15.6
# CERT PACKAGES
RUN apk add --no-cache ca-certificates && update-ca-certificates
# TIME ZONE FOR CHILE-SANTIAGO
RUN apk update
RUN apk add tzdata
RUN cp /usr/share/zoneinfo/Chile/Continental /etc/localtime
ENV TZ America/Santiago
RUN echo "America/Santiago" > /etc/timezone
# GLIBC
RUN apk --no-cache add ca-certificates wget && \
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-2.35-r0.apk && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-bin-2.35-r0.apk && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-i18n-2.35-r0.apk && \
apk add glibc-bin-2.35-r0.apk glibc-i18n-2.35-r0.apk glibc-2.35-r0.apk
COPY ./locale.md /locale.md
RUN cat locale.md | xargs -i /usr/glibc-compat/bin/localedef -i {} -f UTF-8 {}.UTF-8
ENV LANG=cl_ES.UTF-8 \
LANGUAGE=cl_ES.UTF-8
COPY --from=build /go/src/ms-gcp/main .
CMD ["./main"]
英文:
SOLUTION
I was missing the update-ca-certificates command, here is my dockerfile in case it helps someone
RUN apk add --no-cache ca-certificates && update-ca-certificates
Full dockerfile
# BUILD STAGE
FROM golang:1.18.5-alpine3.16 as build
ENV CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
WORKDIR /go/src/ms-gcp
COPY . .
RUN go build cmd/ms-gcp/main.go
# PROD STAGE
FROM alpine:3.15.6
# CERT PACKAGES
RUN apk add --no-cache ca-certificates && update-ca-certificates
# TIME ZONE FOR CHILE-SANTIAGO
RUN apk update
RUN apk add tzdata
RUN cp /usr/share/zoneinfo/Chile/Continental /etc/localtime
ENV TZ America/Santiago
RUN echo "America/Santiago" > /etc/timezone
# GLIBC
RUN apk --no-cache add ca-certificates wget && \
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-2.35-r0.apk && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-bin-2.35-r0.apk && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-i18n-2.35-r0.apk && \
apk add glibc-bin-2.35-r0.apk glibc-i18n-2.35-r0.apk glibc-2.35-r0.apk
COPY ./locale.md /locale.md
RUN cat locale.md | xargs -i /usr/glibc-compat/bin/localedef -i {} -f UTF-8 {}.UTF-8
ENV LANG=cl_ES.UTF-8 \
LANGUAGE=cl_ES.UTF-8
COPY --from=build /go/src/ms-gcp/main .
CMD ["./main"]
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论