go - 无法连接到代理 "Certificate signed by unknown authority"

标签 go kubernetes google-cloud-platform google-cloud-sql google-kubernetes-engine

我正在尝试通过我的 Kubernetes 部署中的 cloudsql-proxy 容器连接到 CloudSQL 实例。我安装了 cloudsql 凭据并设置了 GOOGLE_APPLICATION_CREDENTIALS 的值。

但是,我的日志中仍然收到以下错误:

2018/10/08 20:07:28 Failed to connect to database: Post https://www.googleapis.com/sql/v1beta4/projects/[projectID]/instances/[appName]/createEphemeral?alt=json&prettyPrint=false: oauth2: cannot fetch token: Post https://oauth2.googleapis.com/token: x509: certificate signed by unknown authority

我的连接字符串是这样的:

[dbUser]:[dbPassword]@cloudsql([instanceName])/[dbName]]?charset=utf8&parseTime=True&loc=Local

并且代理拨号器被影子导入为:

_ github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/mysql

有人知道可能缺少什么吗?

编辑:

部署规范看起来像这样(JSON 格式):

{
  "replicas": 1,
  "selector": {
    ...
  },
  "template": {
    ...
    "spec": {
      "containers": [
        {
          "image": "[app-docker-imager]",
          "name": "...",
          "env": [
            ...
            {
              "name": "MYSQL_PASSWORD",
              ...
            },
            {
              "name": "MYSQL_USER",
              ...
            },
            {
              "name": "GOOGLE_APPLICATION_CREDENTIALS",
              "value": "..."
            }
          ],

          "ports": [
            {
              "containerPort": 8080,
              "protocol": "TCP"
            }
          ],
          "volumeMounts": [
            {
              "mountPath": "/secrets/cloudsql",
              "name": "[secrets-mount-name]",
              "readOnly": true
            }
          ]
        },
        {
          "command": [
            "/cloud_sql_proxy",
            "-instances=...",
            "-credential_file=..."
          ],
          "image": "gcr.io/cloudsql-docker/gce-proxy:1.11",
          "name": "...",
          "ports": [
            {
              "containerPort": 3306,
              "protocol": "TCP"
            }
          ],
          "volumeMounts": [
            {
              "mountPath": "/secrets/cloudsql",
              "name": "[secrets-mount-name]",
              "readOnly": true
            }
          ]
        }
      ],
      "volumes": [
        {
          "name": "[secrets-mount-name]",
          "secret": {
            "defaultMode": 420,
            "secretName": "[secrets-mount-name]"
          }
        }
      ]
    }
  }
}

最佳答案

错误消息表明您的客户端无法信任 https://www.googleapis.com 的证书.这有两个可能的原因:

  1. 您的客户端不知道要信任哪些根证书。官方cloudsql-proxy docker image包括根证书,因此如果您使用的是该镜像,则这不是您的问题。如果您不使用该镜像,则应该(或至少在您的镜像中安装 ca 证书)。

  2. 您的出站流量正被使用不同的、不受信任的证书的代理服务器拦截。这可能是恶意的(在这种情况下,您需要调查谁在拦截您的流量)。更温和的是,您可能在使用出站代理根据策略检查流量的组织中。如果是这种情况,您应该构建一个新的 docker 镜像,其中包含您组织的出站代理使用的 CA 证书。

关于go - 无法连接到代理 "Certificate signed by unknown authority",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52712907/

相关文章:

go - 处理多语言 Go Web 应用程序的标准/惯用方法是什么?

json:无法将对象解码为 Go 类型的值

docker - Minikube 服务在从命令行运行时工作,但通过 YAML 应用不起作用

google-cloud-storage - gcloud 安装在具有服务级别帐户权限问题的 gce 实例上

amazon-web-services - 托管数据库(例如 Amazon RDS)的访问速度是否比 Web 服务器位于同一计算机 (EC2) 上的数据库慢

oop - Go中方法参数的继承替代

go - 使用 github.com/spf13/cobra 获取参数值

kubernetes - 是否可以安排 CronJob 在每个 Kubernetes 节点上执行?

node.js - Kubernetes node.js 容器无法连接到 MongoDB Atlas

python - 在 Firebase 函数中使用 Google Cloud AutoML 模型预测存储在 Google Cloud 存储中的图像