consul 的安装与服务发现

发布于:2025-07-15 ⋅ 阅读:(16) ⋅ 点赞:(0)

1. helm 安装 consul 到 k8s

安装放在这里了:https://github.com/lianan2/installation/tree/master/consul-helm

consul 的常用命令:

# 查看集群状态
kubectl -n consul exec -it consul-server-0 -- consul operator raft list-peers
kubectl -n consul exec -it consul-server-0 -- consul members

# 查看service状态
kubectl -n consul get endpoints consul-server

# 测试dns
kubectl -n consul exec -it consul-server-0 -- nslookup consul-server.consul.svc.cluster.local

2. 服务注册

(1) 手动注册一个服务

kubectl -n consul exec consul-server-0 -- consul services register \
  -id="test-service-10.119.0.210-8080" \
  -name="test-service" \
  -address="10.119.0.210" \
  -port=8080 \
  -tag="test"

如果要通过 consul api 注册则是用:“github.com/hashicorp/consul/api”,可以看文档:Consul | Golang 中文文档-服务注册与发现

(2) 查看注册的服务信息

# 查看所有
kubectl -n consul exec -it consul-server-0 -- consul catalog services
# 查看某个服务
kubectl -n consul exec -it consul-server-0 -- curl http://127.0.0.1:8500/v1/catalog/service/test-service?pretty

(3) 注销服务

kubectl -n consul exec consul-server-0 -- consul services deregister -id=test-service-10.119.0.210-8080

3. 服务发现

服务注册好之后,就就可以以下地址访问:

<consul-agent>:8500/<service-name>

比如我的服务发现者使用的是 go-zero 框架,通过 consul 服务发现访问 test-service 这个 grpc 服务。

服务的 yaml 配置:

TestRpcConf:
  Target: consul://consul-server.consul.svc.cluster.local:8500/test-service?wait=3s

同时需要在代码里引用服务发现驱动,比如:

import "google.golang.org/grpc/resolver"

也可以使用自定义的驱动。

4. (可选) 配置 consul dns 

可以将 consul dns 配置到 coredns 中,就可以直接通过 dns 访问服务了。

(1) 查看 consul dns 的 ClusterIP

$ kubectl -n consul get svc consul-dns
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)         AGE
consul-dns   ClusterIP   10.98.197.1   <none>        53/TCP,53/UDP   109d

记下 consul-dns 的 IP

(2) 配置 kube coredns

# 编辑 coredns 的 configmap
kubectl -n kube-system edit configmap coredns 

# 在 .:53 的同级添加如下配置
    consul:53 {
      errors
      cache 30
      forward . 10.98.197.1   # consul-dns 的 IP
    }

# 重启coredns
kubectl -n kube-system rollout restart deployment coredns

(3) 通过 dns 访问

这是就可以直接访问:

<注册的服务名>.service.consul:<服务端口号>

比如:

test-service.service.consul:8080

可以通过这个地址直接访问我的 grpc 服务:

# 进入任意一个 pod 
kubectl -n my-apps exec -it simple-server-548cc95f6f-d945z — sh

# 调用 grpc 服务
grpcurl --plaintext test-service.service.consul:8080 list


网站公告

今日签到

点亮在社区的每一天
去签到