k8s集群内调试工具ktctl
ktctl是由阿里巴巴开发,可用于访问集群内一、适用三种场景场景一:本地与远端服务联调在这种场景下,开发者只要直接使用ktctl connect打通本地到集群的网络即可,就可以直接在本地通过PodIP/SVC/DNS地址访问集群中的服务。场景二:集群内服务于联调本地在这个场景下,我们希望集群中所有对服务C的访问能够请求到本地正在开发的C’。因此开发者可以通过ktctl exhcnage命令,在集群
ktctl是由阿里巴巴开发,可用于访问集群内
一、适用三种场景
场景一:本地与远端服务联调
在这种场景下,开发者只要直接使用ktctl connect打通本地到集群的网络即可,就可以直接在本地通过PodIP/SVC/DNS地址访问集群中的服务。
场景二:集群内服务于联调本地
在这个场景下,我们希望集群中所有对服务C的访问能够请求到本地正在开发的C’。因此开发者可以通过ktctl exhcnage命令,在集群内部署一个Shadow容器已接管所有原本对C实例的请求,再通过Shadow容器将请求转发到本地。并在退出命令式恢复集群中C的实例状态。
场景三:集群内服务于联调本地(共享模式)
mesh与exchange的最大区别在于,exchange会完全替换原有的应用实例。mesh命令创建代理容器,但是会保留原应用容器,代理容器会动态生成version标签,以便用于可以通过Istio流量规则将特定的流量转发到本地,同时保证环境正常链路始终可用。在这种场景下,在确保开发测试环境稳定的同时,基于Istio的流量规则,我们可以把部分流量转到本地,从而实现在共享的开发测试环境中的联调能力。
二、安装(mac)
首先安装sshuttle
$ brew install sshuttle
安装KT
$ curl -OL https://rdc-incubators.oss-cn-beijing.aliyuncs.com/stable/ktctl_darwin_amd64.tar.gz
$ tar -xzvf ktctl_darwin_amd64.tar.gz
$ mv ktctl_darwin_amd64 /usr/local/bin/ktctl
$ ktctl -h
三、使用
使用ktctl连接k8s
$ sudo ktctl connect
如果有多个k8s集群的配置文件,连接其中一个
$ sudo ktctl --kubeconfig ~/.kube/txdev-k8s connect
四、测试
本机调用集群内无node port的接口即可,直接通过集群内svc的虚拟ip调用
附:k8s获取sourceIP:
https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typenodeport
附:svc命名规则:
[name].[namespace].svc.cluster.local:[port]
如:
nginx.mid.svc.cluster.local:80
也可以直接简写:
nginx.mid
此处80端口可以省略,但是8080端口不能省略
更多推荐
所有评论(0)