文档首页/ 云容器引擎 CCE/ 最佳实践/ 容器/ 使用Telepresence在本地开发和测试微服务
更新时间:2025-04-30 GMT+08:00

使用Telepresence在本地开发和测试微服务

Kubernetes应用程序通常由多个独立的服务组成,每个服务都在自己的容器中运行。 在远端的Kubernetes集群上开发和调试这些服务可能很麻烦, 需要在运行的容器上打开 Shell, 以运行调试工具。

在典型的Kubernetes开发流程中,开发者需重复以下步骤:

  1. 修改代码
  2. 构建镜像
  3. 推送镜像到仓库
  4. 更新集群Deployment
  5. 等待Pod重启
  6. 验证变更

此过程耗时数分钟甚至更久,严重拖慢迭代速度。

Telepresence是一个工具,它将Traffic Agent作为Sidecar注入工作负载Pod。Traffic Agent充当代理,将来自CCE集群的进出网络流量重新路由到本地环境。这样您就可以在本地环境(例如调试器和IDE)中进行开发和测试,就像本地开发环境位于CCE集群中一样。

本文档描述如何在本地使用Telepresence开发和调试CCE集群上运行的服务,更多详情请参见Code and debug an application locally

前提条件

创建一个CCE集群,并在本地环境通过kubectl连接集群,详情请参见使用kubectl连接集群

安装Telepresence

  1. 在本地环境中安装Telepresence客户端。

    1. 下载Telepresence二进制文件。根据操作系统安装步骤会有所不同,本文以amd64为例,更多安装方式详情请参见Install client
      sudo curl -fL https://github.com/telepresenceio/telepresence/releases/latest/download/telepresence-linux-amd64 -o /usr/local/bin/telepresence
    2. 为文件添加可执行权限。
      sudo chmod a+x /usr/local/bin/telepresence

  2. 在CCE集群中安装Telepresence Traffic Manager,详情请参见Install Traffic Manager

    在已安装Telepresence客户端的本地环境中执行以下命令:
    telepresence helm install

配置拦截规则

  1. 在本地开发环境中连接CCE集群中的kube-apiserver。

    telepresence connect

  2. 创建一个Deployment作为示例,本文中使用nginx镜像部署。

    kubectl create deployment echo-server --image=nginx --port=80 --replicas=1

    回显如下:

    deployment.apps/echo-server

  3. 创建一个Service关联Deployemt。

    YAML示例如下:
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: echo-server
      name: echo-server
      namespace: default
    spec:
      internalTrafficPolicy: Cluster
      ipFamilies:
      - IPv4
      ipFamilyPolicy: SingleStack
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: echo-server
      sessionAffinity: None
      type: ClusterIP

    在集群中使用curl测试访问Service的ClusterIP,访问成功后回显如下:

  4. 选择需要拦截的服务,命令如下,该规则会拦截发往echo-server Service的流量,发送到本地的localhost:80,通过应用程序可以监听localhost:80,来调试echo-server的功能。

    telepresence intercept echo-server --port 80:80

    回显如下:

    Using Deployment echo-server
      Intercept name : echo-server
      State : ACTIVE
      Workload kind : Deployment
      Intercepting : 192.168.1.215 -> 127.0.0.1
        80 -> 80 TCP

  5. 在本地IDE中编写一个HTTP Server,监听80端口,代码如下所示:

  6. 此时,再次在集群中访问echo-server Service,可以看到如下返回,说明此时流量已发送到本地服务器端。

    本地服务器端同时也打印相应日志,表明接收到从集群里转发来的请求: