Java 程序员k8sJava

K8S调试利器:telepresence2使用文档

2021-06-22  本文已影响0人  程序花生

telepresence2主要解决的问题

telepresence能够将本地的开发程序插入到kubernetes集群内部,使得程序的环境看起来像在pod内部;并且在本地开发过程中,可以使用k8s内部所有的网络服务以及DNS名称;

工作原理

在使用telepresence后,其会在集群内部创建一个小型代理,路由流量会在一个安全网络隧道之间来回;

在kubernetes内部可以使用命令查看到代理名称;

[root@k8s-master-0 ~]# kubectl get ns
NAME              STATUS   AGE
ambassador        Active   30d
[root@k8s-master-0 ~]# kubectl get all -n ambassador
NAME                                   READY   STATUS    RESTARTS   AGE
pod/traffic-manager-85cb46d955-nhlfr   1/1     Running   0          26h

NAME                      TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)             AGE
service/traffic-manager   ClusterIP   None         <none>        8022/TCP,8081/TCP   26h
1
NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/traffic-manager   1/1     1            1           26h

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/traffic-manager-85cb46d955   1         1         1       26h

快速入门

PS:可以自行查看官方文档

安装

从github上可以下载最新版,目前使用的最新版为:2.2.2

# 解压
tar -zxvf telepresence-2.2.2.tar.gz
cd telepresence-2.2.2
# 设置环境变量
export TELEPRESENCE_VERSION=v2.2.2
make build 
mv ./telepresence $GOBIN/telepresence

安装kubectl

telepresence需要往集群内部安装代理,所以在开发及其上需要安装kubectl;

安装完成后,从kubenetes集群内拷贝配置文件;

scp -r root@10.222.222.11:/root/.kube/config /root/.kube/config
# 执行kubectl 
kubectl get pod

实战

在集群内部创建测试pod:

# 创建deploy
kubectl create deploy hello --image=luksa/kubia
# 暴露服务
kubectl expose deploy hello --port 80 --target-port 8080

telepresence2的命令包括:

Available Commands:
  Session Commands:
    connect              连接集群
    login                登录Ambassador Cloud #无需用到
    logout               退出Ambassador Cloud #无需用到
    license              获取版本信息Ambassador Cloud#无需用到
    status               查看连接状态
    quit                 退出
  Traffic Commands:
    list                 列举当前可以拦截的服务
    intercept            拦截一个服务
    leave                退出拦截服务
    preview              
  Other Commands:
    version              查看版本
    uninstall            卸载集群中的代理插件
    dashboard            打开一个dashboard(需要联网)
    current-cluster-id  

连接集群

telepresence connect
Launching Telepresence Daemon v2.3.2 (api v3)
Connecting to traffic manager...
Connected to context kubernetes-admin@kubernetes (https://<clusterip>:6443)

查看连接状态

# telepresence status
Root Daemon: Running
  Version     : v2.3.2 (api 3)
  DNS : ""
User Daemon: Running
  Version           : v2.3.2 (api 3)
  Ambassador Cloud  : Logged out
  Status            : Connected
  Kubernetes server : https://cluster-ip:6443
  Kubernetes context: kubernetes-admin@kubernetes
  Telepresence proxy: ON (networking to the cluster is enabled)
  Intercepts        : 0 total

查看当前可以拦截服务

# telepresence list --namespace default
nginx-demo: ready to intercept (traffic-agent not yet installed)

tips: --namespace可以指定k8s的命名空间;

其默认是根据kubectl的配置进行展示的;

访问集群内部的服务

[root@localhost bin]# curl hello.platform/
You've hit hello-66cff46dc-khm9q

在本机拦截服务

【存在问题,后续更新】

FAQ

telepresence: error: connector.Connect: the traffic manager gRPC API timed out.  The current timeout 15s can be configured as "timeouts.trafficManagerAPI" in "/root/.config/telepresence/config.yml"
rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial unix /tmp/telepresence-connector.socket: connect: connection refused"

通过查看消息可知,请求代理的API超时,可以通过提示修改超时时间;

[root@localhost telepresence-2.2.2]# curl http://hello.platform
curl: (56) Recv failure: Connection reset by peer

可查看svc资源是否运行正确;

作者:TangLyan
链接:https://juejin.cn/post/6976246800566976549
来源:掘金

上一篇下一篇

猜你喜欢

热点阅读