consul 的安装与服务发现
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 {errorscache 30forward . 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