在测试环境中连接数据库
- kbcli
- kubeclt
方案 1. 使用 kbcli cluster connect 命令
您可以使用 kbcli cluster connect 命令并指定要连接的集群名称。
kbcli cluster connect ${cluster-name}
它的底层命令是 kubectl exec。只要能够访问 K8s API 服务器,就可以使用该命令。
方案 2. 使用 CLI 或者 SDK 客户端连接数据库
执行以下命令以获取目标数据库的网络信息,并使用其打印输出的 IP 地址进行连接。
kbcli cluster connect --show-example --show-password ${cluster-name}
其打印输出的信息包括数据库地址、端口号、用户名和密码。下图以 MySQL 数据库为例。
- 地址:-h 表示服务器地址。在下面的示例中为 127.0.0.1。
- 端口:-P 表示端口号。在下面的示例中为 3306。
- 用户名:-u 表示用户名。
- 密码:-p 表示密码。在下面的示例中为 hQBCKZLI。
密码不包括 -p 本身。

步骤 1. 获取数据库凭证
在连接运行在 Kubernetes 集群内的 MySQL 数据库之前,您需要从 Kubernetes Secret 中获取用户名和密码。Kubernetes 中的 Secret 通常是经过 base64 编码的,因此您需要将其解码以获得实际的凭据。以下是使用 kubectl 获取凭证的方法。
-
获取
username。使用
kubectl get secrets命令,从 demo 命名空间中名为mycluster-conn-credential的 secret 中提取用户名。kubectl get secrets -n demo mycluster-conn-credential -o jsonpath='{.data.username}' | base64 -d
>
root- 您可使用实际的集群名称替换命令中的 "mycluster"。
- 您可使用实际的命名空间名称替换命令中的 "demo"。
-
获取
password。kubectl get secrets -n demo mycluster-conn-credential -o jsonpath='{.data.password}' | base64 -d
>
2gvztbvz- 您可使用实际的集群名称替换命令中的 "mycluster"。
- 您可使用实际的命名空间名称替换命令中的 "demo"。
大多数 KubeBlocks v0.9 Addon 中,包含连接凭据的 secret 命名格式为 {cluster.name}-conn-credential。但是在新版本中,部分 Addon secret 的命名可能已更改为 {cluster.name}-{component.name}-account-{account.name}。为确保使用正确的 secret 名称,可执行以下命令罗列命名空间中的所有 secret,并查找与数据库集群相关的项。
kubectl get secrets -n demo | grep mycluster
步骤 2. 连接集群
获取凭证后,您可以通过以下两种方式连接至在 K8s 集群中运行的 MySQL 数据库。
- 使用
kubectl exec直连 Pod。 - 使用
kubectl port-forward从本地连接数据库。
方式 1. 使用 kubectl exec 直连 Pod
在某些情况下,您可能需要直接连接到 Kubernetes Pod 内运行的 MySQL 数据库,而无需依赖外部访问。这种情况下,您可以使用 kubectl exec 进入 Pod,直接在集群内与 MySQL 实例进行交互,避免使用外部数据库地址。
-
指定需要连接的 Pod,并执行以下命令。
kubectl exec命令在 MySQL Pod 中创建了交互式 shell 对话,您可以直接在 Pod 环境中使用以下命令。kubectl exec -ti -n demo mycluster-mysql-0 -- bash-ti:打开交互式终端会话(-t分配一个 TTY,-i将伪 TTY 传输给容器)。-n demo:指定 Pod 所在的命名空间 demo。mycluster-mysql-0:MySQL Pod 的名称。如果名称与您的实际情况不同,请确保替换为实际的 Pod 名称。-- bash:在 Pod 内打开一个 Bash shell。如果容器中没有 Bash,也可以使用 sh。
-
连接集群。
进入 Pod 后,您可使用 MySQL 客户端连接到同一 Pod 或集群内运行的数据库服务。由于您已经在 Pod 内,因此无需指定外部主机或地址。
mysql -u root -p2gvztbvz
方式 2. 使用 kubectl port-forward 连接
在 Kubernetes 集群中管理已部署的数据库时,可使用 kubectl port-forward 从本地安全地连接到数据库。该命令将本地端口的流量转发到 Kubernetes 集群中的端口,您可以像在本地运行数据库服务一样访问数据库集群。
以下为在本地使用 CLI 工具连接集群的示例。
-
使用
kubectl port-forward转发端口。首先,您需要从本地将端口转发至在 K8s 中运行的 MySQL 服务。如下命令将您本地的 3306 端口转发至集群中 MySQL 服务的同一端口。
kubectl port-forward svc/mycluster-mysql 3306:3306 -n demosvc/mycluster-mysql:代指您的 K8s 集群中的 MySQL 服务。3306:3306:将本地 3306 端口与服务的 3306 端口绑定。-n demo:指定 MySQL 服务所在的命名空间 demo。
-
从本地连接数据库。
端口转发完成后,您可以使用标准的 MySQL 客户端连接至 MySQL 数据库,这一操作与通过 127.0.0.1 连接客户端的体验一致。该连接将安全地通过这一通道转发到集群内部的服务。
mysql -h 127.0.0.1 -P 3306 -u root -p2gvztbvz