主页

索引

模块索引

搜索页面

3.7.1. kt-connect工具

下载安装 [1]

安装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

说明

主要需要解决以下3个问题:

本地网络与Kubernetes集群网络直接的连通问题
在本地实现Kubernetes中内部服务的DNS解析
如何将对集群中其它Pod访问的流量转移到本地

选项

默认选项:

namespace,n: 默认值default
kubeconfig,c: 默认值$HOME/.kube/config
image,i: 默认值registry.cn-hangzhou.aliyuncs.com/rdc-incubator/kt-connect-shadow:latest
debug,d: 格式true, false
label,l: 格式label1=val1,label2=val2

1. 本地连接集群

启动:

// 注意需要sudo权限
$ sudo ktctl -n default -c $HOME/.kube/config connect

使用:

直接可以在浏览器上使用内网ip打开

connect选项:

method: 默认值vpn
proxy: 默认值2223
port: 默认值2222
disableDNS:
cidr: 格式172.2.0.0/16
dump2hosts: bool类型
dump2hostsNS:
shareShadow:

2. 转发集群流量到本地

  • 这个命令的前提条件是 Kubernetes 集群中必须有已经存在的 Deployment,在运行该命令时,将会起一个 shadow 容器,来代替已存在的 Deployment,调用该容器的流量,都会被转发到本地的指定端口

警告

要注意的是:该命令会将其代替的 Deployment 的 replicas 设置为0,可能会导致业务的暂停,请勿在生产环境中使用!

假设本地有一个服务监控8088端口:

$ python -m http.server 8088 &

基本使用:

$ ktctl exchange kk-feiyan --expose 8088

查看 Deployment:

$ kubectl get deploy | grep kk-feiyan
kk-feiyan             0/0     0   0    39d    # 原服务
kk-feiyan-kt-eclcc    1/1     1   1    89s    # 转发流量服务

集群内调用:

$ curl kk-feiyan // 相当于请求本地的8088端口的服务

3. 将本地服务暴露到 Kubernetes 集群

有些时候,我们并不想使用 exchange 来代替已经存在的 Deployment,只想在集群内新建一个服务来将流量转发到本地,以完成调试。

这个时候使用 ktctl run,就可以满足需求,该命令会在 Kubernetes 集群中新建一个服务,并将访问该服务的流量被转发到本地的指定端口。

基本使用:

$ ktctl run localservice --port 8088 --expose

查看Deployment:

$ kubectl get deploy localservice

集群内调用:

$ curl localservice:8088

4. Dashboard 功能

  • 管理所有使用 kt 连入集群的用户

5. Service Mesh 支持

  • 支持用户可以基于Service Mesh的能力做更多自定义的流量规则定义

参考

主页

索引

模块索引

搜索页面