consul - 如何将 Kong 与 DNS_RESOLVER 一起使用?
问题描述
我正在将 Kong 与 docker 一起使用,当我在没有“DNS_RESOLVER”的情况下开始时,它工作正常,这是命令
docker run -d --name kong --network=kong-net /
-e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" /
-e "KONG_PG_USER=kong" -e "KONG_PG_PASSWORD=kong" /
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" /
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" -p 8000:8000 -p 8443:8443 -p 8001:8001 -p 8444:8444 kong:1.4.3-alpine
我想在 consul 中使用 Kong,我发现我应该添加-e "KONG_DNS_RESOLVER=10.114.205.170:8600"
到命令中。所以最后的命令是
docker run -d --name kong --network=kong-net /
-e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" /
-e "KONG_PG_USER=kong" -e "KONG_PG_PASSWORD=kong" -e "KONG_DNS_RESOLVER=10.114.205.170:8600" /
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" /
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" -p 8000:8000 -p 8443:8443 -p 8001:8001 -p 8444:8444 kong:1.4.3-alpine
10.114.205.170:8600
是领事的 DNS SERVER。
但是Kong启动错误并且错误日志是
2021/04/13 03:10:17 [crit] 41#0: *8 [lua] balancer.lua:540: could not obtain list of upstreams: [postgres] [cosocket] DNS resolution failed: dns server error: 2 server failure. Tried: ["(short)kong-database:(na) - cache-miss","kong-database:33 - cache-miss/scheduled/querying/dns server error: 2 server failure","kong-database:1 - cache-miss/scheduled/querying/dns server error: 2 server failure","kong-database:5 - cache-miss/scheduled/querying/dns server error: 2 server failure"], context: ngx.timer
...
2021/04/13 03:10:26 [error] 34#0: *253 [kong] kong.lua:42 [postgres] [cosocket] DNS resolution failed: dns server error: 2 server failure. Tried: ["(short)kong-database:(na) - cache-miss","kong-database:33 - cache-miss/scheduled/querying/dns server error: 2 server failure","kong-database:1 - cache-miss/scheduled/querying/dns server error: 2 server failure","kong-database:5 - cache-miss/scheduled/querying/dns server error: 2 server failure"], client: 172.18.0.1, server: kong_admin, request: "GET / HTTP/1.1", host: "127.0.0.1:8001"
...
2021/04/13 03:11:16 [error] 34#0: *1594 [lua] connector.lua:356: unable to clean expired rows from PostgreSQL database ([cosocket] DNS resolution failed: dns server error: 2 server failure. Tried: ["(short)kong-database:(na) - cache-miss","kong-database:33 - cache-miss/scheduled/querying/dns server error: 2 server failure","kong-database:1 - cache-miss/scheduled/querying/dns server error: 2 server failure","kong-database:5 - cache-miss/scheduled/querying/dns server error: 2 server failure"]), context: ngx.timer
我确信领事服务器工作正常。我对运行 Kong 的主机进行了 consul 查询并得到了正确的响应
root@virtual-machine:/# dig @10.114.205.170 -p 8600 RdTestServiceProxy.service.consul
; <<>> DiG 9.10.3-P4-Ubuntu <<>> @10.114.205.170 -p 8600 RdTestServiceProxy.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8122
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;RdTestServiceProxy.service.consul. IN A
;; ANSWER SECTION:
RdTestServiceProxy.service.consul. 0 IN A 10.114.205.151
;; Query time: 1 msec
;; SERVER: 10.114.205.170#8600(10.114.205.170)
;; WHEN: Tue Apr 13 13:54:45 CST 2021
;; MSG SIZE rcvd: 78
那么Kong有什么问题,如何启动Kong whit dns_resolver?
解决方案
最后我找到了解决方案。在我-e "KONG_PG_HOST=kong-database"
用作数据库主机的 docker start 命令中,它使用 docker 默认的 DNS-Server。
当我添加-e "KONG_DNS_RESOLVER=10.114.205.170:8600"
到命令时,它将替换默认的 DNS-Server,因此 Kong 找不到数据库。
作为解决方案,我们可以将数据库服务添加到 consul 中并将其用作KONG_PG_HOST=kong-database.service.consul
.
推荐阅读
- python - 在 Visual Studio 代码中调试 scikit-learn GridSearchCV 时出现 TypeError
- javascript - 将嵌套路由渲染为 VueJS 中的单个页面
- visual-studio - 以下元素缺少测试用例对象
- node.js - 为什么我在尝试获取后端时会出现此错误?
- r - R Impute DataTable 模式和小鼠
- r - 基于 selectInput() 的数据集子集始终提供具有相同行数的数据集
- node.js - 如何获取位置与输入位置匹配的用户
- asp.net-core - 在 azure app service linux 中发布 aspnet core web app
- python - 如何读取python csv中的列表列表?
- java - 从 Java 打开 TortoiseSVN GUI