CloudSQL Docker容器无法连接到SQL实例一段时间,然后在K8中连接



我正在尝试使用Docker Cloud-SQL容器连接到我的GCP SQL实例。我还有一项依赖CloudSQL的服务可以连接到GKE中的数据库。一起,这两个创建了一个豆荚。

连接似乎总是失败大约3或4次,然后成功连接。每次都想通过创建更新的Kubernetes Pod来部署我的服务的新版本。

我描述此代码的我的kubernetes部署是:

...
- name: cloudsql-proxy
  image: gcr.io/cloudsql-docker/gce-proxy:1.12
  command:
    - /cloud_sql_proxy
    - -instances=my-project:europe-west1:my-instance=tcp:5432
    - -credential_file=/secrets/cloudsql/credentials.json
...

我希望Cloud-SQL能立即连接到我的实例,但我在日志上几次获得此错误

couldn't connect to "my-project:europe-west1:my-instance": Post https://www.googleapis.com/sql/v1beta4/projects/my-project/instances/my-instance/createEphemeral?alt=json&prettyPrint=false: oauth2: cannot fetch token: Post https://oauth2.googleapis.com/token: net/http: TLS handshake timeout

此错误指示超载的POD或慢速网络启动时间。由于您要连接到Google Oauth端点,因此我将排除另一面是问题。

如果您的群集或POD被超载(达到内存限制,CPU,100%等(网络响应可能会开始失败。

添加选项 --dir=/cloudsql - /cloud_sql_proxy

之后
  - name: cloudsql-proxy
    image: gcr.io/cloudsql-docker/gce-proxy:1.14
    command: ["/cloud_sql_proxy",
                "--dir=/cloudsql",
                "-instances=my-project:europe-west1:my-instance=tcp:3306",
                # If running on a VPC, the Cloud SQL proxy can connect via Private IP. See:
                # https://cloud.google.com/sql/docs/mysql/private-ip for more info.
                # "-ip_address_types=PRIVATE",
                "-credential_file=/secrets/cloudsql/credentials.json"]
    # [START cloudsql_security_context]
    securityContext:
      runAsUser: 2  # non-root user
      allowPrivilegeEscalation: false
    # [END cloudsql_security_context]
    volumeMounts:
    - name: cloudsql-instance-credentials
      mountPath: /secrets/cloudsql
      readOnly: true
    - name: cloudsql
      mountPath: /cloudsql
  # [END proxy_container]
  # [START volumes]
  volumes:
  - name: cloudsql-instance-credentials
    secret:
      secretName: cloudsql-instance-credentials
  - name: cloudsql
    emptyDir:
  # [END volumes]

OAuth需要使用刷新令牌来获取新的访问令牌,因为它们的生命有限以提高安全性。刷新令牌将允许您的应用程序访问云SQL。请创建一个新的令牌,自动使最古老的令牌无效。

最新更新