【发布时间】:2018-07-29 15:07:42
【问题描述】:
Traefik 的傻瓜问题。我正在尝试使用 traefik 作为反向代理使用 docker compose 设置 Spring Cloud 微服务。
我的目标是微服务应该通过服务名称(例如:service-registry-app)相互通信,并且 traefik 应该将其解析为 IP 地址。一旦这在本地机器中运行,我想将其扩展为在 AWS ECS 上运行。
我使用
创建了 ana_networkdocker network create ana_network
traefik 配置:
文件:docker-compose.yml
version: '2'
services:
proxy:
image: traefik
command: --api --docker --docker.domain=docker.localhost --logLevel=DEBUG
networks:
- ana_network
ports:
- "80:80"
- "8080:8080"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /dev/null:/traefik.toml
networks:
ana_network:
driver: bridge
微服务配置:
文件:docker-compose.yml
version: '2'
services:
service-registry:
image: sqshq/piggymetrics-registry
restart: always
networks:
- web
expose:
- "8761"
labels:
- "traefik.backend=service-registry-app"
- "traefik.frontend.rule=Host:service-registry-app.example.com"
environment:
CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD
config-server:
image: sqshq/piggymetrics-config
restart: always
networks:
- web
expose:
- "8888"
depends_on:
- service-registry
environment:
EUREKA_HOST: service-registry-app.example.com
EUREKA_PORT: 8761
CONFIG_SERVICE_PASSWORD: $CONFIG_SERVICE_PASSWORD
labels:
- "traefik.backend=config-server-app"
- "traefik.frontend.rule=Host:config-server-app.example.com"
networks:
web:
external:
name: ana_network
我可以使用 curl 访问服务注册表应用程序
curl -H Host:service-registry-app.example.com http://172.21.0.2:8761
但配置服务器和 api 网关无法通过 docker compose 和 traefik 访问上述配置的服务注册表。
为了使所有微服务能够相互发现,我需要做哪些更改以及如何扩展它以使其在 ECS 上工作?
编辑1:
更正了将网络部分从服务移动到网络的缩进,这是一个错字。
我是容器和分布式系统的新手,因此我可能会问一些幼稚的明显问题,因此如果任何 traefik for dummies 会非常有帮助,那就太好了。
以下是我目前面临的两个问题,
1) 容器到容器的通信 - 示例,容器 2(本例中的配置服务器)应如何通过服务名称(如服务注册表)或任何其他方式与容器 1(服务注册表)进行通信以及如何访问这些来自外部世界的容器(在这种情况下是服务注册表)?
2) 扩展它以使其在 ECS 中工作,因此每个都将有自己的任务定义并在 ECS 集群内作为服务运行 - 在这种情况下,容器应如何使用 traefik 相互通信?
【问题讨论】:
-
第二个撰写文件末尾的网页部分是什么?看起来您想定义一个网络,但定义了一个服务。
-
谢谢指出。在这里输入时输入错误。仍然面临同样的问题,我已经更新了我的问题。
标签: docker docker-compose amazon-ecs netflix-eureka traefik