安装
- 确认开发环境kubectl版本
- 下载对应的windows版本
https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.24.md#v1243
- 下载后解压保存在指定文件夹中,然后配置环境变量
- 验证kubectl配置以及版本(版本差需要控制在和集群版本的±1,否则后续连接集群操作会报错)
- 配置config文件,在c盘用户目录下创建.kube文件夹,创建config文件,将集群config内容复制过来
- 验证集群是否可以访问
- 安装kt-connect
用于连接namespaces中的服务,相当于一个vpn
下载地址
下载后解压放在和kubectl一个文件夹中
- 验证kt-connect
- 修改hosts权限,用户需要对hosts文件有读写权限,因为本地idea起服务后 ,需要通过service的域名访问其它服务
如果后续idea启动kt-connect发出权限报错问题,进入安全-编辑,给当前用户读写权限
调试
调试说明
# 默认的ktctl启动后会在default命名空间创建一个deployment, service的访问方式只能在default命名空间才能使用
# 此方式可以指定命名空间 会在指定的命名空间devops创建一个deployment 让service的访问方式可以用于指定的命名空间,
# --dump2hosts 会将命名空间中的所有服务同步到hosts文件。
$ ktctl -n devops connect --method=socks5 --dump2hosts
#多个命名空间
$ ktctl -d connect --dump2hosts --method=socks5 --dump2hostsNS=devops --dump2hostsNS=redis
#无法连接外网
#先通过docker下载kt-connect-shadow镜像: registry.cn-hangzhou.aliyuncs.com/rdc-incubator/kt-connect-shadow:0.0.13-rc11
#上传到内网仓库中去,使用--image指定内网仓库
$ ktctl --debug --image=ip:port/devops/kt-connect-shadow:0.0.13-rc11 --namespace=devops connect --method=socks5 --dump2hosts
设置镜像
ktctl config set global.image 10.50.9.38:80/sanxia-project/sanxia-docker/kt-connect-shadow:v0.3.7
启动连接多命名空间 1.21.1版本
ktctl -n devops connect --dnsMode hosts:devops,devops-middleware
# 设置环境变量 以下设置二选一
## windows cmd
$ set http_proxy=socks5://127.0.0.1:2223
## git bash
$ export http_proxy=socks5://127.0.0.1:2223
#访问集群内服务
$ curl http://<POD_IP>:<PORT> #本地直接访问PodIP
$ curl http://<CLUSTER_IP>:<PORT> # 本地直接访问ClusterIP
$ curl http://<SVC_NAME>:<PORT> #使用Service的域名访问
- 设置环境变量
命令查看调试说明
进入idea,在Terminal输入kt-connect启动命令
命令查看调试说明
启动成功后切忌不要退出此进程,否则无法访问远程的服务
如果遇到hosts权限不够的问题,请查看安装-9指定用户修改权限
- idea配置参数
A. 配置
-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=2223
B. 配置
KUBERNETES_NAMESPACE=devops;socksProxyHost=127.0.0.1;socksProxyPort=2223
网上查找资料来看,有些人配置A即可访问集群服务,有些人配置B即可访问集群访问,还有些人需要全部都配置,具体配哪个还是全部配置可以自行调试
- 验证
启动项目,postman调用接口(所调用的接口最好有fegin调用,这样才能验证是否成功)
踩坑1
当k8s中的服务类型为NodePort时,是使用pod的ip。kt-connect不会在host写入pod的ip而是写入clusterIp。。目前没有找到好的办法让其自动处理,只有手动修改一下host里的ip