全栈工程师开发手册 (作者:栾鹏)
架构系列文章
官方github:https://github.com/alibaba/kt-connect
本地linux安装
# 切换到root用户
sudo su
# pip install sshuttle
# curl -OL https://rdc-incubators.oss-cn-beijing.aliyuncs.com/stable/ktctl_linux_amd64.tar.gz
# tar -xzvf ktctl_linux_amd64.tar.gz
# mv ktctl_linux_amd64 /usr/local/bin/ktctl
# ktctl -h
这种安装的可能不是最新版,也可以离线下载.下载地址:
https://github.com/alibaba/kt-connect/releases/
在Kubernetes中部署联调服务
kubectl run tomcat --image=tomcat:7 --expose --port=8080
会自动创建deployments和service
Connect 从本地访问Kubernetes资源
本地执行
root用户执行
# ktctl --kubeconfig /home/luanpeng/.kube/config --debug connect
如果提示已经运行,则可以在k8s中把deployment删除,在客户端把/home/luanpeng/.ktctl/
文件夹删除.
访问PodIP:
运行成功后可以查看是否成功启动sshuttle
如果sshuttle两个进程没有启动,则说明启动失败
/usr/bin/python3 /usr/local/bin/sshuttle --dns --to-ns 10.42.0.58 -e ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -i /root/.kt_id_rsa -r
/usr/bin/python3 /usr/local/bin/sshuttle --method auto --firewall
在这种场景下,开发者只要直接使用ktctl connect打通本地到集群的网络即可,就可以直接在本地通过PodIP/ClusterIP/DNS地址访问集群中的服务。
curl http://172.16.0.147:8080
访问ClusterIP:
$ curl http://172.19.143.139:8080
Access Server内部DNS地址(未测试成功, 提示Could not resolve host)
# 先看是否能正常解析
nslookup tomcat.default.svc.cluster.local
# 试一下http请求
$ curl http://tomcat.default.svc.cluster.local:8080
Exchange从群集访问本地
在本地创建Tomcat 8并公开8080端口
docker run -itd -p 8080:8080 tomcat:8
$ ktctl exchange tomcat --expose 8080
暴露本地服务到k8s中
$ ktctl exchange tomcat --expose 8080
在k8spod中通过内部服务DNS地址访问本地tomcat:
注意:如果kubectl connect未运行,则只能从群集访问
$ curl http://tomcat.default.svc.cluster.local:8080 | grep '<h1>'
在这个场景下,我们希望集群中所有对服务C的访问能够请求到本地正在开发的C’。因此开发者可以通过ktctl exhcnage命令,在集群内部署一个Shadow容器已接管所有原本对C实例的请求,再通过Shadow容器将请求转发到本地。并在退出命令式恢复集群中C的实例状态。
https://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=2649703426&idx=1&sn=22be252aac597745cf832df987b324cf&chksm=88937b61bfe4f277d4744f2205a4f1fbdc7ff928e386c5aa728d8e0baccb202f44ef502a78a9&mpshare=1&scene=1&srcid=&sharer_sharetime=1572233974491&sharer_shareid=13fe4d560ad7f178a70a6b90efad8011#rd
Mesh
mesh与exchange的最大区别在于,exchange会完全替换原有的应用实例。mesh命令创建代理容器,但是会保留原应用容器,代理容器会动态生成version标签,以便用于可以通过Istio流量规则将特定的流量转发到本地,同时保证环境正常链路始终可用。在这种场景下,在确保开发测试环境稳定的同时,基于Istio的流量规则,我们可以把部分流量转到本地,从而实现在共享的开发测试环境中的联调能力。
仪表盘部署
参考:https://alibaba.github.io/kt-connect/#/guide/dashboard