KT Connect
![License](https://img.shields.io/github/license/alibaba/kt-connect.svg)
Manage and integrate with your Kubernetes dev environment more efficiently.
![Arch](https://github.com/JayceLau/kt-connect/raw/v0.0.13-rc11-z5nctl3/docs/media/arch.png)
Features
- Connect: Directly Access a remote Kubernetes cluster. KT Connect use
sshuttle
as the vpn tool to access remote Kubernetes cluster networks.
- Exchange: Developer can exchange the workload to redirect the requests to a local app.
- Mesh: You can create a mesh version in local host and redirect to your local
- Dashboard: A dashboard view can help you know how the environment is been used.
QuickStart
You can download and install the ktctl
from Downloads And Install
Deploy a service in Kubernetes
$ kubectl run tomcat --image=registry.cn-hangzhou.aliyuncs.com/rdc-product/kt-connect-tomcat9:1.0 --expose --port=8080
service "tomcat" created
deployment.apps "tomcat" created
# Deployment info
$ kubectl get deployments -o wide --selector run=tomcat
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
tomcat 1 1 1 1 18s tomcat registry.cn-hangzhou.aliyuncs.com/rdc-product/kt-connect-tomcat9:1.0 run=tomcat
# Pods info
$ kubectl get pods -o wide --selector run=tomcat
NAME READY STATUS RESTARTS AGE IP NODE
tomcat-54d87b848c-2mc9b 1/1 Running 0 1m 172.23.2.234 cn-beijing.192.168.0.8
# Service info
$ kubectl get svc tomcat
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
tomcat ClusterIP 172.21.6.39 <none> 8080/TCP 1m
Connect: Access Kubernetes resource from local
$ sudo ktctl connect --method=vpn
10:44PM INF Connect Start At 80073
10:44PM INF Client address 192.168.3.120
10:44PM INF Deploying shadow deployment kt-connect-daemon-rarba in namespace default
10:44PM INF Shadow Pod status is Pending
10:44PM INF Shadow Pod status is Running
10:44PM INF Shadow is ready.
10:44PM INF Success deploy proxy deployment kt-connect-daemon-rarba in namespace default
Forwarding from 127.0.0.1:2222 -> 22
Forwarding from [::1]:2222 -> 22
Handling connection for 2222
Warning: Permanently added '[127.0.0.1]:2222' (ECDSA) to the list of known hosts.
client: Connected.
10:44PM INF KT proxy start successful
Access PodIP:
curl http://172.23.2.234:8080 #Access PodIP from local
kt-connect demo from tomcat9
Access ClusterIP:
$ curl http://172.21.6.39:8080 #Access ClusterIP
kt-connect demo from tomcat9
Access Server internal DNS address
$ curl http://tomcat:8080 #Access Server internal DNS address
kt-connect demo from tomcat9
Exchange: Access local from cluster
Create Tomcat 8 in local and expose 8080 port
docker run -itd -p 8080:8080 tomcat:8
$ sudo ktctl exchange tomcat --expose 8080
2019/06/19 11:19:10 * tomcat (0 replicas)
2019/06/19 11:19:10 Scale deployment tomcat to zero
2019/06/19 11:19:10 Deploying proxy deployment tomcat-kt-oxpjf in namespace default
2019/06/19 11:19:10 Pod status is Pending
2019/06/19 11:19:12 Pod status is Running
2019/06/19 11:19:12 Success deploy proxy deployment tomcat-kt-oxpjf in namespace default
SSH Remote port-forward for POD starting
2019/06/19 11:19:14 ssh remote port-forward start at pid: 3567
tips:
if your remote port diffrent local port, you can user ${remotePort}:{localPort} set expose parameter
Access the local tomcat by internal service DNS address:
Note: if ktctl connect
not running, you can only access from cluster
$ curl http://tomcat:8080 | grep '<h1>'
<h1>Apache Tomcat/8.5.37</h1> #
Mesh: Build large test environemnt with ServiceMesh
You can know more from Mesh Best Practices
The biggest difference from mesh and exchange is exchange will scale the origin workload replicas down to zero, and mesh will keep it and create a pod instance with an random version. After this, user can modify the Istio
route rule to let the specific request redirect to your local, and the environment can keep working as normal:
$ sudo ktctl mesh tomcat --expose 8080
2019/06/19 22:10:23 'KT Connect' not runing, you can only access local app from cluster
2019/06/19 22:10:24 Deploying proxy deployment tomcat-kt-ybocr in namespace default
2019/06/19 22:10:24 Pod status is Pending
2019/06/19 22:10:26 Pod status is Pending
2019/06/19 22:10:28 Pod status is Running
2019/06/19 22:10:28 Success deploy proxy deployment tomcat-kt-ybocr in namespace default
2019/06/19 22:10:28 -----------------------------------------------------------
2019/06/19 22:10:28 | Mesh Version 'ybocr' You can update Istio rule |
2019/06/19 22:10:28 -----------------------------------------------------------
2019/06/19 22:10:30 exchange port forward to local start at pid: 53173
SSH Remote port-forward POD 172.16.0.217 22 to 127.0.0.1:2217 starting
2019/06/19 22:10:30 ssh remote port-forward exited
2019/06/19 22:10:32 ssh remote port-forward start at pid: 53174
Dashboard
The dashboard can help your know how your dev environment is been used.
![Dashboard](https://github.com/JayceLau/kt-connect/raw/v0.0.13-rc11-z5nctl3/docs/media/dashboard-demo.png)
You can install KT Connect Dashboard by following Install Dashboard
Ask For Help
Please contact us with DingTalk:
![image](https://github.com/JayceLau/kt-connect/raw/v0.0.13-rc11-z5nctl3/docs/media/dingtalk-group-v2.png)
Release Notes
0.0.12
Release At 2020-03-08
- add
run
command to support expose local service
- add mesh/exchange port mapping usage
- fixed, random local ssh port cal issue
0.0.11
Release At 2020-02-27
- fixed command not exit issue.
- add
check
command to help check local denpendencies
- add
dashboard
command to to install and open dashboard in local
- add support to access service with .
0.0.10
Release At 2020-02-02
- Options adaptor windows system
- Add
--dump2hosts
options to support socks5 use
0.0.9
Release At 2020-01-16
- Support Service Name as dns address
- Make sure shadow is clean up after command exit
0.0.8
Release At 2019-12-13
- Add windows native support
- Add idea support
0.0.7
Release At 2019-12-05
- Add oidc plugin to support TKE
- Add socks5 method to support WSL
- Fixed issue when node.Spec.PodCIRD dynamic cal CIRD
0.0.6
Release At 2019-10-01
- Fixed clusterIP cidr missing.
- Rename docker images address.
0.0.5
Release At 2019-10-09
- Add dashboard and api server source code
0.0.4
Release At 2019-06-26
- Support KT Connect Dashboard
0.0.3
Release At 2019-06-19
- Add
mesh
command to support istio network rule
0.0.2
Release At 2019-06-19
- Fixed issue if istio inject is enable in namespace, and the request can't redirect to local
- Support exchange run standalone.
0.0.1
Release At 2019-06-18
- split command to
connect
and exchange
.
- support mutil exchange.