description |
---|
Install Telepresence and learn to use it to intercept services running in your Kubernetes cluster, speeding up local development and debugging. |
import Alert from '@material-ui/lab/Alert'; import QSTabs from './qs-tabs' import QSCards from './qs-cards'
In this guide we'll give you everything you need in a preconfigured demo cluster: the Telepresence CLI, a config file for connecting to your demo cluster, and code to run a cluster service locally.
While Telepresence works with any language, this guide uses a sample app written in Node.js. We have a version in React if you prefer. Already have a cluster? Switch over to a version of this guide that takes you though the same steps using your own cluster.-
<a href="https://app.getambassador.io/cloud/demo-cluster-download-popup" onClick={(e) => {window.open('https://app.getambassador.io/cloud/demo-cluster-download-popup', 'ambassador-cloud-demo-cluster', 'menubar=no,location=no,resizable=yes,scrollbars=yes,status=no,width=550,height=750'); e.preventDefault(); }} target="_blank">Sign in to Ambassador Cloud to download your demo cluster archive. The archive contains all the tools and configurations you need to complete this guide.
-
Extract the archive file, open the
ambassador-demo-cluster
folder, and run the installer script (the commands below might vary based on where your browser saves downloaded files).
ambassador-demo-cluster/edgey-corp-nodejs/DataProcessingService/package.json
.
cd ~/Downloads
unzip ambassador-demo-cluster.zip -d ambassador-demo-cluster
cd ambassador-demo-cluster
./install.sh
- The demo cluster we provided already has a demo app running. List the app's services:
kubectl get services
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 14h
dataprocessingservice ClusterIP 10.43.159.239 <none> 3000/TCP 14h
verylargejavaservice ClusterIP 10.43.223.61 <none> 8080/TCP 14h
verylargedatastore ClusterIP 10.43.203.19 <none> 8080/TCP 14h
- Confirm that the Telepresence CLI is now installed (we expect to see the daemons are not running yet):
telepresence status
$ telepresence status
Root Daemon: Not running
User Daemon: Not running
telepresence status
command.
You now have Telepresence installed on your workstation and a Kubernetes cluster configured in your terminal.
Telepresence connects your local workstation to a remote Kubernetes cluster.
- Connect to the cluster (this requires root privileges and will ask for your password):
telepresence connect
$ telepresence connect
Launching Telepresence Daemon
...
Connected to context default (https://<cluster-public-IP>)
- Test that Telepresence is working properly by connecting to the Kubernetes API server:
curl -ik https://kubernetes.default
$ curl -ik https://kubernetes.default
HTTP/1.1 401 Unauthorized
Cache-Control: no-cache, private
Content-Type: application/json
...
Your local workstation may not have the compute or memory resources necessary to run all the services in a multi-service application. In this example, we’ll show you how Telepresence can give you a fast development loop, even in this situation.
We'll use a sample app that is already installed in your demo cluster. Let's take a quick look at it's architecture before continuing.
- Use
kubectl get pods
to check the status of your pods:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
verylargedatastore-855c8b8789-z8nhs 1/1 Running 0 78s
verylargejavaservice-7dfddbc95c-696br 1/1 Running 0 78s
dataprocessingservice-5f6bfdcf7b-qvd27 1/1 Running 0 79s
-
Since you’ve already connected Telepresence to your cluster, you can access the frontend service in your browser at http://verylargejavaservice.default:8080.
-
You should see the EdgyCorp WebApp with a green title and green pod in the diagram.
Now start up the DataProcessingService service on your laptop. This version of the code has the UI color set to blue instead of green.
-
In a new terminal window, go the demo application directory in the extracted archive folder:
cd edgey-corp-nodejs/DataProcessingService
-
Start the application:
npm start
$ npm start
...
Welcome to the DataProcessingService!
{ _: [] }
Server running on port 3000
- Back in your previous terminal window, curl the service running locally to confirm it’s set to blue:
curl localhost:3000/color
$ curl localhost:3000/color
"blue"
Next, we’ll create an intercept. An intercept is a rule that tells Telepresence where to send traffic. In this example, we will send all traffic destined for the DataProcessingService to the version of the DataProcessingService running locally instead:
- Start the intercept with the
intercept
command, setting the service name and port:telepresence intercept dataprocessingservice --port 3000
$ telepresence intercept dataprocessingservice --port 3000
Using deployment dataprocessingservice
intercepted
Intercept name: dataprocessingservice
State : ACTIVE
...
- Go to the frontend service again in your browser at http://verylargejavaservice:8080. You will now see the blue elements in the app.
We’ve now set up a local development environment for the DataProcessingService, and we’ve created an intercept that sends traffic in the cluster to our local environment. We can now combine these two concepts to show how we can quickly make and test changes.
-
Open
edgey-corp-nodejs/DataProcessingService/app.js
in your editor and change line 6 fromblue
toorange
. Save the file and the Node server will auto reload. -
Now visit http://verylargejavaservice:8080 again in your browser. You will now see the orange elements in the application. The frontend
verylargejavaservice
is still running on the cluster, but it's request to theDataProcessingService
for retrieve the color to show is being proxied by Telepresence to your laptop.
Normally, this process would require a container build, push to registry, and deploy.
With Telepresence, these changes happen instantly.
Create a personal intercept with a preview URL; meaning that only traffic coming from the preview URL will be intercepted, so you can easily share the services you’re working on with your teammates.
-
Clean up your previous intercept by removing it:
telepresence leave dataprocessingservice
-
Log in to Ambassador Cloud, a web interface for managing and sharing preview URLs:
$ telepresence login Launching browser authentication flow... <web browser opens, log in and choose your organization> Login successful.
If you are in an environment where Telepresence cannot launch a local browser for you to interact with, you will need to pass the
--apikey
flag totelepresence login
. -
Start the intercept again:
telepresence intercept dataprocessingservice --port 3000
You will be asked for your ingress layer 3 address; specify the front end service:
verylargejavaservice.default
Then when asked for the port, type8080
, for "use TLS", typen
. The default for the fourth value is correct so hit enter to accept it
$ telepresence intercept dataprocessingservice --port 3000
To create a preview URL, telepresence needs to know how cluster
ingress works for this service. Please Select the ingress to use.
1/4: What's your ingress' layer 3 (IP) address?
You may use an IP address or a DNS name (this is usually a
"service.namespace" DNS name).
[no default]: verylargejavaservice.default
2/4: What's your ingress' layer 4 address (TCP port number)?
[no default]: 8080
3/4: Does that TCP port on your ingress use TLS (as opposed to cleartext)?
[default: n]: n
4/4: If required by your ingress, specify a different layer 5 hostname
(TLS-SNI, HTTP "Host" header) to access this service.
[default: verylargejavaservice.default]:
Using deployment dataprocessingservice
intercepted
Intercept name : dataprocessingservice
State : ACTIVE
Destination : 127.0.0.1:3000
Intercepting : HTTP requests that match all of:
header("x-telepresence-intercept-id") ~= regexp("86cb4a70-c7e1-1138-89c2-d8fed7a46cae:dataprocessingservice")
Preview URL : https://<random-subdomain>.preview.edgestack.me
Layer 5 Hostname: verylargejavaservice.default
-
Wait a moment for the intercept to start; it will also output a preview URL. Go to this URL in your browser, it will be the orange version of the app.
-
Now go again to http://verylargejavaservice:8080, it’s still green.
Normal traffic coming to your app gets the green cluster service, but traffic coming from the preview URL goes to your laptop and gets the orange local service!
The Preview URL now shows exactly what is running on your local laptop -- in a way that can be securely shared with anyone you work with.