云原生之深入解析使用Telepresence轻松在本地调试和开发Kubernetes应用程序

一、 准备

  • telepresence 下载:https://www.telepresence.io/docs/latest/install/
  • kubectl 下载:https://kubernetes.io/docs/tasks/tools/

二、版本检测

$telepresence version
Client: v2.5.3 (api v3)
Root Daemon: not running
User Daemon: not running
  • 如果版本小于 v2.0.3,则需要升级 telepresence(https://www.telepresence.io/docs/latest/install/upgrade/)

三、连接 k8s 集群

  • 执行以下命令连接 k8s 集群:
$telepresence connect
Launching Telepresence Root Daemon
Need root privileges to run: /usr/local/bin/telepresence daemon-foreground /Users/xxx/Library/Logs/telepresence '/Users/xxx/Library/Application Support/telepresence'
Password:
Launching Telepresence User Daemon
Connected to context kubernetes-admin@kubernetes (https://8.16.0.211:6443)
  • 注意:连接的集群为 kubeconfig 中指定的集群,需要能真实可访问。同时,telepresence 会自动打开浏览器,要求登录:

在这里插入图片描述

  • 该步骤不能省略,否则后续的步骤执行时,都会要求先登录才能继续执行。完成上述步骤后,查看 k8s 集群,能发现在该集群中会创建了名为 traffic-manager 的控制器:
$kubectl get po -n ambassador
NAME                               READY   STATUS    RESTARTS   AGE
traffic-manager-5bcfc9766f-lbrsz   1/1     Running   0          15m

四、拦截器

  • 如下所示,在 k8s 中部署了两个 service,分别是 Users 和 Orders:

在这里插入图片描述

  • 这里以 service Orders 为例,正常情况下,一个访问 Orders 的请求,会被正常的收发。而 telepresence 的功能,就是拦截发送到 Orders 的请求,并将其转发到用户指定的地址(一般为本地)。因此在开始配置前,需要了解 telepresence 中拦截器的概念:
    • 全局拦截(Global intercept):将访问 k8s 中某个 service 的流量全部拦截,并转发到本地:如下所示,使用全局拦截,能将访问 Orders 服务的全部流量拦截,全部转发到本地。当然,需要将本地代码运行起来,用于接收转发过来的请求,同时可以使用任意的 debug 的工具在本地进行调试:

在这里插入图片描述

    • 个人拦截(Personal intercept):有选择性地仅拦截某个 service 的部分流量,而不会干扰其余流量,可以通过以下参数设置是否拦截请求的标识:
--http-match=key=value 基于请求头识别请求是否需要拦截转发
--http-path-equal <path> 基于请求路径
--http-path-prefix <prefix>  基于请求路径前缀
--http-path-regex <regex> 基于请求路径是否匹配给定的正则表达式

五、实践

  • 在开始前,需要把用来远程调试的服务部署到 k8s 集群:
$kubectl get po,svc  -lk8s-app=lsh-mcp-idp-cd-test
NAME                                  READY   STATUS    RESTARTS   AGE
pod/lsh-mcp-idp-cd-6c68876d48-v6c88   1/1     Running   0          30sNAME                     TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                         AGE
service/lsh-mcp-idp-cd   NodePort   20.102.1.158   <none>        9090:30323/TCP,2345:30886/TCP   30s
  • 并在本地 debug 运行 lsh-mcp-idp-cd 代码:

在这里插入图片描述

  • 接着使用以下命令找到要拦截转发的 service,即 lsh-mcp-idp-cd:
$telepresence list 
lsh-mcp-idp-cd: ready to intercept (traffic-agent not yet installed)
  • 注意,要指定命名空间时,可以添加 --namespace 参数,如下所示:
$telepresence list --namespace=kube-system
  • 添加全局拦截器:
telepresence intercept <service-name> --port <local-port>[:<remote-port>] --http-match=all --env-file <path-to-env-file> [--namespace 可选]
  • 对应到实践场景:
$telepresence intercept lsh-mcp-idp-cd --port 9090:9090 --http-match=all --env-file ~/lsh-mcp-idp-cd-intercept.env  Flag --http-match has been deprecated, use --http-header
Using Deployment lsh-mcp-idp-cd
interceptedIntercept name         : lsh-mcp-idp-cdState                  : ACTIVEWorkload kind          : DeploymentDestination            : 127.0.0.1:9090Service Port Identifier: 9090Volume Mount Error     : sshfs is not installed on your local machineIntercepting           : matching all HTTP requestsPreview URL            : https://sad-thompson-7927.preview.edgestack.meLayer 5 Hostname       : lsh-mcp-idp-cd.default.svc.cluster.local
  • 执行完成后,会发现工作负载被注入了一个 sidecar:

$kubectl get po -lk8s-app=lsh-mcp-idp-cd-test -oyaml | grep -A 5  containerID- containerID: docker://6aea792f32af00b2e71f643ea41630de9bb6b0ebbe91251877fd79f67630efa1image: registry.cn-beijing.aliyuncs.com/launcher-agent-only-dev/idp:v1imageID: docker-pullable://registry.cn-beijing.aliyuncs.com/launcher-agent-only-dev/idp@sha256:c3be2545c30eb75fb652d383e9ec5545df9142e40d3b6f7f78633316b0db8103lastState: {}name: idp-cdready: true
--- containerID: docker://5acc04048950fdd38be3a8012c4cc0edbfd83079883717e34992f6f31036176fimage: datawire/ambassador-telepresence-agent:1.11.10imageID: docker-pullable://datawire/ambassador-telepresence-agent@sha256:9008fc1a6a91dd27baf3da9ebd0aee024f0d6d6a3f9c24611476474f6583e7f8lastState: {}name: traffic-agentready: true
  • 增加了一个名为 traffic-agent 的容器,正是该容器,负责拦截发送到该 pod 的流量,并负责转发。在 k8s 集群内执行以下命令,请求 lsh-mcp-idp-cd 服务:
$curl 20.102.1.158:9090/version
  • 再看本地代码,发现已经收到了请求:

在这里插入图片描述

  • 以上就是全局拦截的实践部分,个人拦截 gan 兴趣的同学自己实践吧,另外关于个人拦截,似乎每个账号存在使用次数限制,超过次数后创建个人拦截器时会报错:

telepresence: error: Failed to establish intercept: intercept in error state AGENT_ERROR: You’ve reached your limit of personal intercepts available for your subscription. See usage and available plans at https://app.getambassador.io/cloud/subscriptionsSee logs for details (1 error found): "/Users/xxx/Library/Logs/telepresence/daemon.log"See logs for details (13609 errors found): "/Users/xxx/Library/Logs/telepresence/connector.log"
If you think you have encountered a bug, please run `telepresence gather-logs` and attach the telepresence_logs.zip to your github issue or create a new one: https://github.com/telepresenceio/telepresence/issues/new?template=Bug_report.md .

六、卸载

  • 删除拦截器:执行后,会删除注入工作负载的 sidecar:
$telepresence leave lsh-mcp-idp-cd
  • 删除 telepresence agents and manager,执行后清除所有 sidecar,以及 traffic-manager 控制器,并关闭本地 telepresence 的后台进程:
$telepresence uninstall --everything
Telepresence Network quitting...done
Telepresence Traffic Manager quitting...done

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/219067.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Wordle 游戏实现 - 使用 C++ Qt

标题&#xff1a;Wordle 游戏实现 - 使用 C Qt 摘要&#xff1a; Wordle 是一款文字猜词游戏&#xff0c;玩家需要根据给定的单词猜出正确的答案&#xff0c;并在限定的次数内完成。本文介绍了使用 C 和 Qt 框架实现 Wordle 游戏的基本思路和部分代码示例。 引言&#xff1a;…

前后端传参中遇见的问题

前后端传参经常容易出错&#xff0c;本文记录开发springBootMybatis-plusvuecli项目中出现的传参问题及解决办法 1.前后端没有跨域配置&#xff0c;报错 解决方法&#xff1a;后端进行跨域配置&#xff0c;拷贝CorsConfig类 package com.example.xxxx.config;import org.spr…

早上好,我的leetcode 【hash】(第二期)

写在前面&#xff1a;坚持才是最难的事情 C代码还是不方便写&#xff0c;改用python了&#xff0c;TAT 文章目录 1.两数之和49. 字母异位词分组128.最长连续序列 1.两数之和 你好&#xff0c;梦开始的地方~ https://leetcode.cn/problems/two-sum/description/?envTypestudy…

HiveSql语法优化三 :join优化

前面提到过&#xff1a;Hive拥有多种join算法&#xff0c;包括Common Join&#xff0c;Map Join&#xff0c;Bucket Map Join&#xff0c;Sort Merge Buckt Map Join等&#xff1b;每种join算法都有对应的优化方案。 Map Join 在优化阶段&#xff0c;如果能将Common Join优化为…

【docker 】基于Dockerfile创建镜像

Dockerfile文档 Dockerfile文档地址 Dockerfile 是一个用来构建镜像的文本文件&#xff0c;文本内容包含了一条条构建镜像所需的指令和说明。 DockerFile 可以说是一种可以被 Docker 程序解释的脚本&#xff0c;DockerFile 是由一条条的命令组成的&#xff0c;每条命令对应 …

RT-DETR优化:ASF-YOLO提取多尺度特征 | 2023年12月最新成果

🚀🚀🚀本文改进: ASF-YOLO一种新的特征融合网络架构,该网络由两个主要的组件网络组成,可以为小目标分割提供互补的信息:(1)SSFF模块,它结合了来自u;(2)TFE模块,它可以捕获小目标的局部精细细节等 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学…

AUTOSAR组织引入了Rust语言的原因是什么?有哪些好处?与C++相比它有什么优点?并推荐一些入门学习Rust语言链接等

AUTOSAR(汽车开放系统架构)是一个由汽车制造商、供应商和其他来自电子、半导体和软件行业的公司组成的全球发展伙伴关系,自2003年以来一直致力于为汽车行业开发和引入开放、标准化的软件平台。 AUTOSAR 最近宣布成立一个新的工作组,用于探索在汽车软件中使用 Rust 编程语言…

R语言|分面中嵌入趋势线

简介 关于分面的推文&#xff0c;小编根据实际科研需求&#xff0c;已经分享了很多技巧。例如&#xff1a; 分面中添加不同表格 分面中添加不同的直线 基于分面的面积图绘制 分面中的细节调整汇总 基于分面的折线图绘制 最近科研中又遇到了与分面相关的需求&#xff1a;…

Axure 9基本元件,表单及表格元件简介,表单案例

目录 一.基本元件 1.元件基本介绍 2.基本元件的使用 二.表单及表格元件 三.表单案例 四.简单简历绘制 一.基本元件 1.元件基本介绍 概述 - 在Axure RP中&#xff0c;元件是**构建原型图的基础模块**。 将元件从元件库里拖拽到画布中&#xff0c;即可添加元件到你的原型…

excel可视化看板【动态关联公司、部门、人员、及时间】

昨天网友花钱定制了一个可视化报表&#xff0c;花了一整天时间&#xff0c;做了这份酷炫的可视化报表&#xff0c;右边按钮控件可以动态关联可视化图表 做这种这重要是数据的统计&#xff0c;只要能统计到&#xff0c;剩下的只是如何展示&#xff0c;慢慢的调整&#xff0c;美…

一、微前端目标、前端架构的前生今世、微前端架构优势和劣势、软件设计原则与分层

1、目标 2、前端架构的前世今生 ① 初始&#xff1a;无架构&#xff0c;前端代码内嵌到后端应用中 ② 后端 MVC 架构&#xff1a;将视图层、数据层、控制层做分离 缺点&#xff1a;重度依赖开发环境&#xff0c;代码混淆严重&#xff08;在调试时&#xff0c;需要启动后端所有…

加油站“变身”快充站,探讨充电新模式——安科瑞 顾烊宇

摘要&#xff1a;新能源汽车规模化发展的同时&#xff0c;充电不便利的痛点愈发明显。在未来的新能源汽车行业发展当中&#xff0c;充电的矛盾要远远大于造车的矛盾&#xff0c;解决好充电的问题成为电动汽车行业发展的一个突出问题。解决充电补能问题&#xff0c;重要的方式之…

【golang/g3n】3D游戏引擎G3N的windows安装与测试

目录 说在前面安装测试 说在前面 操作系统&#xff1a;win 11go version&#xff1a;go1.21.5 windows/amd64g3n版本&#xff1a;github.com/g3n/engine v0.2.0其他&#xff1a;找了下golang 3d相关的库&#xff0c;目前好像就这个比较活跃 安装 按照官方教程所说&#xff0c;…

linux空洞文件以及多线程写入

介绍空洞文件 Linux空洞文件&#xff08;hole file&#xff09;是一种特殊类型的文件&#xff0c;其大小可能超过实际存储的数据量。在空洞文件中&#xff0c;文件系统会为文件分配磁盘空间&#xff0c;但实际上只在文件中存储了部分数据&#xff0c;其余部分被称为"空洞…

Redis实现延迟队列

目录 一、什么是延时队列 二、延时队列的应用 三、举例说明 我的设计思想: 一、什么是延时队列 延时队列相比于普通队列最大的区别就体现在其延时的属性上&#xff0c;普通队列的元素是先进先出&#xff0c;按入队顺序进行处理&#xff0c;而延时队列中的元素在入队时会指定…

SQL、Jdbc、JdbcTemplate、Mybatics

数据库&#xff1a;查询&#xff08;show、select&#xff09;、创建&#xff08;create)、使用(use)、删除(drop)数据库 表&#xff1a;创建&#xff08;【字段】约束、数据类型&#xff09;、查询、修改&#xff08;alter *add&#xff09;、删除 DML&#xff1a;增加(inse…

2024年网络安全比赛--系统渗透测试(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1.在渗透机中对服务器主机进行信息收集&#xff0c;将服务器开启的端口号作为 Flag 值提交; 2.在渗透机中对服务器主机进行渗透&#xff0c;在服务器主机中获取服务器主机名称&#xff…

【自动化测试】web3py 连接 goerli

web3py 连接 goerli 直接使用库里方法 if __name__ __main__:from web3.auto.infura.goerli import w3w3.eth.get_balance(get_address_by_private_key(os.getenv("AAA_KEY")))error info: websockets.exceptions.InvalidStatusCode: server rejected WebSocket …

【算法刷题】每日打卡——动态规划(1)

背包问题 例题一 有 N件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数…

Threejs利用着色器编写动态飞线特效

一、导语 动态飞线特效是可视化数据地图中常见的需求之一&#xff0c;鼠标点击的区块作为终点&#xff0c;从其他区块飞线至点击区块&#xff0c;附带颜色变换或者结合粒子动画 二、分析 利用创建3点来构成贝塞尔曲线&#xff0c;形成线段利用着色器材质来按照线段以及时间…