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