我使用 Terraform 作为 DevOps 管道工具的一部分,最近我更换了我的 PC,然后 terraform 停止工作,我的 Terraform 在 docker 桌面容器内运行,新 PC 有 Windows 11,我可以从中运行 terraform没有遇到认证问题,但 docker 无法初始化 Terraform,我收到此错误
terraform x509: certificate signed by unknown authority
我尝试将过去的手动证书从主机复制到容器,但没有任何帮助。
如果您在使用 vSphere Terraform Provider 时看到此问答,并且您已将根 CA 证书添加到您的操作系统,请确保还将所有中间 CA 证书添加到您的操作系统。通常,您不会作为客户端执行此操作,但 Terraform 似乎需要这样做。我没有找到任何明确提到这一点的文档,但您可以从这些文档中派生它,这些文档描述了如何设置自定义 Terraform 容器,其中明确添加了中间 CA 证书:
FROM ubuntu:bionic # Install required software for Terraform Enterprise. RUN DEBIAN_FRONTEND=noninteractive && \ apt-get update && \ apt-get install -y --no-install-recommends awscli ca-certificates curl daemontools git-core iproute2 netcat-openbsd openssh-client psmisc redis-tools ssh sudo unzip wget # Include all necessary CA certificates. ADD example-root-ca.crt /usr/local/share/ca-certificates/ ADD example-intermediate-ca.crt /usr/local/share/ca-certificates/ RUN update-ca-certificates
确保每当您将证书添加到证书存储时,您也会使用
update-ca-certificates
(Debian/Ubuntu) 或 update-ca-trust
(CentOS/RHEL) 将它们合并到您的证书存储中。
通过向容器 /etc/ssl/certs/ca-certificates.crt 添加证书来解决 –
只是分享我在 Gitlab 管道中的表现。如果您要使用 Gitlab CI/CD 管道对部署在 kubernetes 集群中的资源进行更改,请在 Gitlab 中定义 CI/CD 变量(即 CERT_B64)并输入值。然后在您的 terraform 部署作业中使用
before_script
中的以下脚本。
terraform-deploy:
extends:
- .base-terraform
stage: deploy
variables:
AWS_ACCESS_KEY_ID: $S3_ACCESS_KEY
AWS_SECRET_ACCESS_KEY: $S3_SECRET_KEY
AWS_ENDPOINT_URL_S3: $S3_ENDPOINT
before_script:
- apk add --no-cache gettext ca-certificates
- echo -n $CERT_B64 | base64 -d > /usr/local/share/ca-certificates/ca.crt
- cat /usr/local/share/ca-certificates/ca.crt >> /etc/ssl/certs/ca-certificates.crt
- update-ca-certificates
检查 Terraform 运行失败并出现“x509:证书由未知机构签名”错误 以获取详细说明。