Traefik v2 反向代理到 Docker 之外的本地服务器
Traefik v2 reverse proxy to a local server outside Docker
我有一个用 Python 编写的简单服务器,它在专用网络(HTTP 通信)内侦听端口 8000。现在需要切换到 HTTPS 通信,每个向服务器发送请求的客户端都应该使用他自己的 cert/key 对进行身份验证。
我决定使用 Traefik v2 来完成这项工作。 Please see the block diagram.
Traefik 在 IP 为 192.168.56.101 的主机上作为 Docker 图像运行。首先,我想简单地将来自客户端的 HTTP 请求转发到 Traefik,然后转发到端口 8000 上 Docker 之外的 Python 服务器 运行。当转发是 运行 正确。
但是,我不知道如何配置 Traefik 来反向代理,即从 192.168.56.101/notify?wrn=1
到 Python 服务器 127.0.0.1:8000/notify?wrn=1
。
当我尝试将上述请求发送到服务器 (curl "192.168.56.101/notify?wrn=1"
) 时,我收到“Bad Gateway”作为答复。我在这里错过了什么?这是我第一次接触Docker和反向proxy/Traefik。我相信它与端口有关,但我无法弄清楚。
这是我的 Traefik 配置:
- docker-compose.yml
version: "3.3"
services:
traefik:
image: "traefik:v2.1"
container_name: "traefik"
hostname: "traefik"
ports:
- "80:80"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./traefik.yml:/traefik.yml:ro"
- traefik.yml
## STATIC CONFIGURATION
log:
level: INFO
api:
insecure: true
dashboard: true
entryPoints:
web:
address: ":80"
providers:
docker:
watch: true
endpoint: "unix:///var/run/docker.sock"
file:
filename: "traefik.yml"
## DYNAMIC CONFIGURATION
http:
routers:
to-local-ip:
rule: "Host(`192.168.56.101`)"
service: to-local-ip
entryPoints:
- web
services:
to-local-ip:
loadBalancer:
servers:
- url: "http://127.0.0.1:8000"
首先,127.0.0.1 将解析为 traefik 容器,而不是 docker 主机。您需要提供节点的私有 IP,并且需要可以从 traefik 容器访问它。
有一些解决方法可以代理本地主机:
将 127.0.0.1 更改为 docker0 接口的 IP
应该是 172.17.0.1
然后尝试在所有接口 (0.0.0.0) 上监听您的 python 服务器
如果你使用简单的 python http 服务器没有任何改变......默认情况下它会监听所有接口
我有一个用 Python 编写的简单服务器,它在专用网络(HTTP 通信)内侦听端口 8000。现在需要切换到 HTTPS 通信,每个向服务器发送请求的客户端都应该使用他自己的 cert/key 对进行身份验证。
我决定使用 Traefik v2 来完成这项工作。 Please see the block diagram.
Traefik 在 IP 为 192.168.56.101 的主机上作为 Docker 图像运行。首先,我想简单地将来自客户端的 HTTP 请求转发到 Traefik,然后转发到端口 8000 上 Docker 之外的 Python 服务器 运行。当转发是 运行 正确。
但是,我不知道如何配置 Traefik 来反向代理,即从 192.168.56.101/notify?wrn=1
到 Python 服务器 127.0.0.1:8000/notify?wrn=1
。
当我尝试将上述请求发送到服务器 (curl "192.168.56.101/notify?wrn=1"
) 时,我收到“Bad Gateway”作为答复。我在这里错过了什么?这是我第一次接触Docker和反向proxy/Traefik。我相信它与端口有关,但我无法弄清楚。
这是我的 Traefik 配置:
- docker-compose.yml
version: "3.3"
services:
traefik:
image: "traefik:v2.1"
container_name: "traefik"
hostname: "traefik"
ports:
- "80:80"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./traefik.yml:/traefik.yml:ro"
- traefik.yml
## STATIC CONFIGURATION
log:
level: INFO
api:
insecure: true
dashboard: true
entryPoints:
web:
address: ":80"
providers:
docker:
watch: true
endpoint: "unix:///var/run/docker.sock"
file:
filename: "traefik.yml"
## DYNAMIC CONFIGURATION
http:
routers:
to-local-ip:
rule: "Host(`192.168.56.101`)"
service: to-local-ip
entryPoints:
- web
services:
to-local-ip:
loadBalancer:
servers:
- url: "http://127.0.0.1:8000"
首先,127.0.0.1 将解析为 traefik 容器,而不是 docker 主机。您需要提供节点的私有 IP,并且需要可以从 traefik 容器访问它。
有一些解决方法可以代理本地主机: 将 127.0.0.1 更改为 docker0 接口的 IP 应该是 172.17.0.1
然后尝试在所有接口 (0.0.0.0) 上监听您的 python 服务器 如果你使用简单的 python http 服务器没有任何改变......默认情况下它会监听所有接口