Telepresence 2.24:推出 Docker Compose 扩展
Telepresence 2.24 现已发布,此次更新带来了强大的 Docker Compose 扩展,让用户直接从本地 Compose 文件镜像并交互 Kubernetes 服务。
此次更新让用户在熟悉的 docker compose 工作流程中,充分利用 Telepresence 的集群连接能力。无论是本地代理远程服务,还是用本地代码替换集群容器,这些扩展都简化了调试、测试和迭代,且对集群影响极小。
什么是 Telepresence Docker Compose 扩展?
核心是 x-tele 扩展,你可以添加到 compose.yaml 或 compose.override.yaml 文件中。Telepresence 通过新命令 telepresence compose 处理这些扩展,作为 docker compose 的增强替代,负责连接 Kubernetes 集群,修改网络、卷挂载和环境变量,然后传回优化后的配置给 Docker Compose。
扩展分两种类型:
顶层扩展
定义全局配置,如集群连接和卷挂载策略。例如:
- Connections:指定命名空间、子网等,连接本地和集群。
- Mounts:控制挂载策略(本地、远程或只读)。
服务级扩展
针对每个服务,定义本地 Compose 服务如何交互远程 Kubernetes 服务。支持类型包括:
|
类型 |
行为描述 |
类似 CLI 命令 |
|---|---|---|
|
connect |
让服务访问集群 DNS 和路由 |
telepresence connect |
|
proxy |
用代理替代本地服务,代理远程集群服务 |
无 |
|
wiretap |
接收远程服务镜像流量用于观察 |
telepresence wiretap |
|
ingest |
共享远程容器的环境变量和卷 |
telepresence ingest |
|
intercept |
处理远程服务拦截流量,支持环境变量/卷共享 |
telepresence intercept |
|
replace |
用本地服务完全替换远程容器 |
telepresence replace |
所有服务扩展都隐含 connect。
实战:从 Emojivoto 入手
准备工作
- 克隆代码库:
git clone https://github.com/telepresenceio/emojivoto.git - 本地运行:
cd emojivoto && docker compose up(访问 http://localhost:8080) - 部署到 Kubernetes:
kubectl apply -k kustomize/deployment - 查看 Pod 状态:
kubectl -n emojivoto get pod
示例 1:本地代理远程服务
假设你不想本地运行 "voting" 服务,而是从集群代理它。compose.override.yaml 添加:
x-tele:
connections:
- namespace: emojivoto
services:
voting:
x-tele:
type: proxy
运行 telepresence compose up。此时本地环境无缝访问远程投票服务。Vote-bot 仍然投票,但日志显示“Proxied service voting”,本地没有运行投票服务。
总结:让 Compose 服务调用远程集群资源,无需全部本地运行,适合依赖复杂的应用。
示例 2:用本地服务替换远程服务
反过来,让远程服务调用你本地的 "emoji" 和 "voting" 实现。
更新 compose.override.yaml:
x-tele:
connections:
-namespace:emojivoto
services:
emoji:
x-tele:
type:replace
voting:
x-tele:
type:replace
vote-bot:
profiles:
-notEnabled# Optional: Disable local vote-bot
用 telepresence compose up,远程的 emoji 和 voting pod 被流量代理替换,流量转发到本地容器。投票数据通过自动远程挂载同步,http://localhost:8080 显示和远程应用相同的排行榜。
如果想调整卷挂载(例如用本地卷):
x-tele:
connections:
- namespace: emojivoto
mounts:
- volume: data
policy: local
总结:适合在类生产环境快速替换代码,无需重新部署,加快调试和开发速度。
为何这改变了本地开发?
- 高效:不再手动拦截或代理,Compose 文件定义一切。
- 一致:本地镜像 Kubernetes 服务,测试更准确。
- 灵活:轻松处理复杂场景,如卷同步和端口映射。
- 最小集群影响:操作临时且可撤销,使用
telepresence compose down。
无论是独立开发者还是团队,这些扩展让 Telepresence 成为 Kubernetes 工作流中不可或缺的工具。
其他重要改进
-
自动移除 Traffic-Agent
新增 Helm Chartagent.maxIdleTime配置,控制流量代理空闲多久后自动从 Pod 移除,减少集群运行容器数。 -
集群服务启动浏览器
新增命令telepresence serve <service>,启动浏览器访问指定服务。配合telepresence connect --docker使用时,会在本地随机端口暴露该服务。 -
Prometheus 指标去除客户端标签
Helm Chart 添加prometheus.dropClientLabel,支持 GDPR 合规,防止指标中暴露个人数据。 -
Prometheus 指标前缀 "telepresence_"
避免指标冲突,更易于在监控系统中搜索。 -
完整 CLI 参考
文档新增完整 man 页式命令参考。