Telepresence: Rapid Deployment and Communicate with Remote Kubernetes Cluster in Local

Rammus
SWAG
Published in
4 min readJun 5, 2019

Telepresence 透過 sshuttle 使用 SSH connection 產生 VPN-like tunnel,建立一個雙向的 network proxy。(more details),甚至可以在 service 前面加一層 ingress, cert-manager 進而產生一個 Local HTTPS 的開發環境。

此外,CNCF 基金會 目前已經將 Telepresence 加入計畫,可以對這個工具多一點的信心。

解決問題

  • 如果 cluster 的 micro service 很多,不可能在本地端用 minikube 測試。
  • 不需要等待 CI/CD 將程式碼推到 Cluster 才能看到結果
  • 不需要額外設定 VPN(OpenVPN, Wireguard),存取 Cluster 其他 Service
  • 可以在程式內直接使用 Kubernetes Cluster 的 Service. ex. requests.get(‘client.elasticsearch:9200’)

Step by Step

Code: https://github.com/RammusXu/toolkit/tree/master/demo/k8s/telepresence

Install

brew cask install osxfusebrew install datawire/blackbird/telepresence

先準備一個 telepresence 的 proxy pod(deployment+service)

以及一個簡單的 Flask

Run

kubectl apply -f telepresence.yamlsudo telepresence --deployment telepresence-rammus --expose 5000:80 --namespace dev --run sh -c "FLASK_DEBUG=1 flask run"`--deployment [deployment-name]` 將會置換掉 deployment`--expose 5000:80` 將 localhost:5000 expose 到 kubernetes-pod:80`--namespace [your-namespace]` 可以選擇要替換哪個 namespace 的 deployment。預設是 `default``--run` 啟用 server 的方式。ex. `npm start`, `flask run`, `rails server`。這邊帶入 FLASK_DEBUG=1 自動監控 app.py 程式碼變更時重啟 server,如果是別的語言,請自行替換,或是加入環境變數。

Advanced

如果需要限制 developer 的 RBAC,這裡有 minimal RABC role:https://www.telepresence.io/reference/connecting#running-telepresence-manually

如果想要用 docker 可以參考:https://www.telepresence.io/tutorials/docker

telepresence — swap-deployment hello-world — docker-run — rm -it -v $(pwd):/usr/src/app hello-dev

如果不希望 developer 的 pod 可以存取所有其他的 service/pod,可以參考:

其他選擇

Reference

本篇文章同步發表於 rammusxu.github.io

--

--