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端口不能省略

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐