I'm having really long response times from my Traefik, it looks like it's 10 seconds too long (I see 2x 5 second freezes).
I'm using wildcard certificate from Let's Encrypt that I handle outside of Traefik.
The container runs on a macvlan network (vlan-service-network
).
Here's the docker-compose.yaml
:
version: "3"
services:
traefik:
image: traefik:v2.9
container_name: traefik
networks:
vlan-service-network:
ipv4_address: 10.2.0.131
default:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik.yaml:/etc/traefik/traefik.yaml
- ./tls.yaml:/etc/traefik/tls.yaml
- ./ssl/:/certs/
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.service=api@internal"
whoami:
image: containous/whoami
container_name: whoami
labels:
- "traefik.enable=true"
networks:
default:
driver: bridge
vlan-service-network:
external: true
tls.yaml
:
tls:
stores:
default:
defaultCertificate:
certFile: /certs/mydomain.com/fullchain.pem
keyFile: /certs/mydomain.com/privkey.pem
traefik.yaml
:
log:
level: DEBUG
api:
insecure: false
dashboard: true
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
http:
tls: true
providers:
file:
filename: /etc/traefik/tls.yaml
docker:
endpoint: unix:///var/run/docker.sock
watch: true
exposedByDefault: false
defaultRule: "HostRegexp(`{{ index .Labels \"com.docker.compose.service\"}}.mydomain.com`)"
I used time
and moreutils' ts
for the following call. Please notice the 5s delays at 03:12:26
and 03:12:31
$ time curl -svL http://whoami.mydomain.com |& ts '[%Y-%m-%d %H:%M:%.S]'
[2023-03-09 03:12:20.775811] * Trying 10.2.0.131:80...
[2023-03-09 03:12:20.776229] * Connected to whoami.mydomain.com (10.2.0.131) port 80 (#0)
[2023-03-09 03:12:20.776238] > GET / HTTP/1.1
[2023-03-09 03:12:20.776245] > Host: whoami.mydomain.com
[2023-03-09 03:12:20.776252] > User-Agent: curl/7.86.0
[2023-03-09 03:12:20.776258] > Accept: */*
[2023-03-09 03:12:20.776265] >
[2023-03-09 03:12:26.096582] * Mark bundle as not supporting multiuse
[2023-03-09 03:12:26.096890] < HTTP/1.1 301 Moved Permanently
[2023-03-09 03:12:26.096942] < Location: https://whoami.mydomain.com/
[2023-03-09 03:12:26.096983] < Date: Thu, 09 Mar 2023 02:12:26 GMT
[2023-03-09 03:12:26.097200] < Content-Length: 17
[2023-03-09 03:12:26.097394] < Content-Type: text/plain; charset=utf-8
[2023-03-09 03:12:26.097484] <
[2023-03-09 03:12:26.097530] * Ignoring the response-body
[2023-03-09 03:12:26.097571] { [17 bytes data]
[2023-03-09 03:12:26.097610] * Connection #0 to host whoami.mydomain.com left intact
[2023-03-09 03:12:26.097649] * Clear auth, redirects to port from 80 to 443
[2023-03-09 03:12:26.097686] * Issue another request to this URL: 'https://whoami.mydomain.com/'
[2023-03-09 03:12:26.104533] * Trying 10.2.0.131:443...
[2023-03-09 03:12:26.108736] * Connected to whoami.mydomain.com (10.2.0.131) port 443 (#1)
[2023-03-09 03:12:26.108904] * ALPN: offers h2
[2023-03-09 03:12:26.108915] * ALPN: offers http/1.1
[2023-03-09 03:12:26.111731] * CAfile: /etc/ssl/cert.pem
[2023-03-09 03:12:26.111761] * CApath: none
[2023-03-09 03:12:26.112060] * (304) (OUT), TLS handshake, Client hello (1):
[2023-03-09 03:12:26.112111] } [325 bytes data]
[2023-03-09 03:12:31.669751] * (304) (IN), TLS handshake, Server hello (2):
[2023-03-09 03:12:31.669809] { [122 bytes data]
[2023-03-09 03:12:31.669818] * (304) (IN), TLS handshake, Unknown (8):
[2023-03-09 03:12:31.669854] { [15 bytes data]
[2023-03-09 03:12:31.669870] * (304) (IN), TLS handshake, Certificate (11):
[2023-03-09 03:12:31.669954] { [4030 bytes data]
[2023-03-09 03:12:31.670697] * (304) (IN), TLS handshake, CERT verify (15):
[2023-03-09 03:12:31.670711] { [264 bytes data]
[2023-03-09 03:12:31.670861] * (304) (IN), TLS handshake, Finished (20):
[2023-03-09 03:12:31.670882] { [36 bytes data]
[2023-03-09 03:12:31.670894] * (304) (OUT), TLS handshake, Finished (20):
[2023-03-09 03:12:31.670903] } [36 bytes data]
[2023-03-09 03:12:31.670910] * SSL connection using TLSv1.3 / AEAD-CHACHA20-POLY1305-SHA256
[2023-03-09 03:12:31.670917] * ALPN: server accepted h2
[2023-03-09 03:12:31.670925] * Server certificate:
[2023-03-09 03:12:31.670932] * subject: CN=*.mydomain.com
[2023-03-09 03:12:31.670939] * start date: Jan 15 17:44:15 2023 GMT
[2023-03-09 03:12:31.670945] * expire date: Apr 15 17:44:14 2023 GMT
[2023-03-09 03:12:31.670952] * subjectAltName: host "whoami.mydomain.com" matched cert's "*.mydomain.com"
[2023-03-09 03:12:31.670959] * issuer: C=US; O=Let's Encrypt; CN=R3
[2023-03-09 03:12:31.670966] * SSL certificate verify ok.
[2023-03-09 03:12:31.670974] * Using HTTP2, server supports multiplexing
[2023-03-09 03:12:31.670981] * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
[2023-03-09 03:12:31.670989] * h2h3 [:method: GET]
[2023-03-09 03:12:31.670995] * h2h3 [:path: /]
[2023-03-09 03:12:31.671002] * h2h3 [:scheme: https]
[2023-03-09 03:12:31.671009] * h2h3 [:authority: whoami.mydomain.com]
[2023-03-09 03:12:31.671016] * h2h3 [user-agent: curl/7.86.0]
[2023-03-09 03:12:31.671023] * h2h3 [accept: */*]
[2023-03-09 03:12:31.671030] * Using Stream ID: 1 (easy handle 0x145813600)
[2023-03-09 03:12:31.671394] > GET / HTTP/2
[2023-03-09 03:12:31.671418] > Host: whoami.mydomain.com
[2023-03-09 03:12:31.671427] > user-agent: curl/7.86.0
[2023-03-09 03:12:31.671435] > accept: */*
[2023-03-09 03:12:31.671443] >
[2023-03-09 03:12:31.676028] * Connection state changed (MAX_CONCURRENT_STREAMS == 250)!
[2023-03-09 03:12:31.679922] < HTTP/2 200
[2023-03-09 03:12:31.679992] < content-type: text/plain; charset=utf-8
[2023-03-09 03:12:31.680014] < date: Thu, 09 Mar 2023 02:12:31 GMT
[2023-03-09 03:12:31.680033] < content-length: 363
[2023-03-09 03:12:31.680052] <
[2023-03-09 03:12:31.680078] { [363 bytes data]
[2023-03-09 03:12:31.680097] * Connection #1 to host whoami.mydomain.com left intact
[2023-03-09 03:12:31.680116] Hostname: a05f0195a181
[2023-03-09 03:12:31.680135] IP: 127.0.0.1
[2023-03-09 03:12:31.680155] IP: 172.20.0.5
[2023-03-09 03:12:31.680174] RemoteAddr: 172.20.0.6:51452
[2023-03-09 03:12:31.680192] GET / HTTP/1.1
[2023-03-09 03:12:31.680211] Host: whoami.mydomain.com
[2023-03-09 03:12:31.680229] User-Agent: curl/7.86.0
[2023-03-09 03:12:31.680248] Accept: */*
[2023-03-09 03:12:31.680266] Accept-Encoding: gzip
[2023-03-09 03:12:31.680285] X-Forwarded-For: 10.0.0.101
[2023-03-09 03:12:31.680303] X-Forwarded-Host: whoami.mydomain.com
[2023-03-09 03:12:31.680320] X-Forwarded-Port: 443
[2023-03-09 03:12:31.680338] X-Forwarded-Proto: https
[2023-03-09 03:12:31.680357] X-Forwarded-Server: 6978e800d4c9
[2023-03-09 03:12:31.680376] X-Real-Ip: 10.0.0.101
[2023-03-09 03:12:31.680396]
real 0m10.926s
user 0m0.021s
sys 0m0.014s
Here's the log from traefik's container:
time="2023-03-09T02:11:30Z" level=info msg="Configuration loaded from file: /etc/traefik/traefik.yaml"
time="2023-03-09T02:11:30Z" level=info msg="Traefik version 2.9.8 built on 2023-02-15T15:23:25Z"
time="2023-03-09T02:11:30Z" level=debug msg="Static configuration loaded {\"global\":{\"checkNewVersion\":true},\"serversTransport\":{\"maxIdleConnsPerHost\":200},\"entryPoints\":{\"web\":{\"address\":\":80\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":\"10s\"},\"respondingTimeouts\":{\"idleTimeout\":\"3m0s\"}},\"forwardedHeaders\":{},\"http\":{\"redirections\":{\"entryPoint\":{\"to\":\"websecure\",\"scheme\":\"https\",\"permanent\":true,\"priority\":2147483646}}},\"http2\":{\"maxConcurrentStreams\":250},\"udp\":{\"timeout\":\"3s\"}},\"websecure\":{\"address\":\":443\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":\"10s\"},\"respondingTimeouts\":{\"idleTimeout\":\"3m0s\"}},\"forwardedHeaders\":{},\"http\":{\"tls\":{}},\"http2\":{\"maxConcurrentStreams\":250},\"udp\":{\"timeout\":\"3s\"}}},\"providers\":{\"providersThrottleDuration\":\"2s\",\"docker\":{\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"HostRegexp(`{{ index .Labels \\\"com.docker.compose.service\\\"}}.mydomain.com`)\",\"swarmModeRefreshSeconds\":\"15s\"},\"file\":{\"watch\":true,\"filename\":\"/etc/traefik/tls.yaml\"}},\"api\":{\"dashboard\":true},\"log\":{\"level\":\"DEBUG\",\"format\":\"common\"}}"
time="2023-03-09T02:11:30Z" level=info msg="\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://doc.traefik.io/traefik/contributing/data-collection/\n"
time="2023-03-09T02:11:30Z" level=info msg="Starting provider aggregator aggregator.ProviderAggregator"
time="2023-03-09T02:11:30Z" level=debug msg="Starting TCP Server" entryPointName=web
time="2023-03-09T02:11:30Z" level=debug msg="Starting TCP Server" entryPointName=websecure
time="2023-03-09T02:11:30Z" level=info msg="Starting provider *file.Provider"
time="2023-03-09T02:11:30Z" level=debug msg="*file.Provider provider configuration: {\"watch\":true,\"filename\":\"/etc/traefik/tls.yaml\"}"
time="2023-03-09T02:11:30Z" level=info msg="Starting provider *traefik.Provider"
time="2023-03-09T02:11:30Z" level=debug msg="*traefik.Provider provider configuration: {}"
time="2023-03-09T02:11:30Z" level=info msg="Starting provider *docker.Provider"
time="2023-03-09T02:11:30Z" level=debug msg="*docker.Provider provider configuration: {\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"HostRegexp(`{{ index .Labels \\\"com.docker.compose.service\\\"}}.mydomain.com`)\",\"swarmModeRefreshSeconds\":\"15s\"}"
time="2023-03-09T02:11:30Z" level=info msg="Starting provider *acme.ChallengeTLSALPN"
time="2023-03-09T02:11:30Z" level=debug msg="*acme.ChallengeTLSALPN provider configuration: {}"
time="2023-03-09T02:11:30Z" level=debug msg="Configuration received: {\"http\":{},\"tcp\":{},\"udp\":{},\"tls\":{\"stores\":{\"default\":{}}}}" providerName=file
time="2023-03-09T02:11:30Z" level=debug msg="Configuration received: {\"http\":{\"routers\":{\"web-to-websecure\":{\"entryPoints\":[\"web\"],\"middlewares\":[\"redirect-web-to-websecure\"],\"service\":\"noop@internal\",\"rule\":\"HostRegexp(`{host:.+}`)\",\"priority\":2147483646}},\"services\":{\"api\":{},\"dashboard\":{},\"noop\":{}},\"middlewares\":{\"redirect-web-to-websecure\":{\"redirectScheme\":{\"scheme\":\"https\",\"port\":\"443\",\"permanent\":true}}},\"models\":{\"websecure\":{\"tls\":{}}},\"serversTransports\":{\"default\":{\"maxIdleConnsPerHost\":200}}},\"tcp\":{},\"udp\":{},\"tls\":{}}" providerName=internal
time="2023-03-09T02:11:30Z" level=debug msg="Added outgoing tracing middleware noop@internal" entryPointName=web middlewareName=tracing middlewareType=TracingForwarder routerName=web-to-websecure@internal
time="2023-03-09T02:11:30Z" level=debug msg="Creating middleware" entryPointName=web routerName=web-to-websecure@internal middlewareName=redirect-web-to-websecure@internal middlewareType=RedirectScheme
time="2023-03-09T02:11:30Z" level=debug msg="Setting up redirection to https 443" entryPointName=web routerName=web-to-websecure@internal middlewareName=redirect-web-to-websecure@internal middlewareType=RedirectScheme
time="2023-03-09T02:11:30Z" level=debug msg="Creating middleware" entryPointName=web middlewareName=traefik-internal-recovery middlewareType=Recovery
time="2023-03-09T02:11:30Z" level=debug msg="Provider connection established with docker 23.0.1 (API 1.42)" providerName=docker
time="2023-03-09T02:11:30Z" level=debug msg="Configuration received: {\"http\":{\"routers\":{\"traefik\":{\"service\":\"api@internal\",\"rule\":\"HostRegexp(`traefik.mydomain.com`)\"},\"whoami-services\":{\"service\":\"whoami-services\",\"rule\":\"HostRegexp(`whoami.mydomain.com`)\"}},\"services\":{\"traefik-services\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://172.20.0.6:80\"}],\"passHostHeader\":true}},\"whoami-services\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://172.20.0.5:80\"}],\"passHostHeader\":true}}}},\"tcp\":{},\"udp\":{}}" providerName=docker
time="2023-03-09T02:11:30Z" level=debug msg="No entryPoint defined for this router, using the default one(s) instead: [web websecure]" routerName=traefik
time="2023-03-09T02:11:30Z" level=debug msg="No entryPoint defined for this router, using the default one(s) instead: [web websecure]" routerName=whoami-services
time="2023-03-09T02:11:30Z" level=debug msg="Added outgoing tracing middleware api@internal" middlewareName=tracing entryPointName=web routerName=traefik@docker middlewareType=TracingForwarder
time="2023-03-09T02:11:30Z" level=debug msg="Creating middleware" middlewareType=Pipelining entryPointName=web routerName=whoami-services@docker serviceName=whoami-services middlewareName=pipelining
time="2023-03-09T02:11:30Z" level=debug msg="Creating load-balancer" serviceName=whoami-services entryPointName=web routerName=whoami-services@docker
time="2023-03-09T02:11:30Z" level=debug msg="Creating server 0 http://172.20.0.5:80" entryPointName=web routerName=whoami-services@docker serviceName=whoami-services serverName=0
time="2023-03-09T02:11:30Z" level=debug msg="child http://172.20.0.5:80 now UP"
time="2023-03-09T02:11:30Z" level=debug msg="Propagating new UP status"
time="2023-03-09T02:11:30Z" level=debug msg="Added outgoing tracing middleware whoami-services" entryPointName=web routerName=whoami-services@docker middlewareName=tracing middlewareType=TracingForwarder
time="2023-03-09T02:11:30Z" level=debug msg="Added outgoing tracing middleware noop@internal" routerName=web-to-websecure@internal middlewareName=tracing middlewareType=TracingForwarder entryPointName=web
time="2023-03-09T02:11:30Z" level=debug msg="Creating middleware" routerName=web-to-websecure@internal middlewareType=RedirectScheme middlewareName=redirect-web-to-websecure@internal entryPointName=web
time="2023-03-09T02:11:30Z" level=debug msg="Setting up redirection to https 443" middlewareType=RedirectScheme middlewareName=redirect-web-to-websecure@internal entryPointName=web routerName=web-to-websecure@internal
time="2023-03-09T02:11:30Z" level=debug msg="Creating middleware" middlewareName=traefik-internal-recovery middlewareType=Recovery entryPointName=web
time="2023-03-09T02:11:30Z" level=debug msg="Added outgoing tracing middleware api@internal" entryPointName=websecure routerName=websecure-traefik@docker middlewareType=TracingForwarder middlewareName=tracing
time="2023-03-09T02:11:30Z" level=debug msg="Creating middleware" middlewareName=pipelining middlewareType=Pipelining entryPointName=websecure routerName=websecure-whoami-services@docker serviceName=whoami-services
time="2023-03-09T02:11:30Z" level=debug msg="Creating load-balancer" routerName=websecure-whoami-services@docker serviceName=whoami-services entryPointName=websecure
time="2023-03-09T02:11:30Z" level=debug msg="Creating server 0 http://172.20.0.5:80" entryPointName=websecure routerName=websecure-whoami-services@docker serviceName=whoami-services serverName=0
time="2023-03-09T02:11:30Z" level=debug msg="child http://172.20.0.5:80 now UP"
time="2023-03-09T02:11:30Z" level=debug msg="Propagating new UP status"
time="2023-03-09T02:11:30Z" level=debug msg="Added outgoing tracing middleware whoami-services" middlewareType=TracingForwarder entryPointName=websecure routerName=websecure-whoami-services@docker middlewareName=tracing
time="2023-03-09T02:11:30Z" level=debug msg="Creating middleware" middlewareType=Recovery entryPointName=websecure middlewareName=traefik-internal-recovery
time="2023-03-09T02:11:30Z" level=warning msg="No domain found in rule HostRegexp(`traefik.mydomain.com`), the TLS options applied for this router will depend on the SNI of each request" entryPointName=websecure routerName=websecure-traefik@docker
time="2023-03-09T02:11:30Z" level=warning msg="No domain found in rule HostRegexp(`whoami.mydomain.com`), the TLS options applied for this router will depend on the SNI of each request" entryPointName=websecure routerName=websecure-whoami-services@docker
time="2023-03-09T02:12:31Z" level=debug msg="Serving default certificate for request: \"whoami.mydomain.com\""
I'm seeing the same issue when accessing the dashboard (traefik.mydomain.com
).
I'm pretty sure, I'm doing something wrong, can someone point me in the right direction?