Traefik入门问题。我正在尝试使用Traefik作为反向代理在Docker Compose中设置Spring Cloud微服务。
我的目标是微服务应该通过服务名称相互通信(例如:service-registry-app),而Traefik应该将其解析为IP地址。一旦这在本地环境中工作,我想扩展它以在AWS ECS上运行。
我已经创建了一个ana_network网络。
docker 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
但是使用docker compose和traefik进行配置服务器和api网关无法访问服务注册表。
我需要做哪些更改才能使所有微服务能够相互发现,并如何扩展它以使其在ECS上运行?
编辑1:
更正缩进,将网络部分从服务移动到网络中,这是一个笔误。
我是一个新手,对容器和分布式系统不太熟悉,因此我可能会问一些幼稚的问题,如果有任何针对traefik的入门指南,那将非常有帮助。
以下是我目前面临的两个问题:
1)容器之间的通信 - 例如,容器2(在本例中为配置服务器)应如何通过服务名称(如service-registry)或其他方式与容器1(service-registry)通信,并如何从外部世界访问这些容器(在本例中为服务注册表)?
2)将其扩展以使其在ECS中工作,因此每个容器都将具有自己的任务定义,并作为ECS集群内的服务运行 - 在这种情况下,容器应如何使用traefik彼此通信?