Telepresenceを使って、クラスタにあったGoのコンテナをローカルのものに差し替えつつ下記の操作が可能なことが分かるデモです。
- クラスタの他のPodからの通信を受ける
- ローカルのコンテナからServiceの名前解決を行う
- ローカルのコンテナからServiceへ通信する
- telepresence: 0.101
- macOS: 10.14.5
- Docker Desktop: 2.1.0.0
- kubectl: v1.15.2
- Kubernetes: GKE, v1.13.7-gke.8
- go: 1.12.7
Telepresence公式の手順に沿ってインストールする
kubectl apply -f ./k8s-manifest/telepresence-demo.yaml
# 動作確認
CURL_POD=$(kubectl get po -l app=curl -ojsonpath='{.items[0].metadata.name}')
kubectl exec $CURL_POD -- curl -v devapp:8080
# nginx のデフォルトページが出ればOK
# go-demo/facade.go の内容を変更
# 注: 本来は接続先は環境変数に設定して再ビルドを避ける方が良いが、デモ用のサンプルコードなので……
sed -i -e "s/backend-1/backend-2/" ./go-demo/facade.go
# Dockerイメージをビルド
docker build -t go-demo:v2 ./go-demo/
# 差し替え
telepresence --swap-deployment devapp --docker-run go-demo:v2 /demoapp
# 下記のログが表示されれば準備OK
# T: Setup complete. Launching your container.
# 動作確認
CURL_POD=$(kubectl get po -l app=curl -ojsonpath='{.items[0].metadata.name}')
kubectl exec $CURL_POD -- curl -v devapp:8080
# Apache httpdのデフォルトページ (It works!) が出ればOK