完成映射后可以方便开发。当本地不需要调试的服务而又需要被依赖导致必须启动,此时可以考虑使用k8s测试环境的服务。
以k8s-ads-tracking开头的实例 service1服务为例
基本流程
1.查询所有运行的pods
- kubectl -n k8s-ads-tracking get pods –kubeconfig=/Users/name/project-conf/k8s-config
查询k8s-ads-tracking开头的 pods 携带kubernetes验证配置文件 /Users/name/project-conf/k8s-conf
2.进入运行的pod 选择service1服务实例
- kubectl -n k8s-ads-tracking exec -ti k8s-ads-tracking-service1-85f4ff5fcb-9b9bs bash –kubeconfig=/Users/name/project-conf/k8s-config
3.查看service1实例的网络连接
- netstat -antp | grep 1
找到server-1的端口 19000
4.映射端口到本地
- kubectl -n k8s-ads-tracking port-forward k8s-ads-tracking-service1-85f4ff5fcb-9b9bs 19000:19000 –kubeconfig=/Users/name/project-conf/k8s-config
完成将本地19000端口映射到k8s环境的k8s-ads-tracking-server1-85f4ff5fcb-9b9bs实例上的19000端口上
5.日志
Forwarding from 127.0.0.1:19000 -> 19000
Forwarding from [::1]:19000 -> 19000
Handling connection for 19000
Handling connection for 19000
实现基本的自动化
#!/bin/bash
set -x
#k8s命名控制
namespace=$1
#你需要转发的服务名
serviceName=$2
instance=`kubectl -n $namespace get pods --kubeconfig=/Users/liguobin/project-conf/k8s-config | grep -w $serviceName | awk '{print $1}' | head -1`
#端口 19000
sourcePort=$3
#19000
targetPort=$4
# 兼容 k8s-master、k8s-ads-tracking两种namespace
array=(${instance//-/ })
if [[ "${#array[*]}" -eq 6 ]];then
namespace=${array[0]}-${array[1]}-${array[2]}
serviceName=${array[3]}
instanceId=${array[4]}-${array[5]}
else
namespace=${array[0]}-${array[1]}
serviceName=${array[2]}
instanceId=${array[3]}-${array[4]}
fi
kubectl -n $namespace port-forward $namespace-$serviceName-$instanceId $sourcePort:$targetPort --kubeconfig=/Users/liguobin/project-conf/k8s-config
- 将上述脚本保存为kubectl-forward-port.sh
- 打开 vi ~/.bash_profile
- 新增 alias kbopm=”bash kubectl-forward-port.sh k8s-ads-tracking opm 19000 19000”,若不是当前目录,kubectl-forward-port.sh前加路径
- 刷新 source ~/.bash_profile
- 执行 kbopm 完成opm的端口自动转发,本地请求localhost:19000时会被转发到k8s上的k8s-ads-tracking命名空间的存活的opm服务商
- 直接使用bash kubectl-forward-port.sh k8s-ads-tracking opm 19000 19000,以方便使用不同的服务