news 2026/5/14 22:36:39

envoy使用consul做服务发现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
envoy使用consul做服务发现

前言

上一篇内容,我们详细讨论了怎么使用envoy做负载均衡,并且记录详细的地址,其中还解决了一个问题,那就是怎么让envoy获取真实后端pod ip地址,后面使用headless service,既使用了service的服务发现能力,又不使用service的负载均衡能力

如果在某些特殊的场景下完全放弃的k8s service(比如混合云部署机房,两边云都需要有相同的服务,但是服务之间不能跨云访问),怎么赋予envoy服务发现的能力

静态配置服务发现

顾名思义,直接写在配置里面

/* by yours.tools - online tools website : yours.tools/zh/formatruby.html */ ... static_resources: ... clusters: - name: backend_cluster connect_timeout: 0.25s type: STATIC load_assignment: cluster_name: backend_cluster endpoints: - lb_endpoints: - endpoint: address: socket_address: address: 192.168.1.100 port_value: 8080 - endpoint: address: socket_address: address: 192.168.1.101 port_value: 8080 ...

/* by yours.tools - online tools website : yours.tools/zh/formatruby.html */ type: STATIC是关键配置

基于dns的服务发现

之前的k8s服务发现,就是利用k8s dns做的服务发现,这里再举一个例子,也是经常使用的三方注册中心,consul

安装consul
docker run -d --name consul \ -p 8300-8302:8300-8302 \ -p 8500:8500 \ -p 8301-8302 \ -p 8600:8600/udp \ hashicorp/consul:1.22

这里的关键是-p 8600:8600/udp

修改coredns配置

kubectl -n kube-system edit cm coredns

... forward consul 10.22.12.178:8600 { prefer_udp } ...

只要访问*.consul的域名,都去访问10.22.12.178:8600,而8600端口,就是consul提供的dns udp端口

至于为什么是*.consul呢?.service.consul 是 Consul 官方规定的服务发现域名

域名含义
service.consul服务发现(最常用)
node.consul查询节点 IP
query.consulPrepared Query
dc.consul跨数据中心

所以直接转发*.consul,粗暴有效

往consul注册数据
curl -X PUT http://10.22.12.178:8500/v1/agent/service/register \ -H "Content-Type: application/json" \ -d '{ "Name": "backend-service-consul", "ID": "service-1", "Address": "10.244.0.82", "Port": 10000 }'
修改envoy配置
... clusters: - name: app_service connect_timeout: 1s type: STRICT_DNS lb_policy: ROUND_ROBIN load_assignment: cluster_name: app_service endpoints: - lb_endpoints: - endpoint: address: socket_address: address: "backend-service-consul.service.consul" port_value: 10000 ...

修改完之后重启服务

这里需要注意的是address: "backend-service-consul.service.consul"

  • backend-service-consul是注册到consul的名字
  • .service.consul上面已经说过,这是consul的固定格式
验证

curl 10.22.12.178:30785/test

[2025-12-18T09:42:47.296Z] "GET /test HTTP/1.0" 200 40 1 fd326a0e-ec4f-4cf3-a244-b29f4c0c0173 "curl/7.81.0" "-" 10.244.0.82:10000 app_service - [2025-12-18T09:42:47.584Z] "GET /test HTTP/1.0" 200 40 0 b44ce502-a8ed-489a-b95b-d3c21af9d24d "curl/7.81.0" "-" 10.244.0.82:10000 app_service - [2025-12-18T09:42:47.816Z] "GET /test HTTP/1.0" 200 40 1 f6ac4149-1e58-4b0e-a263-85fc89cef968 "curl/7.81.0" "-" 10.244.0.82:10000 app_service - [2025-12-18T09:42:48.039Z] "GET /test HTTP/1.0" 200 40 1 c64c7f05-bcbb-42a7-9e68-a376217a4ca2 "curl/7.81.0" "-" 10.244.0.82:10000 app_service - [2025-12-18T09:42:48.240Z] "GET /test HTTP/1.0" 200 40 1 96097880-bc28-4686-98d3-ab09848cf28a "curl/7.81.0" "-" 10.244.0.82:10000 app_service - [2025-12-18T09:42:48.464Z] "GET /test HTTP/1.0" 200 40 0 799f7f10-1cb1-447a-828a-45ccc50273f5 "curl/7.81.0" "-" 10.244.0.82:10000 app_service -

确实已经生效了

consul小结

这里展示了怎么使用consul作为服务发现,不管是用headless还是consul,都是dns的服务发现,在consul的例子中,将固定域名(.service.consul)引导至consul提供的dns服务,从而实现

小结

本文介绍了如何使用静态的服务发现以及基于dns的服务发现,但是他们都存在一个问题,一旦envoy的配置有所改变,比如"backend-service-consul.service.consul"域名发生变化,或者port_value: 10000端口发生变化, 那就势必要重启envoy来重新加载配置,这就带来了系统的复杂性与不稳定性了

那有没有什么方法是可以自动加载配置呢?肯定是有的,那又是下一文的内容

联系我

  • 联系我,做深入的交流


至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...

本文来自博客园,作者:it排球君,转载请注明原文链接:https://www.cnblogs.com/MrVolleyball/p/19390666

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 23:48:41

频域Transformer技术:重新定义图像去模糊的智能解决方案

在数字图像处理的前沿领域,频域Transformer技术正以革命性的方式突破传统图像去模糊的局限。这项技术将复杂的空间域计算转化为高效的频域运算,为视频监控修复、移动摄影照片清晰化等实际应用场景提供了全新的技术路径。 【免费下载链接】FFTformer 项…

作者头像 李华
网站建设 2026/5/12 3:19:40

FF14智能钓鱼助手:渔人的直感使用全攻略

还在为错过幻海流的关键时刻而懊恼吗?是否曾经因为分心而错失珍贵鱼种的咬钩机会?FF14智能钓鱼计时器"渔人的直感"正是为这些困扰而生的专业辅助工具,让您的钓鱼之旅从此变得轻松高效。 【免费下载链接】Fishers-Intuition 渔人的直…

作者头像 李华
网站建设 2026/5/12 4:27:56

.NET应用程序连接池爆满

文章目录环境症状问题原因解决方案环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:4.7.7 症状 前台应用打开页面时一直卡住,应用日志提示连接池爆满,数据库连接超时的错。 问题原因 连接应用的的会话数超出默认…

作者头像 李华
网站建设 2026/5/12 4:26:16

22、调试与错误处理全解析

调试与错误处理全解析 1. 断点设置与属性 1.1 打开断点窗口 在调试过程中,设置断点是一项重要的操作。可以通过以下三种方式打开断点窗口: - 按下 Ctrl - Alt - B 。 - 从 Debug ➝ Windows 菜单命令中选择 Breakpoints 。 - 点击调试工具栏的 Windows 图标并选…

作者头像 李华
网站建设 2026/5/12 4:26:57

23、错误处理、调试与网站安全个性化设置

错误处理、调试与网站安全个性化设置 1. 错误处理与调试 在开发过程中,错误处理和调试是确保应用程序稳定运行的关键环节。 1.1 自定义错误页面 为了给用户更好的体验,我们可以自定义错误页面。具体操作如下: - 在 web.config 文件的 <customErrors> 部分添加…

作者头像 李华
网站建设 2026/5/14 3:12:06

29、ASP.NET 购物车与购买流程实现

ASP.NET 购物车与购买流程实现 在构建一个完整的 ASP.NET 购物网站时,购物车、购买页面、确认页面以及自定义错误页面是不可或缺的部分。下面将详细介绍这些页面的实现过程。 1. 购物车页面 购物车页面用于展示用户添加到购物车中的商品信息,并且提供移除商品和进入购买页…

作者头像 李华