运行步骤:
1.后端服务启动,根据注册中心consul的地址(1.1.1.1:8500),将自己注册到注册中心
2.客户端访问域名,根据解析找到kong网关地址(2.2.2.2:8000)
3.kong网关根据客户端传过来的服务名匹配到对应的Routes,再根据Routes找到对应的Service details
4.然后拿着Service details里面配置Host,去找consul地址(1.1.1.1:8600)
5.根据名称查询consul的dns表,进而找到对应的ip+端口
6.找到对应的服务,然后通信
配置完成后可通过dig测试
dig @172.16.0.17 -p 8600 media-http.service.consul
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> @172.16.0.17 -p 8600 media-http.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54731
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;media-http.service.consul. IN A
;; ANSWER SECTION:
media-http.service.consul. 0 IN A 192.168.0.2
media-http.service.consul. 0 IN A 192.168.0.14
;; Query time: 1 msec
;; SERVER: 172.16.0.17#8600(172.16.0.17)
;; WHEN: Mon May 09 15:35:36 CST 2022
;; MSG SIZE rcvd: 86
我这边启动了两个pod副本,所以查到两个ip地址
media-http.service.consul. 0 IN A 192.168.0.2
media-http.service.consul. 0 IN A 192.168.0.14
kubectl get pod -n kube-public -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
media-bc5445687-dsfxx 1/1 Running 0 47h 192.168.0.2 172.16.0.42 <none> <none>
media-bc5445687-hg6zt 1/1 Running 0 2d22h 192.168.0.14 172.16.0.42 <none> <none>
命令解释:
dig: dns解析查询命令,没有可通过yum install bind-utils下载
@172.16.1.30: consul地址
-p 8600: consul端口
media-http: 服务启动后注册到consul的名称
.service.consul: 固定写法