google-cloud-platform - 通过代理从 gke 连接到云 sql - 连接被拒绝
问题描述
我正在尝试使用本指南使用代理 docker 映像将云 sql 上的 mysql 实例连接到 google kubernetes 集群。
我有一个带有 ubuntu 映像和 mysql 客户端的 pod,以及作为 sidecar 的代理映像。
代理日志显示“准备好新连接”,但是当我尝试使用 mysql 客户端和 127.0.0.1(端口 3306)作为主机连接到代理时,我收到以下错误:
错误 2003 (HY000):无法连接到“127.0.0.1”上的 MySQL 服务器(111“连接被拒绝”)。
该 pod 具有以下部署文件:
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
我还尝试了其他几个示例变体。
如果需要,我很乐意提供更多信息。
谢谢!
编辑:
我终于设法完成了这项工作。我重新开始,显然我的工具箱容器有问题。感谢所有帮助过的人!
解决方案
虽然我无法在没有更多信息的情况下帮助您解决此特定问题,但我可以为您提供一些建议来帮助您调试它。
首先,找出要查看的 pod 的名称。从发布的配置来看,您似乎可以使用 app 标签进行查找:
kubectl get pods -l=app=toolbox
如果您的 pod 未列出,则说明您的部署存在问题,并且未成功创建 pod。如果已列出,则问题出在其中一个 pod 中。
pod 里面有两个容器,所以下一步是检查代理以确保它成功启动,如果成功了,为什么它拒绝连接。
kubectl get logs <YOUR_POD_NAME> -c cloudsql-proxy
这应该打印与容器关联的日志,并且应该为您提供一些关于它为什么不工作的额外信息。
推荐阅读
- oracle - 为什么 PLSQL 中的代码在“异常”部分之后没有执行?
- php - SQL 以特定方式将两张表绑定成一条 SQL 语句
- asp.net-core - 无法在使用 Visual Studio for mac 的 .net core 2.1 项目中使用 add-Migration
- laravel - 是否可以在 Laravel 的 map 函数中应用条件?
- python - 如何修复“ValueError: Target size (torch.Size([128])) must be the same as input size (torch.Size([128, 1]))”错误?
- c++ - 用 cython 包装 C++ 代码(带模板)
- c# - 使用带有网格视图的更新面板时,网格视图内的链接按钮会导致完全回发
- python - 列中的最大值及其对应的行中没有重复的行
- vb.net - 在 datagridview 中显示数据的 VB.NET 错误
- python - Python 将 2D numpy 数组附加到 3D