y-ohgi's blog

TODO: ここになにかかく

GKE-autopilot でTelepresence を実行する

TL;DR

  • GKE-autopilot でTelepresence を実行可能か確認し、実際に動いた

概要

GKE-autopilot でTelepresence を実行するだけのブログ

version

  • macOS
    • 11.5.2
  • Telepresence
    • 2.4.0
  • GKE-autopilot
    • v1.18.20-gke

Telepresence を実行する

GKE-autopilot は構築済み

ローカルへ CLI をインストールする

$ brew install datawire/blackbird/telepresence
$ telepresence status
Root Daemon: Not running
User Daemon: Not running

k8s へセットアップ

$ telepresence connect

実行後、 ambassador というnamespace が作成され、Object 郡が生成される

$ kubectl get all -n ambassador
NAME                                   READY   STATUS    RESTARTS   AGE
pod/traffic-manager-6f7b5b8c4b-bhq69   1/1     Running   0          3m56s

NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/agent-injector    ClusterIP   10.77.129.104   <none>        443/TCP    3m56s
service/traffic-manager   ClusterIP   None            <none>        8081/TCP   3m56s

NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/traffic-manager   1/1     1            1           3m58s

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/traffic-manager-6f7b5b8c4b   1         1         1       3m58s

疎通確認

$ curl -ik https://kubernetes.default
HTTP/2 403
  :
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "forbidden: User \"system:anonymous\" cannot get path \"/\"",
  "reason": "Forbidden",
  "details": {

  },
  "code": 403
}

公式ドキュメントにアーキテクチャが乗っているので、そちらを見ると想像がつきやすいかもです。

f:id:y-ohgi:20210828141120p:plain Telepresence Architecture | Telepresence

Pod を走らせる

README の通りにechoserver を立てて疎通確認をする。
telepresenceio/telepresence: Local development against a remote Kubernetes or OpenShift cluster

テスト用に telepresence というnamespace を作成し、ここでPod を走らせる

$ kubectl create ns telepresence
$ kubectl ns telepresence

Deployment とService をたてる

$ kubectl create deploy hello --image=k8s.gcr.io/echoserver:1.4
$ kubectl expose deploy hello --port 80 --target-port 8080
$ kubectl get svc,deploy,po
NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/hello   ClusterIP   10.77.128.79   <none>        80/TCP    2m50s

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/hello   1/1     1            1           3m56s

NAME                         READY   STATUS    RESTARTS   AGE
pod/hello-6b8bb74476-nk6sz   1/1     Running   0          3m56s

疎通確認。

$ curl hello.telepresence
CLIENT VALUES:
client_address=10.77.1.92
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://hello.telepresence:8080/

SERVER VALUES:
server_version=nginx: 1.10.0 - lua: 10001

HEADERS RECEIVED:
accept=*/*
host=hello.telepresence
user-agent=curl/7.64.1
BODY:

片付け

$ telepresence uninstall --everything
$ telepresence quit

まとめ

GKE-autopilot でも動いた。
単純な動作確認とはいえ、ハマらなかったので驚き