我使用领事作为SD,当我运行多个实例时,我希望让网关识别它们,以实现负载平衡。在Krakend config硬编码主机的情况下,一切正常工作。
我一步一步地用这个:https://www.krakend.io/docs/backends/service-discovery/
发送
dig @127.0.0.1 -p 8600用户-ms.service.consuersrv也给出了响应(在领事日志上,a还看到我提出了请求)
但是当我通过krakenD提出请求时,我得到的是“没有主机可用”,根据日志,请求没有发送给领事
下面是一个坞-撰写文件:
services:
postgres:
image: postgres:13
restart: 'always'
environment:
- POSTGRES_DB=user-db
- POSTGRES_PASSWORD=password
- POSTGRES_USER=user
ports:
- "5432:5432"
consul:
image: consul:latest
restart: 'always'
ports:
- '8500:8500'
- '8600:8600/tcp'
- '8600:8600/udp'
krakend_gateway:
image: devopsfaith/krakend:2
volumes:
- ./krakend.json:/krakend.json
ports:
- "1234:1234"
- "8080:8080"
- "8090:8090"
command: [ "run", "-d", "-c", "/krakend.json" ]
user-ms:
build: user-ms/
platform: linux/arm64
restart: 'always'
depends_on: [consul-server , krakend_gateway]
ports:
- '8082'和非常简单的Krakend.json配置文件
{
"version": 3,
"timeout": "3000ms",
"cache_ttl": "300s",
"host" : "localhost:8080",
"endpoints": [
{
"endpoint": "/users",
"backend": [
{
"url_pattern": "/api/v1/users",
"sd" : "dns",
"host" : [
"user-ms.service.consul.srv"
],
"disable_host_sanitize": true
}
]
}
]
}我已经尝试了很多事情,但仍然得到了相同的反应,将很高兴在这方面的任何帮助。谢谢
发布于 2022-03-22 17:59:07
当我通过krakenD提出请求时,我得到的是“没有主机可用”,根据日志,请求没有发送给领事
您的请求失败的原因是领事的DNS服务器监听非标准端口8600。Kraken似乎不支持配置自定义DNS IP和非标准端口.它在/etc/resolv.conf解析SRV请求中使用底层主机的配置名称服务器,并期望这些It可以通过端口53到达。
下面是一个Docker文件,它包含以下更改,以允许Kraken解析针对领事的DNS。
# docker-compose.yaml
---
services:
postgres:
image: postgres:13
restart: 'always'
environment:
- POSTGRES_DB=user-db
- POSTGRES_PASSWORD=password
- POSTGRES_USER=user
ports:
- "5432:5432"
networks:
- vpcbr
consul:
image: consul:latest
restart: 'always'
environment:
CONSUL_LOCAL_CONFIG: |
{
"recursors": [
"8.8.8.8",
"8.8.4.4"
],
"dns_config": {
"recursor_strategy": "random"
},
"ports": {
"dns": 53
},
"services": [
{
"name": "user-ms",
"address": "192.0.2.20",
"port": 8082
}
]
}
networks:
vpcbr:
ipv4_address: 192.0.2.10
ports:
- '8500:8500'
- '8600:53/tcp'
- '8600:53/udp'
krakend_gateway:
image: devopsfaith/krakend:2
command: [ "run", "-d", "-c", "/krakend.json" ]
dns: 192.0.2.10
volumes:
- ./krakend.json:/krakend.json
ports:
- "1234:1234"
- "8080:8080"
- "8090:8090"
networks:
- vpcbr
user-ms:
build: user-ms/
platform: linux/arm64
restart: 'always'
depends_on: [consul, krakend_gateway]
networks:
vpcbr:
ipv4_address: 192.0.2.20
ports:
- '8082'
networks:
vpcbr:
driver: bridge
ipam:
config:
- subnet: 192.0.2.0/24码头工人组成变动
vpcbr上,IP范围为192.0.2.0/24。这样就可以将静态IP分配给领事容器。consul容器已从vpcbr网络获得192.0.2.10的静态IP。vpcbr获得动态IP。krakend_gateway容器已被配置为使用192.0.2.10 (领事)进行上游DNS解析。领事变更
user-ms服务的静态注册。或者,您可以使用像登记员这样的程序动态地从Docker注册容器到领事。.consul TLD的DNS查询。Kraken变化
.srv后缀,因为领事只处理.consul顶级域中的记录查询。{
"version": 3,
"timeout": "3000ms",
"cache_ttl": "300s",
"host": "localhost:8080",
"endpoints": [
{
"endpoint": "/users",
"backend": [
{
"url_pattern": "/api/v1/users",
"sd": "dns",
"host": [
"user-ms.service.consul"
],
"disable_host_sanitize": true
}
]
}
]
}使用此配置,我可以看到Kraken成功地解决了针对Consul的user-ms.service.consul域。
https://stackoverflow.com/questions/71561045
复制相似问题