通过代理从GKE连接到Cloud SQL-连接被拒绝

时间:2019-02-04 10:05:40

标签: google-cloud-platform google-cloud-sql

我正在尝试使用this指南使用代理docker映像将云sql上的mysql实例连接到google kubernetes集群。
我有一个装有ubuntu映像和mysql客户端以及代理映像作为边车的pod。
代理日志显示“准备进行新连接”,但是当我尝试使用mysql客户端和127.0.0.1(端口3306)作为主机连接到代理时,出现以下错误:

  

错误2003(HY000):无法连接到“ 127.0.0.1”上的MySQL服务器(111   “拒绝连接”)。

吊舱具有以下部署文件:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "20"
  creationTimestamp: 2019-01-30T15:29:58Z
  generation: 19
  labels:
    app: toolbox
  name: toolbox
  namespace: default
  resourceVersion: "1806058"
  selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/toolbox
  uid: e6ee574e-24a3-11e9-82e3-42010a9a0079
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: toolbox
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: toolbox
    spec:
      containers:
      - image: gcr.io/orayya-229213/toolbox:1.0
        imagePullPolicy: IfNotPresent
        name: toolbox
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      - command:
        - /cloud_sql_proxy
        - -instances=orayya-229213:europe-west2:orayya-db=tcp:0.0.0.0:3306
        - -credential_file=/secrets/cloudsql/credentials.json
        image: gcr.io/cloudsql-docker/gce-proxy:1.12
        imagePullPolicy: IfNotPresent
        name: cloudsql-proxy
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /secrets/cloudsql
          name: cloudsql-credentials
          readOnly: true
        - mountPath: /cloudsql
          name: cloudsql
      dnsPolicy: ClusterFirst
      nodeSelector:
        cloud.google.com/gke-nodepool: default-pool
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
      - name: cloudsql-credentials
        secret:
          defaultMode: 420
          secretName: cloudsql-credentials
      - emptyDir: {}
        name: cloudsql
status:
  availableReplicas: 1
  collisionCount: 1
  conditions:
  - lastTransitionTime: 2019-01-31T10:49:56Z
    lastUpdateTime: 2019-01-31T10:49:56Z
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: 2019-01-31T10:27:21Z
    lastUpdateTime: 2019-02-03T14:29:31Z
    message: ReplicaSet "toolbox-6d589d797" has successfully progressed.
    reason: NewReplicaSetAvailable
    status: "True"
    type: Progressing
  observedGeneration: 19
  readyReplicas: 1
  replicas: 1
  updatedReplicas: 1

我还尝试了其他几种示例变体。
如有需要,我很乐意提供更多信息。
谢谢!

修改:
我终于设法完成了这项工作。 我从头开始,显然我的工具箱容器有问题。 谢谢大家的帮助!

1 个答案:

答案 0 :(得分:0)

尽管没有更多信息我无法帮助您解决此特定问题,但我可以为您提供一些建议以帮助您调试它。

首先,找出您要查看的广告连播的名称。从发布的配置中,您似乎可以使用app标签对其进行查找:

kubectl get pods -l=app=toolbox

如果未列出您的Pod,则说明您的部署存在问题,并且未成功创建Pod。如果列出,则问题出在其中一个豆荚中。

该容器内部有两个容器,因此下一步是检查代理以确保其成功启动,如果成功,为什么还要拒绝连接。

kubectl get logs <YOUR_POD_NAME> -c cloudsql-proxy

这应该打印与容器关联的日志,并应向您提供有关其为何不起作用的其他信息。