首先,如果我没有使用正确的条款来提出这个问题,我很抱歉,但我没有达到术语.
我有一个在docker容器中运行的traefik,并使用PathPrefix选项提供一些服务,例如,www.myserver.com/wordpress重定向到运行wordpress的docker容器.
但是如何让它重定向到docker容器外?具体来说,如何让www.myserver.com重定向到我的机器中的端口8080,以便为我在主机操作系统(而不是在docker容器中)中运行的服务提供服务?
这是我的traefik.toml:
logLevel = "DEBUG"
defaultEntryPoints = ["http", "https"]
[entryPoints]
[entryPoints.http]
address = ":80"
compress = false
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[acme]
email = "mymail@mail.com"
storage = "acme.json"
entryPoint = "https"
onHostRule = true
#onDemand = true
[[acme.domains]]
main = "www.myserver.com"
[web]
address = ":8888"
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "www.myserver.com"
watch = true
exposedbydefault = false
Run Code Online (Sandbox Code Playgroud)
而我docker-compose.yml的traefik容器:
version: "2"
services:
traefik:
image: traefik
network_mode: "host"
ports:
- …Run Code Online (Sandbox Code Playgroud) 所以我正在尝试使用traefik作为反向代理在docker swarm上建立一个gitlab-ce实例.
这是我的代理堆栈;
version: '3'
services:
traefik:
image: traefik:alpine
command: --entryPoints="Name:http Address::80 Redirect.EntryPoint:https" --entryPoints="Name:https Address::443 TLS" --defaultentrypoints="http,https" --acme --acme.acmelogging="true" --acme.email="freelyformd@gmail.com" --acme.entrypoint="https" --acme.storage="acme.json" --acme.onhostrule="true" --docker --docker.swarmmode --docker.domain="mydomain.com" --docker.watch --web
ports:
- 80:80
- 443:443
- 8080:8080
networks:
- traefik-net
volumes:
- /var/run/docker.sock:/var/run/docker.sock
deploy:
placement:
constraints:
- node.role == manager
networks:
traefik-net:
external: true
Run Code Online (Sandbox Code Playgroud)
还有我的gitlab堆栈
version: '3'
services:
omnibus:
image: 'gitlab/gitlab-ce:latest'
hostname: 'lab.mydomain.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://lab.mydomain.com'
nginx['listen_port'] = 80
nginx['listen_https'] = false
registry_external_url 'https://registry.mydomain.com'
registry_nginx['listen_port'] = 80
registry_nginx['listen_https'] = false …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Traefik在我的Docker Swarm模式集群中部署代理多个应用程序.
我已经得到它,以便它代理一个命名的主机,但我希望它代理一个命名的主机和路径,但我无法计算出我需要使用的标签.
这是docker service我使用的命令:
docker service create \
\
--label "traefik.port=9000" \
--label "traefik.docker.network=traefik-net" \
--label "traefik.frontend.rule=Host:`hostname -f`" \
--label="traefik.backend=portainer" \
\
--constraint "node.role == manager" \
-p 9000:9000 \
--mount "type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock" \
--name portainer \
portainer/portainer
Run Code Online (Sandbox Code Playgroud)
如果主机是,dummy.localhost那么我可以打开portainer应用程序http://dummy.localhost.但是我想修改它以便我必须使用http://dummy.localhost/portainer.
我已经看到有一些方法可以在为Traefik使用toml文件时执行此操作,但我在部署的docker服务上使用监视模式和标签.
如何在标签中组合多个前端规则,以便可以在主机名和路径上代理此(和任何其他)应用程序?
使用docker,我尝试使用HTTPS端口443设置traefik后端,因此traefik容器和app容器(apache 2.4)之间的通信将被加密.
我有一个Internal Server Error如果我激活traefik.protocol=https并traefik.port=443在我的docker容器上.此问题已在此处记录:https:
//github.com/containous/traefik/issues/2770#issuecomment-374926137
例如,完全相同的设置非常适合jwidler/nginx-proxy(在docker hub上可用的反向代理).容器上的证书(内部运行的apache 2.4)是真正签名的(我将它们安装在traefik和我的容器的apache上).如果我用https://直接请求我的apache容器...所有浏览器都说证书有效(绿色).所以容器中的证书都可以.
问题很简单:使用InsecureSkipVerify = true不安全.是否有生产能够使工作与标签的容器后端的任何解决方案traefik.protocol=https,并traefik.port=443通过使用由众所周知的机构颁发的证书(在我的情况甘地或魔岛).
谢谢.
我遇到了一些使用traefik和docker的问题,我不知道为什么.
对于某些容器,它就像魅力和其他容器一样,当我尝试访问这些容器时出错:错误的网关(错误502).
这是我的traefik.toml:
# Service logs (here debug mode)
debug = true
logLevel = "DEBUG"
defaultEntryPoints = ["http", "https"]
# Access log
filePath = "/var/log/traefik/access.log"
format = "common"
################################################################
# Web configuration backend
################################################################
[web]
address = ":8080"
################################################################
# Entry-points configuration
################################################################
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
################################################################
# Docker configuration backend
################################################################
[docker]
domain = "domain.tld"
watch = true
exposedbydefault = false
endpoint = "unix:///var/run/docker.sock"
################################################################
# Let's encrypt …Run Code Online (Sandbox Code Playgroud) 我正在寻找 Traefik 中 SSL/TLS 的推荐配置。我已经设置minVersion = "VersionTLS12"避免使用较弱的旧版本,并在 Go 中找到了支持的密码。与SSLLabs的建议进行交叉检查后,我得出了以下顺序(顺序很重要):
cipherSuites = [
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
]
Run Code Online (Sandbox Code Playgroud)
[更新] 后来与 Mozilla 的SSL Config Generator交叉检查,删除 SHA-1 并使用建议的顺序:
cipherSuites = [
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305",
"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305",
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256",
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
]
Run Code Online (Sandbox Code Playgroud)
那有意义吗?我想避免使用弱密码,但为了兼容性而包含尽可能多的强密码。
我正在使用traefik作为反向代理(以及管理letsencrypt证书),我正在运行一个自托管的gitlab实例.GitLab图像是一个单一的,包含所有服务,两个服务(Registry和Git)需要在同一个容器中提供.
通过下面显示的配置,gitlab运行良好.
docker login registry.domain.com 也在工作.
但导航到gitlab前端的注册表给了我500错误.
gitlab日志:
Errno::EADDRNOTAVAIL (Failed to open TCP connection to localhost:5000 (Cannot assign requested address - connect(2) for "localhost" port 5000)):
Run Code Online (Sandbox Code Playgroud)
在我读到的文档中,端口5000是gitlab注册表的默认值.
所以我进入gitlab容器并尝试调用localhost:5000:
$ docker exec -it gitlab /bin/bash
root@gitlab:/# curl -v http://localhost:5000
* Rebuilt URL to: http://localhost:5000/
* Trying 127.0.0.1...
* TCP_NODELAY set
* connect to 127.0.0.1 port 5000 failed: Connection refused
* Trying ::1...
* TCP_NODELAY set
* Immediate connect fail for ::1: Cannot assign requested address
* Trying ::1...
* …Run Code Online (Sandbox Code Playgroud) 我有一个由在MacOS上开发的几个Docker映像组成的应用程序,我正在尝试使其在Windows上启动。大部分似乎都在工作,但是有一个Traefik负载均衡器却没有。
在MacOS上它可以正常工作,但是在Windows上,无论我访问哪个URL,它都会给我一个404,即“未找到404页面”的实际内容。
Traefik配置如下所示:
logLevel = "INFO"
defaultEntryPoints = ["http", "https"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[entryPoints.https.tls.defaultCertificate]
certFile = "/certs/cert.pem"
keyFile = "/certs/cert.pem"
# Connection to docker host system (docker.sock)
[docker]
watch = true
domain = "localhost"
[file]
[backends]
[backends.backend-mixpanel]
[backends.backend-mixpanel.servers]
[backends.backend-mixpanel.servers.mixpanel]
url = "https://api.mixpanel.com"
weight = 10
[backends.backend-yieldify]
[backends.backend-yieldify.servers]
[backends.backend-yieldify.servers.yieldify]
url = "https://td.yieldify.com/"
weight = 0
[frontends]
[frontends.frontend-mixpanel]
backend = "backend-mixpanel"
[frontends.frontend-mixpanel.routes.one]
rule = "HostRegexp:localhost,{catchall:.*};Path:/mixpanel/{.*};PathPrefixStripRegex:/{mixpanel}"
priority=10
[frontends.frontend-yieldify]
backend = "backend-yieldify"
[frontends.frontend-yieldify.routes.two]
rule = "HostRegexp:localhost,{catchall:.*};Path:/yieldify/{.*}"
priority=0 …Run Code Online (Sandbox Code Playgroud) 我的问题是我可以路由 HTTPS 流量,但我无法将 HTTP 流量全局重定向到 HTTPS。就我而言,我只需要 HTTPS 流量,因此我想重定向所有传入流量。
目前,当我尝试通过 HTTP 提供我的 URL 时收到 404 错误。我已经在 Treafik 中启用了调试日志,但我在日志中看不到任何问题或异常内容。
此外,我在 Stackoverflow 上看到了一个非常相似的主题,但我们发现,他的错误与我的不同:如何使用 Traefik 2.0 和 Docker Compose 标签将 http 重定向到 https?
以下设置基于此处的博客条目:https : //blog.containo.us/traefik-2-0-docker-101-fc2893944b9d
我的设置
我在我的 swarm 中配置了 Traefik,如下所示:
global:
checkNewVersion: false
sendAnonymousUsage: false
api:
dashboard: true
entryPoints:
web:
address: :80
websecure:
address: :443
providers:
providersThrottleDuration: 2s
docker:
watch: true
endpoint: unix:///var/run/docker.sock
swarmMode: true
swarmModeRefreshSeconds: 15s
exposedByDefault: false
network: webgateway
log:
level: DEBUG
accessLog: {}
certificatesResolvers:
default:
acme:
email: {email} …Run Code Online (Sandbox Code Playgroud) 尝试使用 Let's Encrypt 通过 SSL 使用 Traefik 代理 PostgreSQL 时,我遇到了一个问题。我做了一些研究,但没有很好的记录,我想确认我的观察并给每个面临这种情况的人留下记录。
我使用最新版本的 PostgreSQL v12 和 Traefik v2。我想使用 Let's Encrypt从->通过 TLS构建纯 TCP 流。tcp://example.com:5432tcp://postgresql:5432
Traefik 服务配置如下:
version: "3.6"
services:
traefik:
image: traefik:latest
restart: unless-stopped
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./configuration/traefik.toml:/etc/traefik/traefik.toml:ro"
- "./configuration/dynamic_conf.toml:/etc/traefik/dynamic_conf.toml"
- "./letsencrypt/acme.json:/acme.json"
networks:
- backend
ports:
- "80:80"
- "443:443"
- "5432:5432"
networks:
backend:
external: true
Run Code Online (Sandbox Code Playgroud)
使用静态设置:
[entryPoints]
[entryPoints.web]
address = ":80"
[entryPoints.web.http]
[entryPoints.web.http.redirections.entryPoint]
to = "websecure"
scheme = "https"
[entryPoints.websecure]
address = ":443"
[entryPoints.websecure.http]
[entryPoints.websecure.http.tls] …Run Code Online (Sandbox Code Playgroud) traefik ×10
docker ×4
docker-swarm ×2
gitlab ×2
bad-gateway ×1
encryption ×1
networking ×1
postgresql ×1
proxy ×1
redirect ×1
sni ×1
ssl ×1
tcp ×1
tls1.2 ×1