完成映射后可以方便开发。当本地不需要调试的服务而又需要被依赖导致必须启动,此时可以考虑使用k8s测试环境的服务。

以k8s-ads-tracking开头的实例 service-1服务为例

基本流程

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 选择 server-1服务实例

  • kubectl -n k8s-ads-tracking exec -ti k8s-ads-tracking-server-1-85f4ff5fcb-9b9bs bash –kubeconfig=/Users/name/project-conf/k8s-config

3.查看server-1实例的网络连接

  • netstat -antp grep 1

找到server-1的端口 19000

4.映射端口到本地

  • kubectl -n k8s-ads-tracking port-forward k8s-ads-tracking-server-1-85f4ff5fcb-9b9bs 19000:19000 –kubeconfig=/Users/name/project-conf/k8s-config

完成将本地19000端口映射到k8s环境的k8s-ads-tracking-server-1-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
# 你需要转发的服务名,如opm,或上面提到的server-1
serviceName=$2
# 动态获取存活的实例,若有多个,取第一个
instance=`kubectl -n $namespace get pods --kubeconfig=/Users/liguobin/project-conf/k8s-config | grep -w $serviceName | awk '{print $1}' | head -1`

# 配置转发端口
sourcePort=$3
targetPort=$4

array=(${instance//-/ })
namespace=${array[0]}-${array[1]}-${array[2]} 
serviceName=${array[3]} 
instanceId=${array[4]}-${array[5]}  

kubectl -n $namespace port-forward $namespace-$serviceName-$instanceId $sourcePort:$targetPort --kubeconfig=/Users/liguobin/project-conf/k8s-config

  1. 将上述脚本保存为kubectl-forward-port.sh
  2. 打开 vi ~/.bash_profile
  3. 新增 alias kbopm=”bash kubectl-forward-port.sh k8s-ads-tracking opm 19000 19000”,若不是当前目录,kubectl-forward-port.sh前加路径
  4. 刷新 source ~/.bash_profile
  5. 执行 kbopm 完成opm的端口自动转发,本地请求localhost:19000时会被转发到k8s上的k8s-ads-tracking命名空间的存活的opm服务商
  6. 直接使用bash kubectl-forward-port.sh k8s-ads-tracking opm 19000 19000,以方便使用不同的服务