关于健康检查的一些细节问题

来源:1-4 go集成consul

drper

2023-04-04 22:51:25

check.HTTP = fmt.Sprintf("http://%s:%d/v1/base/health", addr, port)

①这个心跳检查地址,是consul定时发送请求到health接口然后根据请求返回的状态码来判断请求是否存活吗

②我是在云服务器的docker搭建的consul,如果第一个问题的答案是我说的这种情况,那用户服务的ip和这个心跳地址的ip是不是都应该配置为本地的127.0.0.1或者是本地的主机ip,因为用户服务是在本地,health接口也是在本地。

在视频中有特意说到,如果使用容器部署consul,健康检查地址的ip要填写虚拟机的ip,这个是为什么呢,我的health健康检查接口在本地,为什么要填写虚拟机的ip


③下图是我使用的云服务器通过内网穿透请求的本地health接口模拟健康检查,请求是成功的,如果健康检查是consul请求health接口,可为什么我自己请求成功,consul健康检查却失败


https://img.mukewang.com/climg/642c37020999323512130108.jpg


https://img.mukewang.com/climg/642c374a09a7c9a515090106.jpg


https://img.mukewang.com/climg/642c385e092efbef15940232.jpg


麻烦老师解答一下我的这些问题,谢谢老师

写回答

1回答

bobby

2023-04-06

  1. 第一点是对的

  2. 第二点不能是127.0.0.1,这个要深究原因的话你得去理解一下docker的网络, 容器中是一个隔离的网络环境,除非你的consul和服务是在同一个docker容器网络环境中,否则consul的docker和服务器的服务就是在不同的两个隔离网络中, 服务器可以直接通过127.0.0.1:consul端口来访问consul,但是consul中无法通过127.0.0.1来访问服务器,更别说访问另一个docker的服务了,建议深入理解一下docker的网络原理

0
hobby
回复
hrper
hp>这些问题k8s都解决了,不是问题,自己解决当然没法, k8s的网络管理里面都没有问题,只需要根据后面的k8s章节部署即可

h023-04-07
共2条回复

Go开发工程师

未来3-5年企业高性能项目不可替代的语言,从基础到项目实战再到重构,真正从入门到精通

508 学习 · 577 问题

查看课程