1. 前言
我所在团队一样,测试环境的MySQL在阿里云的Kubernetes集群上,但是又没有映射一个固定地址来让我们访问。
所以每次连接测试环境,需要本地用kubectl端口转发MySQL 3306到本地才能访问。
如果你所在的团队和我一样,那么这篇文章或许会给你一定的帮助
阿里云官方说明文档
https://help.aliyun.com/document_detail/86494.html
2. 获取鉴权信息
2.1 安装kubectl
# 安装kubectl (Mac平台)
brew install kubectl
# 校验是否安装成功
kubectl version --client
2.2 配置凭证
- 访问阿里云后台
https://homenew.console.aliyun.com/
- 进入容器服务页
左上角橙色菜单按钮 -> 产品与服务 -> 容器服务kubernetes版
- 进入一台集群详情页
左侧菜单 -> 集群 -> 集群 -> k8s(集群名称)
- 复制凭证
页面最下方有2个tab,在kubeConfig(公网访问)选项卡中,点击复制
- 本地创建凭证文件
创建一个~/.kube/config文件,把上一步复制的内容贴入后保存
# 创建本地配置文件
mkdir ~/.kube/config
3. 端口转发命令
- 端口转发命令可以参考这一条,不用每次都去获取实例名
#映射mysql端口
kubectl -n dev port-forward $(kubectl -n dev get pods | grep ^mysql | grep Running | awk 'NR==1{print $1}') 3306:3306
2. 然后db客户端访问本地3306端口即可
以上就是全部内容了,后面的内容可以不看
4. 附
4.1 端口转发实际命令
第3节中的命令实际是自动去获取了实例名,端口转发实际命令如下
命令: kubectl -n 命名空间 port-forward 应用实例名 3306:3306
kubectl -n dev port-forward mysql-dev-665abcddf7-rvssx 3306:3306
命令空间可以从这个页面获取:
左侧菜单 -> 应用 -> 无/有状态 -> 命名空间
使用实例名可以从这李获取:
同一页面,右侧搜索应用名“mysql”,点进去,页面下方就是实例名
4.2 更易用的小脚本
- 保存以下内容到本地 mysql.sh
#!bin/sh
#默认配置
env=dev
port=3306
env_list=("dev" "dev-01" "dev-02" "dev-03" "dev-05")
if [ -n "$1" ]; then
env=$1
if [[ "$1" = "help" || "$1" = "h" ]]; then
echo "MySQL Environment List"
for (( i=0; i < ${#env_list[@]}; i++ ))
do
printf "%-10s %-2s %-10s\n" "${env_list[i]}" "-" `expr ${
i} + 1`
done
exit 0
fi
if [[ $1 -ge 1 && $1 -le ${#env_list[@]} ]]; then
env=${env_list[$1 - 1]}
fi
fi
if [ -n "$2" ]; then
port=$2
fi
echo $env $port
#映射mysql端口
kubectl -n $env port-forward $(kubectl -n $env get pods | grep ^mysql | grep Running | awk 'NR==1{print $1}') $port:3306
- 使用方式
# 默认以 dev 3306启动
sh mysql.sh
# 指定其他环境与端口号
sh mysql.sh dev-01 3307
# 查看帮助文档
sh mysql.sh h
# 指定快捷键对应的环境
sh mysql.sh 1