我正在尝试通过我的 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 的证书.这有两个可能的原因:
您的客户端不知道要信任哪些根证书。官方cloudsql-proxy docker image包括根证书,因此如果您使用的是该镜像,则这不是您的问题。如果您不使用该镜像,则应该(或至少在您的镜像中安装 ca 证书)。
您的出站流量正被使用不同的、不受信任的证书的代理服务器拦截。这可能是恶意的(在这种情况下,您需要调查谁在拦截您的流量)。更温和的是,您可能在使用出站代理根据策略检查流量的组织中。如果是这种情况,您应该构建一个新的 docker 镜像,其中包含您组织的出站代理使用的 CA 证书。
关于go - 无法连接到代理 "Certificate signed by unknown authority",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52712907/