mirror of
https://github.com/wahyd4/kt-connect.git
synced 2026-08-09 05:16:02 +10:00
244 lines
7.9 KiB
Markdown
244 lines
7.9 KiB
Markdown
KT Connect
|
||
===========
|
||
|
||
[](https://travis-ci.org/alibaba/kt-connect) 
|
||
|
||

|
||
|
||
Management and Integration with your Kubernetes dev environment more efficient.
|
||
|
||

|
||
|
||
## Features
|
||
|
||
* Connect: Direct access remote Kubernetes cluster: KT Connect use `sshuttle` as the vpn tool to access remote Kubernetes cluster network.
|
||
* Exchange: Developer can exchange the workload to redirect the request to local app.
|
||
* Mesh: You can create a mesh version in local host and redirect to your local
|
||
* Dashboard: A Dashboard view you can know how the environment is use.
|
||
|
||
## QuickStart
|
||
|
||
You can download and install the ktctl from [Downloads And Install](https://rdc-incubator.github.io/kt-docs/#/downloads)
|
||
|
||
### Deploy a service in Kubernetes
|
||
|
||
```
|
||
$ kubectl run tomcat --image=tomcat:9 --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 47s tomcat tomcat:9 run=tomcat
|
||
|
||
# Pods info
|
||
$ kubectl get pods -o wide --selector run=tomcat
|
||
NAME READY STATUS RESTARTS AGE IP NODE
|
||
tomcat-5b75798b56-228r4 1/1 Running 0 1m 172.23.2.231 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.14.57 <none> 8080/TCP 1m
|
||
```
|
||
|
||
### Connect: Access Kubernetes resource from local
|
||
|
||
```
|
||
$ sudo ktctl connect
|
||
11:48PM INF Connect Start At 27758
|
||
11:48PM INF Client address 192.168.3.120
|
||
11:48PM INF Deploying shadow deployment kt-connect-daemon-uhojp in namespace default
|
||
|
||
11:48PM INF Shadow Pod status is Pending
|
||
11:48PM INF Shadow Pod status is Running
|
||
11:48PM INF Shadow is ready.
|
||
11:48PM INF Success deploy proxy deployment kt-connect-daemon-uhojp 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.
|
||
```
|
||
|
||
Access PodIP:
|
||
|
||
```
|
||
curl http://172.23.2.231:8080
|
||
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Not found</p><p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p><hr class="line" /><h3>Apache Tomcat/9.0.31</h3></body></html>
|
||
```
|
||
|
||
Access ClusterIP:
|
||
|
||
```
|
||
$ curl http://172.21.14.57:8080
|
||
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Not found</p><p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p><hr class="line" /><h3>Apache Tomcat/9.0.31</h3></body></html>
|
||
```
|
||
|
||
Access Server internal DNS address
|
||
|
||
```
|
||
$ curl http://tomcat:8080
|
||
```
|
||
|
||
### 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 local tomcat by internal service DNS address:
|
||
|
||
> Note: if `kubectl 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](https://rdc-incubator.github.io/kt-docs/#/guide/mesh)
|
||
|
||
The most different from mesh and exchange is exchange will scale the origin workload replicas to zero. And messh will keep it and create a pod instance with random version, after this user can modifi the Istio route rule let the specific request redirect to local, and the environment is 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
|
||
|
||
Dashboard can help your know how your dev environemnt is used.
|
||
|
||

|
||
|
||
You can install KT Connect Dashboard As Follow [Install Dashboard](https://rdc-incubator.github.io/kt-docs/#/guide/dashboard)
|
||
|
||
## How To Build
|
||
|
||
### use go build
|
||
|
||
```
|
||
go build -o "output/ktctl/ktctl" ./cmd/ktctl
|
||
```
|
||
|
||
### use gox
|
||
|
||
Install Gox
|
||
|
||
```
|
||
go get github.com/mitchellh/gox
|
||
```
|
||
|
||
```
|
||
gox -output="output/ktctl/ktctl_{{.OS}}_{{.Arch}}" ${GOPATH}/src/github.com/alibaba/kt-connect/cmd/ktctl
|
||
```
|
||
|
||
## How To Build Shadow
|
||
|
||
```
|
||
GOARCH=amd64 GOOS=linux go build -o bin/proxy cmd/shadow/main.go
|
||
```
|
||
|
||
## Ask For Help
|
||
|
||
Please contact us with DingTalk:
|
||
|
||

|
||
|
||
## Release Note
|
||
|
||
### 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. |