---
title: 自动化完成本地服务到ci上k8s环境服务的请求转发
categories:
- 其他
tags: [bash shell]
---

* 目录
{:toc}

完成映射后可以方便开发。当本地不需要调试的服务而又需要被依赖导致必须启动，此时可以考虑使用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
```

# 实现基本的自动化

```shell
#!/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

```

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，以方便使用不同的服务
