我在 traefik 反向代理后面运行一堆服务。我已经测试了这些服务,它们工作得很好。问题是当涉及到 traefik 时,无论我与它们交互时都会出现间歇性 404 错误。
其中一项服务公开了一个漂亮而简单的 REST api。消费代码必须重试所有请求。这是可控的。
其中一项服务公开了一个前端:如果我想使用前端,我必须不断刷新页面。这是一个真正令人敬畏的用户体验。
以下是我的撰写文件中的一些示例:
version: "2.1"
services:
reverse-proxy:
image: traefik:v2.2
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "8081:80"
- "8082:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
api_service:
image: its_just_a_flask_app
labels:
- "traefik.enable=true"
- "traefik.http.routers.configrouter1.rule=PathPrefix(`/config_backend/`) && (Method(`GET`) || Method(`POST`))"
- "traefik.http.routers.configrouter1.middlewares=config-backend-auth@docker"
- "traefik.http.middlewares.config-backend-auth.basicauth.usersfile=/config/usersfile"
webserver:
image: puckel/docker-airflow:with_a_few_lil_tweaks
restart: always
depends_on:
- postgres # these exist and work fine
- redis
environment:
- LOAD_EX=n
- FERNET_KEY=stuff=
- EXECUTOR=Celery
- AIRFLOW__WEBSERVER__BASE_URL=http://webserver/airflow
volumes:
- ../orchistrator/dags/:/usr/local/airflow/dags
- ./requirements.txt:/requirements.txt
command: webserver
healthcheck:
test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
interval: 30s
timeout: 30s
retries: 3
labels:
- "traefik.enable=true"
- "traefik.http.routers.aurflowrouter.rule=PathPrefix(`/airflow`)"
- "traefik.http.routers.aurflowrouter.middlewares=airflow-basic-auth@docker"
- "traefik.http.middlewares.airflow-basic-auth.basicauth.usersfile=/config/usersfile"
- traefik.http.services.my-service.loadbalancer.server.port=8080
- 如您所见,这两个都使用基本身份验证。删除身份验证无效
- 删除网络服务器的健康检查没有效果
- 对api_service进行api调用时,第一次调用经常失败,第二次调用总是成功
- 访问气流前端时:第一页加载失败,之后成功。
- 在触发 POST 的气流前端有一个按钮。POST 返回一个 302 Found,然后重定向总是首先给我一个 404
- 有时 Web 前端加载,但它所依赖的静态资源不加载,导致网站丑陋且无法使用。所以我发现自己经常刷新页面
我在这里不知所措。任何帮助将不胜感激。
我尝试过的 Traefik 标签:
到目前为止,我收到或发现的唯一建议是关于使用旧标签或新标签,这就是我发现的
image: traefik:v2.2
image: traefik:v2.2.1
image: traefik:v2.2.5
image: traefik:latest