云原生之深入解析使用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.mzph.cn/news/226247.shtml

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

相关文章

leetcode面试经典二分系列刷题心得

闲来无事巩固算法基础&#xff0c;发现自己的二分几乎从来没系统刷过题&#xff0c;基础很是薄弱。 二分法不愧称为新人杀手&#xff0c;刷起来很是吃力&#xff0c;感觉明明学了几套二分模板&#xff0c;但是却不知道如何去运用&#xff0c;很多读者在初次尝试刷二分题时候&a…

24款奔驰C260L升级C63包围 典型的花小钱办大事

今天店里来了一台24款奔驰C260L 一提车就过来升级 我们公司还有包上牌服务 车主说 升级完包围 帮忙安排一下 原车的包围 没有那么霸气 特别是后杠 光溜溜的 升级后 四出尾喉 尾翼 直接牌面就起来了 星骏汇小许Xjh15863

Android12-RK3588_s-开机动画

目录 一、实现自定义开机动画 步骤一&#xff1a;准备 bootanimation.zip 步骤二&#xff1a;将 bootanimation.zip 放到 /system/media/bootanimation.zip下 步骤三&#xff1a;重启即可 二、注意事项 2.1 bootanimation.zip 压缩 2.2 bootanimation.zip 存放 2.3 boo…

打印机设置发票收据打印

由于各种打印机型号不一样&#xff0c;设置方式打印效果出入也很大&#xff0c;存在打印不全问题&#xff0c;发票右侧小数点后面的数字打印不出来、位置靠上下左右登问题&#xff0c;比较通用的设置方式如下&#xff1a; 首先找到控制面板&#xff0c;找到设备和打印机 进入到…

【C语言】printf()函数详解,手把手教你,保姆级!!!

目录 基本用法 printf()函数--占位符 占位符大全 printf()函数--限定宽度 printf()函数--正负--限定小数 printf()函数--输出部分字符串 总结 【C语言】printf()函数详解&#xff0c;手把手教你&#xff0c;保姆级&#xff01;&#xff01;&#xff01; 基本用法 printf()…

openoffice安装

安装openoffice 下载安装包 建议去官网下载&#xff0c;这里给出官网地址&#xff1a;https://www.openoffice.org/download/ 这里以linux为例&#xff0c;所以我下载的是unbantu的版本(deb) 解压安装包 tar -zxvf Apache_OpenOffice_4.1.13_Linux_x86-64_install-deb_zh-…

【Hive】【Hadoop】工作中常操作的笔记-随时添加

文章目录 1、Hive 复制一个表:2、字段级操作3、hdfs 文件统计 1、Hive 复制一个表: 直接Copy文件 create table new_table like table_name;hdfs dfs -get /apps/hive/warehouse/ods.db/table_nameload data local inpath /路径 into table new_table;修复表&#xff1a; m…

25.Java程序设计-基于SSM框架的微信小程序校园求职系统的设计与实现

1. 引言 1.1 背景 介绍校园求职系统的背景&#xff0c;说明为什么设计这个系统以及系统的重要性。 1.2 研究目的 阐述设计基于SSM框架的微信小程序校园求职系统的目标和意义。 2. 需求分析 2.1 行业背景 分析校园求职行业的特点和需求&#xff0c;以及目前市场上同类系统…

翻译: LLM工具使用和代理Tool use and agents

欢迎来到本周的最后一个视频。在这个视频中&#xff0c;我想与您分享LLM&#xff08;大型语言模型&#xff09;开始能够使用工具的情况&#xff0c;以及讨论一下前沿的“代理”主题&#xff0c;这是让LLM自己决定下一步采取什么行动的领域。让我们来看看。在早期的食物订单接收…

【C 剑指offer】有序整型矩阵元素查找 {杨氏矩阵}

目录 题目内容&#xff1a; 思路&#xff1a; 图形演示&#xff1a; 复杂度分析 C源码&#xff1a; /** *************************************************************************** ******************** ********************* ******…

遥感论文 | Scientific Reports | 一种显著提升遥感影像小目标检测的网络!

论文题目&#xff1a;MwdpNet: towards improving the recognition accuracy of tiny targets in high-resolution remote sensing image论文网址&#xff1a;https://www.nature.com/articles/s41598-023-41021-8 摘要 提出MwdpNet&#xff0c;以提高对高分辨率遥感&#xf…

connect: Network is unreachable问题解决

第一步&#xff1a;查看ifcfg-ens33配置文件 cd /etc/sysconfig/network-scripts/ cat ifcfg-ens33 发现问题&#xff1a;GATEWAY写错成GATWAY 第二步&#xff1a;修改 vim ifcfg-ens33 第三步&#xff1a;检测是否成功 ping baidu.com 成功&#xff01;

Mysql 的ROW_NUMBER() 和分区函数的使用 PARTITION BY的使用

Mysql 的ROW_NUMBER() 和分区函数的使用 PARTITION BY的使用 描述&#xff1a; 遇到了一个需求&#xff0c;需要查询用户id和计划id&#xff0c;但是人员id的是重复&#xff0c;我想把人员id去重&#xff0c;支取一个。自然而然的就想到了 SELECT DISTINCT prj_plan.last_mon…

分布式事务--初识Seata和TC部署

1.Seata介绍 Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。致力于提供高性能和简单易用的分布式事务服务&#xff0c;为用户打造一站式的分布式解决方案。 官网地址&#xff1a;Seata | Seata&#xff0c;其中的文档、播客中提供了大量的使用说明…

Python读写arxml文件

文章目录 前言一、XML简介二、XML文件结构三、Python读取xml文件安装ElementTree库读取xml文件四、Python写入xml文件前言 本文主要通过介绍arxml文件,为后续python脚本开发奠定基础。 arxml是AUTOSAR XML的简称,是一个通用的配置/数据库文件,实质是一个xml文件。 ①更规范…

Mysql查询条件为大于时,不走索引失效场景

如下 where a>1 and b2 是不走索引。 因为a>1 &#xff0c; (这里说的是&#xff0c;a是走了索引&#xff0c;但是b没有走&#xff0c;为什么了&#xff1f;因为b只有在a相同时&#xff0c;b才有序,也就是说这个联合索引只用到了一半)的数据是无序的(1 4 1 2)&#xff0…

WGAN 优势小结

我在上一篇博文为什么 GAN 不好训练中&#xff0c;分析了原始 GAN 难以训练的原因&#xff0c;本篇博文将分析下 WGAN 的优势。 1. Wasserstein 距离 W 是指 Wasserstein&#xff0c;Wasserstein 距离又叫Earth-Mover&#xff08;EM&#xff09;距离。Wasserstein距离相比KL散…

ubuntu18.04 安装yolov5环境及推理环境

文章目录 1、安装anaconda31.2、环境变量配置1.3、添加/更换 conda 清华源 2、安装pytorch1.63、CUDA安装4、安装cuDNN5、安装tensorRT6、安装opencv4.67、tensorRT部署yolov5模型推理 1、安装anaconda3 官方网网址 https://www.anaconda.com/download#downloads去到下载的文…

心理测试网站源码,知己心理React心理健康测试

源码介绍 React心理健康测试网站源码&#xff0c;帮助需要的人更好地了解自已的心理健康状态和人格特征。 React可以在Vite中启用HMR&#xff0c;并且包含了几人EsLint规则。只需要使用react antd-mobile即可 轻松部署完成。

千梦网创:逮住一闪而过的机会疯狂摩擦

我这个人平时想的就多&#xff0c;睡觉也在想事情&#xff0c;有时候睡觉里想的事情往往都是很纯粹的、很绝妙的&#xff0c;但是经常性一醒过来就忘了&#xff0c;再去回忆怎么也想不起来了。 灵感只在特定的环境下产生&#xff0c;这类环境是不可再生和模拟的。 机会只因特…