1
0
mirror of https://github.com/containous/traefik.git synced 2025-08-24 09:49:31 +03:00

Compare commits

...

2540 Commits

Author SHA1 Message Date
9d17e8826b Prepare release v2.0.3 2019-10-28 17:50:05 +01:00
531c581cd5 Fix a typo in routing documentation for Docker 2019-10-28 17:42:05 +01:00
f790b9aa54 Add example for changing the port used by traefik to connect to a service 2019-10-28 15:50:06 +01:00
8f000423ed fix: default tracing backend. 2019-10-28 12:26:05 +01:00
4990f6c22d Allow Default Certificate to work on macOS 10.15 2019-10-28 11:52:04 +01:00
mpl
d447a50b73 Prepare release v1.7.18 2019-10-28 11:52:04 +01:00
cbecfad4df Prepare release v1.7.17 2019-10-28 11:52:04 +01:00
770a7f11a7 Avoid closing stdout when the accesslog handler is closed
Co-authored-by: Ludovic Fernandez <ldez@users.noreply.github.com>
Co-authored-by: jlevesy <julien.levesy@containo.us>
2019-10-28 11:52:04 +01:00
27a65f8745 Add note clarifying client certificate header 2019-10-28 11:52:04 +01:00
5cd06c03f0 Prepare release v1.7.16 2019-10-28 11:52:04 +01:00
43e5092c46 Prepare release v1.7.15 2019-10-28 11:52:04 +01:00
mpl
a239e3fba6 error pages: do not buffer response when it's not an error 2019-10-28 11:52:04 +01:00
743d772a80 doc: @ is not authorized in names definition. 2019-10-28 11:04:05 +01:00
1f734630b9 Improve documentation of the router rules for API and dashboard 2019-10-25 17:32:04 +02:00
355fe6195e Add documentation about backtick for rule definition. 2019-10-25 17:16:05 +02:00
d22bd5b42d Fix ldflags using incorrect pkg url 2019-10-25 16:48:06 +02:00
5327ce543b Remove unnecessary reload of the configuration. 2019-10-25 15:46:05 +02:00
3747eb59ea fix: deep copy of passHostHeader on ServersLoadBalancer. 2019-10-25 14:40:05 +02:00
2b00ab3432 fix: skip akamai url verify. 2019-10-25 14:02:09 +02:00
a6cdd701e2 Set proxy protocol logger to DEBUG level 2019-10-24 10:02:06 +02:00
c8984e6a6a Use debug for log about skipping addition of cert 2019-10-24 01:10:04 +02:00
9179aa52cf Fix Security Headers Doc 2019-10-23 11:48:05 +02:00
2042fdf3bd fix typo for stripPrefix in tab File (YAML) 2019-10-20 23:40:03 +02:00
d1c3372dc4 fix ForwardAuth tls.skipverify examples 2019-10-18 11:50:05 +02:00
3884a68889 fix: add stacktrace when recover. 2019-10-18 11:30:05 +02:00
0ec84ec597 Adding support for HTTPs backends with Kubernetes ExternalName services 2019-10-18 11:12:05 +02:00
6a9d21e9aa Fix spelling mistake: "founded" -> "found" 2019-10-18 10:54:05 +02:00
a829d44b51 Let instana/go-sensor handle default agent host 2019-10-16 22:30:05 +02:00
554e3e9e6e fix incorrect DNS reference 2019-10-16 16:40:04 +02:00
904b3b5b0b Remove obsolete v2 remark from README 2019-10-16 16:26:05 +02:00
02bdc1dcb9 Clarify unit of duration field in access log 2019-10-16 10:34:04 +02:00
b586ae2f25 Remove deadcode. 2019-10-15 16:36:05 +02:00
8492a702b2 Migration guide: pathprefixstrip migration 2019-10-14 17:26:05 +02:00
0048156379 chore(node/webui): update node to 12.11 version 2019-10-14 17:18:04 +02:00
cb3328dca3 Normalize service and router names for ingress. 2019-10-14 11:18:04 +02:00
e7b7ae94b0 fix: add filename in the file provider logs. 2019-10-11 17:20:05 +02:00
17ce295c30 Fix acme storage file docker mounting example 2019-10-11 14:34:06 +02:00
d5e3bb1b6d Prepare release v2.0.2 2019-10-09 19:12:05 +02:00
7e4e5ec6e4 Add a service sticky details vue component 2019-10-09 17:34:05 +02:00
f2656e62dc fix: default router name for k8s ingress. 2019-10-09 17:16:07 +02:00
83de97e547 fix misspelling on documentation landing page 2019-10-09 16:56:05 +02:00
b552efe770 Update apiVersion in documentation descriptor 2019-10-09 14:56:04 +02:00
1663c7c8e7 fix: ovh client int overflow. 2019-10-09 14:48:04 +02:00
1a6bef1a7e doc: update issues and PRs templates. 2019-10-09 14:28:04 +02:00
ff31e75ccc ci: reduce memory consumption of the linter 2019-10-09 11:48:04 +02:00
c87a37f804 Improve ciphersuite examples 2019-10-08 14:38:04 +02:00
76ead096aa Update 04-ingressroutes.yml 2019-10-07 15:20:06 +02:00
668ff71470 Replace ambiguous cli help message wording 2019-10-07 15:12:05 +02:00
538d5e8be4 TLS_RSA_WITH_AES_256_GCM_SHA384 is considered weak 2019-10-07 15:02:06 +02:00
b2b142a037 State clearly, that they are mutual exclusive 2019-10-07 14:48:05 +02:00
3ebed4ff40 Clarifies how to configure and access the dashboard in the api & dashboard documentations 2019-10-07 14:38:06 +02:00
a2cd69b654 Fix typo in log 2019-10-07 13:12:05 +02:00
cfc14671ed Remove deprecated videos 2019-10-07 12:52:22 +02:00
ed4b2f74ff Update scope of services and middlewares 2019-10-07 12:50:04 +02:00
dd53be7a1b typo in cli command 2019-10-07 12:32:07 +02:00
c83d7916c9 fix: typo in healthCheck examples 2019-10-07 10:14:04 +02:00
0865962f8d fix: remove extra backtick from routers docs 2019-10-07 09:58:03 +02:00
9691085bc2 Fix yaml domains example 2019-10-07 09:48:04 +02:00
b243d1c599 Add overview to API documentation 2019-10-07 09:38:04 +02:00
db6e404bda Typo in documentation 2019-10-02 16:32:05 +02:00
6f63e24dbb Add a response forwarding section to the service documentation 2019-10-01 13:26:04 +02:00
0082fe8173 $ needs escaping in docker-compose.yml 2019-09-30 18:32:04 +02:00
mpl
06d37b2a94 document providersThrottleDuration 2019-09-30 18:24:04 +02:00
48f11900d3 fix: default passHostHeader for file provider. 2019-09-30 18:12:04 +02:00
230cd28ac9 fix: return an error instead of panic. 2019-09-30 17:52:04 +02:00
mpl
86261f2b0a document serversTransport 2019-09-30 17:16:05 +02:00
30ad00fa65 doc: fix influxDB and statsD case in configuration page. 2019-09-30 14:56:05 +02:00
33a1499bdd fix: panic with metrics recorder. 2019-09-30 14:42:04 +02:00
211fa18ac2 Add the pass host header section to the services documentation 2019-09-30 11:26:06 +02:00
4c5250e850 Fix misleading text 2019-09-30 09:12:04 +02:00
788024685f Fixed typo in routing/providers/docker documentation 2019-09-27 13:08:03 +02:00
b5f07d2995 Change instances of "dymanic" to "dynamic" 2019-09-26 18:20:04 +02:00
mpl
8d7af21ff3 Prepare release v2.0.1 2019-09-26 18:02:05 +02:00
dce9278193 Add the router priority documentation 2019-09-26 15:16:05 +02:00
mpl
c6e783e7c3 clarify automatic service creation/assignment with labels 2019-09-26 12:48:05 +02:00
c8fa059064 fix: docker service name. 2019-09-26 12:26:05 +02:00
29efac3e5e fix: update linter. 2019-09-26 11:00:06 +02:00
027d313df5 fix: improve log for invalid middleware. 2019-09-26 10:04:04 +02:00
ea78808e74 fix doc about file.filename 2019-09-26 09:24:04 +02:00
mpl
6f6f999129 Do not initialize list of middlewares if not needed
Co-authored-by: Ludovic Fernandez <ldez@users.noreply.github.com>
2019-09-25 18:20:04 +02:00
b16ebd529b Update Casing on STS Header Directive 2019-09-25 16:50:16 +02:00
mpl
25deecd405 add indent to fix notes 2019-09-23 18:58:03 +02:00
17480abe85 YAML I love you 2019-09-23 17:00:06 +02:00
bfde17b4d7 Improve routing documentation 2019-09-23 14:32:04 +02:00
76263a9610 Improve TLS documentation. 2019-09-23 11:22:05 +02:00
855468e776 fix: typo in TOML for HTTP to HTTPS redirection 2019-09-23 10:30:04 +02:00
beceea9421 Wrong acme example. 2019-09-20 18:44:03 +02:00
dabc139fab doc: Flags and labels are case insensitive. 2019-09-20 17:16:05 +02:00
mpl
41aea2e336 document that /dashboard should be preferred over / 2019-09-20 17:08:04 +02:00
f929346c18 Improve documentation for the TLS section of the provider connection. 2019-09-20 17:00:05 +02:00
e699662b1e Improve the migration guide 2019-09-20 16:44:04 +02:00
90057318c8 Flag names don't need a consistent case. 2019-09-20 16:36:04 +02:00
mpl
6f2eaf3009 fixed doc typoes 2019-09-19 16:20:05 +02:00
e8fc16dc09 fix indentation for tab on migration guide 2019-09-19 11:10:04 +02:00
0f1911ba68 Return an actual server status updater 2019-09-18 17:56:05 +02:00
94699fbe00 Update links in readme. 2019-09-18 15:08:05 +02:00
mpl
a380317e2c fix typo for kubectl version 2019-09-18 12:16:04 +02:00
64bcdd4398 Improve the Migration Guide 2019-09-18 08:38:05 +02:00
7f0c9c239e fix: CNAME of the docs. 2019-09-17 17:12:04 +02:00
e0a1592e6e Fix case-sensitive header in websocket 2019-09-17 16:12:04 +02:00
3d784a14f9 Prepare release v2.0.0 2019-09-16 18:28:04 +02:00
47a9b086ea Disable collect data by default. 2019-09-16 17:26:06 +02:00
e70c8a7b46 Fix error in the documentation for CLI configuration example 2019-09-16 16:36:03 +02:00
673351d821 Fix typo in documentation 2019-09-16 15:34:05 +02:00
4b966f1f82 Web UI graph names. 2019-09-16 15:18:06 +02:00
93626de01c fix: invalid hash for github.com/labbsr0x/goh 2019-09-16 10:44:03 +02:00
7847b7685d Prepare release v2.0.0-rc4 2019-09-13 20:52:04 +02:00
255e88fbf6 Fix kubernetes id name 2019-09-13 20:44:04 +02:00
685c6dc00c Add weighted round robin load balancer on TCP
Co-authored-by: Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
2019-09-13 20:00:06 +02:00
8e18d37b3d fix: logger and context. 2019-09-13 19:28:04 +02:00
b4c7b90c9e fix: boolean flag parsing with map. 2019-09-13 19:10:04 +02:00
b55be9fdea On client CloseWrite, do CloseWrite instead of Close for backend
Co-authored-by: Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
2019-09-13 17:46:04 +02:00
401b3afa3b Add passHostHeader and responseForwarding in IngressRoute
Co-authored-by: Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
2019-09-13 16:46:04 +02:00
7fa3537015 fix a service with one server .yaml example 2019-09-13 11:30:05 +02:00
149ed91afb fix: passHostHeader in the webUI. 2019-09-13 08:24:04 +02:00
887826ee68 Improve documentation about API and Dashboard. 2019-09-12 16:22:03 +02:00
7357d5eae2 fix: services configuration documentation. 2019-09-12 10:18:04 +02:00
e40e3af760 Prepare release v2.0.0-rc3 2019-09-10 18:58:03 +02:00
24a2788081 Prepare release v1.7.14 2019-09-10 18:30:05 +02:00
mpl
1388266102 Finish kubernetes throttling refactoring 2019-09-10 18:30:05 +02:00
43af0b051f Throttle Kubernetes config refresh 2019-09-10 18:30:05 +02:00
6e8138e19b Update golangci-lint 2019-09-10 17:52:04 +02:00
fb8edd86d5 k8s ErrorPage middleware now uses k8s service 2019-09-10 17:24:03 +02:00
34be181706 Add provider in middleware chain 2019-09-10 16:12:05 +02:00
fcc1109e76 Add more pages in the WebUI 2019-09-10 14:40:05 +02:00
mpl
2b828765e3 Improve rate limiter tests
Co-authored-by: Julien Salleyron <julien.salleyron@gmail.com>
2019-09-09 20:02:04 +02:00
25f4c23ab2 Write HTTP server logs into the global logger. 2019-09-09 14:52:04 +02:00
be90b20a5d fix: TLS domains with IngressRoute. 2019-09-09 13:52:04 +02:00
232c113dae Misc documentation fixes 2019-09-09 10:36:08 +02:00
mpl
605a9b2817 Default to CLF when accesslog format is unsupported 2019-09-09 09:24:03 +02:00
d044c0f4cc New API security 2019-09-06 15:08:04 +02:00
1959e1fd44 Auth middlewares in kubernetes CRD uses secrets 2019-09-05 13:42:04 +02:00
mpl
6712423dd1 misc documentation fixes 2019-09-05 10:48:04 +02:00
3689990bd5 Enhance the Retry Middleware Documentation
Co-authored-by: Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
2019-09-04 17:28:03 +02:00
81a1f618f9 Update to go 1.13 2019-09-04 11:16:03 +02:00
b77bb690de Prepare release v2.0.0-rc2 2019-09-03 21:18:03 +02:00
f843f260ee fix: stripPrefix and stripPrefixRegex. 2019-09-03 20:32:03 +02:00
770b3739e0 The chain middleware in k8s use middlewareRef 2019-09-03 19:20:04 +02:00
261e7c1744 Fix some documentation issues 2019-09-03 18:02:05 +02:00
10acbb8d92 Don't panic with undefined middleware 2019-09-03 15:22:05 +02:00
a917115a85 fix buffering middleware 2019-09-03 15:02:05 +02:00
b8ed6f1588 Re enable ratelimit integration tests 2019-09-03 14:34:04 +02:00
3ed57e01a6 Update go version to go 1.13rc2 2019-09-03 12:18:03 +02:00
cb7c5a8ca1 Update Zipkin OpenTracing driver to latest 0.4.3 release 2019-09-03 11:52:04 +02:00
07eb9c5970 Update restrictions in the documentation. 2019-09-02 03:26:04 -07:00
306e5081d9 fix: Datadog case. 2019-09-02 03:18:04 -07:00
259c7adc81 deep-copy for MirrorService 2019-09-02 02:54:04 -07:00
af9762cf32 Improve API for the web UI 2019-09-02 02:38:04 -07:00
17554202f6 fix: stripPrefixRegex documentation. 2019-09-02 01:52:04 -07:00
0d9cf697fa Base of the migration guide
Co-authored-by: Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
2019-08-31 00:28:04 -07:00
df0dd2f5e6 Add errors about unknown entryPoint in runtime api 2019-08-29 03:38:04 -07:00
38508f9a9c Fix recovered panic when websocket is mirrored 2019-08-29 01:28:05 -07:00
b113972bcf Fix trailing slash with check new version 2019-08-29 00:56:04 -07:00
72e67bf4e9 Rest provider icon in the webui 2019-08-28 05:52:05 -07:00
da8aa2d8e4 Prepare release v2.0.0-rc1 2019-08-26 10:36:03 -07:00
602a2ea541 Adds mirroring service 2019-08-26 10:00:04 -07:00
fd24b1898e Add a new dashboard page. 2019-08-26 18:15:41 +02:00
89150e1164 Update to go1.13rc1 2019-08-26 06:06:05 -07:00
e1831c4c60 Add support proxyprotocol v2 2019-08-26 05:40:04 -07:00
mpl
4ec90c5c0d Add rate limiter, rename maxConn into inFlightReq
Co-authored-by: Julien Salleyron <julien.salleyron@gmail.com>
Co-authored-by: Jean-Baptiste Doumenjou <jb.doumenjou@gmail.com>
2019-08-26 03:20:06 -07:00
a8c73f7baf Ensure WaitGroup.Done() is always called 2019-08-26 01:54:05 -07:00
6fed76a687 WeightedRoundRobin load balancer
Co-authored-by: Ludovic Fernandez <ldez@users.noreply.github.com>
2019-08-26 01:30:05 -07:00
84de444325 Bump x/sys to support Risc-V architecture 2019-08-23 07:36:04 -07:00
0fbd87ca87 Fix: CRD user guide 2019-08-23 07:20:05 -07:00
99797502eb docker-compose labels require $'s to be escaped 2019-08-20 08:08:05 -07:00
16bd0b9ca8 Removed extra colon before the 8080 docker port 2019-08-15 07:44:04 -07:00
5fdfa963f4 fix: lego version. 2019-08-15 06:52:03 -07:00
1d86e71331 fix: invalid pseudo version. 2019-08-14 14:54:03 -07:00
9e3f549341 Add TLS-enabled Router 2019-08-14 10:16:06 -07:00
2895ad21f3 Correct Kubernetes Ingress and IngressRoute port heuristic for choosing HTTPS 2019-08-14 09:58:04 -07:00
5731ae7f47 Fix url.Parse due to go1.12.8 changes. 2019-08-14 09:16:04 -07:00
51f7d9a07f Split runtime.go 2019-08-14 08:28:04 -07:00
6be390c795 feat(webui): add doc and version in navbar 2019-08-12 08:48:04 -07:00
0f32de4aa2 tests: improve timeout.
- upgrade k3s to v0.8.0
2019-08-12 05:06:04 -07:00
5d01452648 doc: contributing guide. 2019-08-12 05:06:04 -07:00
51b0508512 scripts: makefile, dockerfile, travis, ... 2019-08-12 05:06:04 -07:00
4c5e7a238d chore: go module 2019-08-12 05:06:04 -07:00
f327b7b499 chore: ignore vendor. 2019-08-12 05:06:04 -07:00
306e86c9c6 kill: the vendor. 2019-08-12 05:06:04 -07:00
9024f1b444 doc: update lego. 2019-08-12 00:36:04 -07:00
fc26e8c194 Prepare release v1.7.13 2019-08-12 00:36:04 -07:00
ffd8e5667c Wrr loadbalancer honors old weight on recovered servers 2019-08-12 00:36:04 -07:00
9299c3abc7 Add missing KeyUsages for default generated certificate 2019-08-12 00:36:04 -07:00
63a07fe6cf Add a docker-compose & let's encrypt user-guide 2019-08-06 08:46:04 -07:00
c2d440a914 chore: update docker and k8s 2019-08-05 09:24:03 -07:00
2b5c7f9e91 [Docs] YAML indent for domains under TLS section 2019-08-05 08:22:04 -07:00
91e63dea47 Apply the case of the CLI flags for the configuration 2019-08-05 06:22:03 -07:00
cd164de776 Add Feature-Policy header support 2019-07-29 07:12:05 -07:00
c0ef5ce512 Fix prometheus metrics 2019-07-24 12:38:03 +02:00
7c852fbf33 refactor(webui): use components to split Home concerns 2019-07-22 11:06:04 +02:00
28500989bc Improve acme logs. 2019-07-22 10:16:04 +02:00
75c99a0491 doc: improve examples. 2019-07-22 09:58:04 +02:00
8b4ba3cb67 Fix malformed rule 2019-07-22 09:24:04 +02:00
Jan
3ef2971c3f Fix acme example 2019-07-19 18:06:03 +02:00
a5aa8c6006 Prepare release v2.0.0-beta1 2019-07-19 17:18:03 +02:00
Jan
022d14abe1 Fixed a typo in label. 2019-07-19 17:00:05 +02:00
1800b0b69c Improve error on router without service.
Co-authored-by: Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
2019-07-19 16:42:04 +02:00
c39a550b00 Lets encrypt documentation typo 2019-07-19 15:52:03 +02:00
mpl
092aa8fa6d API: remove configuration of Entrypoint and Middlewares
Co-authored-by: Julien Salleyron <julien.salleyron@gmail.com>
2019-07-19 12:28:07 +02:00
f75f73f3d2 Certificate resolvers.
Co-authored-by: Julien Salleyron <julien.salleyron@gmail.com>
Co-authored-by: Jean-Baptiste Doumenjou <jb.doumenjou@gmail.com>
2019-07-19 11:52:04 +02:00
e3627e9cba Disable RateLimit temporarily 2019-07-19 10:50:05 +02:00
mpl
d5f4934acf Add documentation about Kubernetes Ingress provider 2019-07-19 09:50:04 +02:00
693bd7e110 Add a basic Traefik install guide 2019-07-19 09:24:04 +02:00
4d8dcdc623 feat(webui/dashboard): init new dashboard 2019-07-18 22:36:04 +02:00
8e97af8dc3 Add Metrics 2019-07-18 21:36:05 +02:00
4dc448056c fix: TLS configuration from directory. 2019-07-18 16:26:05 +02:00
68c349bbfa Manage status for TCP element in the endpoint overview. 2019-07-18 15:56:04 +02:00
75aedc8e94 Fixed doc link for AlibabaCloud 2019-07-17 20:12:04 +02:00
8b08f89d2c Allows logs to use local time zone instead of UTC
Co-authored-by: Ludovic Fernandez <ldez@users.noreply.github.com>
2019-07-17 20:12:04 +02:00
889b38f75a Improve tracing documentation 2019-07-16 09:54:04 +02:00
a17ac23457 Update Dynamic Configuration Reference for both Docker and Marathon 2019-07-16 06:48:03 +02:00
mpl
6fdd48509e config: deal with multiple errors and their criticality
Co-authored-by: Julien Salleyron <julien.salleyron@gmail.com>
2019-07-15 17:04:04 +02:00
62800116d3 Add Jaeger collector endpoint 2019-07-15 14:52:04 +02:00
1bccbf061b refactor(webui): use @vue/cli to bootstrap new ui 2019-07-15 10:58:03 +02:00
093658836e Restrict traefik.toml to static configuration. 2019-07-15 10:22:03 +02:00
f49800e56a user guide: fix a mistake in the deployment definition 2019-07-15 10:00:06 +02:00
e478dbeb85 Docker URL 2019-07-15 07:06:03 +02:00
51486b18fa Enhance REST provider 2019-07-13 01:24:03 +02:00
48d98dcf45 Update docker version for build 2019-07-12 21:14:03 +02:00
2c7cfd1c68 Expand Client Auth Type configuration 2019-07-12 17:50:04 +02:00
7a4b4c941c Update dep version 2019-07-12 15:36:04 +02:00
608ccb0ca1 Update golangci-lint 2019-07-12 15:04:03 +02:00
3f6ea04048 Properly add response headers for CORS 2019-07-12 11:46:04 +02:00
74c5ec70a9 Improve API endpoints 2019-07-12 11:10:03 +02:00
c8bf8e896a Move dynamic config into a dedicated package. 2019-07-10 09:26:04 +02:00
09cc1161c9 Generate deepcopy for configuration struct 2019-07-09 15:18:04 +02:00
8ab33db51a Renamed kubernetes provider in kubernetesIngress provider 2019-07-08 21:36:03 +02:00
cc4258bf9d Remove X-Forwarded-(Uri, Method, Tls-Client-Cert and Tls-Client-Cert-Info) from untrusted IP 2019-07-08 17:56:04 +02:00
0ee5d3d83f Automatic generation of the doc for the CLI flags and env vars. 2019-07-08 11:00:04 +02:00
c39aa5e857 Add scheme to IngressRoute. 2019-07-05 17:24:04 +02:00
mpl
39aae4167e TLSOptions: handle conflict: same host name, different TLS options
Co-authored-by: Julien Salleyron <julien.salleyron@gmail.com>
2019-07-03 19:22:05 +02:00
9db9143366 Improve providers documentation. 2019-07-02 17:36:04 +02:00
49814b92fe Prepare release v2.0.0-alpha8 2019-07-01 19:36:04 +02:00
260b5d6b0d Add gRPC user guide 2019-07-01 15:28:04 +02:00
4360ca14c1 Use h2c from x/net to handle h2c requests
Co-authored-by: Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
2019-07-01 15:08:04 +02:00
c7d336f958 Use the same case everywhere 2019-07-01 11:30:05 +02:00
f6436663eb Make HTTP Keep-Alive timeout configurable for backend connections 2019-06-28 00:36:04 +02:00
84d7c65039 Improve tracing 2019-06-28 00:16:04 +02:00
4245096be4 Define a TLS section to group TLS, TLSOptions, and TLSStores.
Co-authored-by: Jean-Baptiste Doumenjou <jb.doumenjou@gmail.com>
2019-06-27 23:58:03 +02:00
c9b2a07bc7 Drop headers by default in access logs. 2019-06-27 16:04:03 +02:00
e69d4cba88 Support YAML for the dynamic configuration. 2019-06-26 18:18:04 +02:00
mpl
96962dd21f Handle cross-provider middleware in kubernetes CRD
Co-authored-by: Julien Salleyron <julien.salleyron@gmail.com>
2019-06-26 14:14:05 +02:00
36d48224b5 fix: error log message. 2019-06-26 09:10:03 +02:00
53779d6ceb Adding content-header to api endpoints 2019-06-25 17:44:03 +02:00
mpl
e7e268b3bd doc/crd-acme: specify required kubectl version 2019-06-25 14:50:04 +02:00
ca2f76fe1f Update Slack support channel references to Discourse community forum 2019-06-25 10:08:04 +02:00
4d44ab9628 Change the loading resource order 2019-06-24 16:40:06 +02:00
dd62051e6c Improve middleware documentation. 2019-06-24 06:04:03 +02:00
fdb1701d1b Prepare release v2.0.0-alpha7 2019-06-21 17:46:02 +02:00
80b35575df Define TLS options on the Router configuration for Kubernetes
Co-authored-by: juliens <julien@containo.us>
2019-06-21 17:18:05 +02:00
69cf05df9a Fix panic in tls manager 2019-06-21 16:32:04 +02:00
69a1817c3f Improve some parts of the documentation. 2019-06-21 10:54:04 +02:00
a918dcd5a4 Filter env vars configuration 2019-06-21 10:08:04 +02:00
adc9a65ae3 Use name@provider instead of provider@name. 2019-06-21 09:54:04 +02:00
1e779f7135 Fix some CLI bugs 2019-06-21 09:40:04 +02:00
fe68e9e243 New constraints management.
Co-authored-by: Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
2019-06-21 09:24:04 +02:00
e9792b446f Change the provider separator from . to @ 2019-06-20 00:40:05 +02:00
mpl
4012599264 docs: rewrite of the HTTPS and TLS section
Co-authored-by: Ludovic Fernandez <ldez@users.noreply.github.com>
2019-06-19 19:00:06 +02:00
mpl
429b1d8574 API: new contract
Co-authored-by: Ludovic Fernandez <ldez@users.noreply.github.com>
2019-06-19 18:34:04 +02:00
a34876d700 Display an error when help is called on a non existing command. 2019-06-19 14:08:05 +02:00
68ecf78f0e Upgrade k3s version 2019-06-18 22:32:05 +02:00
38344b342d Prepare release v2.0.0-alpha6. 2019-06-18 18:10:06 +02:00
346ff96de2 Kubernetes CRD documentation fixes 2019-06-18 12:20:04 +02:00
31614bebc4 Don't allow non flag arguments by default. 2019-06-18 12:10:06 +02:00
be888b59a6 doc: fix middleware names for CRD. 2019-06-18 09:50:05 +02:00
6069df6cbd fix: revert deploy script. 2019-06-17 23:40:05 +02:00
5e7b6e4860 fix: deploy script. 2019-06-17 22:14:05 +02:00
ea6fa6e889 Prepare release v2.0.0-alpha5 2019-06-17 19:38:04 +02:00
3e914256ce Update headers middleware docs for kubernetes crd 2019-06-17 18:30:05 +02:00
85ce16b34f Define TLS options on the Router configuration
Co-authored-by: juliens <julien@containo.us>
2019-06-17 18:14:08 +02:00
d306c8fd50 change doc references to scheme[Rr]edirect -> redirect[Ss]cheme 2019-06-17 18:00:07 +02:00
8d7eccad5d New static configuration loading system.
Co-authored-by: Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
2019-06-17 11:48:05 +02:00
d18edd6f77 HttpOnly and Secure flags on the affinity cookie 2019-06-13 00:42:06 +02:00
cad3704efd Add Mathieu Lonjaret to maintainers 2019-06-12 23:04:03 +02:00
9a4b455c3f Correct typo in documentation on rate limiting 2019-06-12 17:22:07 +02:00
01c8798e4e Update docker api version 2019-06-12 02:54:03 +02:00
61744fba11 Prepare release v1.7.12 2019-06-12 02:54:03 +02:00
0034bef6b9 Update lego. 2019-06-12 02:54:03 +02:00
63c3ed3931 Add missing callback on close of hijacked connections 2019-06-12 02:54:03 +02:00
8a5db8a3ee Adds a log fields documentation. 2019-06-12 02:54:03 +02:00
adc2b62c22 Upgraded DataDog tracing library to 1.14.0 2019-06-12 02:54:03 +02:00
1f2fe08c33 Allow SANs for wildcards domain. 2019-06-12 02:54:03 +02:00
77b1933833 Fix Kubernetes Docs for Middlewares 2019-06-11 20:42:04 +02:00
mpl
c4df78b4b9 Add support for TCP (in kubernetes CRD)
Co-authored-by: Jean-Baptiste Doumenjou <jb.doumenjou@gmail.com>
2019-06-11 15:12:04 +02:00
c1dc783512 Remove first byte wait when tcp catches all 2019-06-07 19:30:07 +02:00
518a37e776 rework loadbalancer support 2019-06-05 22:18:06 +02:00
b143101f82 Specify that Rancher provider is for 1.x only 2019-06-04 00:46:05 +02:00
2be6f4d153 Docs: improve the "reading path" for new contributers 2019-05-27 18:22:04 +02:00
ac612734c8 fix the documentation about middleware labels. 2019-05-27 18:10:04 +02:00
ffe69c67fc Entry points CLI description. 2019-05-27 18:02:06 +02:00
b3057a0ec3 Fix typo in the CRD documentation 2019-05-27 10:24:04 +02:00
mpl
563f059e73 Fix typos in data collection message 2019-05-21 17:12:09 +02:00
6bbe7262ef documentation remove traefik.port. 2019-05-20 11:14:04 +02:00
55a1a81010 Fixed readme misspelling 2019-05-17 13:40:04 +02:00
97ec764db7 Fix typos in documentation 2019-05-17 13:32:05 +02:00
mpl
f6df556eb0 API: expose runtime representation
Co-authored-by: Julien Salleyron <julien.salleyron@gmail.com>
Co-authored-by: Jean-Baptiste Doumenjou <jb.doumenjou@gmail.com>
2019-05-16 10:58:06 +02:00
5cd9396dae Fix regression on plumbing scripts for developer usages 2019-05-14 19:58:04 +02:00
886a6bdbe0 Add shell script linting with shellcheck for better portability 2019-05-10 17:24:06 +02:00
ab60e702d2 Remove old docs folder. 2019-05-10 10:16:05 +02:00
17141b3589 Remove timeout/interval from the ACME Provider 2019-05-10 09:58:05 +02:00
8f23243cb8 Add note about ACME renewal 2019-05-09 15:22:05 +02:00
c2345c6e9a Don't add TCP proxy when error occurs during creation. 2019-05-09 14:30:06 +02:00
2617de2cdd Clarify docs with labels in Swarm Mode 2019-05-09 08:32:04 +02:00
9cf6827ccc Added support for Haystack tracing 2019-05-09 00:14:04 +02:00
681892148e fix: typo in routing example. 2019-05-06 18:28:04 +02:00
558452a143 Fixed spelling typo 2019-05-06 17:44:04 +02:00
5a173fa968 Allow matching with FQDN hosts with trailing periods 2019-05-06 17:16:03 +02:00
72397ef90c Fix make validate on MacOS outside container 2019-05-06 09:40:03 +02:00
79ad4b4544 Clarification of the correct pronunciation of the word "Traefik" 2019-05-03 12:14:04 +02:00
49f3713c4f docker-compose basic auth needs dubble dollar signs 2019-05-03 10:16:06 +02:00
4b5c3ccf58 Adds a reference to the middleware overview. 2019-04-29 19:36:07 +02:00
21dec70971 Fix strip prefix documentation 2019-04-29 19:00:05 +02:00
0f2b774ea1 fix: Rancher documentation. 2019-04-26 11:48:04 +02:00
e929caf15a Prepare release v1.7.11 2019-04-26 11:26:04 +02:00
8d848c3d60 fix: update lego. 2019-04-26 11:26:04 +02:00
b8b0c8f3e5 compress link fixed 2019-04-25 17:54:05 +02:00
15e78da7eb Minor fix in documentation 2019-04-24 18:04:08 +02:00
d80700810f Review documentation 2019-04-24 17:44:04 +02:00
c1de6abf23 Fix a typo in documentation 2019-04-23 17:40:04 +02:00
01b916eaa0 Prepare release v2.0.0-alpha4. 2019-04-17 12:10:04 +02:00
62c03b3318 k8s static configuration explanation 2019-04-17 11:48:05 +02:00
65679af61d Remove dumpcerts.sh 2019-04-17 11:36:04 +02:00
821ad31cf6 Enhance Marathon documentation 2019-04-17 10:58:04 +02:00
mpl
ea750ad813 Improve log message about redundant TLS certificate 2019-04-17 10:38:04 +02:00
3d7633f4a6 Forward all header values from forward auth response 2019-04-17 10:38:04 +02:00
d356ef1c5b Documentation Update: Hosting.de wildcard support tested 2019-04-17 10:38:04 +02:00
fce762febf Update Wildcard Domain documentation 2019-04-17 10:38:04 +02:00
535280c162 doc: middleware -> middlewares. 2019-04-17 09:34:04 +02:00
bb8a193244 log.loglevel becomes log.level in configuration 2019-04-16 15:30:09 +02:00
e6bdfa1d29 Checksum file name. 2019-04-16 14:50:05 +02:00
d1d2611665 Handle TCP in the marathon provider
Co-authored-by: Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
2019-04-15 18:22:07 +02:00
8389b46b5c Use the same case every where for entryPoints. 2019-04-15 11:14:05 +02:00
b9f826554c Adds a note in traefik.sample.toml 2019-04-12 19:42:03 +02:00
0750235712 fix: configuration for integration tests. 2019-04-09 17:24:05 +02:00
ee0e014617 Insensitive case for allow-empty value. 2019-04-09 16:50:06 +02:00
2e20394af4 Update the middleware documentation 2019-04-08 17:14:08 +02:00
6ab991ebf4 Fix typo in tracing docs 2019-04-08 17:00:08 +02:00
ef8894ef26 Fix EOF error 2019-04-08 12:24:05 +02:00
8b4efa1760 Get Structor version from CI env var. 2019-04-08 08:46:04 +02:00
mpl
b0b8b75258 Fix doc about removing headers 2019-04-05 15:18:04 +02:00
2e19e45aa4 Remove github.com/satori/go.uuid. 2019-04-05 12:44:03 +02:00
e1d097ea20 Add Rancher provider again 2019-04-05 12:22:04 +02:00
ed12366d52 Update tracing dependencies 2019-04-05 11:58:06 +02:00
4919b638f9 Improve the Documentation with a Reference Section 2019-04-05 11:32:04 +02:00
mpl
49563e638b Fix response modifier initial building
Co-authored-by: Ludovic Fernandez <ldez@users.noreply.github.com>
2019-04-04 11:50:04 +02:00
07d0eb9ae6 Adds middlewares examples for k8s. 2019-04-03 14:32:04 +02:00
mpl
336135c392 Set X-Forwarded-* headers
Co-authored-by: Julien Salleyron <julien.salleyron@gmail.com>
2019-04-02 16:56:04 +02:00
d2b38e6ac4 Enable CORS configuration 2019-04-02 10:40:04 +02:00
883f90dded fix: remove invalid commas. 2019-04-01 17:56:04 +02:00
58e82743f8 Update to v2.0 readme links 2019-04-01 17:14:03 +02:00
51a0994d2d Update certificates for some Docker images 2019-04-01 16:48:08 +02:00
da20db862d fix: validation system 2019-04-01 15:30:07 +02:00
d6c9f51082 Prepare release v1.7.10 2019-03-29 18:46:04 +01:00
08d7bb0d08 Remove thoas/stats fork 2019-03-29 18:46:04 +01:00
1bcb3d8cc2 Added support for configuring trace headers for DataDog tracing 2019-03-29 18:46:04 +01:00
c17de070fb fix: update lego. 2019-03-29 18:46:04 +01:00
b893374dc1 Add _FILE Environment Variable Documentation 2019-03-29 18:46:04 +01:00
fe532ed4f2 Fix two minor nits in Traefik 2.0 docs 2019-03-29 16:38:04 +01:00
6377a19b12 Prepare release v2.0.0-alpha3. 2019-03-29 15:34:04 +01:00
ca7ea68a6a Adds notes about incompatibility between 1.X and 2.X configurations. 2019-03-29 13:12:05 +01:00
a45f285a5c Enhance middleware examples. 2019-03-29 12:34:05 +01:00
fa2c57f7cb Review Makefile 2019-03-28 11:42:06 +01:00
mpl
0779c6a139 Full ACME+CRD example
Co-authored-by: Jean-Baptiste Doumenjou <jb.doumenjou@gmail.com>
2019-03-27 15:16:04 +01:00
2916f540c1 Remove BaseProvider 2019-03-27 15:02:06 +01:00
7932e317c8 Clarify that manual dnsChallenge provider works only when run as docker run -it 2019-03-27 12:08:04 +01:00
fd26cf265d Fix some minors errors on the documentation 2019-03-26 16:32:06 +01:00
mpl
3e76c25887 Document the TLS with ACME case
Co-authored-by: Julien Salleyron <julien.salleyron@gmail.com>
2019-03-26 11:12:04 +01:00
a0e2f47679 Update traefik.sample.toml 2019-03-25 17:20:04 +01:00
d70add10ab Fix typos in docs 2019-03-25 16:54:03 +01:00
119d0134e0 Documentation Updates: docker-compose examples 2019-03-22 15:22:08 +01:00
2e085fa253 Remove old links in readme 2019-03-22 15:16:06 +01:00
f8f7edd124 Fix panic while server shutdown 2019-03-21 15:54:07 +01:00
79ecff7b42 Fix Getting started 2019-03-21 15:34:04 +01:00
0f2c4fb5f4 Add support for tcp labels in docker provider 2019-03-21 15:22:06 +01:00
ec1952157b Fix typo in forwardauth middleware documentation 2019-03-20 16:36:10 +01:00
cd38359458 Fix dead maintainers link on the README.md 2019-03-20 16:30:07 +01:00
8a86777db8 Prepare release v2.0.0-alpha2 2019-03-19 19:24:07 +01:00
e7033071b9 change docs and adjust dashboard for v2 alpha
Co-authored-by: Jean-Baptiste Doumenjou <jb.doumenjou@gmail.com>
2019-03-19 17:54:10 +01:00
mpl
f99a473436 Fix log msgs about label selector 2019-03-19 17:30:04 +01:00
mpl
c4b7e8f288 doc: kubernetes CRD provider
Co-authored-by: Jean-Baptiste Doumenjou <jb.doumenjou@gmail.com>
2019-03-19 16:44:06 +01:00
f346251719 Fix new build system for experimental Docker image. 2019-03-19 12:24:04 +01:00
4c3cf87f62 New build system for experimental Docker image. 2019-03-19 11:50:03 +01:00
cb417b8077 Fix problem in aggregator provider 2019-03-19 10:04:04 +01:00
076d6abfe4 Change deploy script. 2019-03-19 09:04:04 +01:00
82308c9a53 chore: release draft mode. 2019-03-18 17:20:42 +01:00
5d35079809 Prepare release v2.0.0-alpha1 2019-03-18 15:18:04 +01:00
50e24f461c Remove IngressEndpoint in CRD provider 2019-03-18 14:38:04 +01:00
37886892c8 Adds a maintainer's page into the documentation. 2019-03-18 12:04:04 +01:00
72ffa91fe0 Clean old 2019-03-18 11:30:07 +01:00
9908137638 Enhance acme page. 2019-03-18 10:50:05 +01:00
f3ecc040c8 (re)Add update ingress status 2019-03-18 10:10:04 +01:00
e271378a97 Clean files during tests. 2019-03-18 09:34:03 +01:00
5d050ae3ac Allow user to configure traefik log 2019-03-15 15:46:06 +01:00
615ceab597 Fix lock problem in server 2019-03-15 10:04:05 +01:00
f1b085fa36 Move code to pkg 2019-03-15 09:42:03 +01:00
bd4c822670 Update anonymize/collect 2019-03-14 19:32:03 +01:00
mpl
03d5a95bde Remove everything templates related 2019-03-14 17:32:11 +01:00
e2ec64947a Update the file provider documentation 2019-03-14 16:46:05 +01:00
dabd9e2208 New packaging system. 2019-03-14 16:22:04 +01:00
4c060a78cc Custom resource definition
Co-authored-by: Mathieu Lonjaret <mathieu.lonjaret@gmail.com>
2019-03-14 15:56:06 +01:00
cfaf47c8a2 Use rule HostSNI in documentation 2019-03-14 12:16:03 +01:00
87da7520de Migrate to go-acme/lego. 2019-03-14 11:04:04 +01:00
4a68d29ce2 Add a new protocol
Co-authored-by: Gérald Croës <gerald@containo.us>
2019-03-14 09:30:04 +01:00
0ca2149408 Synchronize documentation 2019-03-13 16:40:05 +01:00
0cfaab02c0 k8s integration tests 2019-03-11 14:54:05 +01:00
2d54065082 feat(webui): migrate to a work in progress webui 2019-03-08 14:08:03 +01:00
3cfbe7cf6d Travis: switch fallback dockerfile for structor 2019-03-06 16:22:06 +01:00
e2d8a95c91 Update the kubernetes provider 2019-03-06 16:22:06 +01:00
3419f9aeb9 Remove the bug command 2019-03-05 18:14:03 +01:00
ebded2cbc0 feat: new linting system. 2019-03-04 16:40:05 +01:00
fb617044e0 Update to Go1.12
Co-authored-by: juliens <julien@containo.us>
2019-03-01 11:48:04 +01:00
5a0b5470e7 Fixed dead link in README.md 2019-02-28 16:44:03 +01:00
6b4144ad10 fix: image links. 2019-02-27 14:58:04 +01:00
8f16ff9c49 chore(webui): dropping rxjs-compat in favor of pipe 2019-02-26 16:48:07 +01:00
ac6b11037d Documentation Revamp
Co-authored-by: jbdoumenjou <jb.doumenjou@gmail.com>
2019-02-26 14:50:07 +01:00
848e45c22c Adds Kubernetes provider support
Co-authored-by: Julien Salleyron <julien@containo.us>
2019-02-21 23:08:05 +01:00
2c0bf335ba Update Structor to v1.4.0 2019-02-21 10:38:03 +01:00
aef24dd74b Instana tracer implementation 2019-02-18 16:52:03 +01:00
c2c6aee18a Applies new goimports recommendations. 2019-02-18 07:52:03 +01:00
6451b47621 Prepare release v1.7.9 2019-02-13 17:26:04 +01:00
2b2cfdfb32 Updates of Lego. 2019-02-13 17:26:04 +01:00
5f4d440493 Fixes the display of the associativity rules. 2019-02-13 17:26:04 +01:00
5f0451affe Fixed curl example 2019-02-13 17:26:04 +01:00
156f6b8d3c Add Tracing Header Context Name option for Jaeger 2019-02-13 17:26:04 +01:00
f0ee2890b2 app-root on non-explicit path include "/" in the redirect 2019-02-13 17:26:04 +01:00
16c283c91a Update default value in docs of buckets for Prometheus 2019-02-13 17:26:04 +01:00
db13dbdf46 fix missing trailers with retry 2019-02-13 17:26:04 +01:00
06905cb14a handle errors when working with rancher 2019-02-13 17:26:04 +01:00
6ea9c4dd3f doc: update change log. 2019-02-13 17:26:04 +01:00
c5c8382742 chore(webui): format code with prettier 2019-02-05 18:18:04 +01:00
115ddc6a4a refactor: applies linting. 2019-02-05 17:10:03 +01:00
54ca0ce34f chore(lint): include lint in build process 2019-02-05 16:50:05 +01:00
f19c497621 Updates Backoff 2019-02-04 16:38:08 +01:00
0561a20c06 chore(webui): upgrade angular cli version 2019-02-01 16:30:06 +01:00
162490dadf chore(webui): ignore target/dependencies in docker copy 2019-02-01 00:20:04 +01:00
30087794ba chore(webui): update docker node version 2019-02-01 00:04:04 +01:00
9ebe3c38b2 New rule syntax
Co-authored-by: jbdoumenjou <jb.doumenjou@gmail.com>
2019-01-30 16:24:07 +01:00
7155f0d50d Prepare release v1.7.8 2019-01-30 14:00:05 +01:00
75e05ca142 Check for dynamic tls updates on configuration preload 2019-01-30 14:00:05 +01:00
5d4423910d Fixes docker swarm mode refresh second for KV. 2019-01-30 14:00:05 +01:00
0de1ff8634 Support Datadog tracer priority sampling 2019-01-30 14:00:05 +01:00
e5fb1ffeb7 Updates lego. 2019-01-30 14:00:05 +01:00
8c53318dac Generic awsvpc support, not just Fargate 2019-01-30 14:00:05 +01:00
0d6f259adc Cache exising task definitions to avoid rate limiting 2019-01-30 14:00:05 +01:00
85ab0e6e70 Minor formatting fixes 2019-01-30 14:00:05 +01:00
a18294d417 Route priorities: document minimum priority value 2019-01-30 14:00:05 +01:00
fecd0ca391 Note about quotes for entrypoint definition with docker-compose 2019-01-30 14:00:05 +01:00
97bd92c76f Assert that test timeout service is ready. 2019-01-30 14:00:05 +01:00
rbq
49b89c30d8 Allow Træfik to update Ingress status 2019-01-30 14:00:05 +01:00
8228a8e3f7 doc: more detailed info about Google Cloud DNS. 2019-01-30 14:00:05 +01:00
78be3df99a Tested wildcard ACME challenge with DNSimple 2019-01-30 14:00:05 +01:00
2f0db9a974 doc missing information about statistics parameter 2019-01-30 14:00:05 +01:00
227fab3867 fix: update lego. 2019-01-30 14:00:05 +01:00
9537449b07 Happy 2019 2019-01-30 14:00:05 +01:00
246b245959 Adds Marathon support.
Co-authored-by: Julien Salleyron <julien@containo.us>
2019-01-29 17:54:05 +01:00
a433e469cc SchemeRedirect Middleware
Co-authored-by: jbdoumenjou <jb.doumenjou@gmail.com>
2019-01-22 08:30:04 +01:00
04958c6951 Adds default rule system on Docker provider.
Co-authored-by: Julien Salleyron <julien@containo.us>
2019-01-21 19:06:02 +01:00
b54c956c5e Adds Docker provider support
Co-authored-by: Julien Salleyron <julien@containo.us>
2019-01-18 15:18:04 +01:00
8735263930 Enables the use of elements declared in other providers 2019-01-15 14:28:04 +01:00
a79d6aa669 Add forwarded headers on entry point configuration 2019-01-15 09:44:03 +01:00
7efafa5a2c Migrates the pass client tls cert middleware 2019-01-09 11:28:04 +01:00
0b436563bd refactor: remove old acme provider. 2019-01-08 14:32:04 +01:00
5d379dc3e3 Prepare release v1.7.7 2019-01-08 14:32:04 +01:00
8c60774c6a Add Pass TLS Cert Issuer and Domain Component 2019-01-08 14:32:04 +01:00
9b2423aaba Update Lego 2019-01-08 14:32:04 +01:00
fc8c24e987 Retry middleware : store headers per attempts and propagate them when responding. 2019-01-08 14:32:04 +01:00
d7bd69714d Redirection status codes for methods different than GET 2019-01-08 14:32:04 +01:00
099bbb8be7 Skip TLS section with no secret in Kubernetes ingress 2019-01-08 14:32:04 +01:00
c29a69a60d Harden Traefik systemd service 2019-01-08 14:32:04 +01:00
69e4f35d9a Test and exit for jq error before domain loop 2019-01-08 14:32:04 +01:00
ff40467207 Fix html-proofer and nokogiri version 2019-01-08 14:32:04 +01:00
190c6c661f Letsencrypt - Add info on httpreq format 2019-01-08 14:32:04 +01:00
e633799c14 Proposing a small update to documentation 2019-01-08 14:32:04 +01:00
f7c6c562a5 Allow empty path with App-root annotation 2019-01-08 14:32:04 +01:00
bc6e9d5042 Check for watched namespace before getting kubernetes objects 2019-01-08 14:32:04 +01:00
a0b1d54012 kubernetes: sort and uniq TLS secrets 2019-01-08 14:32:04 +01:00
60b5286f8c Check for anchors (hashes) for external links on the documentation 2019-01-08 14:32:04 +01:00
aa3ea17a8f Rephrase the traefik.backend definition in documentation 2019-01-08 14:32:04 +01:00
698621f127 Update broken link for Docker service constraints 2019-01-08 14:32:04 +01:00
906f4fe8f7 dep: fix constraint with dep >= 0.5.0 2019-01-07 16:48:03 +01:00
ddf199566c Prepare release v1.7.6 2018-12-17 15:18:03 +01:00
a47d770e71 Fix label segmentation when using custom prefix 2018-12-17 15:18:03 +01:00
057498ed01 Support canary weight for external name service 2018-12-05 14:32:03 +01:00
fa562dc916 Query params in health check 2018-12-05 14:32:03 +01:00
0be895febb frame-deny should be set to true to enable the header 2018-12-05 14:32:03 +01:00
11a0078966 Labels parser. 2018-12-04 14:24:04 +01:00
92f8e5cd3f Prepare release v1.7.5 2018-12-04 11:42:03 +01:00
5b3762be08 Implement Case-insensitive SNI matching 2018-12-04 11:42:03 +01:00
3b01488c8d [docker backend] - Add config flag to set refreshSeconds for swarmmode ticker 2018-12-04 11:42:03 +01:00
2f65572247 Filter ECS tasks by LastStatus before adding to list of service tasks 2018-12-04 11:42:03 +01:00
e42ddfc3d6 Log configuration errors from providers and keeps listening 2018-12-04 11:42:03 +01:00
d63636243c Fix upgrade flaeg 2018-12-04 11:42:03 +01:00
a0b9c0d007 Fix unannonced trailers problem when body is empty 2018-12-04 11:42:03 +01:00
1f7a4174ba Matcher associativity rule. 2018-12-04 11:42:03 +01:00
761c58e040 Add a "Security Consideration" section in the Docker's backend section of the documentation 2018-12-04 11:42:03 +01:00
01c3d3905c Remove Deprecated StorageFile 2018-12-03 11:54:04 +01:00
c815a732ef Migrate rest provider 2018-12-03 11:32:05 +01:00
5d91c7e15c Remove old global config and use new static config 2018-11-27 17:42:04 +01:00
c39d21c178 Update swarm mode endpoint 2018-11-26 11:02:05 +01:00
b6498cdcbc Cherry pick v1.7 into master 2018-11-19 16:40:03 +01:00
a09dfa3ce1 Dynamic Configuration Refactoring 2018-11-14 10:18:03 +01:00
d3ae88f108 Merge tag 'v1.7.4' into master 2018-10-30 12:34:00 +01:00
1fad7e5a1c Prepare release v1.7.4 2018-10-30 11:32:04 +01:00
19546ab518 Fix mistake in the documentation of several backends (#4133) 2018-10-30 10:49:41 +01:00
e6e9a86919 Add flush interval option on backend 2018-10-29 18:42:03 +01:00
c6dd1dccc3 add static redirect 2018-10-29 16:48:06 +01:00
993caf5058 Fix access log field parsing 2018-10-29 16:24:04 +01:00
450471d30a Add the missing pass-client-tls annotation to the kubernetes provider 2018-10-29 16:02:06 +01:00
7eeecd23ac Provider docker shutdown problem 2018-10-29 15:30:04 +01:00
21c94141ba Update docs/configuration/acme.md 2018-10-29 14:58:03 +01:00
bc2cba5aa4 Removed unused imports 2018-10-29 14:44:03 +01:00
5e49354bf2 acme: exoscale move from .ch to .com 2018-10-29 14:20:03 +01:00
55334b2062 Fix display of client username field 2018-10-25 18:00:05 +02:00
74dc5b1c58 Support custom DNS resolvers for Let's Encrypt. 2018-10-25 17:38:04 +02:00
ac11323fdd Replaces emilevauge/whoami by containous/whoami in the documentation 2018-10-25 17:04:03 +02:00
8c2e99432d Add a note about TLS-ALPN challenge. 2018-10-25 16:50:05 +02:00
aa26927d61 Case insensitive host rule 2018-10-25 10:18:03 +02:00
22ee8700ca add default path if nothing present 2018-10-25 09:50:03 +02:00
df55c24cb5 Add missing tmp directory to scratch image 2018-10-24 11:00:05 +02:00
99ddd7f9cb domain is also optional for "normal" mode 2018-10-23 18:12:03 +02:00
82b2a102ed Add double wildcard test 2018-10-23 18:04:05 +02:00
c7df82e695 Remove the trailing dot if the domain is not defined. 2018-10-23 17:36:05 +02:00
638960284e Typo in the UI. 2018-10-23 13:14:03 +02:00
8e9b8a0953 fix: netcup and DuckDNS. 2018-10-23 11:18:02 +02:00
3f044c48fa Nil request body with retry 2018-10-23 10:10:04 +02:00
37d8e32e0b clarify DuckDNS does not support multiple TXT records 2018-10-18 16:42:03 +02:00
46ce807624 Adds the note: acme.domains is a startup configuration 2018-10-17 16:30:04 +02:00
e6a88f3531 Uses ASCII characters to spell Traefik 2018-10-17 16:24:04 +02:00
95d86d84b4 Add keepTrailingSlash option 2018-10-17 14:22:03 +02:00
70fa42aee0 Improve maintainer documentation 2018-10-16 18:12:03 +02:00
ba99fbe390 Fix certificate insertion loop to keep valid certificate and ignore the bad one 2018-10-16 11:00:04 +02:00
6a55772cda Rename Docker_Acme.md to Readme.md 2018-10-16 10:54:03 +02:00
6dcb51a4bd Merge 'v1.7.3' into master 2018-10-15 13:13:48 +02:00
c875819a2e Prepare release v1.7.3 2018-10-15 12:02:03 +02:00
6d4cf0d892 usebindportip can fall back on the container ip / port 2018-10-15 11:46:03 +02:00
78a9d20691 Add the AuthResponseHeaders to the labels 2018-10-15 10:54:03 +02:00
7c2409b5a7 DNS challenge Cloudflare auth zone 2018-10-15 09:40:02 +02:00
0335f6fba9 Log stack when panic 2018-10-12 15:40:03 +02:00
2c7b7cd6ca Fix recover from panic handler 2018-10-12 13:04:02 +02:00
5632952665 fix: golint. 2018-10-12 09:28:03 +02:00
7eeac63139 Fix: acme DNS providers 2018-10-11 16:50:04 +02:00
1b54f4d32a acme: prevent some malformed errors. 2018-10-11 10:50:03 +02:00
e8e9dd9400 Improve the CLI help (Update of the Flaeg dependency) 2018-10-10 19:10:04 +02:00
b722748ec3 Fix update oxy 2018-10-10 18:20:05 +02:00
609b2630d7 Add tags label to Docker provider documentation 2018-10-10 17:46:03 +02:00
5bdf8a5ea3 ACME DNS challenges 2018-10-10 16:28:04 +02:00
7a2592b2fa Added two example / Using labels in docker-compose.yml 2018-10-10 10:12:03 +02:00
546bebc860 Move buffering annotation documentation to service 2018-10-09 18:44:03 +02:00
ad51f4f2a5 Fix a typo 2018-10-09 18:36:03 +02:00
94a6f8426b Merge branch 'v1.7' into master 2018-10-09 11:19:55 +02:00
32f7fb8bff Make Zipkin trace rate configurable 2018-10-09 10:18:02 +02:00
a777c3553c Not allow ACME provider initialization if storage is empty 2018-10-08 19:24:03 +02:00
51650c1412 Add Gerald, Jean-Baptiste and Damien to maintainers 2018-10-08 16:46:03 +02:00
157580c232 Avoid flapping of multiple Ingress definitions 2018-10-05 18:36:03 +02:00
05f052b092 Merge branch 'v1.7.2' into master 2018-10-05 13:51:23 +02:00
1431ac5751 Basic Auth custom realm 2018-10-04 16:46:03 +02:00
a9deeb321b Prepare release v1.7.2 2018-10-04 15:34:02 +02:00
ec86149b1e Rule parsing error. 2018-10-04 10:20:03 +02:00
31f92001e2 Add Template-ability check to Kubernetes API Fields 2018-10-04 09:58:03 +02:00
d69977c229 Do not Errorf during file watcher verification test loop. 2018-10-04 09:26:03 +02:00
44e06a1a1e Trimming whitespace in XFF for IP whitelisting 2018-10-03 22:52:02 +02:00
f9689d1562 fix broken links in readme.md 2018-10-03 08:56:03 +02:00
4cb1ae4626 Colored logs on windows. 2018-10-02 16:28:04 +02:00
f04813fa02 Whitelist log for deprecated configuration. 2018-10-01 19:44:03 +02:00
742029d8a4 Global configuration log at start 2018-10-01 19:18:03 +02:00
f74526a36e Document the default accessLog format 2018-10-01 18:54:04 +02:00
61e1836472 Return an error if kv store CA cert is invalid 2018-10-01 17:24:03 +02:00
8d8e509fe6 Correctly initialize kv store if storage key missing 2018-10-01 17:02:02 +02:00
147e79ea07 TLS, ACME, cluster and several entrypoints. 2018-10-01 16:56:03 +02:00
5eae95ee46 Add master overhaul notice 2018-10-01 16:06:04 +02:00
9e26f0b058 Prepare release v1.7.1 2018-09-29 00:16:03 +02:00
8cc3c4a6b7 Use the first static certificate as a fallback when no default is given 2018-09-29 00:04:02 +02:00
1d8bdd4384 Don't remove static certs from config when cluster mode 2018-09-28 17:54:04 +02:00
5acd43efaf Add health check timeout parameter 2018-09-27 20:16:03 +02:00
7033b996c6 Don't challenge ACME when host rule on another entry point 2018-09-27 18:04:03 +02:00
0c76a8ac89 Fix TLS ALPN cluster mode. 2018-09-27 16:54:05 +02:00
f10516deb7 Merge v1.7.0 into master 2018-09-25 15:06:03 +02:00
d4311f9cf5 Prepare release v1.7.0 2018-09-24 11:44:03 +02:00
6a50a6fd5a Added Dashboard table item for Rate Limits 2018-09-24 11:20:03 +02:00
29473ef356 Do not copy hop-by-hop headers to forward auth request 2018-09-24 10:42:03 +02:00
1f1ecb15f6 Fix logger in Oxy 2018-09-24 10:04:03 +02:00
38d655636d Fix some DNS providers issues 2018-09-21 18:38:02 +02:00
9ab5cbf235 Removed non-applicable default tests and fixed custom tests 2018-09-21 16:44:02 +02:00
fdf14cd101 Merge 'v1.7' into master 2018-09-18 15:48:28 +02:00
f63873cc73 Prepare release 1.7.0-rc5 2018-09-18 15:36:03 +02:00
c2938ff138 Remove hop-by-hop headers from forward auth response 2018-09-18 14:22:03 +02:00
ab2c98d931 Ensure only certificates from ACME enabled entrypoint are used 2018-09-18 08:22:03 +02:00
0ae8cd9a9d Fix error pages 2018-09-17 20:40:04 +02:00
f3aefe282c Avoid panic during stop 2018-09-17 16:26:03 +02:00
a80cca95a2 Update lego 2018-09-17 15:16:03 +02:00
c52f4b043d Add interface to Træfik logger 2018-09-14 13:34:03 +02:00
253060b4f3 Update Lego 2018-09-14 10:06:03 +02:00
36966da701 Add missing quotes around backendName in kv template 2018-09-14 09:00:03 +02:00
bb7c4aaf7e Fix tracing duplicated headers 2018-09-12 16:32:04 +02:00
bd4846aa9c Merge branch 'v1.7' into master 2018-09-07 19:33:01 +02:00
c68ebaa2ca Prepare release v1.7.0-rc4 2018-09-07 11:34:03 +02:00
538424b01c Merge branch 'v1.6' into v1.7 2018-09-07 10:11:30 +02:00
48e7a87741 Update go version 2018-09-07 09:40:03 +02:00
74ace58ae1 Avoid goroutine leak in server 2018-09-06 14:24:03 +02:00
913d8737cc Allow Træfik to know if a Host rule is malformed 2018-09-04 17:14:04 +02:00
b98f5ed8b1 Remove a dead link. 2018-09-04 15:54:06 +02:00
e4bb506ace StoreConfig always initializes the account if it is missing 2018-09-03 10:12:03 +02:00
0f0ba099c9 Make the "base domain" on all providers 2018-08-30 02:24:03 +02:00
f400292be7 Enable retry on websocket 2018-08-29 11:58:03 +02:00
efc6560d83 Pass the TLS Cert infos in headers 2018-08-29 11:36:03 +02:00
4055654e9b Merge branch 'v1.7' into master 2018-08-28 17:04:39 +02:00
56488d435f Handle Te header when http2 2018-08-27 18:10:03 +02:00
f586950528 multiple frontends for consulcatalog 2018-08-27 17:00:05 +02:00
a302731cd1 Add segment support for ECS 2018-08-27 16:32:05 +02:00
00728e711c IPStrategy for selecting IP in whitelist 2018-08-24 16:20:03 +02:00
ef753838e7 Fix documentation for route53 acme provider 2018-08-24 07:14:03 +02:00
acb79d6f73 Merge branch 'v1.6' into v1.7 2018-08-23 10:49:03 +02:00
157c796294 Rename traefikproxy twitter account into traefik 2018-08-23 10:44:02 +02:00
0861c59bec Remove unnecessary loop 2018-08-23 09:40:03 +02:00
e4a7375d34 Update kubernetes docs to reflect https options 2018-08-23 08:52:02 +02:00
6bbac65f7e Include missing key in error message for KV store 2018-08-22 16:08:02 +02:00
845f1a7377 Add security mailinglist 2018-08-22 10:18:03 +02:00
9c8e518423 Auth Forward with certificates in templates. 2018-08-21 17:12:03 +02:00
bd3b787fd5 Merge 'v1.6.6' into v1.7 2018-08-21 11:43:34 +02:00
27e4a8a227 Fixes bad palette in doc 2018-08-20 17:50:04 +02:00
cf2d7497e4 Mention docker-compose as a requirement in the let's encrypt guide 2018-08-20 17:34:05 +02:00
df41cd925e Add vulnerability form 2018-08-20 17:08:03 +02:00
e46de74328 Improve the wording in the documentation for Docker and fix title for Docker User Guide 2018-08-20 16:46:04 +02:00
feeb7f81a6 Prepare Release v1.6.6 2018-08-20 14:46:02 +02:00
2beb5236d0 A tiny rewording on the documentation API's page 2018-08-20 13:34:03 +02:00
f062ee80c8 Docs: Adding warnings and solution about the configuration exposure 2018-08-20 12:02:03 +02:00
a7bb768e98 Remove TLS in API 2018-08-20 11:16:02 +02:00
07be89d6e9 Update oxy dependency 2018-08-20 10:38:03 +02:00
d81c4e6d1a Avoid duplicated ACME resolution 2018-08-20 09:40:03 +02:00
870755e90d Extend https redirection tests, and fix incorrect behavior 2018-08-14 18:38:04 +02:00
bd3c8c3cde Don't merge kubernetes ingresses when priority is set 2018-08-14 17:40:04 +02:00
278b3180c3 Prevent unparsable strings from being rendered in the Kubernetes template 2018-08-14 16:48:04 +02:00
bb2686a08f Update ACME documentation about TLS-ALPN challenge 2018-08-13 08:46:02 +02:00
202783ca7d Add ppc64le platform support 2018-08-10 16:56:04 +02:00
308904110a Merge branch 'v1.6' into 'v1.7' 2018-08-08 19:16:00 +02:00
60b4095c75 Set keepalive on TCP socket so idleTimeout works 2018-08-08 19:12:03 +02:00
d04b4fa2cc Set a keyType to ACME if the account is stored with no KeyType 2018-08-08 07:58:03 +02:00
2d449f63e0 Typo in auth labels. 2018-08-08 02:52:03 +02:00
1ec4e03738 Remove etcd v2 2018-08-07 19:12:03 +02:00
9cd47dd2aa Small code enhancements 2018-08-06 20:00:03 +02:00
015cd7a3d0 Remove deprecated elements 2018-08-06 17:20:03 +02:00
7ff6e6b66f Freeze mkdocs version 2018-08-06 15:50:03 +02:00
e92b01c528 Merge current v1.7 into master 2018-08-06 14:58:03 +02:00
bb33128552 Change syntax in quick start guide 2018-08-06 14:08:03 +02:00
86add29838 Freeze mkdocs version. 2018-08-06 13:50:02 +02:00
70712a0f62 Typo in docker-and-lets-encrypt.md 2018-08-03 17:52:03 +02:00
4db937b571 Avoid a panic during Prometheus registering 2018-08-03 14:02:02 +02:00
ad6f41c77a Simple documentation grammar update in tracing 2018-08-03 10:36:03 +02:00
e6040e55f5 Update kubernetes.md 2018-08-03 10:00:03 +02:00
dad0e75121 Merge branch 'v1.7' into master 2018-08-02 17:28:44 +02:00
c159e316be Migrate Compress from bool to struct 2018-08-02 17:14:03 +02:00
b4ac3d4470 Improve Connection Limit Kubernetes Documentation 2018-08-02 08:14:02 +02:00
43d22d7a2f Small code enhancements on providers 2018-08-01 16:58:03 +02:00
d62f7e2082 Use official Pebble Image. 2018-08-01 16:56:04 +02:00
cfe2f1a1e6 Prepare release 1.7.0-rc3 2018-08-01 15:28:03 +02:00
6f6ebb8025 Updates for jaeger tracing client. 2018-08-01 13:52:03 +02:00
7732e2307e Fix missing tracing backend in documentation 2018-08-01 13:36:03 +02:00
8c733abef3 Fix style in examples/quickstart 2018-08-01 11:22:03 +02:00
4809476c19 Move prometheusState.reset() to test file. 2018-08-01 11:20:03 +02:00
d727761e5d No need for npm progress=false 2018-08-01 10:56:03 +02:00
4d79c2a6d2 Added support for Trace name truncation for traces 2018-08-01 00:16:03 +02:00
8627256e74 Remove Deprecated Step 1 2018-07-31 19:28:03 +02:00
ed0c7d9c49 H2C: Remove buggy line in init to make verbose switch working 2018-07-31 18:56:03 +02:00
fb4717d5f3 Add traefik prefix to k8s annotations 2018-07-31 17:58:04 +02:00
09b489a614 Add possibility to set a protocol 2018-07-31 17:12:03 +02:00
402f7011d4 Fix ACME certificate for wildcard and root domains 2018-07-31 12:32:04 +02:00
838dd8c19f Fix acme account deletion without provider change 2018-07-31 11:50:03 +02:00
91cafd1752 Correct Entrypoint Redirect with Stripped or Added Path 2018-07-31 11:28:03 +02:00
eea60b6baa Replace unrendered emoji 2018-07-31 10:58:03 +02:00
baf8d63cb4 Improve TLS integration tests 2018-07-31 10:48:03 +02:00
967e4208da Updating oxy dependency 2018-07-31 10:28:02 +02:00
ba3a579d07 Fix Rewrite-target regex 2018-07-31 09:08:03 +02:00
1d53077fc7 Complete maintainers processes 2018-07-31 08:50:03 +02:00
4b480ece13 Complete maintainers processes 2018-07-27 16:28:03 +02:00
7d2b7cd7f1 Added default configuration for DataDog APM Tracer 2018-07-26 17:44:03 +02:00
73b4df4e18 Remove TLS in API 2018-07-26 12:42:03 +02:00
a23a9228da Merge branch 'v1.7' into master 2018-07-25 17:58:56 +02:00
37aa902cef Docs verify failed only on 4XX 2018-07-25 17:58:02 +02:00
bafb583666 Update Namecheap status 2018-07-24 01:02:03 +02:00
aabebb2185 Update lego 2018-07-23 17:30:03 +02:00
f611ef0edd Removes templates 2018-07-23 11:56:02 +02:00
d8f69700e6 Merge branch 'v1.7' into master 2018-07-19 17:33:28 +02:00
c8ae97fd38 Handle shutdown of Hijacked connections 2018-07-19 17:30:06 +02:00
d50b6a34bc Uses both binded HostIP and HostPort when useBindPortIP=true 2018-07-19 16:40:03 +02:00
853be929bc fix: some DNS provider link 2018-07-18 14:24:03 +02:00
3bb04142f3 fix: some DNS provider link. 2018-07-18 13:30:03 +02:00
d53fbb9d7f Merge branch 'v1.7' into master 2018-07-17 19:12:09 +02:00
a1911a9608 Prepare release 1.7.0 rc2 2018-07-17 14:30:03 +02:00
ff2e2d5026 Fix 400 bad request on AWS ECS API 2018-07-17 12:26:03 +02:00
a953d3ad89 Auth section in web UI. 2018-07-17 12:02:03 +02:00
9ce444b91a Don't pass the Authorization header to the backends 2018-07-16 13:52:03 +02:00
ae8be89767 Merge branch 'v1.6' into 'v1.7' 2018-07-13 18:06:07 +02:00
5774d100c1 Update service fabric 2018-07-13 18:04:03 +02:00
dbe720f0f1 Remove unusable --cluster flag 2018-07-13 17:32:03 +02:00
5afc8f2b12 KV and authentication 2018-07-13 17:24:03 +02:00
c7e008f57a Merge branch 'v1.6' into 'v1.7' 2018-07-12 19:24:11 +02:00
14b7152bf0 Serve TLS-Challenge certificate in first 2018-07-12 19:10:03 +02:00
3ef6bf2118 Documentation: Introduces a check stage to validate HTML and links 2018-07-12 18:26:03 +02:00
f0ab2721a5 Fix path to the debug pprof API 2018-07-12 17:58:02 +02:00
2721c2017c Correct Modifier in Kubernetes Documentation 2018-07-12 17:42:05 +02:00
a7c158f0e1 Fix bad condition in ECS provider 2018-07-12 17:40:04 +02:00
7ff9193cf5 Correct App-Root kubernetes behavior 2018-07-12 15:20:04 +02:00
5ce4a2d05c Add HTTP authentification to influxdb metric backend 2018-07-11 17:50:03 +02:00
031451abab Merge branch 'v1.6.5' into 'v1.7' 2018-07-11 11:07:42 +02:00
8d75aba7eb Send 'Retry-After' to comply with RFC6585. 2018-07-11 10:08:03 +02:00
027093a5a5 Create init method on provider interface 2018-07-11 09:08:03 +02:00
bdc0e3bfcf Prepare release v1.6.5 2018-07-10 17:46:04 +02:00
b2a57ca1f3 Add more K8s Unit Tests 2018-07-10 11:22:03 +02:00
6ef0e6791b Merge branch 'v1.6' into 'v1.7' 2018-07-10 01:24:14 +02:00
9374d6b3b9 Fix rewrite-target Annotation behavior 2018-07-10 00:26:03 +02:00
f173ff02e3 Add a mutex on local store for HTTPChallenges 2018-07-09 23:28:02 +02:00
ba2046491a Prepare release 1.7.0-rc1 2018-07-09 16:54:04 +02:00
083b471bcf Merge branch 'v1.6' into master 2018-07-09 15:34:47 +02:00
bf73127e0b Performance enhancements for the rules matchers. 2018-07-09 15:08:04 +02:00
333b785061 Add logs when error is generated in error handler 2018-07-07 10:14:03 +02:00
79bf19c897 Auth support in frontends 2018-07-06 16:52:04 +02:00
0c0ecc1cdc Call functions to enable block/mutex pprof profiles. 2018-07-06 10:58:04 +02:00
bacd58ed7b Add logs when error is generated in error handler 2018-07-06 10:32:03 +02:00
689f120410 Improve TLS Handshake 2018-07-06 10:30:03 +02:00
2303301d38 Add annotation to allow modifiers to be used properly in kubernetes 2018-07-06 10:06:04 +02:00
f323df466d Split the error handling from Consul Catalog (deadlock) 2018-07-05 15:12:03 +02:00
b1f1a5b757 Substitude hardcoded "<namespace>/<name>" with k8s ListerGetter 2018-07-04 17:08:03 +02:00
0d262561d1 Allow binding ECS container port 2018-07-04 15:08:03 +02:00
12c713b187 Support traefik.backend for ECS 2018-07-04 14:22:03 +02:00
b1836587f2 Update keyFile first/last line comment in kv-config.md 2018-07-04 14:20:03 +02:00
04d8b5d483 Adding compatibility for marathon 1.5 2018-07-03 23:42:03 +02:00
461ebf6d88 Create Global Backend Ingress 2018-07-03 18:58:03 +02:00
41eb4f1c70 Add a k8s guide section on traffic splitting via service weights. 2018-07-03 16:50:06 +02:00
31a8e3e39a CNAME flattening 2018-07-03 16:44:05 +02:00
139f280f35 ACME TLS ALPN 2018-07-03 12:44:04 +02:00
17ad5153b8 Minor changes 2018-07-03 10:02:03 +02:00
bb14ec70bd Auth support in frontends for k8s and file 2018-07-02 11:52:04 +02:00
e8e36bd9d5 Specify backend servers' weight via annotation for kubernetes 2018-07-01 11:26:03 +02:00
f9b1106df2 Forward auth headers 2018-06-30 07:54:03 +02:00
df600d6f3c Merge branch 'v1.6' into master 2018-06-30 00:43:32 +02:00
157e76e829 Add support for ECS constraints 2018-06-30 00:14:03 +02:00
dbc3b85cd0 Minor formatting issue in user-guide 2018-06-29 17:02:03 +02:00
11691019a0 Change code block of traefik-web-ui to match file 2018-06-28 23:10:03 +02:00
3192307d59 Added integration support for DataDog APM Tracing 2018-06-28 18:40:04 +02:00
ba8c9295ac Update golang.org/x/net dependency 2018-06-28 17:58:04 +02:00
d5436fb28b Create a custom logger for jaeger 2018-06-28 17:36:03 +02:00
886cc83ad9 Add support for stale reads from Consul catalog 2018-06-28 16:40:04 +02:00
9e012a6b54 Simplify acme e2e tests. 2018-06-27 15:08:05 +02:00
5eda08e9b8 Better support on same prefix at the same level in the KV 2018-06-26 16:18:05 +02:00
ec6e46e2cb segment labels: multiple frontends for one backend. 2018-06-22 19:44:03 +02:00
56fe023a12 Allow any kubernetes ingressClass value 2018-06-22 16:54:03 +02:00
aa705dd691 Create middleware to be able to handle HTTP pipelining correctly 2018-06-20 09:12:03 +02:00
aa6fea7f21 Add more k8s tests 2018-06-19 22:10:03 +02:00
e31c85aace avoid retries when any data was written to the backend 2018-06-19 13:56:04 +02:00
1c3e4124f8 The gandiv5 provider works with wildcard 2018-06-18 09:26:02 +02:00
586ba31120 Merge v1.6.4 into master 2018-06-15 17:58:20 +02:00
c1757372d3 Prepare release v1.6.4 2018-06-15 17:04:03 +02:00
7451449dd6 Simplify get acme client 2018-06-15 16:42:03 +02:00
5b2b29043c Use logrus writer instead of os.Stderr 2018-06-15 16:08:03 +02:00
2758664226 Fix panic setting ingress status 2018-06-14 09:22:03 +02:00
bb3f28ffa7 Backend name with docker-compose and segments. 2018-06-14 09:20:04 +02:00
6ceb2af4a7 Clean metrics documentation. 2018-06-13 17:44:04 +02:00
d5b649bf1c Add xforwarded method 2018-06-13 15:14:03 +02:00
81f23cc732 Add a default value for the docker.network configuration 2018-06-13 14:50:04 +02:00
b59276ff1c Use net.JoinHostPort for servers URL 2018-06-13 10:08:03 +02:00
2e95832812 Enclose IPv6 addresses in "[]" 2018-06-13 08:06:03 +02:00
01f2b3cd20 Update Slack URL. 2018-06-12 17:04:04 +02:00
2240bf9430 The exoscale provider works with wildcard 2018-06-12 16:16:03 +02:00
db036edccd Fix typo in kv user guide 2018-06-12 08:20:03 +02:00
1fbf5b84a2 Added duration filter for logs 2018-06-11 18:40:08 +02:00
08e1f626c1 edit wording 2018-06-11 16:26:03 +02:00
c0d08f5e3e Temporary benchmarks removal during performance optimization process 2018-06-11 11:46:03 +02:00
eac20d61df Extreme Makeover: server refactoring 2018-06-11 11:36:03 +02:00
dec3f0798a Add missing annotation documentation. 2018-06-08 12:54:02 +02:00
bddb4cc33c Merge branch 'v1.6' into master 2018-06-07 10:58:59 +02:00
62ded580ce Handle buffer pool for oxy 2018-06-07 09:46:03 +02:00
51227241b7 Fix backend reuse 2018-06-06 17:56:03 +02:00
9cf4e730e7 Fix typo which breaks k8s example manifest 2018-06-06 17:16:04 +02:00
e9c63f3988 Custom frontend name for test helper 2018-06-06 15:20:03 +02:00
2c47691cf1 Adding grafana dashboards based on prometheus metrics 2018-06-06 14:54:03 +02:00
599b699ac9 Segments Labels: Mesos 2018-06-06 00:26:03 +02:00
a5beeb4f04 Merge tag 'v1.6.3' into master 2018-06-05 23:07:53 +02:00
446d73fcf5 Prepare release v1.6.3 2018-06-05 17:20:04 +02:00
e299775d67 Detect change when service or node are in maintenance mode 2018-06-05 16:42:03 +02:00
2c18750537 Improve Prometheus metrics removal 2018-06-05 12:32:03 +02:00
f317e50136 Docs: ACME Overhaul 2018-06-05 10:36:03 +02:00
1d84bda7ca Update Kubernetes provider to support IPv6 Backends 2018-06-05 10:28:03 +02:00
ae7c947ba5 Add user agent for ACME 2018-06-05 09:54:03 +02:00
6d07729c55 Add URL and Host for some access logs. 2018-06-05 09:02:03 +02:00
1d7bf200a8 Reflect changes in catalog healthy nodes in healthCheck watch 2018-06-05 08:42:03 +02:00
6bc59f8b33 Includes the headers in the HTTP response of a websocket request 2018-06-04 14:14:03 +02:00
b2cf03fa5c Use to the stable version of Lego 2018-05-31 09:30:04 +02:00
36e273714d helm installation using values 2018-05-30 17:38:04 +02:00
6be77b7fb9 Webui Whitelist overflow. 2018-05-30 09:44:02 +02:00
6bcf45f136 fix: whitelist and XFF. 2018-05-30 09:26:03 +02:00
8bca8236db Update acme.md 2018-05-30 04:16:03 +02:00
67a0b4b4b1 Metrics: Add support for InfluxDB Database / RetentionPolicy and HTTP client 2018-05-29 22:58:03 +02:00
a7200a292b AWS ECS Fargate 2018-05-28 18:52:03 +02:00
fb5aa4c9c1 Error pages and header merge 2018-05-28 15:00:04 +02:00
3f5772c62a Improve ACME account registration URI management 2018-05-28 14:40:03 +02:00
e76836b948 h2c server 2018-05-28 11:46:03 +02:00
2d946d7ee7 Remove ACME empty certificates from KV store 2018-05-25 19:36:04 +02:00
10ca35dccd Update Kubernetes Port Documentation 2018-05-25 17:26:05 +02:00
bfdd1997f6 Generated assets file are only mandatory in main 2018-05-25 15:10:04 +02:00
9420308667 Implement h2c with backend 2018-05-24 10:52:04 +02:00
83e09acc9f Upgrade dependencies 2018-05-23 17:48:04 +02:00
d6d795e286 Support 3xx HTTP status codes for health check 2018-05-23 17:06:04 +02:00
c09febfffc Make accesslogs.logTheRoundTrip async to get lost performance 2018-05-23 16:46:04 +02:00
5b3bba8f6e Add missing quotes. 2018-05-23 16:12:05 +02:00
085593b9e5 sane default and configurable Marathon request timeouts 2018-05-22 22:38:03 +02:00
e2a5d4f83e Merge 'v1.6.2' into master 2018-05-22 19:14:34 +02:00
e3671cbb04 Prepare release 1.6.2 2018-05-22 17:06:04 +02:00
a525d02cc5 Force to use ACME v02 endpoint. 2018-05-22 16:08:03 +02:00
3c8c5ebb96 Use index-based syntax in KV tests. 2018-05-22 12:30:03 +02:00
1cc1a4e6e2 WebUI typo into the buffering section. 2018-05-22 12:28:03 +02:00
3f0af3fe09 No template parsing on traefik configuration file 2018-05-22 12:02:03 +02:00
e2bac47a0a Support all 2xx HTTP status code for health check. 2018-05-22 09:22:03 +02:00
bc26d9f0de Enhance Load-balancing method validation log. 2018-05-22 09:20:03 +02:00
5c4692a0df Modify tests to only run if non-static files have been modified 2018-05-19 00:30:03 +02:00
0ba28bbc8b Update caServer to letsencrypt one in examples 2018-05-18 18:16:03 +02:00
550184275a Add basicAuth example for KV 2018-05-18 17:54:03 +02:00
c376083ecb Add command for basic auth with Docker Compose 2018-05-18 17:34:04 +02:00
1db5fcf200 Removes ambiguity with the word 'default' 2018-05-18 17:12:03 +02:00
16b2555ab3 Fix error pages content. 2018-05-18 16:38:03 +02:00
9227d32d57 Enable Ingress Status updates 2018-05-18 14:12:03 +02:00
c37b040217 Mapping ExternalNames to custom ports 2018-05-17 18:46:03 +02:00
5a1d2aa4b6 Fix contributing guide link in PR template 2018-05-17 12:52:03 +02:00
4a3b1f3847 Enable to override certificates in key-value store when using storeconfig 2018-05-17 12:32:03 +02:00
d9a5258f40 Update docs to match SF provider labels 2018-05-17 11:04:03 +02:00
190ebbed27 Update docs to reflect Provider wording 2018-05-16 19:48:03 +02:00
a0872c9e31 Route rules overlaps in UI 2018-05-16 13:44:03 +02:00
68cc826519 Add option to select algorithm to generate ACME certificates 2018-05-16 11:44:03 +02:00
f5b306e7ff Add redirect-permanent to kubernetes template 2018-05-16 10:46:03 +02:00
7a1feb3c51 fix: acme errors management. 2018-05-15 17:28:02 +02:00
e691168cdc Add some missing elements in the WebUI 2018-05-15 17:26:04 +02:00
4eda1e1bd4 Merge branch 'v1.6' into master 2018-05-15 10:43:27 +02:00
1e8df9f245 Prepare release v1.6.1 2018-05-14 21:08:03 +02:00
b72937e8fb Fix webui 2018-05-14 19:46:03 +02:00
df11e67bb4 Override health check scheme 2018-05-14 12:08:03 +02:00
b7d20496f3 Add SSLForceHost support. 2018-05-14 11:44:03 +02:00
67847c3117 Error when accesslog and error pages 2018-05-14 10:38:03 +02:00
a2a0c80acb Fix segment backend name 2018-05-14 10:18:03 +02:00
b3fd06fb45 Add missing deprecation info in CLI help. 2018-05-14 09:52:03 +02:00
c5db8d903c Enhance entry point TLS CLI reference. 2018-05-13 17:12:03 +02:00
8fcd242494 Add Documentation update for Kubernetes Ingress 2018-05-11 12:52:03 +02:00
ebd9af900e Changed "is could" to should 2018-05-09 17:48:03 +02:00
b02381c2d5 Fix wrong tag in forward span in tracing middleware 2018-05-08 12:00:03 +02:00
dce65ab9c2 Restore default issue template. 2018-05-07 14:16:02 +02:00
97295f270b Update issue templates 2018-05-07 12:14:02 +02:00
8e64bc8785 Merge branch 'v1.6' into master 2018-05-04 17:57:06 +02:00
9b199ea756 fix: 1.6 change log. 2018-05-04 16:08:03 +02:00
ec3b913ee4 fix: change log v1.6.0 2018-05-01 00:46:03 +02:00
c210ab31d9 Prepare release v1.6.0 2018-04-30 23:20:05 +02:00
6c1fa91c70 Document custom k8s ingress class usage in guide. 2018-04-30 20:28:03 +02:00
04bab185f6 Add redirect section. 2018-04-30 12:28:03 +02:00
2213b4cf37 Cleaning labels/annotations documentation. 2018-04-30 12:08:03 +02:00
1d770e5636 Fix typo and tweak formatting in quickstart 2018-04-30 09:24:04 +02:00
b7e15e0a2c doc: update Traefik images. 2018-04-27 14:54:03 +02:00
9c651ae913 New web ui 2018-04-27 13:12:04 +02:00
a1bbaec71f Does not generate ACME certificate if domain is checked by dynamic certificate 2018-04-27 10:36:04 +02:00
3b3ca89483 Merge branch 'v1.6' into master 2018-04-25 08:22:17 +02:00
b4e3bca6fa Remove acme provider dependency in server 2018-04-24 22:40:04 +02:00
e09d5cb4ec Fix documentation for tracing with Jaeger 2018-04-24 19:22:03 +02:00
cae353b9f6 Add documentation about Templating in backend file 2018-04-24 18:58:03 +02:00
edb5b3d711 Fix whitelist and XFF. 2018-04-23 16:20:05 +02:00
667a0c41ed Minor improvements to documentation 2018-04-23 15:56:03 +02:00
9daae9c705 Extract internal router creation from server 2018-04-23 15:30:03 +02:00
2975acdc82 Forward auth: copy response headers when auth failed. 2018-04-23 15:28:04 +02:00
76dcbe3429 Fix error pages redirect and headers. 2018-04-23 11:28:04 +02:00
d8e2d464ad Remove dead code. 2018-04-23 10:54:03 +02:00
5f8bcb0c26 Fix typo in documentation 2018-04-23 10:28:04 +02:00
7ef8d6fa10 Ignore server for container with empty IP address. 2018-04-22 09:10:03 +02:00
5924a40222 Fix Service Fabric docs to use v1.6 labels. 2018-04-19 20:15:20 +02:00
05968eb232 Fix Service Fabric docs to use v1.6 labels
Fix docs to use v1.6 labels rather than v1.5.
2018-04-19 16:30:10 +02:00
36dcfbfe2d Add HTTP headers to healthcheck. 2018-04-18 18:16:03 +02:00
95ce4f5c1e refactor: minor fixes. 2018-04-18 10:48:03 +02:00
f258f20b04 doc: add 'traefik.domain'. 2018-04-18 10:48:03 +02:00
7e2ad827aa fix: used 'traefik.domain' in frontend rule. 2018-04-18 10:48:03 +02:00
e6ce61fdf0 Merge tag 'v1.6.0-rc6' into master 2018-04-18 10:13:22 +02:00
3df588047d Prepare release v1.6.0-rc6 2018-04-17 13:42:03 +02:00
ac0e5cbb29 Use shared label system 2018-04-17 11:18:04 +02:00
5ab584bc6a Fix panic in atomic on ARM and x86-32 platforms 2018-04-17 10:32:03 +02:00
a2e03e3bd0 Create backup file during migration from ACME V1 to ACME V2 2018-04-16 19:34:04 +02:00
f0589b310f Fix multiple frontends with docker-compose --scale 2018-04-16 18:14:04 +02:00
8519b0d353 Fix nil value when tracing is enabled 2018-04-16 17:42:03 +02:00
21b8b2deb5 Support multi-port services. 2018-04-16 14:44:04 +02:00
6b82a77e36 Improved cluster api to include the current leader node 2018-04-16 14:10:04 +02:00
1954a49f37 add http headers to healthcheck 2018-04-16 11:40:03 +02:00
0e3d1e1503 fix: redirect to HTTPS first before basic auth if header redirect (secure) is set 2018-04-16 11:06:03 +02:00
ebd77f314d Fix duplicated tags in InfluxDB 2018-04-16 10:28:04 +02:00
749d833f65 fix: template version documentation. 2018-04-16 00:34:03 +02:00
0373cd6f97 Add missing argument in log. 2018-04-13 19:46:03 +02:00
1f3fc8a366 fix: backend name for stateful service and more. 2018-04-13 15:44:04 +02:00
89c3930b28 Merge branch 'v1.5' into 'v1.6' 2018-04-13 15:02:29 +02:00
29e1e9eef2 fix: backend name for stateful service. 2018-04-13 14:38:03 +02:00
de3aeb9732 Merge branch 'v1.6' into mrg-current-v1.6 2018-04-12 14:36:36 +02:00
85aa1a444a Prepare release 1.6.0-rc5 2018-04-12 11:44:03 +02:00
702876ae7f Limit label selector to Ingress factory. 2018-04-12 11:14:05 +02:00
7109910f46 Generate wildcard certificate with SANs in ACME 2018-04-11 17:16:07 +02:00
8168d2fdc1 Server weight zero 2018-04-11 16:30:04 +02:00
edbcd01fbc Merge branch 'v1.5' into 'v1.6' 2018-04-11 14:20:53 +02:00
c99266e961 Fix: error pages 2018-04-11 13:54:03 +02:00
f804053736 Factorize labels managements. 2018-04-11 12:26:03 +02:00
2641832304 Default certificate expiry 2018-04-11 10:36:03 +02:00
21f6f81914 Update kubernetes.md 2018-04-11 10:34:04 +02:00
ccd919aba3 Fix Azure brand 2018-04-10 17:26:04 +02:00
2387010556 Disable closeNotify when method GET for http pipelining 2018-04-10 17:24:04 +02:00
f35d574759 Minor updates to dumpcerts.sh 2018-04-10 16:52:05 +02:00
3be74bb275 Fix acme.json file automatic creation 2018-04-10 10:52:04 +02:00
b1be062437 fix: update lego. 2018-04-09 18:28:03 +02:00
2d0d320d05 Remove useless ACME tab from UI. 2018-04-09 16:06:03 +02:00
1de5111ab5 s/Host/HostRegexp 2018-04-09 11:18:03 +02:00
3d530e4747 Command version explanation for alpine image. 2018-04-06 18:14:03 +02:00
0ef1b7b683 Fix: Add TTL and custom Timeout in DigitalOcean DNS provider 2018-04-06 17:04:03 +02:00
66485e81b4 Normalize parameter names in configs 2018-04-06 09:38:03 +02:00
e74e7cf734 Add ACME certificates only on ACME EntryPoint 2018-04-06 08:44:03 +02:00
03ce6a1cc4 Merge tag 'v1.6.0-rc4' into master 2018-04-04 15:10:03 +02:00
a19b93c966 fix: overflow on 32 bits arch. 2018-04-04 15:04:04 +02:00
f7fd1f2a63 Prepare release v1.6.0-rc4 2018-04-04 14:12:03 +02:00
88b71d23db Several apps with same backend name in Marathon. 2018-04-04 12:28:03 +02:00
762ef12eb6 Support TLS MinVersion and CipherSuite as CLI option. 2018-04-04 11:56:04 +02:00
6845068b82 doc: template version for ECS, Consul Catalog and Mesos. 2018-04-04 11:52:05 +02:00
5c0b18efe4 chore: autogen. 2018-04-04 11:52:05 +02:00
4b93d040b3 refactor: Mesos labels. 2018-04-04 11:52:05 +02:00
ff61cc971e refactor: Consul Catalog labels. 2018-04-04 11:52:05 +02:00
46db91ce73 refactor: ECS labels. 2018-04-04 11:52:05 +02:00
5921909ef5 Add tests on IPWhiteLister. 2018-04-03 18:36:03 +02:00
1537861c61 Merge branch 'v1.5' into 'v1.6' 2018-04-03 12:12:19 +02:00
1b93551572 Update docker-and-lets-encrypt example to show traefik:1.5.4 2018-04-03 11:14:04 +02:00
197a5fbcf4 Update kubernetes.md 2018-04-03 10:30:03 +02:00
ff32529345 Moved /api/cluster/leadership handler under public routes (requires no authentication) 2018-04-03 10:00:07 +02:00
a179c3b399 Fixes prefixed annotations support. 2018-04-03 09:40:04 +02:00
a820585f56 Fixed documentation urls on README.md 2018-03-30 11:18:03 +02:00
bfb12f415c Prepare release v1.6.0-rc3. 2018-03-28 17:56:04 +02:00
a731b43b52 Frontend rule and segment labels. 2018-03-28 17:18:04 +02:00
118b4eb07a Prepare release v1.6.0-rc2 2018-03-27 16:48:05 +02:00
f1a05ab73c Add wildcard match to acme domains 2018-03-27 16:18:03 +02:00
4c85a41bfb Fix basic documentation 2018-03-27 14:58:03 +02:00
30e048d4ab Fix panic with wrong ACME configuration 2018-03-27 12:22:03 +02:00
aa0ab6d387 Update SF white list documentation section. 2018-03-27 10:24:03 +02:00
30b87985b7 chore: update changelog. 2018-03-26 16:40:03 +02:00
df73211d56 feature: Service Fabric white list. 2018-03-26 16:40:03 +02:00
e3a4ddcd08 Prepare release 1.6.0-rc1 2018-03-26 16:04:03 +02:00
0ea007b26f Segments Labels: Rancher & Marathon 2018-03-26 15:32:04 +02:00
16bb9b6836 ACME V2 Integration 2018-03-26 14:12:03 +02:00
d2766b1b4f Ability to use "X-Forwarded-For" as a source of IP for white list. 2018-03-23 17:40:04 +01:00
4802484729 Segment labels: Docker 2018-03-23 13:30:03 +01:00
c762b9bb2e add access log filter for retry attempts 2018-03-23 09:28:03 +01:00
5792a19b97 Toggle /ping to artificially return unhealthy response on SIGTERM during requestAcceptGraceTimeout interval 2018-03-22 18:18:03 +01:00
9699dc2a85 Added cluster/leader endpoint 2018-03-22 18:00:05 +01:00
0fa0c2256a Update Service Fabric backend. 2018-03-22 17:42:03 +01:00
1b410980ca Remove non-supported label. 2018-03-22 17:16:04 +01:00
be0dbd62c1 Drop capabilities in Kubernetes DaemonSet example 2018-03-22 16:44:05 +01:00
1a411b658b Added support for templates to file provider 2018-03-22 16:14:04 +01:00
d2e84a700f Merge branch 'v1.5' into master 2018-03-22 12:46:51 +01:00
b9af55fc49 Introduction update 2018-03-22 12:34:03 +01:00
e0d92aed6d Miss-leading Docker backend documentation 2018-03-22 10:22:04 +01:00
f94fa78565 Introduce k8s informer factory 2018-03-22 10:14:04 +01:00
007a1fc7f2 Merge branch 'v1.5' into master 2018-03-22 08:48:01 +01:00
a3372acb6d Dependency fsnotify organization has been renamed 2018-03-21 17:04:08 +01:00
af7c9b520f Allow overriding the log level in debug mode. 2018-03-21 14:42:07 +01:00
43a510c046 Fix goroutine leak in consulcatalog when consul is down 2018-03-20 14:36:03 +01:00
329c576f44 Add SF to supported backends in docs 2018-03-20 10:34:03 +01:00
7afa33dfa1 Fix link to InsecureSkipVerify option. 2018-03-20 09:12:03 +01:00
73c6007730 Set INFO log level in Kubernetes guide and examples. 2018-03-19 10:38:04 +01:00
526c19181e Merge v1.5.4 into master 2018-03-15 22:22:03 +01:00
79cd306ac2 Prepare release v1.5.4 2018-03-15 14:26:03 +01:00
35b83678bd Add TLS Docs 2018-03-15 12:24:03 +01:00
eacb6ea15a Fix Rancher Healthcheck when upgrading a service 2018-03-15 12:06:04 +01:00
d88263dbf9 Use goroutine pool in throttleProvider 2018-03-15 10:54:03 +01:00
b1e3444798 Add lower-case passHostHeader key support. 2018-03-15 10:14:03 +01:00
f6c6d2bcd0 Add [file] in syntax reference 2018-03-15 09:02:03 +01:00
8d468925d3 Ultimate Access log filter 2018-03-14 14:12:04 +01:00
f99363674b Use context in Server 2018-03-14 13:14:03 +01:00
526a04d4c8 Merge branch 'v1.5' into master 2018-03-13 11:38:21 +01:00
593c0e7ce2 Updated the test-it example according to the latest docker version 2018-03-13 08:42:03 +01:00
e2b42ca57b Handle quoted strings in UnmarshalJSON 2018-03-12 22:00:04 +01:00
7860534f0c Clarify how setting a frontend priority works 2018-03-12 11:12:05 +01:00
fc81d92c88 Enhance Traefik TOML sample. 2018-03-12 10:40:04 +01:00
8fbac2e39e Fix typo in docs 2018-03-12 10:04:03 +01:00
b91ae71241 Added entrypoint metrics to influxdb 2018-03-12 09:34:03 +01:00
0a41cd43a5 Merge branch 'v1.5' into master 2018-03-09 12:02:29 +01:00
59f7b2ea98 Propagate insecure in white list. 2018-03-08 15:08:03 +01:00
862957c30c Safe access to ECS API pointer values. 2018-03-08 10:08:03 +01:00
4831890232 Merge branch 'v1.5' into master 2018-03-08 01:12:36 +01:00
546f0173ab Don't failed traefik start if register and subscribe failed on acme 2018-03-08 00:54:02 +01:00
b001b0da86 Add some missing quotes in templates 2018-03-07 22:10:04 +01:00
04e3f2f401 Unable to generate documentation 2018-03-07 21:50:04 +01:00
3a2b421566 Replace Delay by RefreshSecond in Eureka 2018-03-07 10:46:04 +01:00
acc432b5a8 capitalize Sec-WebSocket-Protocol Header 2018-03-07 08:08:03 +01:00
c4529820f2 Delete TLS-SNI-01 challenge from ACME 2018-03-06 14:50:03 +01:00
d3edccb839 Check all the C/N and SANs of provided certificates before generating ACME certificates in ACME provider 2018-03-06 10:12:04 +01:00
8380de1bd9 Create ACME Provider 2018-03-05 20:54:04 +01:00
bf43149d7e Merge branch 'v1.5' into master 2018-03-02 16:44:24 +01:00
13e2358815 Clarify some deprecations. 2018-03-02 14:46:03 +01:00
1f6f8d5e0f New option in secure middleware 2018-03-02 14:24:03 +01:00
716eca5976 fix: gh-pages drop edge. 2018-03-02 14:20:04 +01:00
9ae808aac4 Fix panic when parsing resolv.conf 2018-03-02 10:46:04 +01:00
c77fe6b434 Use responseModifier to override secure headers 2018-03-01 16:42:04 +01:00
f149b56063 Enhance API, REST, ping documentation. 2018-03-01 08:42:03 +01:00
831a3e384b Separate command from the main package 2018-03-01 08:10:04 +01:00
49a9e2a9e0 Second defaultEntryPoint should be https, not http. 2018-02-28 14:24:03 +01:00
a2db3e0499 Merge branch 'v1.5' into master 2018-02-27 14:10:24 +01:00
422109b82f Prepare release v1.5.3 2018-02-27 12:28:03 +01:00
c864a7297b Add DEBUG log when no provided certificate can check a domain 2018-02-27 11:10:03 +01:00
8da038041d Default value for lifecycle 2018-02-27 10:24:03 +01:00
dd954f3c0a Fix Duration JSON unmarshal 2018-02-26 22:14:03 +01:00
6f81e3479a Externalize Træfik rules in a dedicated package 2018-02-26 15:34:04 +01:00
db483e9d34 Check all the C/N and SANs of provided certificates before to generat… 2018-02-26 11:38:03 +01:00
700b7a1b51 Add a CLI help command for Docker. 2018-02-26 10:00:05 +01:00
ed65d00574 Infinite entry point redirection. 2018-02-26 09:34:03 +01:00
0306b5e8f7 Missing annotation prefix support. 2018-02-23 18:36:03 +01:00
cb54e414ed TLS Support for ConsulCatalog 2018-02-23 12:14:03 +01:00
bad71d1a36 Remove hardcoded frontend prefix in Kubernetes template 2018-02-23 11:38:02 +01:00
088b8fb348 Fix <nil> tracer value in KV 2018-02-23 11:16:03 +01:00
e28ebf1c62 Change port of traefik for error pages integration test 2018-02-23 10:52:03 +01:00
39eeb67d91 Upgrade AWS SKD to version v1.13.1 2018-02-22 14:58:04 +01:00
f460c1990e Starting Træfik even if TLS certificates are in error 2018-02-22 14:38:04 +01:00
0c0949679f Check for endpoints while detecting Consul service changes 2018-02-22 09:48:03 +01:00
58d4481118 Docs: Fix typos in k8s user-guide 2018-02-21 17:34:04 +01:00
83381e99cf it's -> its 2018-02-21 17:18:05 +01:00
21e28ae848 Merge branch 'v1.5' into master 2018-02-21 16:55:57 +01:00
31550fd2c9 Replace nginx by whoami in integration tests 2018-02-21 16:28:03 +01:00
7c7ee2ca61 Added missing metrics to registry for DataDog and StatsD 2018-02-21 10:04:03 +01:00
ba046b4d3a Fix doc cipher suites 2018-02-21 08:00:03 +01:00
d675d46930 Multiple issue and pull request templates. 2018-02-20 10:44:03 +01:00
7ea76929d4 Empty ip address when endpoint mode dnsrr 2018-02-20 08:12:02 +01:00
5ef55dd8b4 Add app-root annotation support for kubernetes ingress 2018-02-19 15:36:03 +01:00
d47c1a7975 Update to golang 1.10 2018-02-19 13:40:03 +01:00
8068057040 chore: add gometlinter configuration. 2018-02-19 10:54:03 +01:00
fcdeec0bfa refactor: use positive error code. 2018-02-19 10:54:03 +01:00
b9d8eff994 refactor: some minor changes. 2018-02-19 10:54:03 +01:00
529e34d2ae Remove unnecessary returns in tracing setup 2018-02-17 08:32:03 +01:00
26b3fe201b Split security labels and custom labels documentation. 2018-02-16 16:04:05 +01:00
f98c537ec2 Smooth dashboard refresh. 2018-02-16 16:02:03 +01:00
083bde64ee Fix traffic pronounce dead link 2018-02-16 13:22:02 +01:00
462dcbcf03 Change boolean annotation values to string 2018-02-16 12:20:04 +01:00
45fe218ee2 Isolate backend with same name on different provider 2018-02-16 11:04:04 +01:00
d54777236c Update documentation on onHostRule, ping examples, and web deprecation 2018-02-16 10:32:03 +01:00
dafdaa4208 Correct conditional setting of buffering retry expression. 2018-02-15 16:06:03 +01:00
5212b7d3bd Handle zipkin collector creation 2018-02-15 10:28:03 +01:00
83a92596c3 Bump kubernetes/client-go 2018-02-14 09:56:04 +01:00
4f3b06472b Check ping configuration. 2018-02-13 23:42:03 +01:00
029fa83690 Remove unnecessary conversion 2018-02-13 17:14:04 +01:00
abdcb9e332 Homogenization of templates: Eureka 2018-02-13 09:20:04 +01:00
17e85e31cd Remove health check filter from Marathon tasks. 2018-02-13 08:00:05 +01:00
7d3dd5a0e4 Update Lego (Gandi API v5, cloudxns, ...) 2018-02-12 18:10:05 +01:00
dd873fbeee Fix support for macvlan driver in docker provider 2018-02-12 17:50:05 +01:00
38a4c80995 Logger and Leaks 2018-02-12 17:24:03 +01:00
91fa727c74 Update Staert. 2018-02-12 16:42:02 +01:00
794c0206f3 Merge 'v1.5.2' into master 2018-02-12 15:39:12 +01:00
52bad03c8d Prepare release v1.5.2 2018-02-12 11:46:03 +01:00
2fde3e8679 Continue refresh the configuration after a failure. 2018-02-12 09:28:03 +01:00
1e71f52b72 Explain how to write entrypoints definition in a compose file 2018-02-09 18:16:04 +01:00
2b1d2853cd Compress ACME certificates in KV stores. 2018-02-09 10:38:03 +01:00
6a92ac0b7b Add new options to the CLI entrypoint definition. 2018-02-08 09:30:06 +01:00
f07e8f58e6 Fix goroutine leaks in websocket 2018-02-08 08:24:03 +01:00
7b19cb5631 Migrate to dep 0.4 2018-02-07 23:30:05 +01:00
f5adea1061 Merge branch 'v1.5' into master 2018-02-07 16:20:40 +01:00
dbd173b4e4 Docs: regex+replacement hints for URL rewriting 2018-02-07 13:42:04 +01:00
85cfd87c44 Clarify how setting a frontend priority works 2018-02-07 13:00:04 +01:00
c867f48f11 Change go-bindata 2018-02-07 12:40:03 +01:00
514f9a7215 Reduce oxy round trip logs to debug. 2018-02-07 11:32:03 +01:00
0b0380b690 Fix typo 2018-02-06 14:30:04 +01:00
4d0c8c189a Fixed typo. 2018-02-06 14:04:03 +01:00
afe4c307f9 Traefik still start when Let's encrypt is down 2018-02-05 18:20:04 +01:00
c0563f1a39 Remove web provider in example 2018-02-05 15:04:02 +01:00
ce3a0fdd46 Fix dnsrr endpoint mode excluded when not using swarm LB 2018-02-05 11:34:03 +01:00
ce3c72e9d9 Update traefik-ds.yaml with --api command line parameter 2018-02-05 10:50:03 +01:00
dcba74deb9 Display file log when test fails. 2018-02-05 09:48:03 +01:00
203a5c5c48 Hide the pflag error when displaying help. 2018-02-05 09:12:03 +01:00
be4aeaacde Add documentation about entry points definition with CLI. 2018-02-05 08:54:03 +01:00
04ebd9d46a Allow custom value for kubernetes.io/ingress.class annotation 2018-02-01 19:04:04 +01:00
52b4e93c38 Fix typo in doc for rate limit label 2018-02-01 08:04:03 +01:00
58d6681824 Redirection: permanent move option. 2018-01-31 19:10:04 +01:00
c944d203fb chore(k8s): gen templates. 2018-01-31 17:16:05 +01:00
62df067fac doc(k8s): add documentation. 2018-01-31 17:16:05 +01:00
7c80b9a692 refactor(k8s): new annotations style. 2018-01-31 17:16:05 +01:00
a4a8345a33 refactor(k8s): baseName and ObjectMeta. 2018-01-31 17:16:05 +01:00
742dde72bb refactor(k8s): template readability.
fix(k8s): redirection template.
2018-01-31 17:16:05 +01:00
4497ddbb0e refactor(k8s): default to nil headers struct. 2018-01-31 17:16:05 +01:00
53388a3570 feat(k8s): add max conn annotations. 2018-01-31 17:16:05 +01:00
1c495d7ea4 feat(k8s): add rate limit annotations. 2018-01-31 17:16:05 +01:00
4c0d6e211b feat(k8s): add error pages annotations. 2018-01-31 17:16:05 +01:00
5bfd6acd52 fix(k8s): add passTLSCert to template. 2018-01-31 17:16:05 +01:00
0b49de94c6 refactor(k8s): extract functions. 2018-01-31 17:16:05 +01:00
7c0e557f84 refactor(k8s): template readability. 2018-01-31 17:16:05 +01:00
a81171d5f1 Request buffering middleware 2018-01-31 15:32:04 +01:00
26dc2f4d61 doc: option not available in 1.5. 2018-01-30 17:16:03 +01:00
d426126a92 Merge 'v1.5.1' into master 2018-01-29 17:12:23 +01:00
6aac78fc36 typo in "i"ngress annotations. 2018-01-29 16:48:05 +01:00
f6c53f0450 Rebuild experimental image 2018-01-29 16:08:03 +01:00
54e09b98c7 Prepare release v1.5.1 2018-01-29 15:04:03 +01:00
395b1702de Extract providers configuration from server.go 2018-01-29 14:58:03 +01:00
4eebaa1a80 Enhance file provider documentation. 2018-01-29 14:36:03 +01:00
cb9bf3ce68 Fix domain names in dynamic TLS configuration 2018-01-29 10:48:03 +01:00
ef4aa202d0 Fix high memory usage in retry middleware 2018-01-26 18:22:03 +01:00
cc5ee00b89 extend metrics and rebuild prometheus exporting logic 2018-01-26 11:58:03 +01:00
49a8cb76f5 Add note on redirect for ACME http challenge 2018-01-26 09:22:03 +01:00
bf12306f17 Change gzipwriter receiver to implement CloseNotifier 2018-01-25 21:46:04 +01:00
fa1f4f761d Add status code text to webui bar chart tooltip 2018-01-25 16:54:03 +01:00
b50aebd2ed Tracing statusCodeTracker need to implement CloseNotify 2018-01-25 16:34:02 +01:00
323b8237a0 Handle undefined entrypoint on ACME config and frontend config 2018-01-25 12:02:04 +01:00
9f741abd84 Fix integration tests in tracing 2018-01-25 12:00:05 +01:00
32ccc26712 Add username in accesslog 2018-01-24 18:18:03 +01:00
563a0bd274 Migrate from libkv to valkeyrie library 2018-01-24 17:52:03 +01:00
a91080b060 Merge branch 'v1.5' into master 2018-01-24 17:01:05 +01:00
039ccaf4f1 Fix tar gz source only on tags on travis 2018-01-24 16:10:04 +01:00
c878d262bf refactor: remove Tracing integration tests. 2018-01-24 15:20:47 +01:00
c8446c2dc8 Merge branch 'v1.5' into master 2018-01-24 15:11:21 +01:00
4afb39778a Fix add src.tar.gz in Træfik release 2018-01-24 10:40:04 +01:00
751781a3b7 Increase integration tests timeout. 2018-01-24 09:14:02 +01:00
f5d150c3b4 Fix the k8s redirection template. 2018-01-24 08:12:03 +01:00
ae9342208e Prepare release v1.5.0 2018-01-23 17:34:04 +01:00
3040d9df0d Build cross binary only on tags in travis 2018-01-23 17:00:06 +01:00
00e0571811 Rename TLSConfigurations to TLS. 2018-01-23 16:30:07 +01:00
bfb07746fe Deploy pages on all branches. 2018-01-23 14:48:04 +01:00
171cda6186 New multi version documentation mechanism 2018-01-23 14:18:03 +01:00
4cc17e112f Fix goroutine leak in throttler logic. 2018-01-23 12:44:03 +01:00
b6af61fa6e ACME and corporate proxy. 2018-01-23 09:52:03 +01:00
4e07d92190 Fix doc dynamic certificates 2018-01-23 09:12:03 +01:00
fb4ba7af2b Migrate Sirupsen to sirupsen. 2018-01-22 12:16:03 +01:00
c134dcd6fe remove unecessary mutex usage in healthchecks 2018-01-22 11:32:02 +01:00
fc00e1c228 Don't reload configuration when rancher server is down 2018-01-22 11:00:07 +01:00
ae34486b57 Fix some doc links 2018-01-22 10:26:03 +01:00
d7b513e9aa Disable websocket compression 2018-01-19 17:34:03 +01:00
d8297a055a Fix breaking change in web metrics 2018-01-19 14:30:04 +01:00
5140bbe99a doc(mesos): add documentation. 2018-01-18 18:26:03 +01:00
0c33d110f4 chore(mesos): gen templates. 2018-01-18 18:26:03 +01:00
5b37fb83fd feat(mesos): add all labels. 2018-01-18 18:26:03 +01:00
bc6879ecc1 fix(mesos): invalid ip source. 2018-01-18 18:26:03 +01:00
17137ba3e7 refactor(mesos) be testable. 2018-01-18 18:26:03 +01:00
e9d2124885 refactor(mesos): template readability. 2018-01-18 18:26:03 +01:00
f1f2e1bf64 Fix missing configuration for jaeger reporter 2018-01-18 17:24:03 +01:00
ced5aa5dc6 Challenge HTTP must ignore deprecated web.path option 2018-01-17 18:46:03 +01:00
72bc74001f Add Tracing entry in the documentation. 2018-01-17 13:14:03 +01:00
adfa3f795c Fix typo in anonymous usage log message. 2018-01-17 12:20:04 +01:00
89d90de7d8 Merge branch '1.5.0-rc5' into master 2018-01-15 17:27:37 +01:00
fe426f6fb2 Prepare release v1.5.0-rc5 2018-01-15 16:48:03 +01:00
3e439cc39b Add Let's Encrypt HTTP Challenge 2018-01-15 16:04:05 +01:00
56c0634918 Return errors from Docker client.Events 2018-01-15 14:26:03 +01:00
bcadd68904 Fix data races. 2018-01-15 11:46:04 +01:00
9790aa91fe Apply various contentual and stylish improvements to the k8s docs. 2018-01-15 09:40:05 +01:00
5316b412d2 Fix concurrent map writes on digest auth 2018-01-12 20:00:05 +01:00
b5ee5c34f2 Add compression and better error handling 2018-01-12 17:52:03 +01:00
2618aef008 Switch to golang/dep. 2018-01-11 17:46:04 +01:00
8239e04a19 fix: typo in Docker template. 2018-01-11 15:20:06 +01:00
709d50836b Fix bad access log 2018-01-11 10:04:03 +01:00
e2c5f3712f Fix redirect problem on dashboard + docs/tests on [web] 2018-01-11 09:46:03 +01:00
ee71b4bfef homogenization of templates: ECS 2018-01-10 18:28:03 +01:00
0d57e2aed9 homogenization of templates: Rancher 2018-01-10 18:08:03 +01:00
30ffba78e6 Opentracing support 2018-01-10 17:48:04 +01:00
8394549857 homogenization of templates: Consul Catalog 2018-01-10 16:20:10 +01:00
d0f3ad6024 Modify DEBUG messages to get ACME certificates 2018-01-10 15:20:03 +01:00
870c0b5cf4 homogenization of templates: Marathon 2018-01-10 11:58:03 +01:00
044d87d96d Switch to golang/dep. 2018-01-09 21:46:04 +01:00
b60edd9ee9 fix: list parsing. 2018-01-09 20:00:05 +01:00
b1ea36793b refactor: simplify template and use typed function. 2018-01-09 20:00:05 +01:00
750878d668 homogenization of templates: Docker 2018-01-09 16:26:03 +01:00
617b8b20f0 Merge branch 'v1.5' into master 2018-01-09 15:46:56 +01:00
d88554fa92 fix: list entries parsing. 2018-01-09 12:40:04 +01:00
e74a20de24 Document rewrite-target annotation. 2018-01-09 11:56:02 +01:00
7c227392fa fix: glide files. 2018-01-09 11:24:03 +01:00
8a697f7a39 Fix: timeout integration test 2018-01-09 10:08:03 +01:00
8327dd0c0b Add support for fetching k8s Ingress TLS data from secrets 2018-01-08 00:36:03 +01:00
60fd26e0b7 Add a clustering example with Docker Swarm 2018-01-07 15:54:03 +01:00
acd0c1bcd5 GzipResponse must implement CloseNotifier if ResponseWriter implement it 2018-01-05 02:26:03 +01:00
9b3750320b chore(kv): gen templates. 2018-01-04 18:42:02 +01:00
b9f1f7752d feat(kv): add more tests. 2018-01-04 18:42:02 +01:00
944008661f feat(kv): add custom headers configuration. 2018-01-04 18:42:02 +01:00
79ae52aca7 feat(kv): add rate limits configuration. 2018-01-04 18:42:02 +01:00
51390aa874 feat(kv): add error pages configuration. 2018-01-04 18:42:02 +01:00
cfa1f47226 feat(kv): add frontend redirect configuration. 2018-01-04 18:42:02 +01:00
40b59da224 feat(kv): add basicAuth configuration. 2018-01-04 18:42:02 +01:00
f7ed4a5805 feat(kv): add whitelistSourceRange configuration. 2018-01-04 18:42:02 +01:00
3d47030349 feat(kv): add health check port configuration. 2018-01-04 18:42:02 +01:00
34eb2e371e feat(kv): add passTLSCert configuration. 2018-01-04 18:42:02 +01:00
6573634012 feat(kv): constants and generic methods. 2018-01-04 18:42:02 +01:00
61ecb4cd18 Split consul and consul catalog. 2018-01-04 15:56:02 +01:00
22bdbd2498 Prepare release 1.5.0-rc4 2018-01-04 15:22:03 +01:00
287fb78654 Split Consul and Consul Catalog documentation 2018-01-04 14:48:03 +01:00
06d528a2bd refactor(consulcatalog): enhance tests. 2018-01-04 11:42:03 +01:00
1fe6a8b04d chore(consulcatalog): gen templates. 2018-01-04 11:42:03 +01:00
bd5cab6e87 doc(consulcatalog): add tags documentation
- add a dedicate page for Consul Catalog.
2018-01-04 11:42:03 +01:00
238acd9330 feat(consulcatalog): add custom Headers tags. 2018-01-04 11:42:03 +01:00
8e7ac513b6 refactor: add backend name functions. 2018-01-04 11:42:03 +01:00
e56551d047 feat(consulcatalog): add rate limit and error pages tags. 2018-01-04 11:42:03 +01:00
170fc13e02 feat(consulcatalog): add frontend redirect tags. 2018-01-04 11:42:03 +01:00
97ce77169a feat(consulcatalog): add HealthCheck tags. 2018-01-04 11:42:03 +01:00
c9b871a03a feat(consulcatalog): add WhitelistSourceRange tags. 2018-01-04 11:42:03 +01:00
2fdefa258e feat(consulcatalog): add passTLSCert tags. 2018-01-04 11:42:03 +01:00
f0a733d6d6 refactor(consulcatalog): new template methods approach. 2018-01-04 11:42:03 +01:00
586b5714a7 refactor(consulcatalog): reorganize code. 2018-01-04 11:42:03 +01:00
6e23454202 refactor(consulcatalog): template readability. 2018-01-04 11:42:03 +01:00
5b24403c8e Don't panic if ResponseWriter does not implement CloseNotify 2018-01-04 11:18:03 +01:00
e83599dd08 Add a note on how to add label to a docker compose file 2018-01-04 10:34:03 +01:00
de7dd068d9 refactor(ecs): headers as pointer. 2018-01-03 23:52:03 +01:00
a33476dea8 doc(ecs): update labels documentation. 2018-01-03 23:52:03 +01:00
dceccbdb92 chore(ecs): gen templates. 2018-01-03 23:52:03 +01:00
393651f5e2 feat(ecs): add error pages and rate limits. 2018-01-03 23:52:03 +01:00
5acee9e11d refactor: enhance template function readability. 2018-01-03 23:52:03 +01:00
81626eef38 feat(ecs): add headers labels. 2018-01-03 23:52:03 +01:00
e60fbbbebe feat(ecs): add frontend redirect labels. 2018-01-03 23:52:03 +01:00
e45e63dc37 feat(ecs): add whitelistSourceRange label. 2018-01-03 23:52:03 +01:00
c3d5ad2eeb feat(ecs): add PassTLSCert label. 2018-01-03 23:52:03 +01:00
7c64f5d31e feat(ecs): add MaxConn label. 2018-01-03 23:52:03 +01:00
66f46c5b96 feat(ecs): add circuit Breaker label. 2018-01-03 23:52:03 +01:00
07a6d48a27 refactor(ecs): add hasLoadBalancerLabel function. 2018-01-03 23:52:03 +01:00
722ea28e3a feat(ecs): add HealthCheck port label. 2018-01-03 23:52:03 +01:00
f195ef27f3 refactor(ecs): template readability. 2018-01-03 23:52:03 +01:00
7e5c258266 refactor(rancher): headers as pointer. 2018-01-03 23:26:03 +01:00
38b5aef208 chore(rancher): gen templates. 2018-01-03 23:26:03 +01:00
a7e4ded722 doc(rancher): add labels documentation. 2018-01-03 23:26:03 +01:00
22405a1259 feat(rancher): add rate limit and error pages labels. 2018-01-03 23:26:03 +01:00
d0a6689413 feat(rancher): add headers labels. 2018-01-03 23:26:03 +01:00
a1f47cb4db feat(rancher): add HealthCheck labels. 2018-01-03 23:26:03 +01:00
c884c7bb8a feat(rancher): add WhitelistSourceRange label. 2018-01-03 23:26:03 +01:00
c042098889 feat(rancher): add PassTLSCert label. 2018-01-03 23:26:03 +01:00
571f41dcf0 refactor(rancher): template readability. 2018-01-03 23:26:03 +01:00
f30ad20c9b Use gorilla readMessage and writeMessage instead of just an io.Copy 2018-01-03 15:32:03 +01:00
cbd54470ba Improve logging output for failing healthchecks 2018-01-03 12:32:03 +01:00
01e17b6c3e k8s guide: Leave note about assumed DaemonSet usage. 2018-01-03 09:12:03 +01:00
3e13ebec93 We need to flush the end of the body when retry is streamed 2018-01-02 16:02:03 +01:00
c84fb9895e Merge branch 'v1.5' into master 2018-01-02 15:21:17 +01:00
23c1a9ca8e Merge branch 'v1.4' into v1.5 2018-01-02 13:10:11 +01:00
741c739ef1 Prepare release v1.4.6 2018-01-02 12:54:03 +01:00
52f16e11a8 Use gorilla readMessage and writeMessage instead of just an io.Copy 2018-01-02 12:30:05 +01:00
5623a53464 chore(kv): gen templates. 2018-01-02 11:46:02 +01:00
c95393b238 refactor(kv): template readability. 2018-01-02 11:46:02 +01:00
be0dd71bb4 refactor(kv): split provide and configuration. 2018-01-02 11:46:02 +01:00
0ee6973e2f Upgrade docs dependencies and adapt configuration 2018-01-02 11:28:02 +01:00
4819974a1c Improve Marathon service label documentation. 2018-01-02 11:08:02 +01:00
e8e8b41eed Normalize serviceName added to the service backend names 2018-01-02 10:52:03 +01:00
7d23d3c0a4 Typo in docker.endpoint TCP port. 2018-01-02 10:38:03 +01:00
718fc7a79d Fix bug report command 2018-01-02 10:14:03 +01:00
bfd142b13b Fix custom headers template 2018-01-02 10:10:04 +01:00
75533b2beb Use prefix for sticky and stickiness tags. 2018-01-02 09:44:02 +01:00
e3d1201b46 Fix custom headers template 2018-01-02 09:42:03 +01:00
8f982ff1f2 Simplify storing renewed acme certificate 2017-12-27 14:22:02 +01:00
0391e21c84 Add default values for some Docker labels 2017-12-27 07:14:02 +01:00
b8a1cb5c68 refactor(marathon): fix labels and add tests. 2017-12-26 12:46:03 +01:00
7a71cd3012 doc(marathon): update labels documentation. 2017-12-26 12:46:03 +01:00
26bedced35 chore(marathon): gen templates. 2017-12-26 12:46:03 +01:00
c1aefb8ad8 feat(marathon): add error pages and rate limits. 2017-12-26 12:46:03 +01:00
576e87f398 feat(marathon): add headers labels. 2017-12-26 12:46:03 +01:00
b4f6bf0f6a feat(marathon): add frontend redirect labels. 2017-12-26 12:46:03 +01:00
edc55aad3c feat(marathon): add whitelistSourceRange label. 2017-12-26 12:46:03 +01:00
38a3fe4316 feat(marathon): add PassTLSCert label. 2017-12-26 12:46:03 +01:00
81e3b2dd4c feat(marathon): add HealthCheck port label. 2017-12-26 12:46:03 +01:00
4524cdc151 refactor(marathon): template readability. 2017-12-26 12:46:03 +01:00
9a7821b8fa Send empty configuration from file provider 2017-12-21 21:24:03 +01:00
e8333883df Add tests for TLS dynamic configuration in ETCD3 2017-12-21 18:02:04 +01:00
aeffe1036d refactor: no rate limits must return nil. 2017-12-21 17:44:03 +01:00
987e8a93bd refactor: no error pages must return nil. 2017-12-21 17:44:03 +01:00
2cb4acd6cc Remove obsolete paragraph about error pages. 2017-12-21 15:40:05 +01:00
1e44e339ad Allow deleting dynamically all TLS certificates from an entryPoint 2017-12-21 14:16:03 +01:00
59549d5f39 Use pointer of error pages 2017-12-21 11:26:03 +01:00
4a7297d05c Merge branch 'v1.5' into master 2017-12-20 15:47:15 +01:00
a5335667bb refactor(docker): move services tests. 2017-12-20 15:20:07 +01:00
498b806ca9 chore(docker): gen templates. 2017-12-20 15:20:07 +01:00
dd7a8a9a87 fix(docker): whitelist on services. 2017-12-20 15:20:07 +01:00
133aa77c21 doc(docker): add ratelimit and errorpages doc. 2017-12-20 15:20:07 +01:00
942614dd23 feat(docker): add rate limit labels. 2017-12-20 15:20:07 +01:00
c30ebe5f90 feat(docker): add error pages labels. 2017-12-20 15:20:07 +01:00
50757b5e99 refactor(docker): re-order templates functions. 2017-12-20 15:20:07 +01:00
42b900b9b2 doc(docker): HealthCheck labels. 2017-12-20 15:20:07 +01:00
c26b9b1a5d feat(docker): add HealthCheck labels. 2017-12-20 15:20:07 +01:00
9ee642a7db doc(docker): order labels. 2017-12-20 15:20:07 +01:00
423385bca0 feat(docker): add passTLSCert label. 2017-12-20 15:20:07 +01:00
6e5f7650a5 refactor(docker): template readability. 2017-12-20 15:20:07 +01:00
89a79d0f1b Prepare release 1.5.0-rc3 2017-12-20 15:10:06 +01:00
9e41485ff1 Modify ACME configuration migration into KV store 2017-12-20 14:40:07 +01:00
3c7c6c4d9f Mesos: Use slave.PID.Host as task SlaveIP. 2017-12-20 12:12:03 +01:00
cd1b3904da Add missing entrypoints template. 2017-12-20 10:26:03 +01:00
b23b2611b3 Add non regex pathPrefix 2017-12-19 17:00:12 +01:00
877770f7cf Update go-marathon 2017-12-19 16:00:09 +01:00
3142a4f4b3 Fix stickiness bug due to template syntax error 2017-12-19 14:08:03 +01:00
b4dc96527d Move rate limit documentation. 2017-12-19 09:48:03 +01:00
35b5ca4c63 fix isHealthy logic. 2017-12-18 10:30:08 +01:00
daf3023b02 Change Zookeeper default prefix. 2017-12-18 09:22:03 +01:00
705f3f1372 Drop unnecessary type conversions 2017-12-18 09:14:03 +01:00
f6520727a3 Merge branch 'v1.5' into master 2017-12-15 22:16:48 +01:00
b17d5b80b8 Reload configuration when port change for one service 2017-12-15 20:52:03 +01:00
48b4eb5c0d Fix bad Træfik update on Consul Catalog 2017-12-15 16:00:14 +01:00
7ecd6d20ba Support regex redirect by frontend 2017-12-15 11:48:03 +01:00
bddad57a7b Fix RawPath handling in addPrefix 2017-12-15 03:50:07 +01:00
799136a714 fix: backend name for Stateful services. (Service Fabric) 2017-12-15 01:22:03 +01:00
350d61b4a6 Fix github.com/containous/traefik-extra-service-fabric dep to v1.0.1. 2017-12-14 16:06:03 +01:00
b6f5a66fab Grammar 2017-12-13 18:22:05 +01:00
b0c12e2422 Fix: frontend redirect 2017-12-13 17:02:04 +01:00
623a7dc7e6 Fix small missing property in documentation for consul catalog 2017-12-13 11:56:02 +01:00
709c7e5707 Improve documentation for Cloudflare API key 2017-12-13 11:56:02 +01:00
5f6c5025d5 Fix Flaky Consul Catalog tests. 2017-12-13 11:54:03 +01:00
328be161d6 Forward Authentication: add X-Forwarded-Uri 2017-12-10 00:58:21 +01:00
ee04f52a16 Fix broken links and improve ResponseCodeRatio() description 2017-12-08 16:12:04 +01:00
c446c291d9 Use default entryPoints when certificates are added with no entryPoints. 2017-12-08 11:02:03 +01:00
c66d9de759 Custom headers by service labels for docker backends 2017-12-06 22:26:03 +01:00
260ee980e0 Merge 'v1.5.0-rc2' into master 2017-12-06 20:24:46 +01:00
7d98c1c4e0 Prepare release v1.5.0-rc2 2017-12-06 15:58:03 +01:00
4387cf38d7 Close ring buffer used in throttling function. 2017-12-06 14:54:03 +01:00
a9d38570ab Merge tag 'v1.4.5' into v1.5 2017-12-06 13:05:08 +01:00
0e619369fd fix healthcheck when web is not specified 2017-12-06 11:20:03 +01:00
6890dc1844 Simplification 2017-12-06 10:52:03 +01:00
cda09c843a Prepare release v1.4.5 2017-12-06 10:44:03 +01:00
e2190bd9d5 Builders in k8s tests 2017-12-05 20:24:03 +01:00
0472d19bd4 refactor: fix some code. 2017-12-05 19:40:04 +01:00
07524f5c99 refactor: remove common_label.go 2017-12-05 19:40:04 +01:00
1710800cc0 refactor(consulCatalog): review and split. 2017-12-05 19:40:04 +01:00
c705d6f9b3 refactor(ecs): rewrite configuration system. 2017-12-05 19:40:04 +01:00
be718aea11 refactor(mesos): rewrite configuration system. 2017-12-05 19:40:04 +01:00
ca680710a2 refactor(rancher): rewrite configuration system. 2017-12-05 19:40:04 +01:00
5f71a43758 refactor(eureka): rewrite configuration system. 2017-12-05 19:40:04 +01:00
04dd63da1c refactor(k8s): rewrite configuration system. 2017-12-05 19:40:04 +01:00
cee022b935 refactor(marathon): rewrite configuration system. 2017-12-05 19:40:04 +01:00
ae2ae85070 refactor(docker): rewrite configuration system. 2017-12-05 19:40:04 +01:00
ce6bbbaa33 feat: labels/annotations parser. 2017-12-05 19:40:04 +01:00
6333bfe6e8 Modify the ACME renewing logs level 2017-12-05 15:42:03 +01:00
41d8863d2f Fix pprof route order. 2017-12-05 10:50:03 +01:00
523b7f96f8 Add note to Kubernetes RBAC docs about RoleBindings and namespaces 2017-12-05 02:46:03 +01:00
ab1a930705 Emphasize the necessity of enabling file backend 2017-12-05 02:30:02 +01:00
dc74f76a03 Merge branch 'v1.5' into master 2017-12-04 13:35:02 +01:00
3a99c86cb3 Change custom headers separator 2017-12-04 11:40:03 +01:00
d6ad7e2e64 Fix empty IP for backend when dnsrr in Docker swarm mode 2017-12-01 14:34:03 +01:00
aaf120f263 Reduce logs with new Kubernetes security annotations 2017-12-01 14:00:04 +01:00
c228e73b26 fix Docker labels documentation render. 2017-12-01 09:36:02 +01:00
e27e65eb76 Fix wrong defaultentrypoint and unexisting entrypoint issue 2017-11-30 16:10:02 +01:00
1c8acf3929 Doesn't ignore web params when web.metrics.prometheus is set 2017-11-30 14:12:04 +01:00
40b3c17703 Fix metrics problem on multiple entrypoints 2017-11-30 12:18:03 +01:00
e042ef3f27 Bump Lego Version for GoDaddy DNS Provider 2017-11-30 10:44:03 +01:00
313357a6b3 quote template strings 2017-11-30 10:42:02 +01:00
37a1aaad64 Improve consul documentation 2017-11-30 10:12:03 +01:00
f084d2a28b Fix Labels/annotation logs and values. 2017-11-30 09:26:03 +01:00
077b39d7c6 Add option -s to gofmt for autogen 2017-11-30 08:52:03 +01:00
7081f3df58 Sync vendor and glide. 2017-11-29 13:26:03 +01:00
9fe6a0a894 Prepare release v1.5.0-rc1 2017-11-28 14:50:06 +01:00
3d452fd5b9 Merge branch 'v1.4' into master 2017-11-28 14:03:55 +01:00
47a5cfbd3e Fix empty ip when container is stopped 2017-11-28 13:58:04 +01:00
4cb6241e93 Kubernetes security header annotations 2017-11-28 13:36:03 +01:00
b572879691 Add link to futur 1.5 documentation. 2017-11-28 13:06:03 +01:00
ad07a6ab2b fix: Service Fabric 'expose' as boolean. 2017-11-28 12:02:02 +01:00
4bdeb33ac1 Docker labels 2017-11-28 11:16:03 +01:00
101a4d0d8d Describe 'refreshSecond' configuration. 2017-11-27 17:02:05 +01:00
89e07d0c55 Add link to crypto/tls godoc. 2017-11-27 15:24:03 +01:00
39c1cc1b3c Add Service Fabric Provider 2017-11-27 14:26:04 +01:00
9f6f637527 Merge branch 'v1.4' into master 2017-11-27 11:40:50 +01:00
0f09551a76 Fix kubernetes path prefix rule with rewrite-target 2017-11-27 11:22:03 +01:00
8cd72cfc1b remove obsolete links in k8s docs 2017-11-27 10:04:02 +01:00
7a141c8616 Document filename parameter for Kubernetes. 2017-11-26 01:02:03 +01:00
0ca65f955d Stats collection. 2017-11-25 13:36:03 +01:00
011b748a55 Change server receiver name. 2017-11-24 19:18:03 +01:00
f6181ef3e2 Fix custom headers replacement 2017-11-23 17:40:03 +01:00
24368747ab Use healthcheck for systemd watchdog 2017-11-23 16:10:04 +01:00
66591cf216 Merge tag 'v1.4.4' into master 2017-11-23 15:21:47 +01:00
1feeeb2eec Manage certificates dynamically in kv store 2017-11-23 11:50:03 +01:00
419d46c958 Prepare release v1.4.4 2017-11-23 11:48:03 +01:00
7063da1c7d Add docker security headers via labels 2017-11-22 19:40:04 +01:00
bee8ebb00b Resync oxy with original repository 2017-11-22 18:20:03 +01:00
da5e4a13bf add entrypoint in prometheus doc and remove web on influxdb doc 2017-11-22 16:28:03 +01:00
5dc1ec68a3 Uncompress generated files. 2017-11-22 12:00:04 +01:00
3d2e5ebe39 Fix typo in examples 2017-11-22 10:16:03 +01:00
f5130db6b0 gofmt generated file. 2017-11-21 21:30:03 +01:00
676b79db42 Fix raw path handling in strip prefix 2017-11-21 14:28:03 +01:00
6d2f4a0813 Add health check label to ECS 2017-11-21 11:06:03 +01:00
4b91204686 Marathon constraints filtering 2017-11-21 10:48:04 +01:00
7ddefcef72 Add file to storeconfig 2017-11-21 10:24:03 +01:00
0f3e42d463 autogen file mode 2017-11-21 08:20:04 +01:00
c9129b8ecf Remove GzipHandler Fork 2017-11-20 18:32:03 +01:00
a6955ecf59 Vendor generated file from template 2017-11-20 15:26:03 +01:00
6619a787a3 Fix problems about duplicated and missing Docker backends/frontends. 2017-11-20 15:16:03 +01:00
aae17c817b Fix issue with label traefik.backend.loadbalancer.stickiness.cookieName 2017-11-20 11:42:03 +01:00
ab87bad952 Run Rancher tests cases in parallel. 2017-11-20 11:40:04 +01:00
be306d651e Register pprof handlers. 2017-11-20 11:04:03 +01:00
8fe5c22075 Exclude RC from doc publication. 2017-11-20 09:42:02 +01:00
05a9350e57 Use contants from http package. 2017-11-20 09:40:03 +01:00
7ed4ae2f8c Add labels for traefik.frontend.entryPoints & PassTLSCert to Kubernetes 2017-11-20 02:12:03 +01:00
5d6384e101 redirect to another entryPoint per frontend 2017-11-18 13:50:03 +01:00
1a4564d998 http.Server log goes to Debug level. 2017-11-18 01:10:03 +01:00
66e489addb Update libkv dependency 2017-11-17 17:22:03 +01:00
cdab6b1796 fix concurrent provider config reloads 2017-11-17 10:26:03 +01:00
722f299306 Support template as raw string. 2017-11-17 10:12:03 +01:00
66be04f39e Documentation archive 2017-11-16 09:20:03 +01:00
8719f2836e Merge 'v1.4.3' into master
Release v1.4.3
2017-11-15 23:01:08 +01:00
0c702b0b6b Revert "Merge v1.4.2 into master" 2017-11-15 18:18:03 +01:00
6fcab72ec7 Merge v1.4.2 into master 2017-11-14 16:48:03 +01:00
77b111702b Prepare release v1.4.3 2017-11-14 12:06:03 +01:00
96a7cc483f Add Traefik prefix to the KV key 2017-11-14 11:38:03 +01:00
1e3506848a Flush and errorcode 2017-11-14 11:16:03 +01:00
5ee2cae85c Fix Traefik reload if Consul Catalog tags change 2017-11-13 12:14:02 +01:00
5c119fe2d6 Exclude GRPC from compress 2017-11-10 14:12:02 +01:00
d55115844a Fix typos in changelog 2017-11-10 11:12:02 +01:00
4f4491c247 Allow adding optional Client CA files 2017-11-10 10:30:04 +01:00
1691f586d7 fix: flaky test influxdb. 2017-11-09 17:22:03 +01:00
04dfe0de84 Put subcommand in dedicated files. 2017-11-09 17:08:03 +01:00
27d1b46835 Split Web into API/Dashboard, ping, metric and Rest Provider 2017-11-09 16:12:04 +01:00
2f62ec3632 Link corrected 2017-11-09 15:54:04 +01:00
384488ac02 Remove unused lightMarathonClient. 2017-11-09 12:40:02 +01:00
c469e669fd Make the TLS certificates management dynamic. 2017-11-09 12:16:03 +01:00
56affb90ae Add secret creation to docs for kubernetes backend 2017-11-09 10:52:03 +01:00
f6aa147c78 Add tests for websocket headers 2017-11-09 10:04:03 +01:00
9bd0fff319 Keep status when stream mode and compress 2017-11-09 00:48:03 +01:00
00d7c5972f Add InfluxDB support for traefik metrics 2017-11-08 15:14:03 +01:00
58a438167b Minor fix for docker volume vs created directory 2017-11-08 15:12:03 +01:00
e3131481e9 chore: sort imports 2017-11-08 11:40:04 +01:00
bc8d68bd31 docs: fix some typos 2017-11-07 11:50:03 +01:00
07c6e33598 Update Rancher API integration to go-rancher client v2. 2017-11-05 13:02:03 +01:00
70812c70fc Postfix windows binaries with .exe 2017-11-03 17:02:14 +01:00
d89b234cad Fix typo in frontend.headers.customresponseheaders label 2017-11-03 14:32:03 +01:00
2070aa9443 Merge 'v1.4.2' into master 2017-11-03 13:51:24 +01:00
91ff94ea56 dumpcerts.sh: Fix call to "base64" for Alpine 2017-11-02 15:52:04 +01:00
0347537f43 Freeze version of mkdocs-material. 2017-11-02 14:38:03 +01:00
db9b18f121 Prepare release v1.4.2 2017-11-02 12:28:03 +01:00
ee70001be3 [doc] - update documentation to add AWS_HOSTED_ZONE_ID 2017-11-02 11:44:04 +01:00
972eea97fe [ecs] - fix import order 2017-11-02 11:44:04 +01:00
2b4d33e919 Pass through certain forward auth negative response headers 2017-11-02 11:06:03 +01:00
fc4d670c88 Minor grammar change 2017-11-02 10:38:03 +01:00
02035d4942 Missing Backend key in configuration when application has no tasks 2017-11-01 11:26:03 +01:00
93a46089ce Support Host NetworkMode for ECS provider 2017-10-31 11:44:03 +01:00
e8d63b2a3b Update github.com/xenolf/lego to 0.4.1 2017-10-31 10:42:03 +01:00
d3c7681bc5 New PR template 2017-10-30 16:38:03 +01:00
dc66db4abe Make the traefik.port label optional when using service labels in Docker containers. 2017-10-30 15:10:05 +01:00
a0e1cf8376 Fix IP address when Docker container network mode is container 2017-10-30 14:36:04 +01:00
5292b84f4f fixed dead link in kubernetes backend config docs 2017-10-30 14:04:03 +01:00
b27455a36f entrypoints -> entryPoints 2017-10-30 13:20:03 +01:00
5042c5bf40 Added ReplacePathRegex middleware 2017-10-30 12:54:03 +01:00
da7b6f0baf Make frontend names differents for similar routes 2017-10-30 12:06:03 +01:00
9b5845f1cb Fix datastore corruption on reload due to shrinking config size 2017-10-30 11:22:04 +01:00
e8633d17e8 Add proxy protocol tests 2017-10-30 10:02:03 +01:00
d1d8b01dfb Use Node IP in Swarm Standalone with "host" NetworkMode 2017-10-25 20:20:03 +02:00
7c4353a0ac Add missing functions for ECS template 2017-10-25 17:18:03 +02:00
1b2cb53d4f Fix the k8s docs example deployment yaml 2017-10-25 16:58:04 +02:00
3158e51c62 Remove hardcoded runtime.GOMAXPROCS. 2017-10-25 16:16:02 +02:00
a0c72cdf00 Merge v1.4.1 into master 2017-10-25 11:36:14 +02:00
f0371da838 Add unique ID to Docker services replicas 2017-10-25 10:00:03 +02:00
44b82e6231 Fix mkdocs version 2017-10-24 18:06:03 +02:00
04f0bf3070 Prepare release v1.4.1 2017-10-24 15:52:04 +02:00
7400c39511 Stream mode when http2 2017-10-24 14:38:02 +02:00
008a5af6d6 Add mmatur to maintainers 2017-10-24 13:18:03 +02:00
35ca40c3de Enhance Trust Forwarded Headers 2017-10-23 16:12:03 +02:00
de821fc305 fix healthcheck path 2017-10-23 15:48:03 +02:00
e3cac7d0e5 fix(docker): Network filter. 2017-10-23 14:20:03 +02:00
81f7aa9df2 Regex capturing group. 2017-10-23 10:20:02 +02:00
6bce298d90 Add a note about redirection rule to precise how regex/replacement work. 2017-10-22 09:44:03 +02:00
afbad56012 Force http/1.1 for websocket 2017-10-20 17:38:04 +02:00
d973096464 Add Custom header parsing to Docker Provider 2017-10-20 17:14:03 +02:00
7192aa86b5 Merge 'v1.4.0' into master 2017-10-16 23:10:44 +02:00
9c8df8b9ce Fix 1.4.0 release date 2017-10-16 19:44:02 +02:00
ff4c7b82bc Prepare release v1.4.0 2017-10-16 18:42:03 +02:00
47ff51e640 add retry backoff to staert config loading 2017-10-16 18:06:04 +02:00
08503655d9 Backward compatibility for sticky 2017-10-16 17:38:03 +02:00
3afd6024b5 Fix consul catalog retry 2017-10-16 16:58:03 +02:00
aa308b7a3a Add TrustForwardHeader options. 2017-10-16 12:46:03 +02:00
9598f646f5 New entry point parser. 2017-10-13 15:04:02 +02:00
8af39bdaf7 Changed Docker network filter to allow any swarm network 2017-10-13 12:00:03 +02:00
914f3d1fa3 Do not run integration tests by default. 2017-10-13 11:08:03 +02:00
8cb3f0835a Stickiness cookie name. 2017-10-12 17:50:03 +02:00
cba0898e4f fix seconds to really be seconds 2017-10-12 16:26:03 +02:00
8d158402f3 Continue processing on invalid auth-realm annotation. 2017-10-12 15:48:03 +02:00
7f2582e3b6 Nil body retries 2017-10-12 15:10:04 +02:00
dbc796359f Fix Proxy Protocol documentation 2017-10-12 11:10:03 +02:00
4d1285d8e5 Add docker things for documentation 2017-10-11 14:46:03 +02:00
871d097b30 Fix traefik logs to behave like configured 2017-10-11 10:38:03 +02:00
1532033a7f Create dummy main() function in generate.go. 2017-10-10 18:20:02 +02:00
9faae7387e Merge tag 'v1.4.0-rc5' into master 2017-10-10 17:17:44 +02:00
a5c644e719 Only listen to configured k8s namespaces. 2017-10-10 16:26:03 +02:00
7a2ce59563 Prepare release v1.4.0-rc5 2017-10-10 15:50:03 +02:00
14cec7e610 Stickiness documentation 2017-10-10 15:24:03 +02:00
6287a3dd53 Add trusted whitelist proxy protocol 2017-10-10 14:50:03 +02:00
93a1db77c5 Move http2 configure transport 2017-10-10 12:14:03 +02:00
a9d4b09bdb Stickiness cookie name 2017-10-10 11:10:02 +02:00
ed2eb7b5a6 Quote priority values in annotation examples. 2017-10-09 14:16:03 +02:00
18d8537d29 Document ways to partition Ingresses in the k8s guide. 2017-10-09 12:36:03 +02:00
72f3b1ed39 Remove pod from RBAC rules. 2017-10-09 12:12:03 +02:00
fd70e6edb1 enable prefix matching within slash boundaries 2017-10-06 11:34:03 +02:00
5a578c5375 Updating make run-dev 2017-10-06 10:44:03 +02:00
9db8773055 fix flakiness in log rotation test 2017-10-06 09:20:13 +02:00
8a67434380 Sanitize cookie names. 2017-10-05 12:14:03 +02:00
c94e5f3589 Delay first version check 2017-10-05 08:42:02 +02:00
adef7200f6 Fix grammar 2017-10-03 10:22:03 +02:00
cf508b6d48 Merge 'v1.4.0-rc4' into master 2017-10-02 17:18:24 +02:00
f8d36fda28 Prepare release v1.4.0-rc4 2017-10-02 16:00:03 +02:00
4fe9cc7730 Add tests for urlencoded part in url 2017-10-02 15:36:02 +02:00
758b7f875b Fix grammar mistake in the kv-config docs 2017-10-02 14:58:04 +02:00
0b97a67cfa CI: speed up pull images. 2017-10-02 14:22:03 +02:00
ec5976bbc9 Update gRPC example 2017-10-02 11:34:03 +02:00
5cc49e2931 bug command. 2017-10-02 10:32:02 +02:00
b6752a2c02 Forward upgrade error from backend 2017-09-29 21:04:03 +02:00
d41e28fc36 Handle empty ECS Clusters properly 2017-09-29 16:56:03 +02:00
64c52a6921 Consul catalog remove service failed 2017-09-29 16:30:03 +02:00
691a678b19 Improve compression documentation 2017-09-29 10:34:03 +02:00
1ba7fd91ff grep to-be-pulled-images directly to avoid newline issue. 2017-09-26 14:44:03 +02:00
1c98a9ad3e Add request accepting grace period delaying graceful shutdown. 2017-09-26 10:22:03 +02:00
dd23ceeead Updating Docker output and curl for sticky sessions 2017-09-22 17:22:03 +02:00
058fa1367b CI: speed up pull images. 2017-09-22 16:46:03 +02:00
9db12374ea Be certain to clear our marshalled representation before reloading it 2017-09-22 16:14:03 +02:00
fc550ac1fc Dumpcerts.sh: fixed sed, extracted domain keys 2017-09-22 15:18:03 +02:00
d6ef8ec3d1 Merge branch 'v1.4' into master 2017-09-21 11:37:33 +02:00
837db9a2d9 add json format support for traefik logs 2017-09-21 10:42:02 +02:00
a941739f8a Change pull image command in Makefile 2017-09-20 20:02:02 +02:00
795a346006 Flaky tests and refresh problem in consul catalog 2017-09-20 19:08:02 +02:00
9d00da7285 fix SSE subscriptions when retries are enabled 2017-09-20 18:40:03 +02:00
52c1909f24 Fix deprecated IdleTimeout config 2017-09-20 18:14:03 +02:00
2cbf9cae71 Merge tag 'v1.4.0-rc3' into master 2017-09-18 21:52:44 +02:00
f9225c54ff Prepare release v1.4.0-rc3 2017-09-18 18:20:03 +02:00
cb05f36976 Manage Headers for the Authentication forwarding. 2017-09-18 17:48:07 +02:00
49e0e20ce2 fix healthcheck port 2017-09-18 15:50:03 +02:00
7c35337999 Remove GZIPHandler fork. 2017-09-18 11:04:03 +02:00
2296aab5a8 refactor: unflaky access log. 2017-09-18 09:44:03 +02:00
ce3b255f1a chore: Use go-check fork. 2017-09-18 09:44:03 +02:00
3942f3366d User guide gRPC 2017-09-16 10:56:02 +02:00
df76cc33a5 Fixes entry points configuration. 2017-09-15 20:56:04 +02:00
cf387d5a6d Enable loss less rotation of log files 2017-09-15 15:02:03 +02:00
0a0cf87625 Fix rancher host IP address 2017-09-15 12:30:03 +02:00
1a2544610d Enhance web backend documentation 2017-09-15 09:18:03 +02:00
5229b7cfba Add forward auth documentation. 2017-09-14 21:26:02 +02:00
243b45881d Document custom error page restrictions. 2017-09-14 08:50:02 +02:00
883028d981 Add examples of proxying ping 2017-09-13 15:24:03 +02:00
bdeb7bfb9f Display Traefik logs in integration test 2017-09-13 10:34:04 +02:00
808ffb0491 Explains new bot features. 2017-09-12 21:04:03 +02:00
5305a16350 Add guide section on production advice, esp. CPU. 2017-09-12 19:56:04 +02:00
63b581935d Add stack name to backend name generation to fix rancher metadata backend 2017-09-12 15:06:04 +02:00
c7c9349b00 Enhance documentation readability. 2017-09-11 19:10:04 +02:00
d54417acfe Rate limiting for frontends 2017-09-09 13:36:03 +02:00
9fba37b409 Merge v1.4.0-rc2 into master 2017-09-09 01:00:48 +02:00
6d28c52f59 Prepare release v1.4.0-rc2 2017-09-08 21:28:02 +02:00
f80a6ef2a6 Fix consul catalog refresh problems 2017-09-08 20:50:04 +02:00
ecf31097ea Upgrade oxy for websocket bug 2017-09-08 16:14:03 +02:00
16fc3675db Force GOARM to v6. 2017-09-08 14:50:04 +02:00
651d993d9c prometheus, HTTP method and utf8 2017-09-08 11:22:03 +02:00
03eb5139a2 Anonymize contributing doc 2017-09-08 10:28:03 +02:00
286d882f1e Remove old glide elements for integration tests. 2017-09-08 10:26:03 +02:00
3b6afdf80c Fix error in prepareServer 2017-09-07 20:14:03 +02:00
c19cce69fa Add basic auth for ecs 2017-09-07 17:34:03 +02:00
5c4931e235 Update oxy for websocket bug 2017-09-07 16:06:04 +02:00
b705e64a8a Add Basic auth for consul catalog 2017-09-07 15:28:02 +02:00
7fd1eb3780 Upgrade libkermit/compose version 2017-09-07 15:14:03 +02:00
8c5514612f Fix whitespaces 2017-09-07 12:02:03 +02:00
924e82ab0c doc: add notes on server urls with path 2017-09-07 11:40:03 +02:00
adcb99d330 Update cluster.md 2017-09-07 11:16:03 +02:00
8339139400 Access log default values 2017-09-07 10:54:03 +02:00
a43cf8d2b8 Fix IAM policy sid. 2017-09-07 10:08:04 +02:00
2b863d9bc2 Upgrade libkermit/compose version 2017-09-06 15:02:03 +02:00
9ce4f94818 ECS provider refactoring 2017-09-06 12:10:05 +02:00
5157a6ad47 Send traefik logs to stdout 2017-09-06 11:58:03 +02:00
cd6c58a372 fix rancher api environment get 2017-09-06 10:50:04 +02:00
03ba8396f3 Add test for SSL TERMINATION in Websocket 2017-09-06 09:36:02 +02:00
b0a0e16136 Enhance documentation. 2017-09-05 15:58:03 +02:00
732d73dd43 [Docs] Fix invalid service yaml example 2017-09-05 11:42:03 +02:00
e075dfe911 refactor: re-organize doc. 2017-09-01 20:38:03 +02:00
425b53585a doc: fix error pages configuration. 2017-09-01 20:38:03 +02:00
d5bbb103d4 HTTPS for images, video and links in docs. 2017-09-01 19:44:03 +02:00
5c2849ea07 Enhance security headers doc. 2017-09-01 17:44:03 +02:00
723418e2cc fix: documentation Mesos. 2017-08-30 14:52:03 +02:00
45e2e8baec Update traefik SSH key take 2 (#2023) 2017-08-29 09:37:47 +02:00
b0ae6bc049 Prepare release v1.4.0-rc1 2017-08-29 02:10:03 +02:00
ffb53c07b8 refactor: basic configuration. 2017-08-28 23:02:04 +02:00
f329b3b51d chore: change CODEOWNERS file. 2017-08-28 23:02:04 +02:00
5b27aba3e1 doc: Material Theme. 2017-08-28 23:02:04 +02:00
7c2ba62b56 doc: structural review
- user-guide review.
- add DataDog and StatD configuration.
- sync sample.toml and doc.
- split entry points doc.
- Deprecated.
2017-08-28 23:02:04 +02:00
24862402e5 Refactor doc pages 2017-08-28 23:02:04 +02:00
d568d2f55a Update golang version in contributing guide 2017-08-28 15:20:03 +02:00
dae7e7a80a add RetryAttempts to AccessLog in JSON format 2017-08-28 12:50:02 +02:00
23cdb37165 Update Traefiker SSH key 2017-08-28 11:48:03 +02:00
2c82dfd444 Merge v1.3.7 2017-08-25 22:58:49 +02:00
c8c31aea62 Add proxy protocol 2017-08-25 21:32:03 +02:00
89b0037ec1 Improve Let's Encrypt documentation 2017-08-25 21:10:03 +02:00
b75fb23887 Update documentation for 1.4 release 2017-08-25 20:40:03 +02:00
52b69fbcb8 Add forward authentication option 2017-08-25 18:22:03 +02:00
f16219f90a Exposed by default feature in Consul Catalog 2017-08-25 17:32:03 +02:00
7b0cef0fac Prepare release v1.3.7 2017-08-25 17:08:02 +02:00
e0af17a17a Refactor globalConfiguration / WebProvider 2017-08-25 16:10:03 +02:00
92fb86b66f log X-Forwarded-For as ClientHost if present 2017-08-25 13:00:03 +02:00
919295cffc Only forward X-Fowarded-Port. 2017-08-25 12:14:03 +02:00
086a85d2f0 Enable loadbalancer.sticky for ECS 2017-08-25 11:42:03 +02:00
8235cd3645 refactor: minor changes. 2017-08-25 11:08:02 +02:00
f1a257abf8 refactor: enhance bug report command. 2017-08-25 11:08:02 +02:00
98dfd2ba0e Added a check to ensure clientTLS configuration contains either a cert or a key 2017-08-25 10:26:02 +02:00
87e6285cf6 Update certificates. 2017-08-25 09:20:03 +02:00
0d56a98836 Add support for Query String filtering 2017-08-24 20:28:03 +02:00
8105f1c379 Enable loadbalancer.sticky for Consul Catalog 2017-08-24 18:38:05 +02:00
e6c2040ea8 Extract metrics to own package and refactor implementations 2017-08-23 20:46:03 +02:00
c1b5b740ff toml page - replace li by table 2017-08-23 19:46:03 +02:00
1d2d0cefaa Fix documentation glitches. 2017-08-23 09:22:03 +02:00
04e65958ee Merge 'v1.3.6' 2017-08-22 16:23:18 +02:00
8765494cbd Add support for several ECS backends 2017-08-22 11:46:03 +02:00
05665f4eec Add more visibility to docker stack deploy label issue 2017-08-22 10:56:03 +02:00
78544f7fa2 Prepare release v1.3.6 2017-08-22 09:52:02 +02:00
396449c07f Add healthcheck command 2017-08-21 23:18:02 +02:00
eda679776e Add Marco Jantke to maintainers 2017-08-21 22:22:04 +02:00
69d57d602f Add guide for Docker, Traefik & Letsencrypt 2017-08-21 21:20:04 +02:00
32b2736efd Bump gorilla/mux version. 2017-08-21 20:40:02 +02:00
3f650bbd11 Support X-Forwarded-Port. 2017-08-21 17:54:02 +02:00
5313922bb7 compress: preserve status code 2017-08-21 11:10:03 +02:00
ec3e2c08b8 Support multi-port service routing for containers running on Marathon 2017-08-21 10:46:03 +02:00
40e18db838 Websocket parameters and protocol. 2017-08-20 19:02:02 +02:00
0367034f93 Fix docs about default namespaces. 2017-08-18 19:18:02 +02:00
b80ecd51a7 Use default frontend priority of zero. 2017-08-18 16:14:03 +02:00
14a0d66410 Add configurable timeouts and curate default timeout settings 2017-08-18 15:34:04 +02:00
d84ccbc52a doc: add bots documentation.
- move contributing guide
- move maintainer guide
2017-08-18 10:24:03 +02:00
1190768f4b chore: remove all PR scripts. 2017-08-18 10:24:03 +02:00
ea3510d1f3 Add support for readiness checks. 2017-08-18 03:08:03 +02:00
3f76f73e8c Mark Marathon and Kubernetes as constraint-supporting. 2017-08-18 02:40:03 +02:00
759c269dee Code cleaning. 2017-08-18 02:18:02 +02:00
c360395afc examples/k8s: fix ui ingress port out of sync with deployment 2017-08-18 01:40:03 +02:00
60a35c8aba Setting the Cookie Path explicitly to root 2017-08-13 11:34:34 +02:00
50dd2b8cff Change Traefik intro video 2017-08-11 15:19:36 +02:00
4e5fcac9cb Add log file close and reopen on receipt of SIGUSR1 2017-08-11 12:04:58 +02:00
64b8fc52c3 [marathon] Fix and extend integration tests.
- Update compose file.
- Add integration test for Marathon application deployment.
2017-08-10 21:58:08 +02:00
19a5ba3264 Update github.com/docker/libcompose
Update github.com/docker/libcompose in glide.* files.
Vendor github.com/docker/libcompose update.
2017-08-10 21:58:08 +02:00
7ff6c32452 Add the sprig functions in the template engine 2017-08-10 20:42:39 +02:00
ff11467022 Bind healthcheck to backend by entryPointName 2017-08-10 18:00:31 +02:00
7d3878214a Update documentation 2017-08-10 17:29:32 +02:00
984817d3a0 Add more files to CODEOWNERS. 2017-08-10 16:47:11 +02:00
6b133e24b9 Added RetryMetrics to DataDog and StatsD providers 2017-08-09 02:54:35 +02:00
990ee89650 Add helloworld tests with gRPC 2017-08-06 11:55:42 +02:00
8071f31721 Moved namespace to correct place 2017-08-03 10:25:05 +02:00
d456c2ce6a Merge 'v1.3.5' 2017-08-01 19:32:44 +02:00
413ed62933 Prepare release v1.3.5 2017-08-01 17:43:37 +02:00
1b4dc3783c Oxy with fixes on websocket + integration tests 2017-08-01 15:24:08 +02:00
94f922cd28 Added ability to override frontend priority for k8s ingress router 2017-07-29 18:35:23 +02:00
29390a3c4a Update the documentation to use DaemonSet or Deployment (#1735) 2017-07-29 12:50:04 +02:00
1db9482a8e Prepare release v1.3.4 2017-07-27 17:24:19 +02:00
888e6dcbc8 Oxy with gorilla for websocket(+integration tests) 2017-07-27 15:43:12 +02:00
765c44d77f [kubernetes] Add secrets resource to in-line RBAC spec.
Previously only existed in the Github-hosted example file.
2017-07-27 10:02:02 +02:00
64ee68763b feat: match doc also. 2017-07-24 10:06:22 +02:00
4122aef12e chore: fix CODEOWERS file. 2017-07-24 10:06:22 +02:00
8cb44598c0 [marathon] Use test builder.
This change introduces the builder pattern to the Marathon unit tests in
order to simplify and reduce the amount of testing boilerplate.

Additional changes:

- Add missing unit tests.
- Make all tests look consistent.
- Use dedicated type for task states for increased type safety.
- Remove obsoleted getApplication function.
2017-07-21 17:15:29 +02:00
69c628b626 DataDog and StatsD Metrics Support
* Added support for DataDog and StatsD monitoring
* Added documentation
2017-07-21 00:26:43 +02:00
cd28e7b24f fix GraceTimeOut description
Documentation stated that GraceTimeOut describes the timeout between
hot-reloads, which is not the case. GraceTimeOut describes the timeout
Traefik uses to finish serving active requests before stopping only.
2017-07-20 23:42:43 +02:00
40d9058bb6 refactor: migration Negroni from codegangsta to urfave 2017-07-20 15:19:15 +02:00
c36e0b3b06 refactor: add Safe everywhere is needing. 2017-07-20 14:59:54 +02:00
3174fb8861 [marathon] Assign filtered tasks to apps contained in slice.
We previously assigned them to a copy of each application, which
effectively disabled all filtering.

Fixes a bug introduced along commit 779eeba.
2017-07-20 10:39:27 +02:00
074b31b5e9 respond with 503 on empty backend 2017-07-19 19:28:24 +02:00
16609cd485 Update docs for dnsimple env vars.
* Lego library uses DNS_OAUTH_TOKEN instead of DNSIMPLE_OAUTH_TOKEN
2017-07-19 18:01:24 +02:00
a09a8b1235 Fix replace path rule
* Fix replace path rule
* test: add RequestURI tests.
2017-07-19 10:27:52 +02:00
70ab34cfb8 doc change regarding consul SSL
document change to clarify consul ssl, vs consul ssl client certificate security
2017-07-18 17:22:08 +02:00
36ee69609e fix: double compression. 2017-07-18 11:27:24 +02:00
c53be185f4 chore(glide): change nergoni git url. 2017-07-12 10:22:39 +02:00
779eeba650 [marathon] Use single API call to fetch Marathon resources.
Change Marathon provider to make just one API call instead of two per
configuration update by means of specifying embedded resources, which
enable retrieving multiple response types from the API at once. Apart
from the obvious savings in API calls, we primarily gain a consistent
view on both applications and tasks that allows us to drop a lot of
correlation logic.  Additionally, it will serve as the basis for the
introduction of readiness checks which require application/task
consistency for correct leverage on the proxy end.

Additional changes:

marathon.go:
- Filter on tasks now embedded inside the applications.
- Reduce/simplify signature on multiple template functions as we do not
  need to check for proper application/task correlation anymore.
- Remove getFrontendBackend in favor of just getBackend.
- Move filtering on enabled/exposed applications from `taskFilter` to
  `applicationFilter`. (The task filter just reached out to the
  applications anyway, so it never made sense to locate it with the
  tasks where the filter was called once for every task even though the
  result would never change.)
- Remove duplicate constraints filter in tasks, where it neither made
  sense to keep as it operates on the application level only.
- Add context to rendering error.

marathon_test.go:
- Simplify and reduce numerous tests.
- Convert tests with high number of cases into parallelized sub-tests.
- Improve readability/structure for several tests.
- Add missing test for enabled/exposed applications.
- Simplify the mocked Marathon server.

marathon.tmpl:
- Update application/task iteration.
- Replace `getFrontendBackend` by `getBackend`.
2017-07-11 14:35:01 +02:00
58ffea6627 extract lb configuration steps into method 2017-07-10 19:18:31 +02:00
a2d68ed881 chore: GitHub Code Owners. 2017-07-10 17:45:58 +02:00
d653a348b1 Factorize labels
* refactor(accesslog): factorize file name.
* traefik.frontend.rule
* traefik.frontend.value
* traefik.backend.circuitbreaker.expression
* traefik.enable
* traefik.backend.loadbalancer.method
* traefik.backend.loadbalancer.sticky
* traefik.backend.maxconn.amount
* traefik.backend.maxconn.extractorfunc
* traefik.port
* traefik.tags
* traefik.backend
* traefik.weight
* traefik.domain
* traefik.protocol
* traefik.frontend.passHostHeader
* traefik.frontend.whitelistSourceRange
* traefik.frontend.priority
* traefik.frontend.entryPoints
* traefik.frontend.auth.basic
* traefik.backend.id
* traefik.backend.circuitbreaker
* traefik.frontend.rule.type
* traefik.portIndex
* refactor(docker): specific labels
* refactor(rancher): specific labels
* traefik.backend.healthcheck.*
* refactor(providers): factorize labels.
2017-07-10 16:58:12 +02:00
2e84b1e556 Enhance integration tests
* refactor: remove unused code.
* refactor: factorize Traefik cmd start.
* refactor(whitelist): minor change.
* refactor(accesslog): better use of checker.
* refactor(errorpages): factorize containers IP variables.
* refactor(integration): refactor cmdTraefikWithConfigFile.
2017-07-10 14:58:31 +02:00
bbb133d94c doc: remove glide integration. 2017-07-10 11:33:05 +02:00
d90fa5ab3e [kubernetes] Improve documentation.
- Add details to the labelselector parameter.
- Add section on ExternalNames in the guide.
2017-07-08 12:59:12 +02:00
759a19bc4f Add whitelist configuration option for entrypoints
* Add whitelist configuration option for entrypoints
* Add whitelist support to --entrypoint flag
2017-07-08 12:21:14 +02:00
a7ec785994 refactor(dynamodb): Use Traefik Logger. 2017-07-08 00:05:53 +02:00
46faa7a745 refactor(ecs): Use Traefik Logger. 2017-07-08 00:05:53 +02:00
54e3f08833 refactor(marathon): Use Traefik Logger. 2017-07-08 00:05:53 +02:00
b365836c57 feat: Add Trace in Base Provider. 2017-07-08 00:05:53 +02:00
242f1b9c3c feat(logger): Expose Logrus writer.
- Hack logrus scanner buffer size.
- dedicate method for large scanner buffer.
2017-07-08 00:05:53 +02:00
4dfbb6d489 Add marathon label to configure basic auth, similar to docker and rancher providers 2017-07-07 23:36:04 +02:00
c31b4c55c2 Update contributing guide build steps 2017-07-07 23:13:23 +02:00
ca5bbab20a traefik controller access to secrets
The traefik controller shall have access to secrets for the k8s basic authentication (#1488) to work
2017-07-07 22:35:03 +02:00
41dd124a4b kubernetes ingress rewrite-target implementation
* Adding support for `ingress.kubernetes.io/rewrite-target`

We create a rule using the `PathPrefixStrip` to trim out the bit in the rewrite rule.
2017-07-07 21:27:54 +02:00
dbf6161fa1 always rebuild webui on 'make image'
and introduce a new make target image-dirty that is used for the Traefik
deployment.
2017-07-07 17:56:48 +02:00
7aabd6e385 Update README.md 2017-07-07 14:34:25 +02:00
cb203f8e7e Make the ACME developements testing easier
* ADD docker-compose and shell script to allow developers to get ACME environment easily
2017-07-07 11:36:32 +02:00
8f845bac74 Merge tag 'v1.3.3' 2017-07-06 19:37:12 +02:00
98b52d1f54 Prepare release v1.3.3 2017-07-06 17:53:35 +02:00
4892b2b0da [kubernetes] Undo the Secrets controller sync wait.
When Secrets permissions have not been granted (which is likely to be
the case for users not needing the basic auth feature), the watch on the
Secrets API will never yield a response, thereby causing the controller
to never sync successfully, and in turn causing the check for all
controller synchronizations to fail consistently. Thus, no event will
ever be handled.
2017-07-06 17:12:25 +02:00
a89eb122a0 Clarify that provider-enabling argument parameters set all defaults. 2017-07-06 17:00:44 +02:00
b7daa2f3a4 Update traefik dependencies (docker/docker and related) (#1823)
Update traefik dependencies (docker/docker and related)

- Update dependencies
- Fix compilation problems
- Remove vdemeester/docker-events (in docker api now)
- Remove `integration/vendor`
- Use `testImport`
- update some deps.
- regenerate the lock from scratch (after a `glide cc`)
2017-07-06 16:28:13 +02:00
91ce78da46 [k8s] Tell glog to log everything into STDERR.
Logging errors into a file inside a minimalistic container might not be
possible, and glog bails out with an exit code > 0 if it fails.
2017-07-04 17:11:50 +02:00
7d178f49b4 Update docker version to 17.03.2…
… and also update the url to get static binaries.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2017-07-03 16:21:28 +02:00
85f4f26942 doc: release cycle. 2017-07-03 14:57:19 +02:00
eee8ba8a53 doc: Traefik bug command. 2017-07-03 12:42:06 +02:00
22aceec426 Re-think integration vendoring
- remove docker/docker from  Traefik vendor (unused)
- use `ignore` for all Traefik vendor in integration glide.
- defined only integration specific version of the dependencies.
2017-07-03 11:53:31 +02:00
121c057b90 Custom Error Pages (#1675)
* custom error pages
2017-07-01 01:04:18 +02:00
2c976227dd remove confusing go-marathon log message
Log message produced by go-marathon was:
time="2017-06-28T09:08:19Z" level=debug msg="listenToSSE(): failed to
handle event: failed to decode the event type, content: , error: EOF"

The fix for this was done in the upstream project of go-marathon
donovanhide/eventsource.

Background is that Marathon periodically sends a \n over the SSE
subscription, in order to keep the connection alive. This was parsed as
empty event by the eventsource and published. go-marathon in turn was
not able to do something with this empty event was producing the log
message above. By getting rid of publishing empty events in the
downstream library, we also get rid of this log message.
2017-06-30 22:14:57 +02:00
81d011e57d Handle RootCAs Certificate 2017-06-30 14:56:55 +02:00
3776e58041 Merge branch 'v1.3' 2017-06-30 00:04:04 +02:00
f06e256934 Prepare release v1.3.2 2017-06-29 17:40:11 +02:00
4699d6be18 Fix proxying of unannounced trailers 2017-06-29 17:03:29 +02:00
6473002021 Continue Ingress processing on auth retrieval failure. 2017-06-29 16:13:53 +02:00
4d89ff7e18 Improve basic auth handling.
- Enrich logging.
- Move error closer to producer.
2017-06-29 16:13:53 +02:00
c5c63071ca Wait for secret controller to finish synchronizing.
Prevents a race on closing the events channel, possibly leading to a
double-close.
2017-06-29 16:13:53 +02:00
9fbe21c534 Upgrade go-marathon to dd6cbd4.
Fixes a problem with UnreachableStrategy being available now in two
type-incompatible formats (object and string).

We also upgrade the transitive dependency
github.com/donovanhide/eventsource.
2017-06-29 09:59:20 +02:00
36c88111de Merge branch 'v1.3' 2017-06-27 23:27:00 +02:00
7a34303593 chore: Bump Docker version to 17.03 2017-06-27 23:22:43 +02:00
2201dcd505 doc: Manuel Laufenberg become Manuel Zapf. 2017-06-27 22:02:23 +02:00
7a7cafcbaa Add Nicolas Mengin to maintainers 2017-06-27 22:02:23 +02:00
efb671401d Add Julien Salleyron to maintainers 2017-06-27 21:35:47 +02:00
4128c1ac8d Allow file provider to load config from files in a directory. 2017-06-27 16:58:04 +02:00
73e10c96cc Merge branch 'v1.3' 2017-06-27 14:42:12 +02:00
fdb24c64e4 chore(semaphoreci): update Docker version. 2017-06-27 14:05:44 +02:00
631079a12f feature: Add provided certificates check before to generate ACME certificate when OnHostRule is activated
- ADD TI to check the new behaviour with onHostRule and provided certificates
- ADD TU on the getProvidedCertificate method
2017-06-26 18:32:55 +02:00
0055965295 add status code to request duration metric 2017-06-26 18:21:28 +02:00
f99f3b987e fix: websocket when the connection upgrade failed. 2017-06-26 18:00:03 +02:00
34e60a8404 Change to a more flexible PR review process
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-06-26 11:04:12 +02:00
ceec81011b Address review comments. 2017-06-24 12:32:05 +02:00
927003329e contrib: Dump keys/certs from acme.json to files
In the event that a user needs to explode their acme.json file into
a set of directories and relevant files for troubleshooting or use
with other programs this script will parse them into the components
in the following path structure:

```
certdir
├── certs
│   ├── domain-1.example.com
│   ├── domain-2.example.com
│   └── domain-n.example.com
└── private
    └── letsencrypt.key
```
2017-06-24 12:32:05 +02:00
01bb0a80ab doc: update Rancher documentation. 2017-06-21 14:54:36 +02:00
db1baf80a9 Speeding up health change detection by separating it from catalog services check. 2017-06-20 20:27:04 +02:00
9cb07d026f Refactor into dual Rancher API/Metadata providers
Introduces Rancher's metadata service as an optional provider source for
Traefik, enabled by setting `rancher.MetadataService`.

The provider uses a long polling technique to watch the metadata service and
obtain near instantaneous updates. Alternatively it can be configured to poll
the metadata service every `rancher.RefreshSeconds` by setting
`rancher.MetadataPoll`.

The refactor splits API and metadata service code into separate source
files respectively, and specific configuration is deferred to
sub-structs.

Incorporates bugfix #1414
2017-06-20 19:08:53 +02:00
984ea1040f Fix error handling for docker swarm mode 2017-06-20 18:10:21 +02:00
447109e868 Add HTTP HEAD handling to /ping endpoint
Also updates documentation to reflect new method.
2017-06-20 11:40:14 +02:00
f79317a435 retry only on real network errors
Now retries only happen when actual network errors occur and not only
anymore based on the HTTP status code. This is because the backend could
also send this status codes as their normal interface and in that case
we don't want to retry.
2017-06-19 20:13:46 +02:00
131d8dd765 Merge tag 'v1.3.1' 2017-06-16 16:52:53 +02:00
b452695c20 added consul acl token note 2017-06-16 16:31:03 +02:00
f17785c3ab doc: fix typo in maintainer.md 2017-06-16 14:00:24 +02:00
fe4d0e95b3 Prepare release v1.3.1 2017-06-16 12:53:26 +02:00
0fb63f4488 fix(webui): don't fail when backend or frontend are empty. 2017-06-16 10:38:58 +02:00
2a578748fd Merge branch 'v1.3' 2017-06-14 22:26:35 +02:00
d87c4d89e9 fix: Double GZIP. 2017-06-14 21:13:38 +02:00
ccc429e36c refactor(eureka): Use Traefik Logger. 2017-06-14 19:49:45 +02:00
0d25ba3cbc refactor: Add explicit error message. 2017-06-14 19:49:45 +02:00
2ddae2e856 update go-marathon to 441a03a
in order to get the latest fixes regarding SSE subscription failover.
2017-06-14 10:03:49 +02:00
885b9f371c enable logging to stdout for access logs 2017-06-13 23:43:38 +02:00
f275e4ad3c Create Header Middleware 2017-06-13 12:34:17 +02:00
aea7bc0c07 chore: update Glide hash. 2017-06-12 22:15:33 +02:00
a457392ec3 refactor: clean coreos/etcd dependency. 2017-06-12 22:15:33 +02:00
37ec7d0505 refactor: subpackage for x/oauth2. 2017-06-12 22:15:33 +02:00
8f6404ab3a fix: sirupsen/logrus version
State:
- Current version: 10f801ebc38b33738c9d17d50860f484a0988ff5
- Glide suggest: f7f79f729e0fbe2fcc061db48a9ba0263f588252

https://github.com/sirupsen/logrus/commits/master?after=85b1699d505667d13f8ac4478c1debbf85d6c5de+34
10f801ebc3 (17 Mar 2017)
f7f79f729e (19 Jan 2016)
2017-06-12 22:15:33 +02:00
1538b16b21 fix: golang/protobuf version
`github.com/golang/protobuf`:
- `github.com/prometheus/client_golang` (no version)
- `github.com/gogo/protobuf` (no version)
- `google.golang.org/appengine` (no version)
- `github.com/matttproud/golang_protobuf_extensions` (no version)

State:
- Current version: 2bba0603135d7d7f5cb73b2125beeda19c09f4ef
- Glide suggest: 8616e8ee5e20a1704615e6c8d7afcdac06087a67

Force to keep the current version.

Refs
- 2bba060313 (Mar 31, 2017) next commit the Apr 27, 2017.
- 8616e8ee5e (8 Jun 2016)
2017-06-12 22:15:33 +02:00
a6477fbd95 fix: Prometheus dependency version: matttproud/golang_protobuf_extensions
`matttproud/golang_protobuf_extensions` is used by:
- `github.com/prometheus/client_golang`
- `github.com/prometheus/common`

Force to the latest version.

Refs:
- https://github.com/matttproud/golang_protobuf_extensions/commits/master (no dependencies manager)
- 24 Apr 2016, c12348ce28 (master, HEAD)
- 6 Apr 2015, fc2b8d3a73
2017-06-12 22:15:33 +02:00
e802dcd189 fix: Mesos/k8s dependency version: golang/glog
`golang/glog` is used by:
- `github.com/mesos/mesos-go` (no version)
- `k8s.io/client-go` (`44145f04b68cf362d9c4df2182967c2275eaefed`)

In #353 (add Mesos provider, 20 Jul 2016), the `golang/glog` hash is `fca8c8854093a154ff1eb580aae10276ad6b1b5f`.

The problem appear in #836 (use k8s client, 1 Dec 2016).

Refs:
- Traefik:
  - https://github.com/containous/traefik/pull/836
  - 131f581f77
- Glog
  - https://github.com/golang/glog/commits/master
  - https://github.com/golang/glog/pull/13
  - 44145f04b6
  - fca8c88540
- k8s
  - e121606b0d/Godeps/Godeps.json
  - https://github.com/kubernetes/client-go/blob/master/Godeps/Godeps.json
2017-06-12 22:15:33 +02:00
931dc02c09 fix: Vulcand dependency version : vulcand/predicate
`vulcand/predicate` is used by:
- `github.com/vulcand/oxy` (no dependencies manager)
- `github.com/vulcand/route` (used by `github.com/vulcand/vulcand`)

`github.com/vulcand/vulcand` (Godeps) required a old version `cb0bff91a7ab7cf7571e661ff883fc997bc554a3`.

`19b9dde14240d94c804ae5736ad0e1de10bf8fe6` is the only commit before `cb0bff91a7ab7cf7571e661ff883fc997bc554a3`.

refs:
- 42492a3a85/Godeps/Godeps.json
- https://github.com/vulcand/predicate/commits/master
- 19b9dde142
2017-06-12 22:15:33 +02:00
7017cdcf49 fix: oxy dependency version: mailgun/timetools. 2017-06-12 22:15:33 +02:00
5aa017d9b5 fix: k8s dependency version: emicklei/go-restful
`emicklei/go-restful` is used by:
- `k8s.io/client-go`  (Godeps)

Refs:
- e121606b0d/Godeps/Godeps.json
2017-06-12 22:15:33 +02:00
a7297b49a4 fix: Prometheus dependencies
Prometheus is related to `go-kit/kit`.
`go-kit/kit` doesn't have dependency manager.

We use `go-kit/kit` v0.3.0 (15 Nov 2016).

We must explicitly declare the Prometheus dependencies.
Prometheus doesn't have dependency manager.
Use the commit date to fixed all hash.

refs:
- go-kit
  - https://github.com/go-kit/kit/tree/v0.3.0 (15 Nov 2016)
- Prometheus
  - https://github.com/prometheus/client_golang/commits/master
  - 08fd2e1237 (Apr 1, 2017)
  - https://github.com/prometheus/common/commits/master
  - 49fee292b2 (Feb 20, 2017)
  - https://github.com/prometheus/client_model/commits/master
  - 6f38060186 (Feb 16, 2017, master, HEAD)
  - https://github.com/prometheus/procfs/commits/master
  - a1dba9ce8b (Feb 16, 2017)
2017-06-12 22:15:33 +02:00
3eaeb81831 Adds definitions to backend kv template for health checking 2017-06-12 21:54:08 +02:00
7d6c778211 Enhanced flexibility in Consul Catalog configuration 2017-06-12 21:18:55 +02:00
9c27a98821 refactor: move Marathon client mock.
refactor: remove old Marathon mock.
refactor: generate new Marathon mock.

mockery -recursive -dir=vendor/github.com/gambol99/ -name=Marathon -output=provider/marathon/mocks
2017-06-12 20:27:54 +02:00
ad54c5a278 drop "slave" wording for "worker"
Traefik should follow modern IT trends, and use manager/leader/worker/agent, etc. instead of "master/slave".

e.g jenkinsci/jenkins#2007 (https://issues.jenkins-ci.org/browse/JENKINS-27268)

NB: of course, it can only apply where possible, since backends like Mesos should retain their own concepts, and not add more confusion.
2017-06-12 20:07:39 +02:00
96939e2990 chore: Enhance GitHub issue template. 2017-06-12 19:29:23 +02:00
5268db47a1 fix: glide go-marathon 2017-06-11 21:44:36 +02:00
3048509807 enable TLS client forwarding
Copys the incoming TLS client certificate to the outgoing
request. The backend can then use this certificate for
client authentication ie. k8s client cert authentication
2017-06-11 15:24:29 +02:00
7399a83c74 refactor: Use Statefull interface in access log. 2017-06-09 23:55:49 +02:00
18c3d8dc62 test: add AddPrefix test. 2017-06-09 23:55:49 +02:00
2d1ddcf28b test: HealthCheck review. 2017-06-09 23:55:49 +02:00
a1a0420314 test: use MustNewRequest. 2017-06-09 23:55:49 +02:00
2223587fc0 refactor: ordering imports. 2017-06-09 23:55:49 +02:00
63f9bccf9f refactor: fix typos.
refactor: typo in whitelister file name.
2017-06-09 23:55:49 +02:00
18d11e02d0 test: simplify stripPrefix* tests. 2017-06-09 23:55:49 +02:00
a71d69cc3c make the cookie name unique to the backend being served 2017-06-07 20:18:16 +02:00
e007bb7546 add metrics for backend_retries_total 2017-06-07 08:56:50 +02:00
7874ffd506 Minor Health UI fixes
- format the Oy axis ticks as integers on the Total Status Code
Count chart
- prevent the Average Response Time chart from showing negative
values on the Oy axis
- remove the deprecated transitionDuration field
- set the transition duration to 0 on the Average Response Time
chart to avoid triggering an NVD3 marker placement bug
2017-06-06 22:40:39 +02:00
a9216e24f5 Add JSON as access logging format 2017-06-06 16:26:22 +02:00
39388a2199 Exported getSubDomain function from Marathon provider to be able to use in custom templates 2017-06-06 14:31:30 +02:00
71111708d4 Merge branch 'v1.3' into master 2017-06-02 19:56:15 +02:00
ac5ab13a4c Fix errors caused by incorrect type being sent for the Kubernetes Secret watcher #1596
This was likely just a copy-paste issue, the bug should be benign because the secret is cast to the correct type later, but the additional logging is a major annoyance, and is happening even if basic auth is not in use with Kubernetes.
2017-06-02 19:20:47 +02:00
d5efc99876 doc: Enhance GitHub issue template. 2017-06-01 21:53:05 -07:00
1e84e77a67 Merge branch 'v1.3' into master 2017-06-01 20:53:02 +02:00
1db22a6e63 Fix capitalization of PathPrefixStrip in kubernetes doc 2017-06-01 20:40:28 +02:00
d6b448f430 Merge branch 'v1.3' into master 2017-05-31 23:29:23 +02:00
e1e07f7750 Prepare release v1.3.0 2017-05-31 10:11:16 -07:00
e426b27581 refactor: valid Git branch name must work. 2017-05-31 10:34:00 +02:00
b6c5c14447 refactor: Enhance rules tests.
- refactor: change incorrect package.
- refactor: test readability.
2017-05-31 10:34:00 +02:00
cbccdd51c5 refactor: Logs & errors review.
- log & error: remove format if not necessary, add if necessary.
- add constants for k8s annotations.
- fix typos
2017-05-30 23:33:27 +02:00
4c4eba4b56 doc(changelog): replace GitHub API URL by HTML URL. 2017-05-30 19:48:01 +02:00
994e135368 refactor: typo in misspelling. 2017-05-26 16:42:26 -07:00
87e5cda506 Update CONTRIBUTING.md.
- Go 1.8 is the current minimum requirement.
- The main binary moved to cmd/traefik.
- Remove obsolete gox example.
2017-05-25 00:18:22 +02:00
2833d68f15 Merge branch 'v1.3' into merge-back-1_3_0-rc3 2017-05-24 20:39:38 +02:00
dbfd2663c2 Prepare release v1.3.0-rc3 2017-05-24 15:32:29 +02:00
64e8b31d49 Switch access logging to logrus 2017-05-24 14:20:42 +02:00
5b896bb46c fix: Empty Rancher launch config. 2017-05-24 11:20:30 +02:00
bc0121808a Fix behavior for PathPrefixStrip
When pushing data to downstream proxies; malformed requests were being
sent.

The corrected behavior is as follows:

| Route Stripped    |     URL                |  Passed to Backend |
| ----------------- | ---------------------- | ------------------ |
| /                 |     /                  |  /                 |

| Route Stripped    |     URL                |  Passed to Backend |
| ----------------- | ---------------------- | ------------------ |
| /stat             |     /stat              |  /                 |
| /stat             |     /stat/             |  /                 |
| /stat             |     /status            |  /status           |
| /stat             |     /stat/us           |  /us               |

| Route Stripped    |     URL                |  Passed to Backend |
| ----------------- | ---------------------- | ------------------ |
| /stat/            |     /stat              |  /stat             |
| /stat/            |     /stat/             |  /                 |
| /stat/            |     /status            |  /status           |
| /stat/            |     /stat/us           |  /us               |

Prior, we could strip the prefixing `/`, and we'd also ignore the case
where you want to serve something like `/api` as both the index and as a
subpath.

Additionally, this should resolve a myriad of issues relating to
kubernetes ingress `PathPrefixStrip`.
2017-05-24 10:50:12 +02:00
4293446111 Install github.com/stretchr/testify/require. 2017-05-24 00:51:48 +02:00
9967494996 [k8s] Ignore Ingresses with empty Endpoint subsets.
We previously fell back to using ClusterIPs. However, the approach can
lead to all kinds of problems since Ingresses rely on being able to talk
to Endpoints directly. For instance, it can break stickiness and
retries.
2017-05-23 21:15:06 +02:00
b392023c37 Add additional tests for PathStrip{Prefix}. 2017-05-23 17:31:34 +02:00
f7d9dfafd0 [k8s] Remove rule type path list.
Instead of doing sanity checks in the Kubernetes provider, we just
accept any non-empty value from the annotation and rely on the server
part to filter out unknown rules.

This allows us to automatically stay in sync with the currently
supported Path matchers/modifiers.
2017-05-23 17:31:34 +02:00
2643271053 Use more inclusive language in README.md {guys => folks}
While usage of the word "guys" can be considered gender neutral depending on location and context, it is widely considered to be gendered -- and more inclusive options are readily available. 💜

References:

* [When is "guys" gender neutral? I did a survey! -- Julia Evans](https://jvns.ca/blog/2013/12/27/guys-guys-guys/)
2017-05-22 21:14:43 +02:00
219a6372b0 Upgrade go-marathon to 15ea23e.
Our vendored copy contains a bug that causes unavailable Marathon nodes
to never be marked as available again due to a misconstruction in the
URL to the Marathon health check / ping endpoint used by go-marathon
internally.

A fix[1] has been published.

[1]https://github.com/gambol99/go-marathon/pull/283
2017-05-22 20:52:24 +02:00
5b36b274a3 doc(maintainer): add contributor/needs-resolve-conflicts
Replace `contributor/needs-rebase` by `contributor/needs-resolve-conflicts`.
2017-05-22 20:05:10 +02:00
8ad31d6eb4 Merge remote-tracking branch 'upstream/v1.3' into merge-v1_3 2017-05-22 11:38:28 +02:00
2e762e76f3 doc: update change log. 2017-05-22 10:26:05 +02:00
13e8a875cf Allow overriding port for backend healthchecks 2017-05-19 17:48:16 +02:00
c7281df230 Update usage of .local with .minikube in k8s docs
Fixes #1521
2017-05-19 17:02:39 +02:00
987ae92f53 Create log folder if not present 2017-05-19 15:49:02 +02:00
5f0b215e90 IP Whitelists for Frontend (with Docker- & Kubernetes-Provider Support) 2017-05-19 15:19:29 +02:00
55f610422a Install github.com/stretchr/testify/require. 2017-05-19 15:19:29 +02:00
a04ef15bcd Issue template: Emphasize SO and Slack for support questions.
- Be more explicit in the purpose of the issue tracker.
- Move SO before Slack since it seems preferable.
- Refer to SO and Slack on first question again.
2017-05-19 10:39:05 +02:00
81754840ff Update README.md 2017-05-18 23:17:16 +02:00
2610023131 refactor: Deflake and Try package
- feat: add CI multiplier
- refactor: readability
- feat: custom Sleep function
- refactor(integration): use custom Sleep
- feat: show Try progress
- feat(try): try response with status code
- refactor(try): use a dedicate package.
- refactor(integration): Try everywhere
- feat(CI): pass CI env var to Integration Tests.
- refactor(acme): increase timeout.
- feat(acme): show Traefik logs
- refactor(integration): use `http.StatusXXX`
- refactor: remove Sleep
2017-05-18 22:34:15 +02:00
c1220b8765 Re Orginise k8s docs to make 1.6 usage easier
* Adds some raw.githubusercontent.com links to the kubectl examples to
make following along at home simpler.
* Dedupe the config for rbac so it can just be ommited if not needed.
2017-05-17 15:58:54 +02:00
bc6f764a87 Merge pull request #1578 from Stibbons/marathon_doc
Add Marathon guide.
2017-05-17 15:21:09 +02:00
0b414ed482 Add Marathon guide
Copy/pasted from very comprehensive slack response from @ttr
https://traefik.slack.com/archives/C0CDT22PJ/p1494347929571784?thread_ts=1494339388.375916&cid=C0CDT22PJ

Signed-off-by: Gaetan Semet <gaetan@xeberon.net>
2017-05-17 14:59:28 +02:00
ff3481f06b Merge pull request #1613 from containous/merge-v1.3.0-rc2-master
Merge v1.3.0-rc2 master
2017-05-17 12:41:26 +02:00
f8ea19d29c Merge branch 'v1.3' into merge-v1.3.0-rc2-master 2017-05-17 11:44:53 +02:00
3b8ebf7d33 Merge pull request #1603 from antoine-aumjaud/patch-1
Small toml documentation update
2017-05-17 10:03:57 +02:00
5e14f20786 Update documentation
fix some "errors"
2017-05-17 09:45:36 +02:00
96b19deac5 Merge pull request #1616 from containous/remove-trecloux-maintainers
Remove Thomas Recloux from maintainers
2017-05-16 23:42:16 +02:00
a6aff7c85c Remove Thomas Recloux from maintainers 2017-05-16 23:20:29 +02:00
1310347395 Remove Russell from maintainers (#1614)
It's been a pleasure
2017-05-16 18:10:28 +01:00
40c94d80d7 Merge pull request #1582 from ldez/doc/maintainer-labels
doc: add labels documentation.
2017-05-16 17:59:30 +02:00
f521e72f15 Merge pull request #1612 from containous/fix-deploy
Fix deploy script, removes Docker version check
2017-05-16 17:53:47 +02:00
88ea0a037b Fix deploy script, removes Docker version check 2017-05-16 17:24:08 +02:00
c963cee3c8 Merge pull request #1606 from containous/prepare-release-v1.3.0-rc2
Prepare release v1.3.0-rc2
2017-05-16 16:15:05 +02:00
0be353d435 Merge pull request #1610 from ldez/beta-cluster
doc: Traefik cluster in beta.
2017-05-16 15:50:03 +02:00
6afff2d403 Merge pull request #1610 from ldez/beta-cluster
doc: Traefik cluster in beta.
2017-05-16 15:47:11 +02:00
12fa144f2f doc: Traefik cluster in beta. 2017-05-16 15:28:18 +02:00
ac0e48b48c Merge pull request #1608 from ldez/feat-semaphoreci
SemaphoreCI on 1.3 branch
2017-05-16 15:08:39 +02:00
64aa37858b added retry function to validate script 2017-05-16 14:33:06 +02:00
5348d4dccd added retry function to tests script 2017-05-16 14:33:06 +02:00
c3c599241f removed unit and integration tests from travis 2017-05-16 14:33:06 +02:00
c19432f95c clean up apt-cache in webui/Dockerfile 2017-05-16 14:33:06 +02:00
bdf4f48d78 replaced docker images with alpine if available (nginx, rabbitmq) 2017-05-16 14:33:06 +02:00
21aa0ea2da added DOCKER_VERSION variable 2017-05-16 14:33:06 +02:00
921a704c24 doc: add labels documentation. 2017-05-16 14:21:26 +02:00
3f490f95c6 Merge pull request #1589 from containous/add-ldez-maintainers
Add @ldez to maintainers
2017-05-16 11:26:54 +02:00
24d80b1909 Add @ldez to maintainers
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-05-16 11:06:59 +02:00
f8e7b5595b Merge pull request #1585 from timoreimann/1-3-maintain-sticky-flag-on-lb-method-validation-failure
Maintain sticky flag on LB method validation failure.
2017-05-16 00:41:15 +02:00
f9839f7b1d Turn configureBackends into method. 2017-05-16 00:06:42 +02:00
2c45428c8a Maintain sticky flag on LB method validation failure.
We previously did not copy the sticky flag if the load-balancer
method validation failed, causing enabled stickiness to be dropped in
case of a validation error (which, technically, for us is the same as a
load-balancer configuration without an explicitly set method). This
change fixes that.

A few refactorings and improvements along the way:

- Move the frontend and backend configuration steps into separate
  methods/functions for better testability.
- Include the invalid method name in the error value and avoid log
  duplication.
- Add tests for the backend configuration part.
2017-05-16 00:06:42 +02:00
30aa5a82b3 Merge pull request #1577 from aantono/Issue1569
Fixed ReplacePath rule executing out of order, when combined with PathPrefixStrip
2017-05-15 23:21:53 +02:00
3f68e382fd Fixed ReplacePath rule executing out of order, when combined with PathPrefixStrip #1569 2017-05-15 10:08:18 -05:00
9e57a283d7 Merge pull request #1601 from containous/fix-fatal-auth
Fix empty basic auth
2017-05-15 17:00:52 +02:00
eaedc1b924 Fix empty basic auth
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-05-15 16:03:46 +02:00
e3ab4e4d63 Merge pull request #1598 from containous/fix-stats-hijack
Fix stats hijack
2017-05-15 15:04:23 +02:00
48a91d05b5 Add Recover tests 2017-05-15 09:17:33 +02:00
111251da05 Adds Panic Recover middleware
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-05-15 09:17:33 +02:00
71cec1580b Fix stats responseRecorder Hijacker
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-05-15 09:17:33 +02:00
78b2fba033 Merge pull request #1595 from ldez/refactor/remove-legacy-ci-data
chore(CI): remove old CI data.
2017-05-12 20:32:29 +02:00
218b76275c chore(CI): remove old CI data. 2017-05-12 19:16:36 +02:00
cf5b6d837f Merge pull request #1594 from ldez/doc/semaphoreci-badge
doc(CI): Add SemaphoreCI badge.
2017-05-12 19:04:00 +02:00
0babc7bb64 doc(CI): Add SemaphoreCI badge. 2017-05-12 18:46:02 +02:00
8a551d91fd Merge pull request #1573 from atbore-phx/ci-retry-tests
[CI] retry function
2017-05-12 17:41:21 +02:00
eeed035ef0 added retry function to validate script 2017-05-12 17:18:47 +02:00
33404a7772 added retry function to tests script 2017-05-12 17:18:47 +02:00
bd90745528 Merge pull request #1593 from atbore-phx/ci-switch
[CI] removed unit and integration tests from travis
2017-05-12 17:17:00 +02:00
ede1212cb0 removed unit and integration tests from travis 2017-05-12 16:19:35 +02:00
2dcbc01e51 Merge pull request #1544 from maxwo/proxy-dev-mode
Proxy in dev mode
2017-05-12 10:11:58 +02:00
61ba50fac9 feat(Dev proxy) : Add proxy to localhost:8080 in dev mode. 2017-05-12 09:41:22 +02:00
b24b5e20b4 Merge pull request #1548 from timoreimann/kubernetes-ignore-missing-pass-host-header-annotation
Merge v1.3 branch into master [2017-05-11]
2017-05-12 00:36:52 +02:00
ffe1104851 Merge pull request #1588 from containous/fix-exported-fields-providers
Fix exported fields providers
2017-05-11 22:58:00 +02:00
3112432480 Merge remote-tracking branch 'upstream/v1.3' into HEAD 2017-05-11 21:10:20 +02:00
aa4ed088bb Unexport Kvclient & StoreType from kv Provider
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-05-11 19:33:32 +02:00
3a4ec19817 Add missing description tag
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-05-11 19:33:32 +02:00
d2b204a075 Merge pull request #1581 from timoreimann/1-3-kubernetes-ignore-missing-pass-host-header-annotation
[Kubernetes] Ignore missing pass host header annotation. [v1.3 - CHERRY-PICK]
2017-05-11 17:43:14 +02:00
94f5b0d9ff Merge pull request #1571 from containous/restore-access-logger
Restore: First stage of access logging middleware.
2017-05-11 17:24:26 +02:00
d2c8824902 refactor: restore "First stage of access logging middleware."
This reverts commit 82651985c4.
2017-05-11 16:27:13 +02:00
fe6c35bc6b [Kubernetes] Ignore missing pass host header annotation.
A missing annotation would previously be handled in the default error
case, causing a noisy warning-level log message to be generated each
time.

We add another case statement to ignore the case where the annotation is
missing from the annotations map.

Also piggybacking a minor improvement to the log message.
2017-05-10 19:32:45 +02:00
db09007dbc Merge pull request #1558 from Stibbons/yarnpkg
prefere yarnpkg over yarn
2017-05-10 18:26:05 +02:00
5b2e8990f1 prefere yarnpkg over yarn
to avoid conflict with Hadoop Yarn cli.

I don’t know the best practice, but i do
have Apache Yarn installed on my machine, so
I get this conflict. Of course this conflict does
not arised when building within the docker.

https://github.com/yarnpkg/yarn/issues/2337
Signed-off-by: Gaetan Semet <gaetan@xeberon.net>
2017-05-10 17:35:17 +02:00
2f6068decc Merge pull request #1580 from atbore-phx/docker-light
[CI] Reduce size of Docker Images
2017-05-10 17:23:37 +02:00
1e591dd188 clean up apt-cache in webui/Dockerfile 2017-05-10 11:24:19 +02:00
6838a81e50 replaced docker images with alpine if available (nginx, rabbitmq) 2017-05-10 11:24:19 +02:00
ceef5e39b7 Merge pull request #1572 from atbore-phx/ci-docker-version
[CI] set Docker version
2017-05-09 16:04:08 +02:00
ef339af623 added DOCKER_VERSION variable 2017-05-09 11:25:25 +02:00
acc7865542 Merge pull request #1554 from ldez/feat-push-force-pr
feat(github): push force PR branch.
2017-05-05 17:19:30 +02:00
c00c240c14 feat(github): push force contributor branch. 2017-05-05 16:19:23 +02:00
3fd6da06e0 Merge pull request #1556 from atbore-phx/hf-travis
[CI ] to run once travis before_deploy
2017-05-05 15:19:55 +02:00
95502aeec3 hot fix for release, travis runs before_deploy for each provider! we add a condition to run once 2017-05-05 14:17:08 +02:00
58c786ca8c Merge pull request #1552 from atbore-phx/new-ci
[CI] Add SemaphoreCI
2017-05-05 09:33:43 +02:00
b6916d2f8c added initial ci conf 2017-05-04 22:04:20 +02:00
840c131a98 Merge pull request #1546 from atbore-phx/rf-travis-ci
[CI] Enhance cross-binary builds and parallelism
2017-05-04 21:28:10 +02:00
219bcec40f crossbinary default is now executed before deploy using multiple make jobs in parallel 2017-05-04 20:23:48 +02:00
ccda550ab1 Merge pull request #1553 from containous/prepare-release-v1.3.0-rc1
Prepare release v1.3.0-rc1
2017-05-04 20:15:20 +02:00
b5e73cfa07 Prepare release v1.3.0-rc1 2017-05-04 18:17:54 +02:00
ba928dd459 Merge pull request #1241 from vholovko/healthcheck_changes
using more sensible consul blocking query to detect health check changes
2017-05-04 17:25:12 +02:00
6fd40dbaa9 Using more sensible consul blocking query to detect health check changes 2017-05-04 16:54:27 +02:00
6ad273b9fa Merge pull request #1542 from maxwo/working-ui
Working UI
2017-05-04 02:38:45 +02:00
5500658f5a feat(UI) : Working UI.
chore(Build) : Add Babel for build.
chore(Babel) : Add babel configuration.
style(Code) : Enhance code style.
2017-05-04 01:12:46 +02:00
b4f9e3890f Merge pull request #1535 from atbore-phx/crossbinary-parallel
Makefile target to enable parallel jobs
2017-05-04 00:47:38 +02:00
df6741aeeb Makefile target to enable parallel jobs
- fixed dependencies order and renamed Makefile target
- extracted docker run params into DOCKER_RUN_OPTS
- crossbinary-default contains 64bit Linux, Win and Darwin
- crossbinary-others contains 32bit Linux, Win, Darwin and 32/64bit *bsd
- added dependencies to crossbinary-default and crossbinary-others targets
2017-05-04 00:02:45 +02:00
5535318cda Merge pull request #1538 from containous/merge-v1.2.3-master
Merge v1.2.3 master
2017-05-03 23:49:47 +02:00
4e186cecf9 Merge v1.2.3 master 2017-05-03 23:24:53 +02:00
8ac281f9e3 Prepare release v1.2.3
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-05-03 22:53:58 +02:00
e7a73d3fb3 Fix too many redirect
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-05-03 22:53:58 +02:00
ca9e36ebe3 Prepare release v1.2.2
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-05-03 22:53:58 +02:00
138fea17ed Fix redirect empty backend
Issue-#679
2017-05-03 22:53:58 +02:00
bf3f6e2029 Fix Docker filter empty rule
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-05-03 22:53:58 +02:00
ec245d604a Fix postLoadConfig
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-05-03 22:53:58 +02:00
69e081f40f Merge pull request #1541 from containous/revert-73a1b17
Revert "First stage of access logging middleware.  Initially without …
2017-05-03 19:35:49 +02:00
82651985c4 Revert "First stage of access logging middleware. Initially without any output appenders."
This reverts commit 73a1b172ed.
2017-05-03 17:30:31 +02:00
a5384bae47 Merge pull request #1540 from containous/marathon-add-tests-lost-during-1320-rebase
Add tests lost during PR 1320.
2017-05-03 17:15:10 +02:00
1dcf8d2ea6 Add tests lost during PR 1320.
The tests part of this change were originally in PR 1320 but got lost
during one of the rebases. Let's bring them back in.
2017-05-03 16:27:21 +02:00
e86df016c3 Merge pull request #1537 from ldez/refactor-git-alias-safe
refactor: fix for PR with master branch.
2017-05-03 16:24:38 +02:00
72baf746f4 refactor: fix for PR with master branch. 2017-05-03 15:54:43 +02:00
91b4b47f04 Merge pull request #1523 from tanyadegurechaff/make-port-deterministic
Make port deterministic
2017-05-03 15:53:46 +02:00
79cbe56a41 Make port deterministic 2017-05-03 15:28:53 +02:00
f621d7a2c4 Merge pull request #1525 from guilhem/fix-watchdog
Fix systemd watchdog feature
2017-05-03 15:25:15 +02:00
3c33eab35e Fix systemd watchdog feature
Commit coreos/go-systemd@0c088e introduce cleaning environment.
First usage of sdnotify (for type=notify) was clearing NOTIFY_SOCKET environment variable.
sdnotify in watchdog was unable to ping back.

Fix #1353
2017-05-03 14:44:51 +02:00
b67a27d0c7 Merge pull request #1527 from yyekhlef/master
feat(rancher): added constraint management for rancher provider
2017-05-03 14:32:01 +02:00
8de107866f feat(rancher): added constraint management for rancher provider 2017-05-03 13:48:44 +02:00
b5283391dd Merge pull request #1488 from alpe/k8s-auth
Add basic auth to kubernetes provider
2017-05-03 13:37:05 +02:00
420a6db3b4 doc: add k8s basic auth. 2017-05-03 13:18:40 +02:00
89da3b15a4 Add basic auth to kubernetes provider 2017-05-03 13:18:40 +02:00
dcc4d92983 Merge pull request #1524 from jangie/update-dep-go-marathon
[Marathon] Bump go-marathon dep
2017-05-03 13:06:36 +02:00
12c2d398a7 retry using 'script/glide.sh update'
fix docker dependency

remove unneeded docker dependency files

further cleanup
2017-05-03 11:43:37 +02:00
4e238280bc [Marathon] Bump go-marathon dep
attempt to remove glide from integration

glide trim

Revert "attempt to remove glide from integration"

This reverts commit c5b42b6cdebb44e730080a0cf20a871c11ef095b.
2017-05-03 11:43:37 +02:00
bd6056c269 Merge pull request #1534 from containous/revert-1464-vendor-autogen
Revert "Vendor generated file"
2017-05-03 10:40:38 +02:00
acb0492e26 Merge pull request #1464 from vdemeester/vendor-autogen 2017-05-03 10:02:14 +02:00
a0d6594e99 Merge pull request #1464 from vdemeester/vendor-autogen
Vendor generated file
2017-05-01 19:07:15 +02:00
65f81990a7 Update script to use /usr/bin/env bash…
… instead of /bin/bash, to work better on more platforms.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2017-05-01 18:32:40 +02:00
1b85dd0455 Vendor generated file
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2017-05-01 18:32:40 +02:00
bec45bc7d6 Merge pull request #1516 from ldez/refactor/documentation-review
doc: small documentation review
2017-05-01 18:32:20 +02:00
4c4b05d024 refactor: small documentation review 2017-05-01 18:09:22 +02:00
228ad9a244 Merge pull request #1517 from gottwald/safe-tests
Add unit tests for package safe
2017-05-01 17:33:16 +02:00
2f06f339ec Add unit tests for package safe
Also fix a bug in the code found due to the tests.
2017-05-01 16:21:26 +02:00
eefcf026d2 Merge pull request #1515 from ldez/github-template-again
doc: enhance Github templates.
2017-05-01 16:08:14 +02:00
ccb1a4ff8c doc: enhance Github templates.
- suppress the mini user guide.
- explain the 'traefik bug' command.
2017-05-01 15:35:57 +02:00
78f1b4216e Merge pull request #1343 from uqf/improve-rancher-provider
Improve rancher provider handling of service and container health states
2017-05-01 12:34:59 +02:00
44db6e9290 mprove Rancher provider functionality:
- Improves default filtering behavior to filter by container health/healthState
- Optionally allows filtering by service health/healthState
- Allows configuration of refresh interval
2017-04-29 15:37:54 -04:00
e2fdc27d64 Merge pull request #1338 from containous/add-global-option-for-healthcheck-interval
Add global health check interval parameter.
2017-04-28 21:35:29 +02:00
25345427c3 Add global health check interval parameter.
The new parameter allows to set a health check interval valid for all
backends. Custom values set per provider may override the global one.
2017-04-28 20:51:29 +02:00
ce492895e2 Merge pull request #1320 from containous/configure-healthcheck-via-marathon-label
Make Traefik health checks label-configurable with Marathon.
2017-04-28 18:59:35 +02:00
5d43b9e16a Add HealthCheckSuite to list of integration tests. 2017-04-28 18:17:25 +02:00
71a2c8bdcd Fix health check integration test suite typo. 2017-04-28 18:17:25 +02:00
8fd6160758 Fix health check path key name in Marathon template. 2017-04-28 18:17:25 +02:00
d57f83c31c Make Traefik health checks label-configurable with Marathon.
For the two existing health check parameters (path and interval), we add
support for Marathon labels.

Changes in detail:

- Extend the Marathon provider and template.
- Refactor Server.loadConfig to reduce duplication.
- Refactor the healthcheck package slightly to accommodate the changes
  and allow extending by future parameters.
- Update documentation.
2017-04-28 18:17:25 +02:00
441d5442a1 Merge pull request #1339 from seguins/928-fix-regex-pathstrip
Fix regex with PathStrip
2017-04-28 18:01:05 +02:00
bf3673879f Fix regex with PathStrip 2017-04-28 17:33:14 +02:00
74925ba996 Merge pull request #1357 from tcolgate/libkvuname
Add libkv Username and Password
2017-04-28 16:51:41 +02:00
de6d771bc2 Add libkv Username and Password 2017-04-28 16:28:57 +02:00
2f1a7cbf26 Merge pull request #1436 from Regner/1307-fix-k8s-tests-missing-endpoints
Updating Kubernetes tests to properly test missing endpoints code path
2017-04-28 15:54:33 +02:00
d24ba90900 Updating Kubernetes tests to properly test missing endpoints code path
This fixes #1307
2017-04-28 15:25:03 +02:00
9ed55e9eae Merge pull request #1337 from SantoDE/fix/rancher_docs
make docs more clear about how to work with the current api
2017-04-28 10:40:29 +02:00
a0c3d6a421 make docs more clear about how to work with the current api 2017-04-28 10:21:18 +02:00
521e295349 Merge pull request #1374 from ssttevee/path-replace-rule
Add Path Replacement Rule
2017-04-27 10:38:41 +02:00
aa8375e82b added path replacement rule 2017-04-26 23:33:32 -07:00
5a8215a1e4 Merge pull request #1345 from diegooliveira/IP-Per-Task-Fix-Hostname
[Marathon] Detect proper hostname automatically.
2017-04-26 12:14:01 +02:00
7eb3051a57 Improve and extend TestGetBackendServer.
- Cover error cases.
- Use sub-tests.
2017-04-26 11:35:30 +02:00
a4355569af Extract index functionality into generic helper function.
Allows to move specific test cases to dedicated tests for new function.
2017-04-26 11:35:30 +02:00
16c86022bb Cosmetic changes. 2017-04-26 11:35:30 +02:00
e615e833bc Use go-spew to display diffs. 2017-04-26 11:35:30 +02:00
592a12dca2 Fix unsound behavior
The IP-Per-Task feature changed the behavior for
clients without this configuration (using the task IP instead
of task hostname). This patch make the new behavior available
just for Mesos installation with IP-Per-Task enabled. It also
make it possible to force the use of task's hostname.
2017-04-26 11:35:30 +02:00
97a3564945 Merge pull request #1497 from containous/re-exclude-dist-traefik-in-dockerignore
Re-exclude /dist/traefik from .dockerignore.
2017-04-26 10:34:20 +02:00
f1ee471b6b Re-exclude /dist/traefik from .dockerignore.
Required for the 'image' Makefile target to succeed since it copies the
binary into the image.
2017-04-26 10:01:43 +02:00
750fa22cff Merge pull request #1474 from containous/marathon-check-port-label-overwrite-earlier
Check for explicitly defined Marathon port first.
2017-04-26 03:21:33 +02:00
099d605aed Check for explicitly defined Marathon port first.
Previously, we did the check too late resulting in the traefik.port
label not being effective.

The change comes with additional refactorings in production and tests.
2017-04-25 23:18:30 +02:00
f1bc80ca12 Change getLabel signature to return bool instead of error.
The comma ok idiom fits better.
2017-04-25 23:18:30 +02:00
49a9aeb95f Merge pull request #1489 from containous/docker-move-test-providers-into-run-body
Move Docker test provider instantiation into t.Run body.
2017-04-25 15:30:37 +02:00
25abf8b8f8 Stop retrying unit tests on Travis. 2017-04-25 14:56:43 +02:00
962fb908c0 Pass through TESTDIRS env var to Docker build container. 2017-04-25 14:56:43 +02:00
b44aca64e3 Move Docker test provider instantiation into t.Run body. 2017-04-25 14:56:43 +02:00
34b21b9374 Merge pull request #1482 from ldez/docs/github-template
doc: enhance GitHub template.
2017-04-25 12:10:10 +02:00
972579e2a0 refactor(bugCmd): update issue template.
- fix collides with imported package name.
2017-04-25 11:14:31 +02:00
ccff8a80f5 doc: enhance GitHub template.
- add issue and PR guide.
- rewrite templates
2017-04-25 11:14:31 +02:00
4f2a2d573d Merge pull request #1486 from containous/fix-consul-catalog-flags
Fix Consul catalog prefix flags
2017-04-25 11:13:28 +02:00
af1d0a7dce Fix Consul catalog prefix flags
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-04-25 10:51:03 +02:00
37e40bc776 Merge pull request #1470 from vdemeester/update-dockerignore
Update dockerignore to ignore dist and sites
2017-04-25 09:55:24 +02:00
d9fd412e0e Update dockerignore ignore dist and sites
As of now, it does nothing (`/dist/` doesn't filter the dist folder)
and sending anything from `dist` doesn't make sense as it's mounted
anyway.

Removing the traefik binary from whitelist as the integration script
compiles the binary before running, so we don't need to send it via
the build context.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2017-04-25 09:02:07 +02:00
4bc2f17b08 Merge pull request #1368 from containous/update-doc
License 2017, Træfɪk => Træfik
2017-04-24 16:20:55 +02:00
d1b65adfb1 Traefik logo license
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-04-24 15:34:12 +02:00
19a7d22eef License 2017, Træfɪk => Træfik
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-04-24 15:12:44 +02:00
6012a0f3c5 Merge pull request #1437 from ldez/feat/backends-filter
feat(webui): Dashboard filter
2017-04-24 10:25:46 +02:00
4e81d41d06 doc: update web ui documentation
- update web ui dev documentation
- update Dashboard screenshot.
2017-04-24 10:04:58 +02:00
f4579e5f12 refactor: clean code
- remove dead code
- replace Fprintf by Fprint.
2017-04-24 10:04:57 +02:00
a8cbe7ef5e feat(webui): Add dashboard filter.
- Convert Object properties to and array for backends and frondends for each providers.
- Remove unused parameters.
- Add filter.
2017-04-24 10:04:57 +02:00
6ba17847ab Merge pull request #1179 from gstackio/master
Fix error in documentation for Docker labels
2017-04-23 02:30:53 +02:00
378a34c454 Fix error in documentation for Docker labels 2017-04-23 01:58:26 +02:00
f38d117a31 Merge pull request #1408 from hmrc/access-logging
New access logger.
2017-04-23 01:57:41 +02:00
73a1b172ed First stage of access logging middleware. Initially without any output appenders. 2017-04-23 00:46:45 +02:00
4310bdf3ca Merge pull request #1458 from ben-st/update_readme
update wording
2017-04-23 00:44:44 +02:00
6cb8df9d1e update wording 2017-04-22 23:49:38 +02:00
93e123b489 Merge pull request #1467 from mattcollier/patch-1
Fix typo in command line help.
2017-04-22 23:01:03 +02:00
8764c43eaf Fix typo in command line help. 2017-04-21 14:01:45 +02:00
10e22c0b3f Merge pull request #1469 from containous/improve-frontend-rule-documentation
Improve documentation for frontend rules.
2017-04-21 01:10:13 +02:00
051f0c6855 Improve documentation for frontend rules.
Includes guidelines on proper usage of the more complex path matchers.
2017-04-21 00:30:27 +02:00
809103f4b2 Merge pull request #1473 from mattcollier/patch-2
Correct typo in code comment.
2017-04-20 22:01:16 +02:00
b7c2e2d3f1 Correct typo and use Godoc convention in comment. 2017-04-20 14:02:29 -04:00
d866a62b56 Merge pull request #1468 from containous/traefik-pronunciation-pages
Mention Traefik pronunciation in docs too.
2017-04-20 14:00:44 +02:00
22ac60205a Mention Traefik pronunciation in docs too.
Also replace Træfɪk with Træfik.
2017-04-20 12:08:12 +02:00
de557d031b Merge pull request #1449 from vdemeester/more-extraction
Extract some code in packages
2017-04-20 11:37:40 +02:00
7fcb7b86d3 Extract some code in packages
- This will help split stuff in smaller, better tested packages
- This moves some stuff like the traefik command to package `cmd`

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2017-04-20 10:06:41 +02:00
9c9015a7b1 Merge pull request #1398 from containous/fix-default-timeouts-for-marathon-provider
Fix default timeouts for Marathon provider.
2017-04-20 08:37:20 +02:00
360e8e19ce Fix default timeouts for Marathon provider.
The timeouts were given without a unit, which caused nanoseconds scale
to be applied when we switched the type from int to flaeg.Duration.
2017-04-20 01:51:10 +02:00
dd52ee9f9b Merge pull request #1147 from SantoDE/feature-http-basic-auth-frontend
Add Basic Auth per Frontend.
2017-04-20 00:26:39 +02:00
8a892b21e1 Add Basic Auth per Frontend for Rancher & Docker Dynamic Provider 2017-04-19 21:05:43 +02:00
4e0f131fcd Merge pull request #1453 from martinbaillie/rancher-provider-pagination-fixes
Fix Rancher API pagination limits
2017-04-19 13:36:55 +02:00
d1ee72b308 Merge branch 'master' into rancher-provider-pagination-fixes 2017-04-19 20:47:30 +10:00
f03a9e502f Merge pull request #1444 from vdemeester/extract-providers
Extract providers to their own packages
2017-04-18 22:54:49 +02:00
542c3673e4 Extract providers to their own package
This is just doing that and making it compile :)

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2017-04-18 13:24:17 +02:00
2d00758b2e Merge pull request #1455 from martinbaillie/fix-traefik-sample-toml
Fix Rancher backend left in uncommented state
2017-04-18 11:56:37 +02:00
73f09f389e Fix Rancher API pagination limits
This fix allows the Traefik Rancher provider to obtain a complete view
of the environments, services and containers being managed by the
Rancher deployment.
2017-04-18 19:48:43 +10:00
29bada9ae3 Fix Rancher backend left in uncommented state 2017-04-18 15:00:18 +10:00
4ce2c8cc34 Merge pull request #1448 from vdemeester/fix-master-windows-compilation
Update golang.org/x/sys to fix windows compilation
2017-04-17 20:44:07 +02:00
b02b11a606 Update golang.org/x/sys to fix windows compilation
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2017-04-17 20:08:40 +02:00
e38fa25412 Merge pull request #1447 from vdemeester/dont-binary-twice
[ci] Don't run binary twice
2017-04-17 19:34:39 +02:00
38b2362a31 Don't run binary twice
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2017-04-17 18:51:37 +02:00
13754f06e3 Merge pull request #1445 from vdemeester/pull-in-pre
Pull images before running CI
2017-04-17 18:13:10 +02:00
ade223cf2e Pull images before running CI
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2017-04-17 17:28:34 +02:00
2118f6992a Merge pull request #1440 from vdemeester/docker-provider-refacto
Few refactoring around the docker provider
2017-04-17 17:28:13 +02:00
b04ba36682 Update some docker provider test
- Split the file into smaller ones (docker, swarm and service tests)
- Use some builder to reduce a little bit the noise for creating containers

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2017-04-17 15:40:55 +02:00
3f293ee25b Move docker provider to its own package 👼
Makes it simpler to manage :)

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2017-04-17 15:40:55 +02:00
dc01094863 Merge pull request #1442 from martinbaillie/master
Pass stripped prefix downstream as header (#985)
2017-04-17 09:07:13 +02:00
fa683fa7e4 Pass stripped prefix downstream as header 2017-04-16 19:24:26 +10:00
1da47dfcbb Merge pull request #1404 from aolwas/k8s-rbac-doc-update
Add documentation for k8s RBAC configuration.
2017-04-13 01:13:52 +02:00
fc3cc9a919 Add documentation for k8s RBAC configuration 2017-04-13 00:27:16 +02:00
12a0026e21 Merge pull request #1383 from containous/merge-v1.2.1-master
Merge v1.2.1 master
2017-04-12 09:13:03 +02:00
aeb17182b4 Merge v1.2.1-master
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-04-11 22:36:56 +02:00
a590155b0b Prepare release v1.2.1
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-04-11 22:36:55 +02:00
87ce060737 bump lego 0e2937900
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-04-11 22:36:55 +02:00
f2297dd3ed k8s: Do not log service fields when GetService is failing.
Update tests too.
2017-04-11 22:36:55 +02:00
2cd4c82092 Prepare release v1.2.0
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-04-11 22:36:55 +02:00
6edc0926eb sub-tests + Fatalf/Errorf
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-04-11 22:36:55 +02:00
a456d36cc6 Add Docker task list test
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-04-11 22:36:55 +02:00
5c2d91ab84 Add check on task status in addition to desired status 2017-04-11 22:36:55 +02:00
a73fee50dc Docker: Added warning if network could not be found (#1310)
* Added warning if network could not be found

* Removed regex import from master

* Corrected wrong function call
2017-04-11 22:36:55 +02:00
b02393915e Abort Kubernetes Ingress update if Kubernetes API call fails (#1295)
* Abort Kubernetes Ingress update if Kubernetes API call fails

Currently if a Kubernetes API call fails we potentially remove a working service from Traefik. This changes it so if a Kubernetes API call fails we abort out of the ingress update and use the current working config. Github issue: #1240

Also added a test to cover when requested resources (services and endpoints) that the user has specified don’t exist.

* Specifically capturing the tc range as documented here: https://blog.golang.org/subtests

* Updating service names in the mock data to be more clear

* Updated expected data to match what currently happens in the loadIngress

* Adding a blank Servers to the expected output so we compare against that instead of nil.

* Replacing the JSON test output with spew for the TestMissingResources test to help ensure we have useful output incase of failures

* Adding a temporary fix to the GetEndoints mocked function so we can override the return value for if the endpoints exist.

After the 1.2 release the use of properExists should be removed and the GetEndpoints function should return false for the second value indicating the endpoint doesn’t exist. However at this time that would break a lot of the tests.

* Adding quick TODO line about removing the properExists property

* Link to issue 1307 re: properExists flag.
2017-04-11 22:36:55 +02:00
b99a919bb4 Refactor k8s client config
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-04-11 22:36:55 +02:00
51f3f6ba9c Removed unused log
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-04-11 22:36:55 +02:00
736f9b30ef Fix default config in generic Mesos provider
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-04-11 22:36:55 +02:00
b385ffaee7 Revert "Pass context to ListReleases when checking for new versions."
This reverts commit 07db6a2df1.
2017-04-11 22:36:55 +02:00
b02e289734 Update github.com/containous/oxy only. 2017-04-11 22:36:55 +02:00
fd1cf2484c Reset glide files to versions from upstream/v1.2. 2017-04-11 22:36:55 +02:00
5250c9c04d Update vulcand and pin deps in glide.yaml 2017-04-11 22:36:55 +02:00
e011792a90 Pass context to ListReleases when checking for new versions.
Required by go-github update.
2017-04-11 22:36:55 +02:00
a507cb4835 Rename health check URL parameter to path.
Also improve documentation.
2017-04-11 22:36:55 +02:00
f324983946 Fix metrics registering 2017-04-11 22:36:55 +02:00
c876462eb0 Chunk taskArns into groups of 100
If the ECS cluster has > 100 tasks, passing them to
ecs.DescribeTasksRequest() will result in the AWS API returning
errors.

This patch breaks them into chunks of at most 100, and calls
DescribeTasks for each chunk.

We also return early in case ListTasks returns no values; this
prevents DescribeTasks from throwing HTTP errors.
2017-04-11 22:36:55 +02:00
ec7ba15955 Docs: Update default value for DefaultMaxIdleConnsPerHost. 2017-04-11 22:36:55 +02:00
ef83a5936d update oxy hash 2017-04-11 22:36:55 +02:00
8d650da2f8 Bump go-rancher version 2017-04-11 22:36:55 +02:00
bd127168b3 Merge pull request #1421 from containous/move-crossbinary-travis-deploy
Move make cross binary to Travis deploy step
2017-04-11 22:35:49 +02:00
1ecdadb283 Move make cross binary to Travis deploy step
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-04-11 20:47:25 +02:00
d8c21639f7 Merge pull request #1407 from containous/glide-sh-push-get-param-to-array
glide.sh: Push argument to GLIDE_ARGS array.
2017-04-10 20:37:35 +02:00
d2df47d382 glide.sh: Push argument to GLIDE_ARGS array.
The array is empty in the beginning, so referencing ${GLIDE_ARGS[@]}
produces an error due to nounset.
2017-04-10 10:42:33 +02:00
0cc3d05515 Merge pull request #1319 from containous/start-healthcheck-early
Start health checks early.
2017-04-08 12:41:36 +02:00
60ea9199e5 Start health checks early.
Do not wait a full tick cycle to execute the first health check.

Additional changes:

- Make request timeout configurable (for testing purposes).
- Support synchronizing on health check goroutine termination through an
  internal wait group (for testing purposes).
- Stop leaking by closing the HTTP response body.
- Extend health check logging and use WARNING level for (continuously)
  failing health checks.
2017-04-07 19:13:15 +02:00
637c7e250c Merge pull request #1178 from errm/k8s-client-2
Upgrade k8s.io/client-go to version 2
2017-04-07 14:22:50 +02:00
6f4c5dd4ce Upgrade k8s.io/client-go to version 2 2017-04-07 11:52:18 +01:00
a3b95f798b Update lego 2017-04-07 11:52:18 +01:00
65284441fa Update dependencies 2017-04-07 11:52:18 +01:00
51e4dcbb1f Merge pull request #1367 from seguins/chart-k8s
Add documentation about k8s Helm Chart
2017-04-07 11:53:30 +02:00
e38bf0accb Add documentation about k8s chart 2017-04-06 21:52:39 +02:00
08c1871c98 Merge pull request #1394 from containous/nicgrayson-master
Allow traefik.port to not be in the list of marathon ports
2017-04-06 20:57:58 +02:00
4eb779e596 Allow traefik.port to not be in the list of marathon ports 2017-04-06 18:47:35 +02:00
e1aa16ae70 Merge pull request #1196 from klausenbusk/url
kv: Ignore backend servers with no url
2017-04-06 11:14:57 +02:00
b4dfb7223b kv: Extend test with support for specifying custom error for Get/List 2017-04-06 10:28:11 +02:00
f621a46a2e kv: Log error when checking existence of server url key 2017-04-06 10:28:11 +02:00
c864d80270 kv: Add test for server without url key 2017-04-06 10:28:11 +02:00
020a8e31ab kv: Ignore backend servers with no url
Currently with a kv tree like:
/traefik/backends/b1/servers/ẁeb1
/traefik/backends/b1/servers/web2
/traefik/backends/b1/servers/web2/url
Traefik would try to forward traffic to web1, which is impossible as
traefik doesn't know the url of web1.

This commit solve that, by ignoring backend server with no url "key"
when generating the config.

This is very useful, for people who use etcd TTL feature. They can then
just "renew" the url key every X second, and if the server goes down, it
is automatic removed from traefik after the TTL.
2017-04-06 10:28:11 +02:00
69c31276f2 Merge pull request #1386 from mihaitodor/patch-1
Fix typo in server.go
2017-04-04 21:37:54 +02:00
06c47134c9 Fix typo
Fix "loadd-balancer" typo in log debug message in server.go
2017-04-04 17:23:55 +01:00
c9d23494b9 Add IdleConnTimeout to Traefik's http.server settings (#1340)
* Add IdleTimeout setting to http.server

Without such a timeout there is a risk of resource leakage from piling up connections, particularly when exposing Traefik to the Internet.

Set the default to be 180 seconds

* Add IdleConnTimeout to Traefik's http.server settings

Without enforcing a timeout Traefik is susceptible to resource leakage, particularly when deployed as a public facing proxy exposed to the Internet.

Set the default to be 180 seconds

* tweak

* Update configuration.go

* add some documentation for the idletimeout setting

* need to cast idletimeout

* update doc to refect format specifics
2017-04-04 11:36:23 +02:00
7d256c9bb9 Merge pull request #1350 from containous/toml-compatible-duration-type
Use TOML-compatible duration type.
2017-04-03 19:30:33 +02:00
056fe9ac0a Switch duration configuration parameters over to flaeg.Duration. 2017-04-03 18:36:23 +02:00
e375ba98f0 Update vendored dependencies. 2017-04-03 18:36:23 +02:00
d6d93db13b Update to latest github.com/containous/flaeg. 2017-04-03 18:36:23 +02:00
3389908238 Merge pull request #1235 from tcoupin/feat-use-docker-compose-labels
Use docker-compose labels for frontend and backend names
2017-04-03 11:46:20 +02:00
5c16860486 Use service.project.domain instead of project-service.domain 2017-04-03 11:00:04 +02:00
0a7f9b5a71 Use docker-compose labels for frontend and backend names 2017-04-03 11:00:04 +02:00
df685fa050 Merge pull request #1324 from containous/ask-for-debug-log-output-in-template
Append template section asking for debug log output.
2017-04-01 07:22:42 +02:00
2c079b3d6f Append template section asking for debug log output. 2017-03-31 17:38:48 +02:00
35973f1243 Merge pull request #1369 from Starefossen/patch-2
Make toml Bucket array homogeneous
2017-03-31 17:06:45 +02:00
9281f4fbbc Make toml Bucket array homogeneous 2017-03-31 14:01:56 +02:00
0e0a231e5a Merge pull request #1303 from ruslansennov/patch-1
fix consul sample endpoints
2017-03-29 21:19:56 +02:00
b22716c5ba fix consul sample endpoints
It took few minutes to understand what is wrong, when I just uncommented sample config :)
2017-03-29 14:03:20 +02:00
240b2be1a8 Merge pull request #1233 from tcoupin/feature-web-pathprefix
Feature web root path
2017-03-24 18:35:32 +01:00
c5125cee71 Add path parameter for web provider 2017-03-24 17:51:53 +01:00
1cf1fbf99b Merge pull request #1276 from kekoav/go-1.8-update-tls-ciphers
Update TLS Ciphers for Go 1.8
2017-03-24 13:58:26 +01:00
1ed68b1278 Updated available cipher suites for Go 1.8. 2017-03-24 09:37:46 +01:00
84e1ec6607 Merge pull request #1259 from containous/bump-go-1.8
Bump go 1.8
2017-03-24 09:34:29 +01:00
1140ee6c64 Update vendor dependencies
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-03-23 22:51:59 +01:00
8401cccff2 Replace mailgun/manners with go 1.8 graceful shutdown
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-03-23 22:47:29 +01:00
836f617286 Bump go 1.8
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-03-23 22:39:53 +01:00
1bc8c9912e Merge pull request #1329 from containous/makefile-image-target-depend-on-binary
Make image Makefile target depend on binary instead of build.
2017-03-22 19:00:04 +01:00
b5430803b8 Make image Makefile target depend on binary instead of build.
build only builds the build container without the binary.
2017-03-22 16:33:02 +01:00
a7bc8c8aa4 Merge pull request #1274 from sroze/patch-1
Change a word in the documentation
2017-03-22 09:48:32 +01:00
9ab8e08d59 s/Hopefully/Fortunately/ 2017-03-21 22:44:54 +01:00
677899d9ff Merge pull request #1158 from tskinn/add-dynamodb-provider
add dynamodb backend
2017-03-17 18:02:02 +01:00
72e35af39f add dynamo
Signed-off-by: Taylor Skinner <tskinn12@gmail.com>

add some comments

Signed-off-by: Taylor Skinner <tskinn12@gmail.com>

update readmes

make test runnable

Signed-off-by: Taylor Skinner <tskinn12@gmail.com>

make test

squash! add dynamo

add glide.lock

format imports

gofmt

update glide.lock

fixes for review

golint

clean up and reorganize tests

add dynamodb integration test

remove default region. clean up tests. consistent docs

forgot the region is required

DRY

make validate

update readme and commit dependencies
2017-03-16 10:12:26 -06:00
2a61c9049f Merge pull request #1257 from benoitf/docker-services
Allow multiple rules from docker labels containers with traefik.<servicename>.* properties
2017-03-14 10:31:58 +01:00
1158eba7ac Adding docker labels traefik.<servicename>.* properties like
- traefik.mycustomservice.port=443
  -  traefik.mycustomservice.frontend.rule=Path:/mycustomservice
   - traefik.anothercustomservice.port=8080
  -  traefik.anothercustomservice.frontend.rule=Path:/anotherservice

all traffic to frontend /mycustomservice is redirected to the port 443 of the container while using /anotherservice will redirect to the port 8080 of the docker container

More documentation in the docs/toml.md file

Change-Id: Ifaa3bb00ef0a0f38aa189e0ca1586fde8c5ed862
Signed-off-by: Florent BENOIT <fbenoit@codenvy.com>
2017-03-14 08:45:47 +01:00
22c5bf7630 Merge pull request #1273 from timoreimann/rpr-force-with-lease
.github/rpr.sh: Use --force-with-lease instead of --force.
2017-03-11 11:36:37 +01:00
4148266ed0 .github/rpr.sh: Use --force-with-lease instead of --force.
This prevents accidentally overriding a branch that has been changed
remotely by another party.
2017-03-10 21:32:34 +01:00
6e8e597ff5 Merge pull request #1189 from krancour/usersfile
Allow usersFile to be specified for basic or digest auth
2017-03-10 07:45:39 +01:00
7357417f48 Allow usersFile to be specified for basic or digest auth 2017-03-09 20:24:44 -05:00
91bf627275 Merge pull request #1144 from timoreimann/vendor-dependencies
Vendor dependencies.
2017-03-09 16:23:26 +01:00
55b57c736b Vendor integration dependencies. 2017-03-09 13:13:03 +01:00
dd5e3fba01 Vendor main dependencies. 2017-03-09 13:13:02 +01:00
49a09ab7dd Prepare for dependency vendoring.
- Add helper script to simplify glide usage.
- Add validation script for unwanted changes to vendoring.
- Relax/tighten up .{git,docker}ignore to cover vendored files properly.
- .validate: Protect from unbound variable in case of nounset setting.
- Install more recent hg version in the build container.
- Remove glide installation steps from Dockerfile.
- Update documentation.
2017-03-08 22:21:12 +01:00
dae28f7f17 Merge pull request #1227 from dtomcej/tighter-regex
Tighten regex match for wildcard certs [Addendum to #1018]
2017-03-07 16:59:52 +01:00
9cd76f122e remove dot from regex 2017-03-07 15:21:08 +01:00
920b5bb15d Support cluster-external Kubernetes client. (#1159)
Detect whether in-cluster or cluster-external Kubernetes client should
be used based on the KUBERNETES_SERVICE_{HOST,PORT} environment
variables.

Adds bearer token and CA certificate file path parameters.
2017-03-07 13:09:11 +01:00
3611818eda Add @trecloux to Maintainers (#1226) 2017-03-07 00:38:44 +01:00
7d83027954 Merge pull request #1208 from containous/merge-v1.2.0-rc2-master
Merge v1.2.0 rc2 master
2017-03-06 18:37:03 +01:00
ea190b6898 Prepare release v1.2.0-rc2
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-03-06 17:45:58 +01:00
aa75d5458d Revert "Ensure that we don't add balancees with no health check runs if there is a health check defined on it"
This reverts commit ad12a7264e.
2017-03-06 17:45:58 +01:00
4172a7c62e Add task parser unit test for docker provider 2017-03-06 17:45:58 +01:00
355b4706d3 Fix docker issues with global and dead tasks 2017-03-06 17:45:58 +01:00
eb1ffae01b Small fixes and improvments 2017-03-06 17:45:58 +01:00
cc0733a4fa Fix stats race condition
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-03-06 17:45:58 +01:00
c786bbbc5b Try harder to query all the possible ec2 instances, and filter on instance state / lack of IP address 2017-03-06 17:45:58 +01:00
f87b1c2fcd Wrong tests docker images 2017-03-06 17:45:58 +01:00
14fd53c915 Add doc 2017-03-06 17:45:58 +01:00
aa2edcc6e5 Add some integration test 2017-03-06 17:45:58 +01:00
6b6f010851 Add healthcheck interval 2017-03-06 17:45:58 +01:00
5e8805f24d ECS: Docs - info about cred. resolution and required access policies
Added information about how AWS credentials are resolved and which
access rights is needed the Traefik ECS provider.
2017-03-06 17:45:58 +01:00
3848944d35 Fix travis deploy
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-03-06 17:45:58 +01:00
9d7df45b7c Changelog for v1.2.0-rc1
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-03-06 17:45:58 +01:00
7a164ed401 Add v1.2 codename
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-03-06 17:45:57 +01:00
f530284031 Adding support for Traefik to respect the K8s ingress class annotation (#1182) 2017-03-03 20:30:22 +01:00
38c0cf7007 Merge pull request #1151 from timoreimann/refactor-k8s-rule-type-annotation-logic
Refactor k8s rule type annotation parsing/retrieval.
2017-03-03 18:48:59 +01:00
f3598e6b0f Refactor k8s rule type annotation parsing/retrieval.
- Move annotation logic into function.
- Constantify strings.
- Refactor TestRuleType.
- Add test for GetRuleTypeFromAnnotations.
2017-03-03 13:33:00 +01:00
291ca860af Merge pull request #1216 from timoreimann/elaborate-on-regexp
Motivate and explain regular expression rules.
2017-03-03 10:09:30 +01:00
7d20871f0d Fix typos. 2017-03-03 00:27:33 +01:00
6942b063ee Motivate and explain regular expression rules. 2017-03-02 23:00:25 +01:00
e56bd27c1e Remove blank space. 2017-03-02 23:00:25 +01:00
a3beec6b9c Merge pull request #1214 from timoreimann/avoid-validate-glide-output-suppression
Evaluate glide-hash result without reading $?.
2017-03-02 23:00:01 +01:00
04a1ecc4f4 Evaluate glide-hash result without reading $?.
validate-glide is called with errexit enabled (in script/make.sh that
sources validate-glide), which means that grep returning a non-zero exit
code will cause the script to terminate prematurely. Thus, we will never
get to the point where we see the error message.

The fix is to embed the grep check directly inside the if statement.
2017-03-02 18:49:13 +01:00
7707814f2e Merge pull request #1215 from timoreimann/add-timoreimann-to-maintainer-list
Add @timoreimann to list of maintainers.
2017-03-02 17:59:00 +01:00
4d4f2b62aa Add @timoreimann to list of maintainers. 2017-03-02 02:00:53 +01:00
5abffe402f Merge pull request #1194 from timoreimann/example-ip-addr-binding
Add Traefik TOML sample section on how to bind to specific IP addr.
2017-02-28 09:57:23 +01:00
38ec32a146 Add Traefik TOML sample section on how to bind to specific IP addr. 2017-02-25 21:44:01 +01:00
d77ad42326 Merge pull request #1149 from Regner/kubernetes-support-externalname-service
Kubernetes support externalname service
2017-02-22 10:52:35 +01:00
4106f0fa9e Merge branch 'master' into kubernetes-support-externalname-service 2017-02-21 16:19:01 -08:00
a0a0bf0577 Merge pull request #1170 from timoreimann/upgrade-go-marathon-to-v0.7.0
Upgrade dependencies.
2017-02-21 20:45:22 +01:00
71c7920d0f Merge branch 'master' into kubernetes-support-externalname-service 2017-02-21 10:02:34 -08:00
9bb1b01742 Upgrade dependencies.
Brings github.com/gambol99/go-marathon version 0.7.1.
2017-02-21 16:10:45 +01:00
8c824680ce Merge pull request #1157 from solidnerd/fix-prometheus-in-traefik-example-toml
Fix prometheus metrics example
2017-02-21 09:52:27 +01:00
60b3f74be8 Fix prometheus metrics example
Traefik won’t start correctly if heterogeneous numbers in a toml array.  This commit makes all numbers homogene.

Signed-off-by: solidnerd <niclas@mietz.io>
2017-02-21 07:55:50 +01:00
dfb09bf2ab Merge pull request #1172 from timoreimann/stop-considering-glide-lock-as-binary-in-git
Remove .gitattributes file.
2017-02-20 21:34:55 +01:00
98d6a43e1e Remove .gitattributes file.
Makes git diff Glide lock files as text, which is helpful to see changes
introduced by a 'glide update' run.
2017-02-18 22:56:24 +01:00
49466d0d14 Added documentation about defining the passing of host header globaly 2017-02-15 16:11:31 -08:00
66cc9a075c First pass of documentation for passHostHeader kubernetes annotation 2017-02-15 13:37:47 -08:00
1e10fc2e30 Simplifying else if statement to be cleaner 2017-02-14 14:57:09 -08:00
c8cf5f8c44 Added a test to make sure passing an invalid value to traefik.frontend.passHostHeader results in falling back correctly. 2017-02-14 11:54:27 -08:00
96e6c9cef2 Split the if/or statement when requesting endpoints from the k8s service so that it now provides two unique log statements. 2017-02-14 11:53:35 -08:00
931ee55e1d Added default case for PassHostHeader that logs a warning. 2017-02-14 11:52:54 -08:00
4d3aede5d3 Added tests for ingress passHostHeader annotation 2017-02-10 03:27:30 -08:00
0b1dd69b01 Added support for passHostHeader annotation on ingresses 2017-02-10 03:05:59 -08:00
0947aa901e Initial support for Kubernetes ExternalName service type 2017-02-09 17:25:38 -08:00
01e3d7952a Merge pull request #1133 from timoreimann/build-binary-for-test-integration-makefile-target
Build binary for test-integration Makefile target.
2017-02-08 09:30:08 +01:00
84b224b9db Build binary for test-integration Makefile target. 2017-02-07 15:08:17 +01:00
39f8f6868a Merge pull request #1124 from containous/fix-git-rmpr
Fix checkout initial before calling rmpr
2017-02-06 18:49:24 +01:00
556915cab6 Fix checkout initial before calling rmpr
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-02-06 17:50:11 +01:00
bff654b843 Merge pull request #1120 from SantoDE/feature-rancher-integration
Feature rancher integration
2017-02-06 17:49:38 +01:00
3a875e2954 add default config
lint files
2017-02-06 17:03:43 +01:00
bdb63ac785 add watch function 2017-02-06 17:03:43 +01:00
9a5dc54f85 add some unit tests
fmt & lint
2017-02-06 17:03:41 +01:00
48524a58ff fix all containers - no matter of pagination
fmt & lint
2017-02-06 17:03:38 +01:00
38bd49b97e add dependency, start provider and fetch data
add tons of labels

Provide - WIP

add rancher data over rancher types

first version of direct fetch - pagination still an issue
2017-02-06 17:02:53 +01:00
28054a0be3 Merge pull request #1061 from WTFKr0/replace_underscores_in_url
Replace underscores to dash in autogenerated urls (docker provider)
2017-02-06 16:32:28 +01:00
250a0863f6 Tab Lint
Signed-off-by: WTFKr0 <thomas.kovatchitch@gmail.com>
2017-02-06 15:38:18 +01:00
b1764a6864 Adapt test to new urls
Signed-off-by: WTFKr0 <thomas.kovatchitch@gmail.com>
2017-02-06 15:38:18 +01:00
41f8f0113b Replace underscores to dash in autogenerated urls (docker provider)
Signed-off-by: WTFKr0 <thomas.kovatchitch@gmail.com>
2017-02-06 15:38:18 +01:00
db63e84a9f Merge pull request #1033 from foleymic/feature-1024
Support sticky sessions under SWARM Mode. #1024
2017-02-06 15:23:47 +01:00
e0a4c58081 Added service name to dockerData struct.
In Swarm mode with with Docker Swarm’s Load Balancer disabled (traefik.backend.loadbalancer.swarm=false)
service name will be the name of the docker service and name will be the container task name
(e.g. whoami0.1).  When generating backend and fronted rules, we will use service name instead of name if a
rule is not provided.

Initialize dockerData.ServiceName to dockerData.Name to support non-swarm mode.
2017-02-06 14:44:25 +01:00
d2b47a5681 Support sticky sessions under SWARM Mode.
SWARM Mode has it's own built in Load balancer, so if we want to leverage sticky sessions,
 or if we would just prefer to bypass it and go directly to the containers (aka tasks), via
	--label traefik.backend.disable.swarm.loadbalancer=true
 then we need to let Traefik know about the underlying tasks and register them as
 services within it's backend.
2017-02-06 14:44:25 +01:00
106e5c1f92 Merge pull request #1109 from containous/fix-git-rpr-upstream
Fix git rpr
2017-02-06 14:40:45 +01:00
c00a9fae0c Add rmpr command
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-02-06 14:02:23 +01:00
087bbd2e3e Add cpr command
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-02-06 14:02:23 +01:00
e16f2bb23d Fix git rpr
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-02-06 14:02:23 +01:00
8d0bacf146 Merge pull request #1098 from ddunkin/fix-k8s-example-ui
Fix k8s example UI port.
2017-02-06 11:06:32 +01:00
354f69b2f6 Fix k8s example UI port.
Port was out of sync from 495cba591f.
2017-02-06 10:18:16 +01:00
39e6b16069 Merge pull request #918 from Juliens/httpchk
(WIP) feat: HealthCheck
2017-02-06 10:15:37 +01:00
b30272d896 fix lint 2017-02-06 09:36:30 +01:00
755822bf14 fix after review 2017-02-06 09:36:30 +01:00
99ffc26d40 One goroutine for each backend + fix typo 2017-02-06 09:36:30 +01:00
4a8f032304 feat: timeout on check 2017-02-06 09:36:30 +01:00
a0b775a7c0 Lint on healthcheck 2017-02-06 09:36:30 +01:00
0ab0bdf818 feat: HealthCheck 2017-02-06 09:36:30 +01:00
fce32ea5c7 Merge pull request #1088 from lpetre/amazon_ecs_provider
Add an ECS provider
2017-02-05 21:01:17 +01:00
8d3c77a0b9 Add an ECS provider 2017-02-05 18:09:30 +00:00
00de73bdfc Merge pull request #1119 from containous/fix-glide-go-units
Fix glide go units
2017-02-05 18:59:32 +01:00
96197af3f1 Add glide hash validation
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-02-05 17:24:14 +01:00
dacde21c27 Fix glide.yml go-units
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-02-05 17:24:13 +01:00
0d3b2ed230 Merge pull request #1115 from StefanScherer/check-file-permission-unix-only
Skip file permission check on Windows
2017-02-05 13:49:00 +01:00
fa4226c742 Skip file permission check on Windows 2017-02-05 10:30:56 +01:00
7cb4c42772 Merge pull request #1116 from vdemeester/carry-watchdog
Carry #818 —  Add systemd watchdog feature
2017-02-05 10:29:50 +01:00
99f251451e Update glide
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2017-02-05 10:05:32 +01:00
d5f9a80b6c Remove web watchdog 2017-02-04 19:06:56 +01:00
d324040adc Add systemd watchdog feature 2017-02-04 19:06:24 +01:00
da5eba17d8 Merge pull request #1113 from StefanScherer/fix-docker-api-version-for-windows
Fix Docker API version for Windows
2017-02-04 17:26:05 +01:00
434596b103 Fix Docker API version for Windows
Signed-off-by: Stefan Scherer <scherer_stefan@icloud.com>
2017-02-04 16:44:10 +01:00
71a185c70e Merge pull request #1090 from diegooliveira/IP-Per-Task-Fix
Fix marathon provider
2017-02-04 16:41:49 +01:00
cbbb5f4ccb Fix marathon provider
The IP-Per-Task PR introduced a bug using the marathon application
port mapping. This port should be used only in the proxy server, the
downstream connection should be always made with the task port.

    This commit fix the regression and adds a unit test to prevent new
problems in this setup.
2017-02-04 16:05:35 +01:00
89ec25f718 Merge pull request #1084 from JamesKyburz/feature/fix-gzip-for-websockets
update NYTimes/gziphandler fixes #1059
2017-02-04 16:02:39 +01:00
e5b688214c Merge branch 'master' into feature/fix-gzip-for-websockets 2017-02-04 15:18:22 +01:00
225dbcce0a Allow setting circuitbreaker expression via Kubernetes annotation (#1056) 2017-02-03 17:47:48 +01:00
b22dc213e8 Merge pull request #1080 from jangie/only-add-marathon-balancees-if-any-healthcheck-results
Ensure that we don't add balancees with no health check runs if there is a health check defined on it
2017-02-03 15:55:23 +01:00
ad12a7264e Ensure that we don't add balancees with no health check runs if there is a health check defined on it
Change test behavior
2017-02-03 08:45:15 -05:00
29059b77a8 Merge pull request #1078 from geoffgarside/release-build-bsd
Add FreeBSD & OpenBSD to crossbinary
2017-02-03 13:50:39 +01:00
cdaa64a4b2 Add OpenBSD to script/crossbinary 2017-02-03 12:02:20 +01:00
bc4296729f Add FreeBSD to script/crossbinary 2017-02-03 12:02:20 +01:00
3a3630f3ef Merge pull request #1102 from bamarni/patch-3
[doc] typo fixes for kubernetes user guide
2017-02-03 12:01:49 +01:00
93ce747205 [doc] typo fixes for kubernetes user guide 2017-02-03 11:08:38 +01:00
1493a4c815 Merge pull request #1105 from containous/merge-v1.1.2-master
Merge v1.1.2 master
2017-02-03 10:44:28 +01:00
54be6beaab Lint files
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-02-03 09:55:47 +01:00
e9fc9fdf12 Prepare release v1.1.2 2017-02-03 09:47:23 +01:00
ba4670eddc Fix duplicate acme certificates 2017-02-03 09:47:23 +01:00
5a67d0ac84 Fix panic in k8s loadIngresses
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-02-03 09:46:27 +01:00
be362f0d9f Add Operation with recover 2017-02-03 09:46:27 +01:00
a394e6a3e3 Manage acme cert in infinit channels
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-02-03 09:45:39 +01:00
1a5f1977c4 Fix safe panic 2017-02-03 09:41:41 +01:00
feee8ad72e Fix redirect regex
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-02-03 09:41:41 +01:00
c9e78c4f4a Fix docker version specifier (#1108)
* Fix Docker version specifier.

- The download URL[1] does not contain a leading 'v'.
- The major version is 1.

[1] https://github.com/docker/docker/releases/tag/v1.10.3

* Drop -S and and -f in build.Dockerfile curl commands.

- `-f` (`--fail`) turns HTTP error response codes into a non-zero exit
  code, making curl fail early and properly. While the documentation
  mentions that there is supposed to be no output, we do see an error
  message.
- `-S` (`--show-error`) is only meaningful when used together with `-s`
  (`--silent`). We do not want to go silent but see the progress bar
  though.
2017-02-03 09:15:56 +01:00
d0e2349dfd Merge pull request #1016 from bamarni/issue-1008
Set a NopCloser request body with retry middleware
2017-02-02 19:13:43 +01:00
d516cbfe6c update NYTimes/gziphandler fixes #1059 2017-02-02 17:56:07 +01:00
86fd5b4c97 Set a NopCloser request body with retry middleware
As the http client always closes the request body,
this makes sure the request can be retried if needed.

Fixes #1008
2017-02-02 17:24:49 +01:00
1131a972cd Merge pull request #1103 from containous/fix-travis-script-again-again
add sh before script in deploy...
2017-02-02 17:24:01 +01:00
2048f77178 add sh before script in deploy...
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-02-02 16:19:09 +01:00
a70c6f25ea Merge pull request #1068 from bakins/kubernetes-loadbalancer-annotations
Allow setting load balancer method and sticky using service annotations
2017-02-02 16:15:50 +01:00
490427f94d Allow setting load balancer method and sticky using service annotations 2017-02-02 14:03:39 +00:00
7cc91a8244 Merge pull request #1101 from containous/fix-travis-script-again
add skip_cleanup in deploy
2017-02-02 14:35:27 +01:00
4f951a242b add skip_cleanup in deploy
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-02-02 13:59:28 +01:00
c095fc1eab Fix metrics for multiple entry points (#1071) 2017-02-02 12:34:00 +01:00
c1182377db Fix travis script (#1067)
* Fix travis script

Signed-off-by: Emile Vauge <emile@vauge.com>

* how do i pronounce this damn project

Signed-off-by: Emile Vauge <emile@vauge.com>

* Remove unstable Docker 1.13 tests

Signed-off-by: Emile Vauge <emile@vauge.com>
2017-02-02 10:58:42 +01:00
02473328e7 Update comment to reflect the code (#1087) 2017-01-31 15:28:40 +01:00
2b00cdf330 Fix k8s example (#1062)
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-01-30 13:04:32 +01:00
18cf49755e Merge pull request #1066 from timoreimann/patch-1
Add missing fmt verb specifier in k8s provider.
2017-01-26 14:50:50 +01:00
3a7de0be5c Add missing fmt verb specifier in k8s provider. 2017-01-26 11:05:13 +01:00
a1b610ee03 Merge pull request #1063 from containous/add-git-rpr
Add git rpr command
2017-01-24 21:30:27 +01:00
4d99b84e5b Add git rpr command
Signed-off-by: Emile Vauge <emile@vauge.com>
2017-01-24 18:38:53 +01:00
e20d13c44e Merge pull request #1041 from twelvelabs/patch-1
Update user guide for upcoming `docker stack deploy`
2017-01-24 16:45:11 +01:00
18e9064d25 Add link to GH issue for docker stack deploy 2017-01-24 14:49:28 +01:00
fad3038df2 Merge pull request #843 from guilhem/travis_deploy
Use deployment primitives from travis
2017-01-24 13:01:19 +01:00
8e4c4f8407 Use deployment primitives from travis 2017-01-23 15:52:28 +01:00
68bd24d065 Don't run go test on .glide cache folder
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2017-01-23 15:43:24 +01:00
d15a17b634 Allow for wildcards in k8s ingress host, fixes #792 (#1029) 2017-01-20 14:16:05 +01:00
fa1090b6eb Improving instrumentation. (#1042) 2017-01-17 18:14:13 +01:00
483ef486af Merge pull request #1022 from enxebre/prometheus
Add commit prometheus middleware v1.
2017-01-16 15:40:06 +01:00
175659a3dd Support for Metrics and Prometheus. 2017-01-16 15:00:16 +01:00
dd85cbca39 Merge pull request #1009 from bamarni/acme-perms
check permissions on acme.json during startup
2017-01-12 15:41:56 +01:00
22b97b7214 check permissions on acme.json during startup
Follow-up from #639. At the moment people that were affected
by this security issue would still be vulnerable even after upgrading.

This patch makes sure permissions are also checked for already existing
files.

Signed-off-by: Bilal Amarni <bilal.amarni@gmail.com>
2017-01-12 12:14:35 +01:00
db68dd3bc1 Fix docs build and add missing benchmarks page (#1017)
* fix mkdocs theme dependency - mkdocs/mkdocs#201

* add missing benchmarks page
2017-01-09 15:12:11 +01:00
85b9c19871 Merge pull request #1023 from syfonseq/fix-acme-http-only-entrypoint
Don't fetch ACME certificates for frontends using non-TLS entrypoints (#989)
2017-01-06 21:16:25 +01:00
2bfc237e53 Don't fetch ACME certificates for frontends using non-TLS entrypoints 2017-01-06 17:06:48 +01:00
d74ea22d7d IP-per-task: (#841)
Support IP per task with marathon/mesos
2017-01-06 16:26:50 +01:00
8004132a3a Merge pull request #1018 from dtomcej/fix-672
Return Proper Non-ACME certificate - Fixes Issue 672
2017-01-05 09:37:02 +01:00
a6f4183cde Add regex for wildcard certs
fix spacing
2017-01-04 14:32:44 -07:00
51e9f3ede2 instruct to flatten dependencies with glide 2017-01-01 19:23:35 +01:00
bfc7b3d183 Add multiple values for one rule to docs 2016-12-30 22:29:37 +01:00
8a348423ae Import order as goimports does
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2016-12-30 19:04:02 +01:00
e4952cd145 [doc] few tweaks on the basics page 2016-12-30 16:49:13 +01:00
5b0bf5d150 See the right go report badge
look like a copypasta error
2016-12-30 15:20:15 +01:00
79180dc021 Merge pull request #975 from trecloux/integration-test-acme
Add ACME/Let’s Encrypt integration tests
2016-12-22 10:46:15 +01:00
599c95e5f6 Add ACME/Let’s Encrypt integration tests
Thx @gwallet for the help.
2016-12-22 10:11:37 +01:00
e1ed8b71f6 Merge pull request #931 from Juliens/addprefix
Add Rule AddPrefix
2016-12-21 21:45:09 +01:00
6ca142bf20 Merge branch 'master' into addprefix 2016-12-20 22:26:04 +01:00
6b20d2a5f3 toml zookeeper doc fix (#948)
Having that slash there causes traefik to be able to get keys from ZK
2016-12-20 22:25:50 +01:00
bef55db120 Merge branch 'master' into addprefix 2016-12-20 12:18:37 +01:00
3bb3658d7d Merge pull request #921 from containous/add-github-issue
Add bug command
2016-12-20 11:36:06 +01:00
a4034ce1e2 Add some docs 2016-12-19 17:17:24 +01:00
d9fc66fdbc Add Rule AddPrefix 2016-12-19 17:12:52 +01:00
3ebfd729cf Refactor StatsRecorder
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-12-19 15:24:00 +01:00
6adb346cee Add bug command
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-12-19 15:23:59 +01:00
318ff52ff3 Merge pull request #969 from Mic92/patch-1
deploy.sh: upload release source tarball
2016-12-19 11:13:37 +01:00
b7b0f8f68d deploy.sh: upload release source tarball
Having a release tarball including all vendor source makes life of maintainers a lot easier to create downstream packages.
It also ensures that as long as the go release is available the software can be build reproducible.
2016-12-17 12:17:05 +01:00
Ian
94bb7a1435 Add ability to set authenticated user in request header (#889)
* Add ability to set authenticated user in request header

Some web applications provide the ability to authorize users based on
the authenticated from Basic Auth. This patch provides a way to set a
key to which the authenticated user can be set in the Header.

For example, if I set `HeaderValue = "X-WebAuth-User"` and authenticate,
my application will be able to read my user name from that header and
provide me with the proper access.

This fixes #802
2016-12-16 16:42:51 +01:00
913a297e8d Merge pull request #930 from Juliens/defaultFuncMap
feat: Add defaultFuncMap to template
2016-12-14 18:41:47 +01:00
d469d426f8 Remove useless func in FuncMaps 2016-12-08 20:44:13 +01:00
ec05fbcf19 feat: Add defaultFuncMap to template 2016-12-08 20:44:13 +01:00
686faf0556 Merge pull request #936 from funkyfuture/getting-started
Updates index.md 'Test it!' section
2016-12-08 18:39:04 +01:00
fe2d4e0d38 Updates index.md 'Test it!' section
adapted to current schema for compose files
uses networks as necessary in a real world usage
2016-12-08 17:01:49 +01:00
c500873586 Merge pull request #932 from yvespp/master
Kubernetes: cleanup channel handling
2016-12-08 11:23:20 +01:00
fc788eb426 Kubernetes: cleanup channel handling
Only use one channel for all watches
Re-use stop channel from the provider
Skip events that have already been handled by the provider, builds on 007f8cc48e
2016-12-07 20:12:14 +01:00
87eac1dc1a Fix deadlock in k8s provider
On a reasonably sized cluster:
63 nodes
87 services
90 endpoints

The initialization of the k8s provider would hang.

I tracked this down to the ResourceEventHandlerFuncs. Once you reach the
channel buffer size (10) the k8s Informer gets stuck. You can't read or
write messages to the channel anymore. I think this is probably a lock
issue somewhere in k8s but the more reasonable solution for the traefik
usecase is to just drop events when the queue is full since we only use
the events for signalling, not their content, thus dropping an event
doesn't matter.
2016-12-07 20:12:14 +01:00
91d9b9811f Merge pull request #738 from tyrken/lego-dns
Support Lets Encrypt DNS Challenges
2016-12-07 09:31:49 +01:00
71beb4b08f Support Lets Encrypt DNS Challenges
* Add exoscale support for Let’s encrypt DNS challenge
* Use name->DNS provider mapping from lego lib
2016-12-07 01:04:33 +00:00
d26f06e2d1 Merge pull request #938 from containous/merge-v1.1.1-master
Merge v1.1.1 master
2016-12-06 09:14:39 +01:00
dca08af003 Merge v1.1.1 into master
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-12-06 08:44:23 +01:00
4c740e26d7 Clarify exposedbydefault behaviour (#904)
* docs: clarify exposedbydefault behaviour

* docs: sentence clarity
2016-12-05 11:40:06 +01:00
131f581f77 Merge pull request #836 from yvespp/master
Migrate k8s to kubernetes/client-go
2016-12-01 12:00:05 +01:00
9236a43a4d kubernetes: moved doc of client to the interface 2016-11-30 19:25:22 +01:00
7f4eddf6d6 k8s: changed debug log, removed unneeded stop channels, increased watch channel buffer 2016-11-30 19:16:48 +01:00
d1e631a487 Flatten dependencies
Deps for the integration suite are handled seperately, and not
flattend, as glide can't read the version info from docker/docker
2016-11-30 19:16:48 +01:00
0b78375211 Kubernetes client: set resync period to 5 minutes for more robustness 2016-11-30 19:16:48 +01:00
15540764a0 Switched Kubernetes provider to new client implementation: https://github.com/kubernetes/client-go 2016-11-30 19:16:48 +01:00
82234cbbb2 Merge pull request #862 from Juliens/eureka
test-integration(eureka): Add some integration tests
2016-11-29 23:00:50 +01:00
22392daef7 Merge branch 'master' into eureka 2016-11-29 19:04:43 +01:00
7f3ae6edb0 Merge pull request #915 from containous/prepare-release-v1.1.1
Prepare release v1.1.1
2016-11-29 16:25:52 +01:00
1a993f5dfb Prepare release v1.1.1
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-11-29 14:52:55 +01:00
4e527304d0 Merge pull request #908 from containous/fix-swarm-panic
Fix Swarm panic
2016-11-29 14:47:51 +01:00
841be8d806 Fix Swarm panic 2016-11-28 16:46:37 +01:00
055cd01bb7 Fix GroupsAsSubDomains option for Mesos and Marathon (#868)
* Fix GroupsAsSubDomains option for Mesos and Marathon
* Refactor reverseStringSlice function
2016-11-28 14:59:08 +01:00
e34c364d5e Merge pull request #900 from containous/fix-k8s-panic
Fix k8s panic
2016-11-28 12:19:52 +01:00
926eb099f1 Fix k8s client panic
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-11-24 19:19:10 +01:00
710508dc40 Fix digest auth doc 2016-11-24 18:17:57 +01:00
b4ea68b88a Fix missing value for k8s watch request parameter (#874)
Fixes: 732
2016-11-23 23:21:09 +01:00
2bf9acd95e Normalize backend even if is user-defined (#865)
Signed-off-by: WTFKr0 <thomas.kovatchitch@gmail.com>
2016-11-23 21:31:37 +01:00
a8cb905255 consul/kv.tmpl: weight default value should be a int (#826)
* consul/kv.tmpl: weight default value should be a int

Fix #821

* Use 0 as default weight in all backends
2016-11-23 14:49:55 +01:00
567387aee0 Enable TCP Keep Alive for Marathon Client and make value configurable (#784)
* Resolve rebase conflicts

* Fix imports that VSCode messed up
2016-11-22 16:11:28 +01:00
5b71e3184a fix: lint 2016-11-20 18:34:42 +01:00
e1724444ac test(integration-test): Integration test for eureka 2016-11-20 18:25:48 +01:00
cf8940e80e fix(eureka): Wrong host in rule 2016-11-20 18:25:48 +01:00
fe1b982d13 Merge pull request #856 from containous/prepare-release-v1.1.0
Changelog v1.1.0
2016-11-17 22:41:11 +01:00
221ae2427b changelog v1.1.0 2016-11-17 22:07:15 +01:00
29f780863b Merge pull request #845 from containous/fix-kubernetes-watch-leak
Fix Kubernetes watch leak
2016-11-17 18:54:12 +01:00
8aaca8e55c Update docs with errm talk 2016-11-17 17:37:06 +01:00
2dda3d2feb Fix Kubernetes watch leak
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-11-17 17:37:06 +01:00
22ebaedb45 Merge pull request #855 from containous/fix-path-case-sensitive-v1.1
Fix path case sensitive v1.1
2016-11-17 17:36:40 +01:00
7065f00443 Fixes #851 (#852) 2016-11-17 15:40:25 +01:00
15732269da Fixes #851 (#852) 2016-11-17 15:36:10 +01:00
7b06be8f5e Merge pull request #636 from Juliens/eureka
Add Eureka provider
2016-11-17 09:32:27 +01:00
d2dcec40e1 test(integration-test): First test for eureka 2016-11-16 23:21:47 +01:00
2af6cc4d1b feat(provider): Add Eureka Provider 2016-11-16 22:00:24 +01:00
56c6174d61 Merge pull request #622 from errm/use-stdlib-context
Context is part of the stdlib in go 1.7
2016-11-16 14:26:38 +00:00
66e914a8ab Adds Cleanup method to safe.Pool 2016-11-16 14:03:23 +00:00
8ae9607d9b Update dev documentation to require go 1.7 2016-11-16 14:03:23 +00:00
5c0297fb61 Context is part of the stdlib on 1.7 2016-11-16 14:03:23 +00:00
f5bf9a2cda Merge pull request #846 from errm/yarn
Use the yarn package manager for javascript
2016-11-16 13:29:21 +01:00
987ab7612d Use the yarn pacakge manager for javascript
[Yarn](https://yarnpkg.com/) is a drop in replacement for npm.

We should use it because:

* It's faster
* It uses a lockfile, making the builds more deterministic.
2016-11-16 12:02:30 +00:00
a186d5f87a Merge pull request #847 from errm/typo
Fixes a spelling error
2016-11-16 12:37:34 +01:00
801e0f9ef7 Merge pull request #849 from containous/fix-golint-1.1
Fix golint in v1.1
2016-11-16 12:26:56 +01:00
874ea62dd5 Adds misspell to validate target 2016-11-16 11:04:26 +00:00
ac20ddfc6c Fix golint
recent additions to golint mean that a number of files cause the
build to start failing if they are edited (we only run against changed
files)

This fixes all the errors in the repo so things don't unexpectedly start
failing for people making PRs
2016-11-16 11:52:15 +01:00
f0b991e1a8 Validate misspellings in documentation 2016-11-16 09:50:20 +00:00
adf385fdf3 Fix docs misspelling 2016-11-16 09:42:10 +00:00
7af6bc093d Adds misspell validation 2016-11-16 09:29:36 +00:00
3708fa864b Fixes a spelling error 2016-11-16 09:28:16 +00:00
28276e1b37 Merge pull request #848 from errm/golint
Fix golint
2016-11-16 10:23:02 +01:00
b0efd685a9 Fix golint
recent additions to golint mean that a number of files cause the
build to start failing if they are edited (we only run against changed
files)

This fixes all the errors in the repo so things don't unexpectedly start
failing for people making PRs
2016-11-16 08:56:52 +00:00
422aacf8e6 Merge pull request #716 from jangie/allow-connection-timeout-configuration
Allow specification of dialertimeout
2016-11-15 21:38:53 +00:00
f6576cce27 Merge pull request #842 from guilhem/version-cross-binary
Pass Version, Codename and Date to crosscompiled
2016-11-14 17:35:58 +01:00
e068ee09ca Allow specification of dialertimeout
Address documentation comments
2016-11-14 10:57:46 -05:00
d3b48cdd22 Pass Version, Codename and Date to crosscompiled
Copy variables from ./script/binary
2016-11-14 16:41:30 +01:00
91e3bdff48 Merge pull request #827 from errm/remove-versions-from-examples
Remove version numbers from examples
2016-11-14 11:45:27 +01:00
4299d1526b Remove version numbers from examples
Fixes #808
2016-11-14 09:13:09 +00:00
c26b36cf4f Merge pull request #820 from trecloux/check_http2
Check that we serve HTTP/2
2016-11-14 09:38:31 +01:00
3095da64d7 Check that we provide HTTP/2 2016-11-14 09:10:47 +01:00
07f961ecba Merge pull request #829 from SantoDE/fix-webui-dashboard
Add Nvd3 Dependency to fix UI / Dashboard
2016-11-13 11:47:22 +01:00
8d9caaec71 Merge pull request #789 from wallies/master
Add marathon tls options to documentation
2016-11-13 11:35:00 +01:00
91634d5c1c Add marathon tls options to documentation 2016-11-13 19:11:36 +10:00
f5463c3d38 Merge pull request #788 from TerraTech/fix_makefile
Makefile: Strip 'heads/' from git rev-parse --abbrev-ref HEAD
2016-11-12 13:29:47 +01:00
73b70393d4 Makefile: Strip 'heads/' from git rev-parse --abbrev-ref HEAD
git rev-parse --abbrev-ref HEAD can return results in a couple different ways:
  1) tag v1.1.0-rc3 exists and branch==v1.1.0-rc3
     result: heads/v1.1.0-rc3
  2) tag v1.1.0-rc3 doesn't exist and branch==v1.1.0-rc3
     result: v1.1.0-rc3

  Strip it off GIT_BRANCH regardless as it will break the build.  e.g.

  $ make binary
  docker build  -t "traefik-dev:heads/v1.1.0-rc3" -f build.Dockerfile .
  invalid value "traefik-dev:heads/v1.1.0-rc3" for flag -t: Error parsing reference: "traefik-dev:heads/v1.1.0-rc3" is not a valid repository/tag
  See 'docker build --help'.
  Makefile:51: recipe for target 'build' failed
  make: *** [build] Error 125
2016-11-11 16:22:51 -05:00
3db6e185e0 Add Nvd3 Dependency to fix UI / Dashboard 2016-11-11 21:50:59 +01:00
d174ed75c7 Merge pull request #787 from SirCAS/contribute-guide
Added note for how to avoid running vendor tests
2016-11-10 19:34:28 +01:00
513d261f10 Added note for how to avoid running vendor tests 2016-11-10 19:05:52 +01:00
4430befe90 Merge pull request #823 from containous/fix-mkdoc-theme
Fix mkdoc theme
2016-11-10 12:20:46 +01:00
acf425b6cf Merge pull request #817 from gomes/master
Marathon ExposedByDefault is true by default
2016-11-10 11:34:00 +01:00
1c4eb4322b Fix changelog 2016-11-10 11:15:42 +01:00
3f3fa61a51 Fix mkdocs theme 2016-11-10 11:12:54 +01:00
ddf24039e8 Merge pull request #822 from containous/prepare-release-v1.1.0-rc4
Prepare release v1.1.0 rc4
2016-11-10 10:40:36 +01:00
98b35affd5 Merge branch 'master' into master 2016-11-09 22:04:56 -02:00
b3cc1e1af1 Merge pull request #806 from djalal/patch-2
fix typos
2016-11-09 23:09:29 +01:00
5b6a5f8aa9 Changelog v1.1.0-rc4 2016-11-09 22:00:10 +01:00
3e6d2391f7 Add dtomcej, SantoDE remove samber from maintainers 2016-11-09 21:59:58 +01:00
664ee9d82f Merge pull request #814 from containous/fix-acme-renew
Fix multiple issues
2016-11-09 21:47:13 +01:00
c9cc3c9895 Fix contraint store/read from KV
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-11-09 21:08:37 +01:00
00c7e5c72b Ensure HTTP/2 enabled 2016-11-09 17:56:41 +01:00
2b770ae2f8 Actually the current Marathon default for exposedByDefault is true, as
…
we can see in
https://github.com/containous/traefik/blob/master/configuration.go
“defaultMarathon.ExposedByDefault = true”
2016-11-08 11:20:50 -02:00
558b31f4d9 Fix oxy version 2016-11-08 10:34:39 +01:00
174a5e7f13 Fix ACME renew 2016-11-07 21:51:23 +01:00
952fcf5d09 fix typos 2016-11-05 23:02:43 +01:00
c821f191b0 Merge pull request #783 from containous/add-version-check
Fix ACME renew & add version check
2016-11-03 14:14:06 +01:00
3322e564fd Add version check
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-11-03 11:30:00 +01:00
7bf5d557c1 Fix acme renew 2016-11-03 11:30:00 +01:00
0c1e06199c Merge pull request #782 from guilhem/defaultToIndex1
Use first port by default
2016-11-02 14:34:42 -07:00
85a20b9a39 Use first index for ports 2016-11-02 17:31:27 +01:00
931a124349 Merge pull request #786 from guybrush/doc-basics-frontends
Fix typo in docs
2016-11-02 07:39:20 +01:00
ab52f4d91d Fix typo in docs 2016-10-30 13:21:43 +01:00
f3182ef29b Merge pull request #761 from nathan-osman/errors-in-health
Errors in health
2016-10-28 17:52:52 +02:00
5641af437e Use first port by default
If no information is given, use first index of ports
2016-10-28 11:59:24 +02:00
1c8d3ded3d Add name to some case to help debug 2016-10-28 11:59:24 +02:00
c2a445370e Merge pull request #779 from containous/prepare-release-v1.1.0-rc3
Prepare release v1.1.0-rc3
2016-10-26 17:59:09 +02:00
8e5355f2d9 Prepare release v1.1.0-rc3
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-10-26 17:38:18 +02:00
2492157833 Merge pull request #776 from containous/fix-response-recorder-flush
Fix ResponseRecorder Flush
2016-10-26 17:00:49 +02:00
7c375e8fd9 Fix ResponseRecorder Flush
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-10-26 16:26:19 +02:00
53b5d8ac33 Merge pull request #758 from containous/fix-multiple-certs-flag
Fix multiple certificates using flag
2016-10-26 16:23:06 +02:00
e5a8fb390e Fix multiple certificates using flags
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-10-26 15:40:27 +02:00
79cbae0c73 Merge pull request #759 from containous/fix-mapstructure-slice
Fix mapstructure issue with anonymous slice
2016-10-26 15:39:45 +02:00
22b0b8b750 Fix mapstructure issue with anonymous slice
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-10-26 15:17:54 +02:00
ddbddf6edf Merge pull request #760 from containous/fix-ProvidersThrottleDuration-doc
Fix providers throttle duration doc
2016-10-26 14:20:10 +02:00
adcf58da68 Fix ProvidersThrottleDuration doc 2016-10-26 12:47:19 +02:00
05f6b79e29 Add optional statistics to API and web UI.
A new option (--web.statistics) enables the collection of some basic
information about requests and responses. This currently consists of
the most recent 10 requests that resulted in HTTP 4xx or 5xx errors.
2016-10-25 15:36:23 -07:00
649cb548d0 Use sdnotify for systemd (#768)
* Use sdnotify for systemd

This is useful if a configuration is long to load.
Systemd will continue dependency chain only when server have finish to start.

https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=

* Extract the waiting behavior from Start()
2016-10-25 08:59:39 -07:00
14db2343c9 Merge pull request #773 from containous/merge-v1.1.0-rc2
Merge v1.1.0 rc2
2016-10-25 09:04:07 +02:00
67eb0c8de0 Merge tag 'v1.1.0-rc2' into master 2016-10-24 21:38:42 +02:00
870f378782 Merge pull request #748 from containous/really-fix-deploy-ghr
Really fix deploy ghr...
2016-10-19 12:14:54 +02:00
82a58010f5 Really fix deploy ghr... 2016-10-19 11:49:24 +02:00
f652c58367 Merge pull request #742 from containous/fix-deploy-ghr
Fixes deploy ghr
2016-10-19 10:56:54 +02:00
468d138be7 Fixes deploy ghr 2016-10-17 23:42:22 +02:00
f409d2f435 Merge pull request #740 from containous/prepare-v1.1.0-rc2
prepare v1.1.0-rc2
2016-10-17 19:38:23 +02:00
5780a17794 prepare v1.1.0-rc2 2016-10-17 19:14:49 +02:00
9b765d23fa Update Kubernetes examples (#731)
* Set `hostNetwork` to `true` in Kubernetes deployment example

* Remove duplicate Kubernetes examples

* Update Kubernetes Træfik Docker Image to 1.1.0
2016-10-17 18:36:32 +02:00
4476861d9f Merge pull request #733 from containous/fix-case-sensitive-hosts
Fix case sensitive host
2016-10-17 15:44:09 +02:00
e12ddca1a5 Fix case sensitive host 2016-10-17 13:52:29 +02:00
084d00a156 Merge pull request #728 from containous/fix-marathon-dots-ID
fIx marathon template with dots in ID
2016-10-13 16:23:00 +02:00
404a73a712 fIx marathon template with dots in ID 2016-10-13 15:33:23 +02:00
3b2410d904 Merge pull request #720 from guilhem/marathon-lb
Add basic compatibility with marathon-lb
2016-10-12 20:47:38 +02:00
bd5009058b Merge branch 'v1.1' into marathon-lb 2016-10-12 15:51:41 +02:00
d3f79c7ad3 Merge pull request #724 from vincentlepot/fix_network_label_service
Fix networkMap construction in ListServices
2016-10-10 17:16:09 +02:00
3f65503a79 Add basic compatibility with marathon-lb
Add compatibility with labels: `HAPROXY_GROUP` and `HAPROXY_0_VHOST`.
* `HAPROXY_GROUP` become a new tag
* `HAPROXY_0_VHOST` become a rule `Host:`

https://github.com/mesosphere/marathon-lb
2016-10-07 19:30:16 +02:00
6ac1216f8c Fix networkMap construction (pointer always reference the last network found) 2016-10-07 16:44:33 +02:00
1cae35f96b Merge pull request #713 from oscerd/readme-fix
Remove duplicated link to Kubernetes.io in README.md
2016-10-07 11:20:16 +02:00
0d13e91a62 Remove duplicated link to Kubernetes.io in README.md 2016-10-07 08:13:06 +02:00
b1b600e09e Merge pull request #715 from vdemeester/update-docs-for-swarmmode
Add documentation for Træfik on docker swarm mode
2016-10-06 16:34:24 +02:00
3692e1c4bd Add documentation for Træfik on docker swarm mode
Also small update on the swarm one.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2016-10-06 15:48:23 +02:00
dcbd82ac3b Merge pull request #717 from containous/update-README
Add Ed's video at ContainerCamp
2016-10-06 15:18:26 +02:00
d4f0541027 Fix mailgun/manners push force...
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-10-06 14:58:49 +02:00
a30d8e7819 Add Ed's video at ContainerCamp
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-10-06 12:24:52 +02:00
8ee6bf044a Merge pull request #708 from vdemeester/docker-support-healthcheck
Add support for docker healthcheck 👼
2016-10-03 12:44:38 +02:00
6632247c9c Merge pull request #709 from vhf/webui-show-version
Show current version in web UI
2016-10-03 11:37:20 +02:00
d68389dc52 Add support for docker healthcheck
- React to health_status events
- Filter container that have a health status *and* that are not healthy

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2016-10-03 11:01:37 +02:00
4a43273ee5 Show current version in web UI 2016-10-02 20:46:10 +02:00
66f52a6e21 Merge pull request #707 from billglover/master
Fix syntax in Swarm example. Resolves #528
2016-10-02 14:00:34 +02:00
640bfc4eff Fix syntax in Swarm example. Resolves #528
Prior to this fix the documentation for the swarm example included
syntax that would fail with the following error.

`Error : flag needs an argument: --docker.domain`

This fix specifies flags using the `=` between the flag name and value.

Tested on: Docker version 1.12.2-rc1, build 45bed2c, experimental
2016-10-01 22:37:15 +01:00
408ef0f5b7 Merge pull request #705 from containous/prepare-release-v1.1.0-rc1
Prepare release v1.1.0 rc1
2016-09-30 15:57:09 +02:00
b9f76394aa Update Mesos documentation 2016-09-30 15:37:52 +02:00
a96f483d56 Fix regression in acme.json secure mode 2016-09-30 15:06:12 +02:00
84cb9f15a4 Prepare release v1.1.0-rc1 2016-09-30 15:04:57 +02:00
d4da14cf18 Merge pull request #625 from containous/add-ha-acme-support
HA acme support
2016-09-30 13:34:59 +02:00
4ad4b8e0b8 Add ACME account to storeconfig command
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-09-30 12:29:39 +02:00
bb29d9c8ca Add documentation
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-09-30 12:29:39 +02:00
e72e65858f Challenge certs PEM encoding
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-09-30 11:26:25 +02:00
a42845502e Add ACME store
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-09-30 11:26:17 +02:00
bea5ad3f13 Add leadership election
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-09-30 11:26:05 +02:00
5a0440d6f8 Add KV datastore
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-09-30 11:26:05 +02:00
38b62d4ae3 Merge pull request #701 from containous/carry-pr-446
Carry PR 446 - Add sticky session support (round two!)
2016-09-30 11:25:26 +02:00
462d8b3e74 Fix Docker & KV templates for sticky
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-09-30 10:57:55 +02:00
291c3b6dbc Fix sticky sessions Docker/Marathon labels 2016-09-30 10:56:47 +02:00
df225d9170 Change cookie name to match documentation 2016-09-30 10:56:36 +02:00
592e981bd2 glide up 2016-09-30 10:56:36 +02:00
3d7c44735a Reorder sticky session definitions 2016-09-30 10:56:17 +02:00
81fddb4ccf missed a cherry pick, good start :=/ 2016-09-30 10:56:17 +02:00
c9d4c5ae3e Fix Docker integration problems 2016-09-30 10:56:17 +02:00
be5b1fd92b docs, sticky session for Docker 2016-09-30 10:56:17 +02:00
d78c419627 Add sticky support to DRR lb 2016-09-30 10:56:17 +02:00
dc52abf4ce Add sticky session support to Traefik.
This change adds sticky session support, by using the new
oxy/rr/StickySession feature.

To use it, set traefik.backend.sticky to true.

This is currently only implemented in the wrr load balancer, and against
the Marathon backend, but lifting it should be very doable.

In the wrr load balancer, a cookie called _TRAEFIK_SERVERNAME will be
set with the backend to use.  If the cookie is altered to an invalid
backend server, or the server is removed from the load balancer, the
next server will be used instead.

Otherwise, the cookie will be checked in Oxy's rr on access and if valid
the connection will be wired through to it.
2016-09-30 10:56:17 +02:00
a13549cc28 Merge pull request #702 from tuier/http_compression
Add HTTP compression
2016-09-29 18:25:49 +02:00
baf4c474e3 Documentation 2016-09-28 23:05:01 +01:00
a58750992d lint 2016-09-28 23:04:18 +01:00
17546c3a08 Add HTTP compression 2016-09-28 23:04:18 +01:00
067f13b61c Merge pull request #690 from dtomcej/disable-tls10
Selectable TLS Versions
2016-09-28 23:52:34 +02:00
e249983c77 add TLS Min Version
silly copy paste
Add cipher selection

add TLS Min Version

silly copy paste

silly copy paste

add TLS Min Version

silly copy paste

fix formatting

Add cipher selection

linted

arg

update cipher map
2016-09-27 14:29:36 -06:00
454b191370 Merge pull request #687 from containous/some-fixes
Some fixes
2016-09-27 22:21:59 +02:00
a882a9d79f Fix constraints and add doc 2016-09-27 21:45:29 +02:00
89fc835bb2 Add Katacoda in docs 2016-09-27 21:45:29 +02:00
364958cbaf Move jobs backoff back into traefik
https://github.com/cenk/backoff/pull/27#issuecomment-245842725
2016-09-27 21:45:29 +02:00
1b6af2045e Clean web authentication 2016-09-27 21:45:29 +02:00
be09ff8e43 Merge pull request #602 from diegofernandes/master
#504 Initial support for Docker 1.12 Swarm Mode
2016-09-27 21:45:07 +02:00
99c8bffcbf Initial support for Docker 1.12 Swarm Mode 2016-09-27 14:21:38 -03:00
03d16d12d5 Merge pull request #697 from tuier/remove_unused_endpoint_marathon
Remove unused endpoint when using constraints with Marathon provider
2016-09-27 15:18:48 +02:00
1624c51cb5 remove unused endpoint when using constraints in marathon 2016-09-23 22:05:11 +01:00
83aabefcc5 Merge pull request #696 from solidnerd/patch-1
Replace imagelayers.io with microbadger
2016-09-23 14:01:48 +02:00
dfece708e1 Replace imagelayers.io with microbadger
This replace the badge of imagelayers.io with a badge microbadger.com because imagelayers.io doesn't work anymore through the registry v2 specification and docker hub supports only the v2 spec.
2016-09-23 13:03:44 +02:00
5d0f82ffbd Merge pull request #686 from tuier/marathon_constraints
feat(constraints): Supports constraints for Marathon provider
2016-09-23 09:58:17 +02:00
361dc94002 fmt 2016-09-21 17:27:48 +02:00
cc0fdf15ef test for task and application constraint 2016-09-21 17:27:47 +02:00
928675a847 feat(constraints): Support constraint for Marathon provider 2016-09-21 17:27:47 +02:00
12c1131b0c Merge pull request #689 from containous/carry-pr-439
Carry pr 439
2016-09-21 15:51:43 +02:00
bb1dde0469 Fix kv
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-09-21 14:33:45 +02:00
ced69b8397 refacto(constraint-kv): Move constraint checking out of template 2016-09-21 14:33:45 +02:00
013808956c feat(constraints): Supports kv stores backends 2016-09-21 14:33:45 +02:00
009057cb87 Merge pull request #688 from ydubreuil/fix-clean-url
Disable gorilla/mux URL cleaning to prevent sending redirect
2016-09-20 21:14:39 +02:00
82cb21fca3 Disable gorilla/mux URL cleaning to prevent sending redirect
This fixes #167 and #651. By default, gorilla/mux cleans URL paths
such that adjacent slashes are collapsed into one single slash. This
behavior is pretty common in application stacks and it is fine, but
for Traefik, this can lead to incorrect URL paths forwarded to backend
servers.

See https://github.com/gorilla/mux/issues/94 for background.
2016-09-20 20:31:11 +02:00
7e8937a332 Merge pull request #685 from dtomcej/update-docs
Update docs to improve contribution setup
2016-09-20 18:04:56 +02:00
e5dcfa0a2e Update docs for current install
silly spelling mistake

Document accepted values for logLevel.

Add possibility to use BindPort IPAddress 👼

Signed-off-by: Vincent Demeester <vincent@sbr.pm>

Update marathon

Signed-off-by: Emile Vauge <emile@vauge.com>
2016-09-20 09:13:52 -06:00
f4520a011a Merge pull request #648 from containous/update-marathon
Update marathon
2016-09-20 16:57:44 +02:00
98dd6ca460 Update marathon
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-09-20 16:01:45 +02:00
c3d9312240 Merge pull request #657 from vdemeester/use-port-ip-address
Add possibility to use BindPort IPAddress 👼
2016-09-20 15:20:48 +02:00
5ea761e19f Add possibility to use BindPort IPAddress 👼
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2016-09-20 14:52:35 +02:00
46a7860427 Merge pull request #676 from InQuicker/docs-log-levels
Document accepted values for logLevel.
2016-09-20 09:45:20 +02:00
af9b63eaed Document accepted values for logLevel. 2016-09-19 16:07:53 -07:00
9a26e0db16 Merge pull request #610 from containous/merge-v1.0.2-master
Merge v1.0.2 master
2016-09-19 20:29:37 +02:00
efe6989fd3 Merge acme from v1.0.2
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-09-19 19:58:34 +02:00
aa1c9b80e3 Prepare release v1.0.2
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-09-19 16:49:21 +02:00
6981df3b9a Fix ACME TOS
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-09-19 16:49:21 +02:00
0d1ed625a8 Bump oxy version, fix streaming
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-09-19 16:49:21 +02:00
710fc56c6a Merge pull request #677 from SantoDE/master
Add basic auth support for web backend
2016-09-19 16:48:05 +02:00
d5a15d6756 add basic auth support
implemented requested changes

fix docs

remove struct tag
2016-09-19 09:40:43 +02:00
b376da1829 Merge pull request #645 from jangie/add-backend-features-to-consul-catalog
enable consul catalog to use maxconn
2016-09-15 18:46:30 +02:00
f7f17f0057 enable consul catalog to use maxconn 2016-09-15 12:11:37 -04:00
d06b9c2992 Merge pull request #616 from jangie/master
Add ability for marathon provider to set maxconn values, loadbalancer algorithm, and circuit breaker expression
2016-09-15 17:19:12 +02:00
99ca5d0a03 Add ability for marathon provider to set maxconn values
Initial implementation: Force both to be present to trigger behavior.

add ability to see rendered template in debug

add support for loadbalancer and circuit breaker specification

add documentation for new configuration
2016-09-14 16:52:02 -04:00
4783c7f70a Merge pull request #646 from jangie/add-backend-features-to-docker
Add backend features to docker
2016-09-14 22:48:59 +02:00
d89bdfbd27 Add backend features to docker 2016-09-14 14:51:31 -04:00
1e324ad3bc If Marathon doesn't have healthcheck, assume it's ok (#665)
Healthcheck are not mandatory, so if a result is not present, assume it
is ok to continue. Fixes the case when a new leader is elected and
don't have any healthcheck result's, returning 404 to all requests.
https://github.com/containous/traefik/issues/653
2016-09-14 17:44:37 +02:00
52737e91e5 Merge pull request #660 from JayH5/acme-renew-30-days
ACME: renew certificates 30 days before expiry
2016-09-14 08:01:07 +02:00
1872e2b63d ACME: renew certificates 30 days before expiry, like the official certbot client 2016-09-13 16:15:58 +02:00
3c5605b793 Update broken link in sample config file. (#658) 2016-09-13 15:17:34 +02:00
9a2b7cf5be Merge pull request #668 from yvespp/master
Kubernetes provider: traefik.frontend.rule.type logging
2016-09-13 10:56:20 +02:00
1a20e9f9b4 Kubernetes provider: don't log a warning if traefik.frontend.rule.type is empty, log namespace and ingress if invalide. 2016-09-12 21:06:21 +02:00
14d79e4eef Merge pull request #641 from errm/code-of-conduct
Adopt the Code Of Coduct from http://contributor-covenant.org
2016-08-30 22:26:29 +02:00
71f48d2aef Adopt the Code Of Coduct from http://contributor-covenant.org 2016-08-26 10:26:41 +01:00
312adca226 Merge pull request #630 from jangie/add-ping-handler
add PING handler to dashboard API
2016-08-25 23:10:26 +02:00
d35c6e77d7 add PING handler to dashboard API 2016-08-24 21:37:12 -04:00
1de21c86ae Merge pull request #639 from discordianfish/fish/fix-acme-perm
Use secure mode 600 instead of 644 for acme.json
2016-08-24 20:06:33 +02:00
c709a592eb Use secure mode 600 instead of 644 for acme.json 2016-08-22 13:33:49 +02:00
a54c544eb4 Merge pull request #637 from djalal/patch-1
docker clarification, fix dead urls, misc typos
2016-08-22 13:06:35 +02:00
7d936ec6aa docker clarification, fix dead urls, misc typos 2016-08-22 11:03:34 +02:00
f63ec1332f Merge pull request #628 from containous/mirgate-to-JobBackOff
Migrate to JobBackOff
2016-08-19 22:24:39 +02:00
d340ccd601 Migrate to JobBackOff 2016-08-19 14:24:09 +02:00
95e8f0a31e Merge pull request #627 from containous/add-long-job-exponential-backoff
Add long job exponential backoff
2016-08-19 11:40:16 +02:00
97ddfcb17a Use long job RetryBackoff in providers 2016-08-19 11:09:54 +02:00
7bb5f9a1e4 Add long job RetryBackoff 2016-08-19 11:09:34 +02:00
11297b38c5 Remove misused Fatal* 2016-08-19 10:36:54 +02:00
fc19ab2868 Merge pull request #601 from containous/add-host-cert-acme-generation
Add Host cert ACME generation
2016-08-18 15:01:41 +02:00
5e01c0a7db Add Host cert ACME generation
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-08-18 14:20:55 +02:00
f1c3d820f7 Merge pull request #617 from jangie/fix-nil-client-tls
fix for nil clientTLS causing issue
2016-08-17 09:46:17 +02:00
0757a75732 fix for nil clientTLS causing issue 2016-08-16 17:50:22 -04:00
f0ea45a0f8 Merge pull request #613 from keis/installable-systemd-unit
Make systemd unit installable
2016-08-16 15:11:59 +02:00
45f2335a60 Make systemd unit installable
Having a install section makes it possible to enable/disable traefik
using the standard systemd commands

`systemctl enable traefik`
`systemctl disable traefk`
2016-08-16 14:50:20 +02:00
d629939cf3 Merge pull request #620 from containous/bump-go-1.7
Bump go v1.7
2016-08-16 12:58:11 +02:00
404f76dcb9 Bump go v1.7
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-08-16 11:11:47 +02:00
498ce6b00c Merge pull request #573 from errm/fix-k8s-watch
Fix k8s watch
2016-08-16 09:32:50 +02:00
e3a8fd116d Don't filter the endpoint and service watches
We added the ability to filter the ingresses used by traefik based
on a label selector, but we shouldn't need to have matching
labels on every other resource, Ingress allready has a way
to explicty choose which pods end up in the load ballancer
(by refering to the membership of a particular service)
2016-08-16 06:50:50 +01:00
d33e09bcf3 Ignore .DS_Store (Mac junk) 2016-08-16 06:50:50 +01:00
fb3bad3887 Merge pull request #619 from jangie/consistent-duration-logging
Make duration logging consistent
2016-08-15 18:30:25 +02:00
3a736ad4a8 Make duration logging consistent
GH #559 points out that the logging of the elapsed time is inconsistent
depending on the scale of the measured time; this is due to Duration’s
String handling.

With this PR, I propose that traefik logs millis, and not fractions of
millis.
2016-08-15 08:43:20 -04:00
c1b0c41769 Merge pull request #609 from cocap10/update-staert-toml-default-pointer-behaviour
update staert and flaeg
2016-08-15 13:19:24 +02:00
c03274703e update staert and flaeg 2016-08-11 14:34:33 +02:00
4cd08e88f6 Fix Consul prefix (#589)
Seemed to have been the cause of #587
2016-08-08 11:53:00 +02:00
e2c4872030 Merge pull request #596 from errm/k8s-server-naming
Name servers after thier pods
2016-08-07 09:21:44 +02:00
d4f190e995 Name servers after thier pods
The TargetRef contains information from the object referenced
by the pod, unless the service has been set up with bare
endpoints - i.e. not pointing at pods this information
will be present.

It just makes the information that we show in the web-ui
a little more constent with that shown in kubectl
and the kuberntes dashboard.
2016-08-06 20:40:40 +01:00
039107e837 Merge pull request #598 from keiths-osc/version_fix
Fixed binary script so traefik version command doesn't just print default values
2016-08-05 16:05:25 +02:00
ef6c211275 Fixed binary script so traefik version command doesn't just print default values 2016-08-05 09:19:45 -04:00
1f3accc0d7 Merge pull request #580 from cocap10/beautify-help
beautify help
2016-08-05 15:13:28 +02:00
2815f80063 beautify help
and fixes
2016-08-05 14:26:36 +02:00
fa645abee3 Add requirements.txt for netlify (#567)
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-08-05 12:32:49 +02:00
a86649def3 Upgrade directives name since we use angular-ui-bootstrap (#578) 2016-08-05 11:49:34 +02:00
1fc4c56bc4 Merge pull request #588 from philk/kubernetes-priorities
Prioritize kubernetes routes by path length
2016-08-05 11:08:07 +02:00
79dd72f53d Prioritize kubernetes routes by path length
The Kubernetes provider wasn't setting priorities which was causing
shorter paths to get chosen before longer ones. This now matches the
[documentation](https://github.com/containous/traefik/blob/master/docs/basics.md#priorities)
2016-08-03 11:37:22 -07:00
ffa060ce56 Fix basic docs for configuration of multiple rules (#576) 2016-08-03 18:50:13 +02:00
5ce9719951 Merge pull request #557 from stuart-c/insecure_skip_verify
Add global InsecureSkipVerify option to disable certificate checking
2016-08-01 15:42:33 +02:00
914aa7d372 Add some documentation 2016-07-31 17:08:33 +01:00
4a88cbde3a Adjust formatting 2016-07-31 16:59:48 +01:00
4882519c0f Add global InsecureSkipVerify option to disable certificate checking
Signed-off-by: Stuart Clark <stuart.clark@Jahingo.com>
2016-07-31 16:59:48 +01:00
7abe68fac1 Merge pull request #565 from containous/merge-v1.0.1-master
Merge v1.0.1 master
2016-07-28 21:00:13 +02:00
e62cca1e7c Merge v1.0.1
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-07-28 20:15:09 +02:00
a016741918 Merge pull request #547 from containous/add-basic-authentication
Add basic/digest auth
2016-07-28 19:01:46 +02:00
2f95810fa3 Add experimental Docker push
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-07-28 18:32:26 +02:00
16e2c3b1e0 Add basic/digest auth doc
Signed-off-by: Emile Vauge <emile@vauge.com>

Signed-off-by: Emile Vauge <emile@vauge.com>
2016-07-28 18:32:21 +02:00
bc8a92caa9 Add basic/digest auth tests
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-07-28 18:19:47 +02:00
3a5b67a3e1 Add basic/digest auth
Signed-off-by: Emile Vauge <emile@vauge.com>
2016-07-28 18:19:47 +02:00
2a596b8162 Merge pull request #558 from micaelmbagira/webui-webpack-fountainjs
Move webui to FountainJS with Webpack
2016-07-27 22:29:17 +02:00
e059239bc3 Move webui to FountainJS with Webpack 2016-07-27 16:16:02 +02:00
986ad9fc57 Merge pull request #551 from cocap10/upload-config-kv
Add command storeconfig
2016-07-22 16:52:00 +02:00
1bb3d9be73 add command storeconfig
add test integration command storeconfig

update doc
2016-07-22 15:20:47 +02:00
ae31f19ef6 Merge pull request #552 from vdemeester/update-libkermit
Upgrade libkermit and dependencies
2016-07-21 19:13:27 +02:00
c170ddc7ae Upgrade libkermit and dependencies
And use ContainerAPIClient where needed 👼

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2016-07-21 17:43:05 +02:00
58b6d92ce2 Merge pull request #553 from vdemeester/move-version-in-package
Move version.go in its own package…
2016-07-21 17:35:52 +02:00
87a4d73556 Move version.go in its own package…
… making it possible to use in other packages ; and thus in the
User-Agent header for the docker client.

Also removing the dockerverion hack as it's not required anymore.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2016-07-21 16:33:49 +02:00
4c54a003fa Merge pull request #546 from vdemeester/bump-webui-node
Bump node to 6 for webui
2016-07-21 10:46:59 +02:00
a5f3eabf8b Bump node to version 6 for webui
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2016-07-21 10:21:04 +02:00
3bf6c59d23 Merge pull request #545 from vdemeester/bump-go-1.6.3
Bump golang to 1.6.3
2016-07-21 10:20:33 +02:00
ef83dea95c Bump golang to 1.6.3
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2016-07-21 09:50:17 +02:00
686c23d25b Merge pull request #481 from cocap10/global-config-kv
Use KvStores as global config sources
2016-07-21 09:49:58 +02:00
b153e90ec5 add createStore() funcs and skip consul TLS test 2016-07-21 09:22:35 +02:00
38cc36980f update doc 2016-07-21 09:22:35 +02:00
b83fb525a8 Add TLS support for etcd and consul 2016-07-21 09:22:35 +02:00
e26e0955b3 add struct ClientTLS : supports either a paths to a file or directly the certificate 2016-07-21 09:22:35 +02:00
7ada80b619 Certificate can contain path or file contents
Signed-off-by: Martin <martin.piegay@zenika.com>
2016-07-21 09:22:35 +02:00
056e0fe2d9 Use KvStores as global config source 2016-07-21 09:22:35 +02:00
9be0c67d5c Merge pull request #461 from andersbetner/client_tls_auth
Add endpoint option to authenticate by client tls cert.
2016-07-21 09:06:34 +02:00
664bc9cae0 Added tests for client certificate authentication 2016-07-20 14:41:38 +02:00
959c7dc783 Support for client certificate authentication 2016-07-20 14:41:38 +02:00
8e333d0a03 Merge pull request #353 from saagie/feature/mesos
add mesos provider inspired by mesos-dns & marathon provider
2016-07-20 12:49:09 +02:00
5afcf17706 add mesos provider inspired by mesos-dns & marathon provider 2016-07-20 11:56:14 +02:00
61b22316d6 Merge pull request #538 from jimt/docs
Fix typos
2016-07-19 15:34:08 +02:00
d2f51fccb9 Fix typos 2016-07-18 14:55:45 +09:00
c13db04f6d Merge pull request #519 from errm/k8s-docs
Kubernetes user-guide
2016-07-17 15:46:45 +02:00
d3aa056151 Kubernetes user-guide 2016-07-15 09:49:08 +01:00
1c60f0b53b Fix the name of Traefik in the documentation 2016-07-15 09:49:08 +01:00
ca2b85f453 Merge pull request #514 from vdemeester/carry-pr-358
Carry #358 : Option to disable expose of all docker containers
2016-07-14 11:57:31 +02:00
b80479f9ef Option to disable expose of all docker containers
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2016-07-14 11:32:15 +02:00
d1112a0feb Merge pull request #510 from vdemeester/remove-frontend-value-docker
Remove traefik.frontend.value support in docker…
2016-07-13 21:53:38 +02:00
a73baded88 Remove traefik.frontend.value support in docker…
… provider 👼. Was deprecated in 1.0, removing it for 1.1.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2016-07-13 19:28:08 +02:00
94fa95d747 Merge pull request #516 from pnegahdar/selector
Implement Kubernetes Selectors, minor kube endpoint fix
2016-07-13 19:22:40 +02:00
9f6484a328 Fixes #363: Allow for kubernetes label selectors 2016-07-12 17:50:01 -04:00
40c0ed092e Fixes #501: prioritize kube.endpoint passed via cli 2016-07-11 15:39:20 -04:00
1285 changed files with 144661 additions and 28469 deletions

View File

@ -1,5 +1,3 @@
dist/
vendor/
!dist/traefik
site/
**/*.test

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
# vendor/github.com/go-acme/lego/providers/dns/cloudxns/cloudxns.go eol=crlf

24
.github/CODEOWNERS vendored Normal file
View File

@ -0,0 +1,24 @@
provider/kubernetes/** @containous/kubernetes
provider/rancher/** @containous/rancher
provider/marathon/** @containous/marathon
provider/docker/** @containous/docker
docs/user-guide/kubernetes.md @containous/kubernetes
docs/user-guide/marathon.md @containous/marathon
docs/user-guide/swarm.md @containous/docker
docs/user-guide/swarm-mode.md @containous/docker
docs/configuration/backends/docker.md @containous/docker
docs/configuration/backends/kubernetes.md @containous/kubernetes
docs/configuration/backends/marathon.md @containous/marathon
docs/configuration/backends/rancher.md @containous/rancher
examples/k8s/ @containous/kubernetes
examples/compose-k8s.yaml @containous/kubernetes
examples/k8s.namespace.yaml @containous/kubernetes
examples/compose-rancher.yml @containous/rancher
examples/compose-marathon.yml @containous/marathon
vendor/github.com/gambol99/go-marathon @containous/marathon
vendor/github.com/rancher @containous/rancher
vendor/k8s.io/ @containous/kubernetes

View File

@ -1,126 +0,0 @@
# Contributing
### Building
You need either [Docker](https://github.com/docker/docker) and `make`, or `go` and `glide` in order to build traefik.
#### Setting up your `go` environment
- You need `go` v1.5
- You need to set `export GO15VENDOREXPERIMENT=1` environment variable
- You need `go-bindata` to be able to use `go generate` command (needed to build) : `go get github.com/jteeuwen/go-bindata/...`.
- If you clone Træfɪk into something like `~/go/src/github.com/traefik`, your `GOPATH` variable will have to be set to `~/go`: export `GOPATH=~/go`.
#### Using `Docker` and `Makefile`
You need to run the `binary` target. This will create binaries for Linux platform in the `dist` folder.
```bash
$ make binary
docker build -t "traefik-dev:no-more-godep-ever" -f build.Dockerfile .
Sending build context to Docker daemon 295.3 MB
Step 0 : FROM golang:1.5
---> 8c6473912976
Step 1 : RUN go get github.com/Masterminds/glide
[...]
docker run --rm -v "/var/run/docker.sock:/var/run/docker.sock" -it -e OS_ARCH_ARG -e OS_PLATFORM_ARG -e TESTFLAGS -v "/home/emile/dev/go/src/github.com/containous/traefik/"dist":/go/src/github.com/containous/traefik/"dist"" "traefik-dev:no-more-godep-ever" ./script/make.sh generate binary
---> Making bundle: generate (in .)
removed 'gen.go'
---> Making bundle: binary (in .)
$ ls dist/
traefik*
```
#### Using `glide`
The idea behind `glide` is the following :
- when checkout(ing) a project, **run `glide install`** to install
(`go get …`) the dependencies in the `GOPATH`.
- if you need another dependency, import and use it in
the source, and **run `glide get github.com/Masterminds/cookoo`** to save it in
`vendor` and add it to your `glide.yaml`.
```bash
$ glide install
# generate
$ go generate
# Simple go build
$ go build
# Using gox to build multiple platform
$ gox "linux darwin" "386 amd64 arm" \
-output="dist/traefik_{{.OS}}-{{.Arch}}"
# run other commands like tests
$ go test ./...
ok _/home/vincent/src/github/vdemeester/traefik 0.004s
```
### Tests
You can run unit tests using the `test-unit` target and the
integration test using the `test-integration` target.
```bash
$ make test-unit
docker build -t "traefik-dev:your-feature-branch" -f build.Dockerfile .
# […]
docker run --rm -it -e OS_ARCH_ARG -e OS_PLATFORM_ARG -e TESTFLAGS -v "/home/vincent/src/github/vdemeester/traefik/dist:/go/src/github.com/containous/traefik/dist" "traefik-dev:your-feature-branch" ./script/make.sh generate test-unit
---> Making bundle: generate (in .)
removed 'gen.go'
---> Making bundle: test-unit (in .)
+ go test -cover -coverprofile=cover.out .
ok github.com/containous/traefik 0.005s coverage: 4.1% of statements
Test success
```
For development purpose, you can specifiy which tests to run by using:
```
# Run every tests in the MyTest suite
TESTFLAGS="-check.f MyTestSuite" make test-integration
# Run the test "MyTest" in the MyTest suite
TESTFLAGS="-check.f MyTestSuite.MyTest" make test-integration
# Run every tests starting with "My", in the MyTest suite
TESTFLAGS="-check.f MyTestSuite.My" make test-integration
# Run every tests ending with "Test", in the MyTest suite
TESTFLAGS="-check.f MyTestSuite.*Test" make test-integration
```
More: https://labix.org/gocheck
### Documentation
The [documentation site](http://docs.traefik.io/) is built with [mkdocs](http://mkdocs.org/)
First make sure you have python and pip installed
```
$ python --version
Python 2.7.2
$ pip --version
pip 1.5.2
```
Then install mkdocs with pip
```
$ pip install mkdocs
```
To test documentaion localy run `mkdocs serve` in the root directory, this should start a server localy to preview your changes.
```
$ mkdocs serve
INFO - Building documentation...
WARNING - Config value: 'theme'. Warning: The theme 'united' will be removed in an upcoming MkDocs release. See http://www.mkdocs.org/about/release-notes/ for more details
INFO - Cleaning site directory
[I 160505 22:31:24 server:281] Serving on http://127.0.0.1:8000
[I 160505 22:31:24 handlers:59] Start watching changes
[I 160505 22:31:24 handlers:61] Start detecting changes
```

77
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,77 @@
<!-- PLEASE FOLLOW THE ISSUE TEMPLATE TO HELP TRIAGE AND SUPPORT! -->
### Do you want to request a *feature* or report a *bug*?
<!--
DO NOT FILE ISSUES FOR GENERAL SUPPORT QUESTIONS.
The issue tracker is for reporting bugs and feature requests only.
For end-user related support questions, please refer to one of the following:
- the Traefik community forum: https://community.containo.us/
-->
Bug
<!--
The configurations between 1.X and 2.X are NOT compatible.
Please have a look here https://docs.traefik.io/v2.0/getting-started/configuration-overview/.
-->
### What did you do?
<!--
HOW TO WRITE A GOOD BUG REPORT?
- Respect the issue template as much as possible.
- The title should be short and descriptive.
- Explain the conditions which led you to report this issue: the context.
- The context should lead to something, an idea or a problem that youre facing.
- Remain clear and concise.
- Format your messages to help the reader focus on what matters and understand the structure of your message, use Markdown syntax https://help.github.com/articles/github-flavored-markdown
-->
### What did you expect to see?
### What did you see instead?
### Output of `traefik version`: (_What version of Traefik are you using?_)
<!--
`latest` is not considered as a valid version.
For the Traefik Docker image:
docker run [IMAGE] version
ex: docker run traefik version
-->
```
(paste your output here)
```
### What is your environment & configuration (arguments, toml, provider, platform, ...)?
```toml
# (paste your configuration here)
```
<!--
Add more configuration information here.
-->
### If applicable, please paste the log output in DEBUG level (`--log.level=DEBUG` switch)
```
(paste your output here)
```

82
.github/ISSUE_TEMPLATE/Bug_report.md vendored Normal file
View File

@ -0,0 +1,82 @@
---
name: Bug report
about: Create a report to help us improve
---
<!-- PLEASE FOLLOW THE ISSUE TEMPLATE TO HELP TRIAGE AND SUPPORT! -->
### Do you want to request a *feature* or report a *bug*?
<!--
DO NOT FILE ISSUES FOR GENERAL SUPPORT QUESTIONS.
The issue tracker is for reporting bugs and feature requests only.
For end-user related support questions, please refer to one of the following:
- the Traefik community forum: https://community.containo.us/
-->
Bug
<!--
The configurations between 1.X and 2.X are NOT compatible.
Please have a look here https://docs.traefik.io/v2.0/getting-started/configuration-overview/.
-->
### What did you do?
<!--
HOW TO WRITE A GOOD BUG REPORT?
- Respect the issue template as much as possible.
- The title should be short and descriptive.
- Explain the conditions which led you to report this issue: the context.
- The context should lead to something, an idea or a problem that youre facing.
- Remain clear and concise.
- Format your messages to help the reader focus on what matters and understand the structure of your message, use Markdown syntax https://help.github.com/articles/github-flavored-markdown
-->
### What did you expect to see?
### What did you see instead?
### Output of `traefik version`: (_What version of Traefik are you using?_)
<!--
`latest` is not considered as a valid version.
For the Traefik Docker image:
docker run [IMAGE] version
ex: docker run traefik version
-->
```
(paste your output here)
```
### What is your environment & configuration (arguments, toml, provider, platform, ...)?
```toml
# (paste your configuration here)
```
<!--
Add more configuration information here.
-->
### If applicable, please paste the log output in DEBUG level (`--log.level=DEBUG` switch)
```
(paste your output here)
```

View File

@ -0,0 +1,35 @@
---
name: Feature request
about: Suggest an idea for this project
---
<!-- PLEASE FOLLOW THE ISSUE TEMPLATE TO HELP TRIAGE AND SUPPORT! -->
### Do you want to request a *feature* or report a *bug*?
<!--
DO NOT FILE ISSUES FOR GENERAL SUPPORT QUESTIONS.
The issue tracker is for reporting bugs and feature requests only.
For end-user related support questions, please refer to one of the following:
- the Traefik community forum: https://community.containo.us/
-->
Feature
### What did you expect to see?
<!--
HOW TO WRITE A GOOD ISSUE?
- Respect the issue template as much as possible.
- The title should be short and descriptive.
- Explain the conditions which led you to report this issue: the context.
- The context should lead to something, an idea or a problem that youre facing.
- Remain clear and concise.
- Format your messages to help the reader focus on what matters and understand the structure of your message, use Markdown syntax https://help.github.com/articles/github-flavored-markdown
-->

37
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,37 @@
<!--
PLEASE READ THIS MESSAGE.
Documentation fixes or enhancements:
- for Traefik v1: use branch v1.7
- for Traefik v2: use branch v2.0
Bug fixes:
- for Traefik v1: use branch v1.7
- for Traefik v2: use branch v2.0
Enhancements:
- for Traefik v1: we only accept bug fixes
- for Traefik v2: use branch master
HOW TO WRITE A GOOD PULL REQUEST? https://docs.traefik.io/contributing/submitting-pull-requests/
-->
### What does this PR do?
<!-- A brief description of the change being made with this pull request. -->
### Motivation
<!-- What inspired you to submit this pull request? -->
### More
- [ ] Added/updated tests
- [ ] Added/updated documentation
### Additional Notes
<!-- Anything else we should know when reviewing? -->

View File

@ -0,0 +1,7 @@
### What does this PR do?
Merge v{{.Version}} into master
### Motivation
Be sync.

View File

@ -0,0 +1,7 @@
### What does this PR do?
Prepare release v{{.Version}}.
### Motivation
Create a new release.

25
.gitignore vendored
View File

@ -1,15 +1,18 @@
/dist
gen.go
.idea
.intellij
log
.idea/
.intellij/
*.iml
traefik
traefik.toml
*.test
vendor/
static/
.vscode/
site/
.DS_Store
/dist
/webui/.tmp/
/site/
/docs/site/
/static/
/autogen/
/traefik
/traefik.toml
/traefik.yml
*.log
*.exe
cover.out
vendor/

97
.golangci.toml Normal file
View File

@ -0,0 +1,97 @@
[run]
timeout = "10m"
skip-files = []
skip-dirs = [
"pkg/provider/kubernetes/crd/generated/",
]
[linters-settings]
[linters-settings.govet]
check-shadowing = false
[linters-settings.golint]
min-confidence = 0.0
[linters-settings.gocyclo]
min-complexity = 14.0
[linters-settings.maligned]
suggest-new = true
[linters-settings.goconst]
min-len = 3.0
min-occurrences = 4.0
[linters-settings.misspell]
locale = "US"
[linters-settings.funlen]
lines = 230 # default 60
statements = 120 # default 40
[linters]
enable-all = true
disable = [
"gocyclo", # FIXME must be fixed
"gosec",
"dupl",
"maligned",
"lll",
"unparam",
"prealloc",
"scopelint",
"gochecknoinits",
"gochecknoglobals",
"godox",
"gocognit",
"bodyclose", # Too many false-positive and panics.
"wsl", # Too strict
"stylecheck", # skip because report issues related to some generated files.
]
[issues]
exclude-use-default = false
max-per-linter = 0
max-same-issues = 0
exclude = [
"SA1019: http.CloseNotifier is deprecated: the CloseNotifier interface predates Go's context package. New code should use Request.Context instead.", # FIXME must be fixed
"Error return value of .((os\\.)?std(out|err)\\..*|.*Close|.*Flush|os\\.Remove(All)?|.*printf?|os\\.(Un)?Setenv). is not checked",
"should have a package comment, unless it's in another file for this package",
]
[[issues.exclude-rules]]
path = "(.+)_test.go"
linters = ["goconst", "funlen"]
[[issues.exclude-rules]]
path = "integration/.+_test.go"
text = "Error return value of `cmd\\.Process\\.Kill` is not checked"
[[issues.exclude-rules]]
path = "integration/(consul_catalog_test|constraint_test).go"
text = "Error return value of `(s.deregisterService|s.deregisterAgentService)` is not checked"
[[issues.exclude-rules]]
path = "integration/grpc_test.go"
text = "Error return value of `closer` is not checked"
[[issues.exclude-rules]]
path = "pkg/h2c/h2c.go"
text = "Error return value of `rw.Write` is not checked"
[[issues.exclude-rules]]
path = "pkg/middlewares/recovery/recovery.go"
text = "`logger` can be `github.com/stretchr/testify/assert.TestingT`"
[[issues.exclude-rules]]
path = "pkg/provider/docker/builder_test.go"
text = "(U1000: func )?`(.+)` is unused"
[[issues.exclude-rules]]
path = "pkg/provider/kubernetes/builder_(endpoint|service)_test.go"
text = "(U1000: func )?`(.+)` is unused"
[[issues.exclude-rules]]
path = "pkg/config/parser/.+_test.go"
text = "U1000: field `(foo|fuu)` is unused"
[[issues.exclude-rules]]
path = "pkg/server/service/bufferpool.go"
text = "SA6002: argument should be pointer-like to avoid allocations"
[[issues.exclude-rules]]
path = "cmd/configuration.go"
text = "string `traefik` has (\\d) occurrences, make it a constant"
[[issues.exclude-rules]] # FIXME must be fixed
path = "cmd/context.go"
text = "S1000: should use a simple channel send/receive instead of `select` with a single case"

58
.goreleaser.yml Normal file
View File

@ -0,0 +1,58 @@
project_name: traefik
before:
hooks:
- go generate
builds:
- binary: traefik
main: ./cmd/traefik/traefik.go
env:
- CGO_ENABLED=0
ldflags:
- -s -w -X github.com/containous/traefik/v2/pkg/version.Version={{.Version}} -X github.com/containous/traefik/v2/pkg/version.Codename={{.Env.CODENAME}} -X github.com/containous/traefik/v2/pkg/version.BuildDate={{.Date}}
goos:
- linux
- darwin
- windows
- freebsd
- openbsd
goarch:
- amd64
- 386
- arm
- arm64
- ppc64le
goarm:
- 7
- 6
- 5
ignore:
- goos: darwin
goarch: 386
- goos: openbsd
goarch: arm
- goos: freebsd
goarch: arm
changelog:
skip: true
archives:
- id: traefik
name_template: '{{ .ProjectName }}_v{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
format: tar.gz
format_overrides:
- goos: windows
format: zip
files:
- LICENSE.md
- CHANGELOG.md
checksum:
name_template: "{{ .ProjectName }}_v{{ .Version }}_checksums.txt"
release:
disable: true

View File

@ -1,10 +0,0 @@
- repo: git://github.com/pre-commit/pre-commit-hooks
sha: 44e1753f98b0da305332abe26856c3e621c5c439
hooks:
- id: detect-private-key
- repo: git://github.com/containous/pre-commit-hooks
sha: 35e641b5107671e94102b0ce909648559e568d61
hooks:
- id: goFmt
- id: goLint
- id: goErrcheck

4
.semaphoreci/cleanup.sh Executable file
View File

@ -0,0 +1,4 @@
#!/usr/bin/env bash
set -e
sudo rm -rf static

20
.semaphoreci/golang.sh Executable file
View File

@ -0,0 +1,20 @@
#!/usr/bin/env bash
set -e
curl -O https://dl.google.com/go/go"${GO_VERSION}".linux-amd64.tar.gz
tar -xvf go"${GO_VERSION}".linux-amd64.tar.gz
rm -rf go"${GO_VERSION}".linux-amd64.tar.gz
sudo mkdir -p /usr/local/golang/"${GO_VERSION}"/go
sudo mv go /usr/local/golang/"${GO_VERSION}"/
sudo rm /usr/local/bin/go
sudo chmod +x /usr/local/golang/"${GO_VERSION}"/go/bin/go
sudo ln -s /usr/local/golang/"${GO_VERSION}"/go/bin/go /usr/local/bin/go
export GOROOT="/usr/local/golang/${GO_VERSION}/go"
export GOTOOLDIR="/usr/local/golang/${GO_VERSION}/go/pkg/tool/linux_amd64"
go version

6
.semaphoreci/job1.sh Executable file
View File

@ -0,0 +1,6 @@
#!/usr/bin/env bash
set -e
if [ -n "$SHOULD_TEST" ]; then ci_retry make pull-images; fi
if [ -n "$SHOULD_TEST" ]; then ci_retry make test-integration; fi

8
.semaphoreci/job2.sh Executable file
View File

@ -0,0 +1,8 @@
#!/usr/bin/env bash
set -e
ci_retry make validate
if [ -n "$SHOULD_TEST" ]; then ci_retry make test-unit; fi
if [ -n "$SHOULD_TEST" ]; then make -j"${N_MAKE_JOBS}" crossbinary-default-parallel; fi

35
.semaphoreci/setup.sh Executable file
View File

@ -0,0 +1,35 @@
# For personnal CI
# mv /home/runner/workspace/src/github.com/<username>/ /home/runner/workspace/src/github.com/containous/
# cd /home/runner/workspace/src/github.com/containous/traefik/
for s in apache2 cassandra elasticsearch memcached mysql mongod postgresql sphinxsearch rethinkdb rabbitmq-server redis-server; do sudo service $s stop; done
sudo swapoff -a
sudo dd if=/dev/zero of=/swapfile bs=1M count=3072
sudo mkswap /swapfile
sudo swapon /swapfile
sudo rm -rf /home/runner/.rbenv
sudo rm -rf /usr/local/golang/{1.4.3,1.5.4,1.6.4,1.7.6,1.8.6,1.9.7,1.10.3,1.11}
#export DOCKER_VERSION=18.06.3
source .semaphoreci/vars
if [ -z "${PULL_REQUEST_NUMBER}" ]; then SHOULD_TEST="-*-"; else TEMP_STORAGE=$(curl --silent https://patch-diff.githubusercontent.com/raw/containous/traefik/pull/${PULL_REQUEST_NUMBER}.diff | patch --dry-run -p1 -R || true); fi
echo ${SHOULD_TEST}
if [ -n "$TEMP_STORAGE" ]; then SHOULD_TEST=$(echo "$TEMP_STORAGE" | grep -Ev '(.md|.yaml|.yml)' || :); fi
echo ${TEMP_STORAGE}
echo ${SHOULD_TEST}
#if [ -n "$SHOULD_TEST" ]; then sudo -E apt-get -yq update; fi
#if [ -n "$SHOULD_TEST" ]; then sudo -E apt-get -yq --no-install-suggests --no-install-recommends --force-yes install docker-ce=${DOCKER_VERSION}*; fi
if [ -n "$SHOULD_TEST" ]; then docker version; fi
export GO_VERSION=1.12
if [ -f "./go.mod" ]; then GO_VERSION="$(grep '^go .*' go.mod | awk '{print $2}')"; export GO_VERSION; fi
#if [ "${GO_VERSION}" == '1.13' ]; then export GO_VERSION=1.13rc2; fi
echo "Selected Go version: ${GO_VERSION}"
if [ -f "./.semaphoreci/golang.sh" ]; then ./.semaphoreci/golang.sh; fi
if [ -f "./.semaphoreci/golang.sh" ]; then export GOROOT="/usr/local/golang/${GO_VERSION}/go"; fi
if [ -f "./.semaphoreci/golang.sh" ]; then export GOTOOLDIR="/usr/local/golang/${GO_VERSION}/go/pkg/tool/linux_amd64"; fi
go version
if [ -f "./go.mod" ]; then export GO111MODULE=on; fi
if [ -f "./go.mod" ]; then export GOPROXY=https://proxy.golang.org; fi
if [ -f "./go.mod" ]; then go mod download; fi
df

36
.semaphoreci/vars Normal file
View File

@ -0,0 +1,36 @@
#!/usr/bin/env bash
set -e
export REPO='containous/traefik'
if VERSION=$(git describe --exact-match --abbrev=0 --tags);
then
export VERSION
else
export VERSION=''
fi
export CODENAME=montdor
export N_MAKE_JOBS=2
function ci_retry {
local NRETRY=3
local NSLEEP=5
local n=0
until [ $n -ge $NRETRY ]
do
"$@" && break
n=$((n+1))
echo "${*} failed, attempt ${n}/${NRETRY}"
sleep $NSLEEP
done
[ $n -lt $NRETRY ]
}
export -f ci_retry

View File

@ -1,33 +1,58 @@
branches:
sudo: required
dist: trusty
git:
depth: false
services:
- docker
env:
global:
- secure: btt4r13t09gQlHb6gYrvGC2yGCMMHfnp1Mz1RQedc4Mpf/FfT8aE6xmK2a2i9CCvskjrP0t/BFaS4yxIURjnFRn+ugQIEa0pLspB9UJArW/vgOSpIWM9/OQ/fg8z5XuMxN6Md4DL1/iLypMNSageA1x0TRdt89+D1N1dALpg5XRCXLFbC84TLi0gjlFuib9ibPKzEhLT+anCRJ6iZMzeupDSoaCVbAtJMoDvXw4+4AcRZ1+k4MybBLyCib5boaEOt4pTT88mz4Kk0YaMwPVJyg9Qv36VqyUcPS09Yd95LuyVQ4+tZt8Y1ccbIzULsK+sLM3hLCzxlmlpN3dQBlZJiiRtQde0mgGAKyC0P0A1XjuDTywcsa5edB+fTk1Dsewz9xZ9V0NmMz8t+UNZnaSsAPga9i86jULbXUUwMVSzVRc+Xgx02liB/8qI1xYC9FM6ilStt7rn7mF0k3KbiWhcptgeXjO6Lah9FjEKd5w4MXsdUSTi/86rQaLo+kj+XdaTrXCTulKHyRyQEUj+8V1w0oVz7pcGjePHd7y5oU9ByifVQy6sytuFBfRZvugM5bKHo+i0pcWvixrZS42DrzwxZJsspANOvqSe5ifVbvOkfUppQdCBIwptxV5N1b49XPKU3W/w34QJ8xGmKp3TFA7WwVCztriFHjPgiRpB3EG99Bg=
- REPO: $TRAVIS_REPO_SLUG
- VERSION: $TRAVIS_TAG
- CODENAME: reblochon
matrix:
- DOCKER_VERSION=1.9.1
- DOCKER_VERSION=1.10.1
sudo: required
services:
- docker
install:
- sudo service docker stop
- sudo curl https://get.docker.com/builds/Linux/x86_64/docker-${DOCKER_VERSION} -o /usr/bin/docker
- sudo chmod +x /usr/bin/docker
- sudo service docker start
- sleep 5
- docker version
- pip install --user mkdocs
- pip install --user pymdown-extensions
before_script:
- make validate
- make binary
- REPO=$TRAVIS_REPO_SLUG
- VERSION=$TRAVIS_TAG
- CODENAME=montdor
- GO111MODULE=on
script:
- make test-unit
- make test-integration
- make crossbinary
- make image
after_success:
- make deploy
- make deploy-pr
- echo "Skipping tests... (Tests are executed on SemaphoreCI)"
- if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then make docs; fi
before_deploy:
- >
if ! [ "$BEFORE_DEPLOY_RUN" ]; then
export BEFORE_DEPLOY_RUN=1;
sudo -E apt-get -yq update;
sudo -E apt-get -yq --no-install-suggests --no-install-recommends --force-yes install docker-ce=${DOCKER_VERSION}*;
docker version;
make build-image;
if [ "$TRAVIS_TAG" ]; then
make release-packages;
fi;
curl -sfL https://raw.githubusercontent.com/containous/structor/master/godownloader.sh | bash -s -- -b "${GOPATH}/bin" ${STRUCTOR_VERSION}
structor -o containous -r traefik --dockerfile-url="https://raw.githubusercontent.com/containous/traefik/v1.7/docs.Dockerfile" --menu.js-url="https://raw.githubusercontent.com/containous/structor/master/traefik-menu.js.gotmpl" --rqts-url="https://raw.githubusercontent.com/containous/structor/master/requirements-override.txt" --force-edit-url --exp-branch=master --debug;
fi
deploy:
- provider: releases
api_key: ${GITHUB_TOKEN}
file: dist/traefik*
skip_cleanup: true
file_glob: true
on:
repo: containous/traefik
tags: true
- provider: script
script: sh script/deploy.sh
skip_cleanup: true
on:
repo: containous/traefik
tags: true
- provider: pages
edge: false
github_token: ${GITHUB_TOKEN}
local_dir: site
skip_cleanup: true
on:
repo: containous/traefik
all_branches: true

Binary file not shown.

BIN
.travis/traefiker_rsa.enc Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

51
CODE_OF_CONDUCT.md Normal file
View File

@ -0,0 +1,51 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience,nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community.
Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event.
Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at contact@containo.us
All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances.
The project team is obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/

4
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,4 @@
# Contributing
- https://docs.traefik.io/contributing/submitting-pull-requests/
- https://docs.traefik.io/contributing/submitting-issues/

View File

@ -2,4 +2,5 @@ FROM scratch
COPY script/ca-certificates.crt /etc/ssl/certs/
COPY dist/traefik /
EXPOSE 80
VOLUME ["/tmp"]
ENTRYPOINT ["/traefik"]

View File

@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2016 Containous SAS, Emile Vauge, emile@vauge.com
Copyright (c) 2016-2018 Containous SAS
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

184
Makefile
View File

@ -1,4 +1,22 @@
.PHONY: all
.PHONY: all docs docs-serve
SRCS = $(shell git ls-files '*.go' | grep -v '^vendor/')
TAG_NAME := $(shell git tag -l --contains HEAD)
SHA := $(shell git rev-parse HEAD)
VERSION_GIT := $(if $(TAG_NAME),$(TAG_NAME),$(SHA))
VERSION := $(if $(VERSION),$(VERSION),$(VERSION_GIT))
BIND_DIR := "dist"
GIT_BRANCH := $(subst heads/,,$(shell git rev-parse --abbrev-ref HEAD 2>/dev/null))
TRAEFIK_DEV_IMAGE := traefik-dev$(if $(GIT_BRANCH),:$(subst /,-,$(GIT_BRANCH)))
REPONAME := $(shell echo $(REPO) | tr '[:upper:]' '[:lower:]')
TRAEFIK_IMAGE := $(if $(REPONAME),$(REPONAME),"containous/traefik")
INTEGRATION_OPTS := $(if $(MAKE_DOCKER_HOST),-e "DOCKER_HOST=$(MAKE_DOCKER_HOST)", -e "TEST_CONTAINER=1" -v "/var/run/docker.sock:/var/run/docker.sock")
DOCKER_BUILD_ARGS := $(if $(DOCKER_VERSION), "--build-arg=DOCKER_VERSION=$(DOCKER_VERSION)",)
TRAEFIK_ENVS := \
-e OS_ARCH_ARG \
@ -6,88 +24,128 @@ TRAEFIK_ENVS := \
-e TESTFLAGS \
-e VERBOSE \
-e VERSION \
-e CODENAME
-e CODENAME \
-e TESTDIRS \
-e CI \
-e CONTAINER=DOCKER # Indicator for integration tests that we are running inside a container.
SRCS = $(shell git ls-files '*.go' | grep -v '^external/')
BIND_DIR := "dist"
TRAEFIK_MOUNT := -v "$(CURDIR)/$(BIND_DIR):/go/src/github.com/containous/traefik/$(BIND_DIR)"
DOCKER_RUN_OPTS := $(TRAEFIK_ENVS) $(TRAEFIK_MOUNT) "$(TRAEFIK_DEV_IMAGE)"
DOCKER_RUN_TRAEFIK := docker run $(INTEGRATION_OPTS) -it $(DOCKER_RUN_OPTS)
DOCKER_RUN_TRAEFIK_NOTTY := docker run $(INTEGRATION_OPTS) -i $(DOCKER_RUN_OPTS)
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null)
TRAEFIK_DEV_IMAGE := traefik-dev$(if $(GIT_BRANCH),:$(GIT_BRANCH))
REPONAME := $(shell echo $(REPO) | tr '[:upper:]' '[:lower:]')
TRAEFIK_IMAGE := $(if $(REPONAME),$(REPONAME),"containous/traefik")
INTEGRATION_OPTS := $(if $(MAKE_DOCKER_HOST),-e "DOCKER_HOST=$(MAKE_DOCKER_HOST)", -v "/var/run/docker.sock:/var/run/docker.sock")
DOCKER_BUILD_ARGS := $(if $(DOCKER_VERSION), "--build-arg=DOCKER_VERSION=$(DOCKER_VERSION)",)
DOCKER_RUN_TRAEFIK := docker run $(INTEGRATION_OPTS) -it $(TRAEFIK_ENVS) $(TRAEFIK_MOUNT) "$(TRAEFIK_DEV_IMAGE)"
print-%: ; @echo $*=$($*)
PRE_TARGET ?= build-dev-image
default: binary
all: generate-webui build ## validate all checks, build linux binary, run all tests\ncross non-linux binaries
$(DOCKER_RUN_TRAEFIK) ./script/make.sh
binary: generate-webui build ## build the linux binary
$(DOCKER_RUN_TRAEFIK) ./script/make.sh generate binary
crossbinary: generate-webui build ## cross build the non-linux binaries
$(DOCKER_RUN_TRAEFIK) ./script/make.sh generate crossbinary
test: build ## run the unit and integration tests
$(DOCKER_RUN_TRAEFIK) ./script/make.sh generate test-unit binary test-integration
test-unit: build ## run the unit tests
$(DOCKER_RUN_TRAEFIK) ./script/make.sh generate test-unit
test-integration: build ## run the integration tests
$(DOCKER_RUN_TRAEFIK) ./script/make.sh generate test-integration
validate: build ## validate gofmt, golint and go vet
$(DOCKER_RUN_TRAEFIK) ./script/make.sh validate-gofmt validate-govet validate-golint
build: dist
## Build Dev Docker image
build-dev-image: dist
docker build $(DOCKER_BUILD_ARGS) -t "$(TRAEFIK_DEV_IMAGE)" -f build.Dockerfile .
build-webui:
docker build -t traefik-webui -f webui/Dockerfile webui
build-no-cache: dist
## Build Dev Docker image without cache
build-dev-image-no-cache: dist
docker build --no-cache -t "$(TRAEFIK_DEV_IMAGE)" -f build.Dockerfile .
shell: build ## start a shell inside the build env
$(DOCKER_RUN_TRAEFIK) /bin/bash
image: build ## build a docker traefik image
docker build -t $(TRAEFIK_IMAGE) .
## Create the "dist" directory
dist:
mkdir dist
run-dev:
go generate
go build
./traefik
## Build WebUI Docker image
build-webui-image:
docker build -t traefik-webui -f webui/Dockerfile webui
generate-webui: build-webui
## Generate WebUI
generate-webui: build-webui-image
if [ ! -d "static" ]; then \
mkdir -p static; \
docker run --rm -v "$$PWD/static":'/src/static' traefik-webui gulp; \
docker run --rm -v "$$PWD/static":'/src/static' traefik-webui npm run build:nc; \
docker run --rm -v "$$PWD/static":'/src/static' traefik-webui chown -R $(shell id -u):$(shell id -g) ../static; \
echo 'For more informations show `webui/readme.md`' > $$PWD/static/DONT-EDIT-FILES-IN-THIS-DIRECTORY.md; \
fi
lint:
script/validate-golint
## Build the linux binary
binary: generate-webui $(PRE_TARGET)
$(if $(PRE_TARGET),$(DOCKER_RUN_TRAEFIK)) ./script/make.sh generate binary
## Build the binary for the standard plaforms (linux, darwin, windows)
crossbinary-default: generate-webui build-dev-image
$(DOCKER_RUN_TRAEFIK_NOTTY) ./script/make.sh generate crossbinary-default
## Build the binary for the standard plaforms (linux, darwin, windows) in parallel
crossbinary-default-parallel:
$(MAKE) generate-webui
$(MAKE) build-dev-image crossbinary-default
## Run the unit and integration tests
test: build-dev-image
$(DOCKER_RUN_TRAEFIK) ./script/make.sh generate test-unit binary test-integration
## Run the unit tests
test-unit: $(PRE_TARGET)
$(if $(PRE_TARGET),$(DOCKER_RUN_TRAEFIK)) ./script/make.sh generate test-unit
## Pull all images for integration tests
pull-images:
grep --no-filename -E '^\s+image:' ./integration/resources/compose/*.yml | awk '{print $$2}' | sort | uniq | xargs -P 6 -n 1 docker pull
## Run the integration tests
test-integration: $(PRE_TARGET)
$(if $(PRE_TARGET),$(DOCKER_RUN_TRAEFIK),TEST_CONTAINER=1) ./script/make.sh generate binary test-integration
TEST_HOST=1 ./script/make.sh test-integration
## Validate code and docs
validate-files: $(PRE_TARGET)
$(if $(PRE_TARGET),$(DOCKER_RUN_TRAEFIK)) ./script/make.sh generate validate-lint validate-misspell
bash $(CURDIR)/script/validate-shell-script.sh
## Validate code, docs, and vendor
validate: $(PRE_TARGET)
$(if $(PRE_TARGET),$(DOCKER_RUN_TRAEFIK)) ./script/make.sh generate validate-lint validate-misspell validate-vendor
bash $(CURDIR)/script/validate-shell-script.sh
## Clean up static directory and build a Docker Traefik image
build-image: binary
rm -rf static
docker build -t $(TRAEFIK_IMAGE) .
## Build a Docker Traefik image
build-image-dirty: binary
docker build -t $(TRAEFIK_IMAGE) .
## Start a shell inside the build env
shell: build-dev-image
$(DOCKER_RUN_TRAEFIK) /bin/bash
## Build documentation site
docs:
make -C ./docs docs
## Serve the documentation site localy
docs-serve:
make -C ./docs docs-serve
## Generate CRD clientset
generate-crd:
./script/update-generated-crd-code.sh
## Create packages for the release
release-packages: generate-webui build-dev-image
rm -rf dist
$(DOCKER_RUN_TRAEFIK_NOTTY) goreleaser release --skip-publish
$(DOCKER_RUN_TRAEFIK_NOTTY) tar cfz dist/traefik-${VERSION}.src.tar.gz \
--exclude-vcs \
--exclude .idea \
--exclude .travis \
--exclude .semaphoreci \
--exclude .github \
--exclude dist .
$(DOCKER_RUN_TRAEFIK_NOTTY) chown -R $(shell id -u):$(shell id -g) dist/
## Format the Code
fmt:
gofmt -s -l -w $(SRCS)
deploy:
./script/deploy.sh
deploy-pr:
./script/deploy-pr.sh
help: ## this help
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
run-dev:
go generate
GO111MODULE=on go build ./cmd/traefik
./traefik

213
README.md
View File

@ -1,157 +1,160 @@
<p align="center">
<img src="docs/img/traefik.logo.png" alt="Træfɪk" title="Træfɪk" />
<img src="docs/content/assets/img/traefik.logo.png" alt="Traefik" title="Traefik" />
</p>
[![Build Status](https://travis-ci.org/containous/traefik.svg?branch=master)](https://travis-ci.org/containous/traefik)
[![Build Status SemaphoreCI](https://semaphoreci.com/api/v1/containous/traefik/branches/master/shields_badge.svg)](https://semaphoreci.com/containous/traefik)
[![Docs](https://img.shields.io/badge/docs-current-brightgreen.svg)](https://docs.traefik.io)
[![Go Report Card](https://goreportcard.com/badge/kubernetes/helm)](http://goreportcard.com/report/containous/traefik)
[![Image Layer](https://badge.imagelayers.io/traefik:latest.svg)](https://imagelayers.io/?images=traefik)
[![Go Report Card](https://goreportcard.com/badge/containous/traefik)](http://goreportcard.com/report/containous/traefik)
[![](https://images.microbadger.com/badges/image/traefik.svg)](https://microbadger.com/images/traefik)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/containous/traefik/blob/master/LICENSE.md)
[![Join the chat at https://traefik.herokuapp.com](https://img.shields.io/badge/style-register-green.svg?style=social&label=Slack)](https://traefik.herokuapp.com)
[![Twitter](https://img.shields.io/twitter/follow/traefikproxy.svg?style=social)](https://twitter.com/intent/follow?screen_name=traefikproxy)
[![Join the community support forum at https://community.containo.us/](https://img.shields.io/badge/style-register-green.svg?style=social&label=Discourse)](https://community.containo.us/)
[![Twitter](https://img.shields.io/twitter/follow/traefik.svg?style=social)](https://twitter.com/intent/follow?screen_name=traefik)
Træfɪk is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease.
It supports several backends ([Docker](https://www.docker.com/), [Swarm](https://docs.docker.com/swarm), [Mesos/Marathon](https://mesosphere.github.io/marathon/), [Kubernetes](http://kubernetes.io/), [Consul](https://www.consul.io/), [Etcd](https://coreos.com/etcd/), [Zookeeper](https://zookeeper.apache.org), [BoltDB](https://github.com/boltdb/bolt), Rest API, file...) to manage its configuration automatically and dynamically.
Traefik (pronounced _traffic_) is a modern HTTP reverse proxy and load balancer that makes deploying microservices easy.
Traefik integrates with your existing infrastructure components ([Docker](https://www.docker.com/), [Swarm mode](https://docs.docker.com/engine/swarm/), [Kubernetes](https://kubernetes.io), [Marathon](https://mesosphere.github.io/marathon/), [Consul](https://www.consul.io/), [Etcd](https://coreos.com/etcd/), [Rancher](https://rancher.com), [Amazon ECS](https://aws.amazon.com/ecs), ...) and configures itself automatically and dynamically.
Pointing Traefik at your orchestrator should be the _only_ configuration step you need.
---
. **[Overview](#overview)** .
**[Features](#features)** .
**[Supported backends](#supported-backends)** .
**[Quickstart](#quickstart)** .
**[Web UI](#web-ui)** .
**[Documentation](#documentation)** .
. **[Support](#support)** .
**[Release cycle](#release-cycle)** .
**[Contributing](#contributing)** .
**[Maintainers](#maintainers)** .
**[Credits](#credits)** .
---
:warning: Please be aware that the old configurations for Traefik v1.x are NOT compatible with the v2.x config as of now. If you're running v2, please ensure you are using a [v2 configuration](https://docs.traefik.io/).
## Overview
Imagine that you have deployed a bunch of microservices on your infrastructure. You probably used a service registry (like etcd or consul) and/or an orchestrator (swarm, Mesos/Marathon) to manage all these services.
If you want your users to access some of your microservices from the Internet, you will have to use a reverse proxy and configure it using virtual hosts or prefix paths:
Imagine that you have deployed a bunch of microservices with the help of an orchestrator (like Swarm or Kubernetes) or a service registry (like etcd or consul).
Now you want users to access these microservices, and you need a reverse proxy.
- domain `api.domain.com` will point the microservice `api` in your private network
- path `domain.com/web` will point the microservice `web` in your private network
- domain `backoffice.domain.com` will point the microservices `backoffice` in your private network, load-balancing between your multiple instances
Traditional reverse-proxies require that you configure _each_ route that will connect paths and subdomains to _each_ microservice.
In an environment where you add, remove, kill, upgrade, or scale your services _many_ times a day, the task of keeping the routes up to date becomes tedious.
But a microservices architecture is dynamic... Services are added, removed, killed or upgraded often, eventually several times a day.
**This is when Traefik can help you!**
Traditional reverse-proxies are not natively dynamic. You can't change their configuration and hot-reload easily.
Traefik listens to your service registry/orchestrator API and instantly generates the routes so your microservices are connected to the outside world -- without further intervention from your part.
Here enters Træfɪk.
![Architecture](docs/img/architecture.png)
Træfɪk can listen to your service registry/orchestrator API, and knows each time a microservice is added, removed, killed or upgraded, and can generate its configuration automatically.
Routes to your services will be created instantly.
Run it and forget it!
**Run Traefik and let it do the work for you!**
_(But if you'd rather configure some of your routes manually, Traefik supports that too!)_
![Architecture](docs/content/assets/img/traefik-architecture.png)
## Features
- [It's fast](http://docs.traefik.io/benchmarks)
- No dependency hell, single binary made with go
- Rest API
- Multiple backends supported: Docker, Mesos/Marathon, Consul, Etcd, and more to come
- Watchers for backends, can listen change in backends to apply a new configuration automatically
- Hot-reloading of configuration. No need to restart the process
- Graceful shutdown http connections
- Circuit breakers on backends
- Round Robin, rebalancer load-balancers
- Rest Metrics
- [Tiny](https://imagelayers.io/?images=traefik) [official](https://hub.docker.com/r/_/traefik/) docker image included
- SSL backends support
- SSL frontend support (with SNI)
- Clean AngularJS Web UI
- Websocket support
- HTTP/2 support
- Retry request if network error
- [Let's Encrypt](https://letsencrypt.org) support (Automatic HTTPS with renewal)
## Demo
- Continuously updates its configuration (No restarts!)
- Supports multiple load balancing algorithms
- Provides HTTPS to your microservices by leveraging [Let's Encrypt](https://letsencrypt.org) (wildcard certificates support)
- Circuit breakers, retry
- See the magic through its clean web UI
- Websocket, HTTP/2, GRPC ready
- Provides metrics (Rest, Prometheus, Datadog, Statsd, InfluxDB)
- Keeps access logs (JSON, CLF)
- Fast
- Exposes a Rest API
- Packaged as a single binary file (made with :heart: with go) and available as a [tiny](https://microbadger.com/images/traefik) [official](https://hub.docker.com/r/_/traefik/) docker image
Here is a talk (in french) given by [Emile Vauge](https://github.com/emilevauge) at the [Devoxx France 2016](http://www.devoxx.fr) conference.
You will learn fundamental Træfɪk features and see some demos with Docker, Mesos/Marathon and Lets'Encrypt.
## Supported Backends
[![Traefik Devoxx France](http://img.youtube.com/vi/QvAz9mVx5TI/0.jpg)](http://www.youtube.com/watch?v=QvAz9mVx5TI)
- [Docker](https://docs.traefik.io/providers/docker/) / [Swarm mode](https://docs.traefik.io/providers/docker/)
- [Kubernetes](https://docs.traefik.io/providers/kubernetes-crd/)
- [Marathon](https://docs.traefik.io/providers/marathon/)
- [Rancher](https://docs.traefik.io/providers/rancher/) (Metadata)
- [File](https://docs.traefik.io/configuration/backends/file)
## Quickstart
To get your hands on Traefik, you can use the [5-Minute Quickstart](http://docs.traefik.io/#the-traefik-quickstart-using-docker) in our documentation (you will need Docker).
## Web UI
You can access to a simple HTML frontend of Træfik.
You can access the simple HTML frontend of Traefik.
![Web UI Providers](docs/img/web.frontend.png)
![Web UI Health](docs/img/traefik-health.png)
![Web UI Providers](docs/content/assets/img/webui-dashboard.png)
## Plumbing
## Documentation
- [Oxy](https://github.com/vulcand/oxy): an awesome proxy library made by Mailgun guys
- [Gorilla mux](https://github.com/gorilla/mux): famous request router
- [Negroni](https://github.com/codegangsta/negroni): web middlewares made simple
- [Manners](https://github.com/mailgun/manners): graceful shutdown of http.Handler servers
- [Lego](https://github.com/xenolf/lego): the best [Let's Encrypt](https://letsencrypt.org) library in go
You can find the complete documentation of Traefik v2 at [https://docs.traefik.io](https://docs.traefik.io).
## Quick start
If you are using Traefik v1, you can find the complete documentation at [https://docs.traefik.io/v1.7/](https://docs.traefik.io/v1.7/)
- The simple way: grab the latest binary from the [releases](https://github.com/containous/traefik/releases) page and just run it with the [sample configuration file](https://raw.githubusercontent.com/containous/traefik/master/traefik.sample.toml):
A collection of contributions around Traefik can be found at [https://awesome.traefik.io](https://awesome.traefik.io).
## Support
To get community support, you can:
- join the Traefik community forum: [![Join the chat at https://community.containo.us/](https://img.shields.io/badge/style-register-green.svg?style=social&label=Discourse)](https://community.containo.us/)
If you need commercial support, please contact [Containo.us](https://containo.us) by mail: <mailto:support@containo.us>.
## Download
- Grab the latest binary from the [releases](https://github.com/containous/traefik/releases) page and run it with the [sample configuration file](https://raw.githubusercontent.com/containous/traefik/master/traefik.sample.toml):
```shell
./traefik --configFile=traefik.toml
```
- Use the tiny Docker image:
- Or use the official tiny Docker image and run it with the [sample configuration file](https://raw.githubusercontent.com/containous/traefik/master/traefik.sample.toml):
```shell
docker run -d -p 8080:8080 -p 80:80 -v $PWD/traefik.toml:/etc/traefik/traefik.toml traefik
```
- From sources:
- Or get the sources:
```shell
git clone https://github.com/containous/traefik
```
## Documentation
## Introductory Videos
You can find the complete documentation [here](https://docs.traefik.io).
## Contributing
Please refer to [this section](.github/CONTRIBUTING.md).
## Support
You can join [![Join the chat at https://traefik.herokuapp.com](https://img.shields.io/badge/style-register-green.svg?style=social&label=Slack)](https://traefik.herokuapp.com) to get basic support.
If you prefer a commercial support, please contact [containo.us](https://containo.us) by mail: <mailto:support@containo.us>.
## Træfɪk here and there
These projects use Træfɪk internally. If your company uses Træfɪk, we would be glad to get your feedback :) Contact us on [![Join the chat at https://traefik.herokuapp.com](https://img.shields.io/badge/style-register-green.svg?style=social&label=Slack)](https://traefik.herokuapp.com)
- Project [Mantl](https://mantl.io/) from Cisco
![Web UI Providers](docs/img/mantl-logo.png)
> Mantl is a modern platform for rapidly deploying globally distributed services. A container orchestrator, docker, a network stack, something to pool your logs, something to monitor health, a sprinkle of service discovery and some automation.
- Project [Apollo](http://capgemini.github.io/devops/apollo/) from Cap Gemini
![Web UI Providers](docs/img/apollo-logo.png)
> Apollo is an open source project to aid with building and deploying IAAS and PAAS services. It is particularly geared towards managing containerized applications across multiple hosts, and big data type workloads. Apollo leverages other open source components to provide basic mechanisms for deployment, maintenance, and scaling of infrastructure and applications.
## Partners
[![Zenika](docs/img/zenika.logo.png)](https://zenika.com)
Zenika is one of the leading providers of professional Open Source services and agile methodologies in
Europe. We provide consulting, development, training and support for the worlds leading Open Source
software products.
[![Asteris](docs/img/asteris.logo.png)](https://aster.is)
Founded in 2014, Asteris creates next-generation infrastructure software for the modern datacenter. Asteris writes software that makes it easy for companies to implement continuous delivery and realtime data pipelines. We support the HashiCorp stack, along with Kubernetes, Apache Mesos, Spark and Kafka. We're core committers on mantl.io, consul-cli and mesos-consul.
You can find high level and deep dive videos on [videos.containo.us](https://videos.containo.us)
## Maintainers
- Emile Vauge [@emilevauge](https://github.com/emilevauge)
- Vincent Demeester [@vdemeester](https://github.com/vdemeester)
- Samuel Berthe [@samber](https://github.com/samber)
- Russell Clare [@Russell-IO](https://github.com/Russell-IO)
- Ed Robinson [@errm](https://github.com/errm)
[Information about process and maintainers](docs/content/contributing/maintainers.md)
## Contributing
If you'd like to contribute to the project, refer to the [contributing documentation](CONTRIBUTING.md).
Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md).
By participating in this project, you agree to abide by its terms.
## Release Cycle
- We release a new version (e.g. 1.1.0, 1.2.0, 1.3.0) every other month.
- Release Candidates are available before the release (e.g. 1.1.0-rc1, 1.1.0-rc2, 1.1.0-rc3, 1.1.0-rc4, before 1.1.0)
- Bug-fixes (e.g. 1.1.1, 1.1.2, 1.2.1, 1.2.3) are released as needed (no additional features are delivered in those versions, bug-fixes only)
Each version is supported until the next one is released (e.g. 1.1.x will be supported until 1.2.0 is out)
We use [Semantic Versioning](http://semver.org/)
## Mailing lists
- General announcements, new releases: mail at news+subscribe@traefik.io or on [the online viewer](https://groups.google.com/a/traefik.io/forum/#!forum/news)
- Security announcements: mail at security+subscribe@traefik.io or on [the online viewer](https://groups.google.com/a/traefik.io/forum/#!forum/security).
## Credits
Kudos to [Peka](http://peka.byethost11.com/photoblog/) for his awesome work on the logo ![logo](docs/img/traefik.icon.png)
Kudos to [Peka](http://peka.byethost11.com/photoblog/) for his awesome work on the logo ![logo](docs/content/assets/img/traefik.icon.png).
Traefik's logo is licensed under the Creative Commons 3.0 Attributions license.
Traefik's logo was inspired by the gopher stickers made by Takuya Ueda (https://twitter.com/tenntenn).
The original Go gopher was designed by Renee French (http://reneefrench.blogspot.com/).

View File

@ -1,465 +0,0 @@
package acme
import (
"crypto"
"crypto/rand"
"crypto/rsa"
"crypto/tls"
"crypto/x509"
"encoding/json"
"errors"
"fmt"
log "github.com/Sirupsen/logrus"
"github.com/containous/traefik/safe"
"github.com/xenolf/lego/acme"
"io/ioutil"
fmtlog "log"
"os"
"reflect"
"strings"
"sync"
"time"
)
// Account is used to store lets encrypt registration info
type Account struct {
Email string
Registration *acme.RegistrationResource
PrivateKey []byte
DomainsCertificate DomainsCertificates
}
// GetEmail returns email
func (a Account) GetEmail() string {
return a.Email
}
// GetRegistration returns lets encrypt registration resource
func (a Account) GetRegistration() *acme.RegistrationResource {
return a.Registration
}
// GetPrivateKey returns private key
func (a Account) GetPrivateKey() crypto.PrivateKey {
if privateKey, err := x509.ParsePKCS1PrivateKey(a.PrivateKey); err == nil {
return privateKey
}
log.Errorf("Cannot unmarshall private key %+v", a.PrivateKey)
return nil
}
// Certificate is used to store certificate info
type Certificate struct {
Domain string
CertURL string
CertStableURL string
PrivateKey []byte
Certificate []byte
}
// DomainsCertificates stores a certificate for multiple domains
type DomainsCertificates struct {
Certs []*DomainsCertificate
lock *sync.RWMutex
}
func (dc *DomainsCertificates) init() error {
if dc.lock == nil {
dc.lock = &sync.RWMutex{}
}
dc.lock.Lock()
defer dc.lock.Unlock()
for _, domainsCertificate := range dc.Certs {
tlsCert, err := tls.X509KeyPair(domainsCertificate.Certificate.Certificate, domainsCertificate.Certificate.PrivateKey)
if err != nil {
return err
}
domainsCertificate.tlsCert = &tlsCert
}
return nil
}
func (dc *DomainsCertificates) renewCertificates(acmeCert *Certificate, domain Domain) error {
dc.lock.Lock()
defer dc.lock.Unlock()
for _, domainsCertificate := range dc.Certs {
if reflect.DeepEqual(domain, domainsCertificate.Domains) {
tlsCert, err := tls.X509KeyPair(acmeCert.Certificate, acmeCert.PrivateKey)
if err != nil {
return err
}
domainsCertificate.Certificate = acmeCert
domainsCertificate.tlsCert = &tlsCert
return nil
}
}
return errors.New("Certificate to renew not found for domain " + domain.Main)
}
func (dc *DomainsCertificates) addCertificateForDomains(acmeCert *Certificate, domain Domain) (*DomainsCertificate, error) {
dc.lock.Lock()
defer dc.lock.Unlock()
tlsCert, err := tls.X509KeyPair(acmeCert.Certificate, acmeCert.PrivateKey)
if err != nil {
return nil, err
}
cert := DomainsCertificate{Domains: domain, Certificate: acmeCert, tlsCert: &tlsCert}
dc.Certs = append(dc.Certs, &cert)
return &cert, nil
}
func (dc *DomainsCertificates) getCertificateForDomain(domainToFind string) (*DomainsCertificate, bool) {
dc.lock.RLock()
defer dc.lock.RUnlock()
for _, domainsCertificate := range dc.Certs {
domains := []string{}
domains = append(domains, domainsCertificate.Domains.Main)
domains = append(domains, domainsCertificate.Domains.SANs...)
for _, domain := range domains {
if domain == domainToFind {
return domainsCertificate, true
}
}
}
return nil, false
}
func (dc *DomainsCertificates) exists(domainToFind Domain) (*DomainsCertificate, bool) {
dc.lock.RLock()
defer dc.lock.RUnlock()
for _, domainsCertificate := range dc.Certs {
if reflect.DeepEqual(domainToFind, domainsCertificate.Domains) {
return domainsCertificate, true
}
}
return nil, false
}
// DomainsCertificate contains a certificate for multiple domains
type DomainsCertificate struct {
Domains Domain
Certificate *Certificate
tlsCert *tls.Certificate
}
func (dc *DomainsCertificate) needRenew() bool {
for _, c := range dc.tlsCert.Certificate {
crt, err := x509.ParseCertificate(c)
if err != nil {
// If there's an error, we assume the cert is broken, and needs update
return true
}
// <= 7 days left, renew certificate
if crt.NotAfter.Before(time.Now().Add(time.Duration(24 * 7 * time.Hour))) {
return true
}
}
return false
}
// ACME allows to connect to lets encrypt and retrieve certs
type ACME struct {
Email string `description:"Email address used for registration"`
Domains []Domain `description:"SANs (alternative domains) to each main domain using format: --acme.domains='main.com,san1.com,san2.com' --acme.domains='main.net,san1.net,san2.net'"`
StorageFile string `description:"File used for certificates storage."`
OnDemand bool `description:"Enable on demand certificate. This will request a certificate from Let's Encrypt during the first TLS handshake for a hostname that does not yet have a certificate."`
CAServer string `description:"CA server to use."`
EntryPoint string `description:"Entrypoint to proxy acme challenge to."`
storageLock sync.RWMutex
}
//Domains parse []Domain
type Domains []Domain
//Set []Domain
func (ds *Domains) Set(str string) error {
fargs := func(c rune) bool {
return c == ',' || c == ';'
}
// get function
slice := strings.FieldsFunc(str, fargs)
if len(slice) < 1 {
return fmt.Errorf("Parse error ACME.Domain. Imposible to parse %s", str)
}
d := Domain{
Main: slice[0],
SANs: []string{},
}
if len(slice) > 1 {
d.SANs = slice[1:]
}
*ds = append(*ds, d)
return nil
}
//Get []Domain
func (ds *Domains) Get() interface{} { return []Domain(*ds) }
//String returns []Domain in string
func (ds *Domains) String() string { return fmt.Sprintf("%+v", *ds) }
//SetValue sets []Domain into the parser
func (ds *Domains) SetValue(val interface{}) {
*ds = Domains(val.([]Domain))
}
// Domain holds a domain name with SANs
type Domain struct {
Main string
SANs []string
}
// CreateConfig creates a tls.config from using ACME configuration
func (a *ACME) CreateConfig(tlsConfig *tls.Config, CheckOnDemandDomain func(domain string) bool) error {
acme.Logger = fmtlog.New(ioutil.Discard, "", 0)
if len(a.StorageFile) == 0 {
return errors.New("Empty StorageFile, please provide a filename for certs storage")
}
log.Debugf("Generating default certificate...")
if len(tlsConfig.Certificates) == 0 {
// no certificates in TLS config, so we add a default one
cert, err := generateDefaultCertificate()
if err != nil {
return err
}
tlsConfig.Certificates = append(tlsConfig.Certificates, *cert)
}
var account *Account
var needRegister bool
// if certificates in storage, load them
if fileInfo, err := os.Stat(a.StorageFile); err == nil && fileInfo.Size() != 0 {
log.Infof("Loading ACME certificates...")
// load account
account, err = a.loadAccount(a)
if err != nil {
return err
}
} else {
log.Infof("Generating ACME Account...")
// Create a user. New accounts need an email and private key to start
privateKey, err := rsa.GenerateKey(rand.Reader, 4096)
if err != nil {
return err
}
account = &Account{
Email: a.Email,
PrivateKey: x509.MarshalPKCS1PrivateKey(privateKey),
}
account.DomainsCertificate = DomainsCertificates{Certs: []*DomainsCertificate{}, lock: &sync.RWMutex{}}
needRegister = true
}
client, err := a.buildACMEClient(account)
if err != nil {
return err
}
client.ExcludeChallenges([]acme.Challenge{acme.HTTP01, acme.DNS01})
wrapperChallengeProvider := newWrapperChallengeProvider()
client.SetChallengeProvider(acme.TLSSNI01, wrapperChallengeProvider)
if needRegister {
// New users will need to register; be sure to save it
reg, err := client.Register()
if err != nil {
return err
}
account.Registration = reg
}
// The client has a URL to the current Let's Encrypt Subscriber
// Agreement. The user will need to agree to it.
err = client.AgreeToTOS()
if err != nil {
return err
}
safe.Go(func() {
a.retrieveCertificates(client, account)
if err := a.renewCertificates(client, account); err != nil {
log.Errorf("Error renewing ACME certificate %+v: %s", account, err.Error())
}
})
tlsConfig.GetCertificate = func(clientHello *tls.ClientHelloInfo) (*tls.Certificate, error) {
if challengeCert, ok := wrapperChallengeProvider.getCertificate(clientHello.ServerName); ok {
return challengeCert, nil
}
if domainCert, ok := account.DomainsCertificate.getCertificateForDomain(clientHello.ServerName); ok {
return domainCert.tlsCert, nil
}
if a.OnDemand {
if CheckOnDemandDomain != nil && !CheckOnDemandDomain(clientHello.ServerName) {
return nil, nil
}
return a.loadCertificateOnDemand(client, account, clientHello)
}
return nil, nil
}
ticker := time.NewTicker(24 * time.Hour)
safe.Go(func() {
for {
select {
case <-ticker.C:
if err := a.renewCertificates(client, account); err != nil {
log.Errorf("Error renewing ACME certificate %+v: %s", account, err.Error())
}
}
}
})
return nil
}
func (a *ACME) retrieveCertificates(client *acme.Client, account *Account) {
log.Infof("Retrieving ACME certificates...")
for _, domain := range a.Domains {
// check if cert isn't already loaded
if _, exists := account.DomainsCertificate.exists(domain); !exists {
domains := []string{}
domains = append(domains, domain.Main)
domains = append(domains, domain.SANs...)
certificateResource, err := a.getDomainsCertificates(client, domains)
if err != nil {
log.Errorf("Error getting ACME certificate for domain %s: %s", domains, err.Error())
continue
}
_, err = account.DomainsCertificate.addCertificateForDomains(certificateResource, domain)
if err != nil {
log.Errorf("Error adding ACME certificate for domain %s: %s", domains, err.Error())
continue
}
if err = a.saveAccount(account); err != nil {
log.Errorf("Error Saving ACME account %+v: %s", account, err.Error())
continue
}
}
}
log.Infof("Retrieved ACME certificates")
}
func (a *ACME) renewCertificates(client *acme.Client, account *Account) error {
log.Debugf("Testing certificate renew...")
for _, certificateResource := range account.DomainsCertificate.Certs {
if certificateResource.needRenew() {
log.Debugf("Renewing certificate %+v", certificateResource.Domains)
renewedCert, err := client.RenewCertificate(acme.CertificateResource{
Domain: certificateResource.Certificate.Domain,
CertURL: certificateResource.Certificate.CertURL,
CertStableURL: certificateResource.Certificate.CertStableURL,
PrivateKey: certificateResource.Certificate.PrivateKey,
Certificate: certificateResource.Certificate.Certificate,
}, true)
if err != nil {
log.Errorf("Error renewing certificate: %v", err)
continue
}
log.Debugf("Renewed certificate %+v", certificateResource.Domains)
renewedACMECert := &Certificate{
Domain: renewedCert.Domain,
CertURL: renewedCert.CertURL,
CertStableURL: renewedCert.CertStableURL,
PrivateKey: renewedCert.PrivateKey,
Certificate: renewedCert.Certificate,
}
err = account.DomainsCertificate.renewCertificates(renewedACMECert, certificateResource.Domains)
if err != nil {
log.Errorf("Error renewing certificate: %v", err)
continue
}
if err = a.saveAccount(account); err != nil {
log.Errorf("Error saving ACME account: %v", err)
continue
}
}
}
return nil
}
func (a *ACME) buildACMEClient(Account *Account) (*acme.Client, error) {
caServer := "https://acme-v01.api.letsencrypt.org/directory"
if len(a.CAServer) > 0 {
caServer = a.CAServer
}
client, err := acme.NewClient(caServer, Account, acme.RSA4096)
if err != nil {
return nil, err
}
return client, nil
}
func (a *ACME) loadCertificateOnDemand(client *acme.Client, Account *Account, clientHello *tls.ClientHelloInfo) (*tls.Certificate, error) {
if certificateResource, ok := Account.DomainsCertificate.getCertificateForDomain(clientHello.ServerName); ok {
return certificateResource.tlsCert, nil
}
Certificate, err := a.getDomainsCertificates(client, []string{clientHello.ServerName})
if err != nil {
return nil, err
}
log.Debugf("Got certificate on demand for domain %s", clientHello.ServerName)
cert, err := Account.DomainsCertificate.addCertificateForDomains(Certificate, Domain{Main: clientHello.ServerName})
if err != nil {
return nil, err
}
if err = a.saveAccount(Account); err != nil {
return nil, err
}
return cert.tlsCert, nil
}
func (a *ACME) loadAccount(acmeConfig *ACME) (*Account, error) {
a.storageLock.RLock()
defer a.storageLock.RUnlock()
Account := Account{
DomainsCertificate: DomainsCertificates{},
}
file, err := ioutil.ReadFile(acmeConfig.StorageFile)
if err != nil {
return nil, err
}
if err := json.Unmarshal(file, &Account); err != nil {
return nil, err
}
err = Account.DomainsCertificate.init()
if err != nil {
return nil, err
}
log.Infof("Loaded ACME config from storage %s", acmeConfig.StorageFile)
return &Account, nil
}
func (a *ACME) saveAccount(Account *Account) error {
a.storageLock.Lock()
defer a.storageLock.Unlock()
// write account to file
data, err := json.MarshalIndent(Account, "", " ")
if err != nil {
return err
}
return ioutil.WriteFile(a.StorageFile, data, 0644)
}
func (a *ACME) getDomainsCertificates(client *acme.Client, domains []string) (*Certificate, error) {
log.Debugf("Loading ACME certificates %s...", domains)
bundle := true
certificate, failures := client.ObtainCertificate(domains, bundle, nil)
if len(failures) > 0 {
log.Error(failures)
return nil, fmt.Errorf("Cannot obtain certificates %s+v", failures)
}
log.Debugf("Loaded ACME certificates %s", domains)
return &Certificate{
Domain: certificate.Domain,
CertURL: certificate.CertURL,
CertStableURL: certificate.CertStableURL,
PrivateKey: certificate.PrivateKey,
Certificate: certificate.Certificate,
}, nil
}

View File

@ -1,258 +0,0 @@
package acme
import (
"reflect"
"sync"
"testing"
)
func TestDomainsSet(t *testing.T) {
checkMap := map[string]Domains{
"": {},
"foo.com": {Domain{Main: "foo.com", SANs: []string{}}},
"foo.com,bar.net": {Domain{Main: "foo.com", SANs: []string{"bar.net"}}},
"foo.com,bar1.net,bar2.net,bar3.net": {Domain{Main: "foo.com", SANs: []string{"bar1.net", "bar2.net", "bar3.net"}}},
}
for in, check := range checkMap {
ds := Domains{}
ds.Set(in)
if !reflect.DeepEqual(check, ds) {
t.Errorf("Expected %+v\nGot %+v", check, ds)
}
}
}
func TestDomainsSetAppend(t *testing.T) {
inSlice := []string{
"",
"foo1.com",
"foo2.com,bar.net",
"foo3.com,bar1.net,bar2.net,bar3.net",
}
checkSlice := []Domains{
{},
{
Domain{
Main: "foo1.com",
SANs: []string{}}},
{
Domain{
Main: "foo1.com",
SANs: []string{}},
Domain{
Main: "foo2.com",
SANs: []string{"bar.net"}}},
{
Domain{
Main: "foo1.com",
SANs: []string{}},
Domain{
Main: "foo2.com",
SANs: []string{"bar.net"}},
Domain{Main: "foo3.com",
SANs: []string{"bar1.net", "bar2.net", "bar3.net"}}},
}
ds := Domains{}
for i, in := range inSlice {
ds.Set(in)
if !reflect.DeepEqual(checkSlice[i], ds) {
t.Errorf("Expected %s %+v\nGot %+v", in, checkSlice[i], ds)
}
}
}
func TestCertificatesRenew(t *testing.T) {
domainsCertificates := DomainsCertificates{
lock: &sync.RWMutex{},
Certs: []*DomainsCertificate{
{
Domains: Domain{
Main: "foo1.com",
SANs: []string{}},
Certificate: &Certificate{
Domain: "foo1.com",
CertURL: "url",
CertStableURL: "url",
PrivateKey: []byte(`
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA6OqHGdwGy20+3Jcz9IgfN4IR322X2Hhwk6n8Hss/Ws7FeTZo
PvXW8uHeI1bmQJsy9C6xo3odzO64o7prgMZl5eDw5fk1mmUij3J3nM3gwtc/Cc+8
ADXGldauASdHBFTRvWQge0Pv/Q5U0fyL2VCHoR9mGv4CQ7nRNKPus0vYJMbXoTbO
8z4sIbNz3Ov9o/HGMRb8D0rNPTMdC62tHSbiO1UoxLXr9dcBOGt786AsiRTJ8bq9
GCVQgzd0Wftb8z6ddW2YuWrmExlkHdfC4oG0D5SU1QB4ldPyl7fhVWlfHwC1NX+c
RnDSEeYkAcdvvIekdM/yH+z62XhwToM0E9TCzwIDAQABAoIBACq3EC3S50AZeeTU
qgeXizoP1Z1HKQjfFa5PB1jSZ30M3LRdIQMi7NfASo/qmPGSROb5RUS42YxC34PP
ZXXJbNiaxzM13/m/wHXURVFxhF3XQc1X1p+nPRMvutulS2Xk9E4qdbaFgBbFsRKN
oUwqc6U97+jVWq72/gIManNhXnNn1n1SRLBEkn+WStMPn6ZvWRlpRMjhy0c1mpwg
u6em92HvMvfKPQ60naUhdKp+q0rsLp2YKWjiytos9ENSYI5gAGLIDhKeqiD8f92E
4FGPmNRipwxCE2SSvZFlM26tRloWVcBPktRN79hUejE8iopiqVS0+4h/phZ2wG0D
18cqVpECgYEA+qmagnhm0LLvwVkUN0B2nRARQEFinZDM4Hgiv823bQvc9I8dVTqJ
aIQm5y4Y5UA3xmyDsRoO7GUdd0oVeh9GwTONzMRCOny/mOuOC51wXPhKHhI0O22u
sfbOHszl+bxl6ZQMUJa2/I8YIWBLU5P+fTgrfNwBEgZ3YPwUV5tyHNcCgYEA7eAv
pjQkbJNRq/fv/67sojN7N9QoH84egN5cZFh5d8PJomnsvy5JDV4WaG1G6mJpqjdD
YRVdFw5oZ4L8yCVdCeK9op896Uy51jqvfSe3+uKmNqE0qDHgaLubQNI8yYc5sacW
fYJBmDR6rNIeE7Q2240w3CdKfREuXdDnhyTTEskCgYBFeAnFTP8Zqe2+hSSQJ4J4
BwLw7u4Yww+0yja/N5E1XItRD/TOMRnx6GYrvd/ScVjD2kEpLRKju2ZOMC8BmHdw
hgwvitjcAsTK6cWFPI3uhjVsXhkxuzUmR0Naz+iQrQEFmi1LjGmMV1AVt+1IbYSj
SZTr1sFJMJeXPmWY3hDjIwKBgQC4H9fCJoorIL0PB5NVreishHzT8fw84ibqSTPq
2DDtazcf6C3AresN1c4ydqN1uUdg4fXdp9OujRBzTwirQ4CIrmFrBye89g7CrBo6
Hgxivh06G/3OUw0JBG5f9lvnAiy+Pj9CVxi+36A1NU7ioZP0zY0MW71koW/qXlFY
YkCfQQKBgBqwND/c3mPg7iY4RMQ9XjrKfV9o6FMzA51lAinjujHlNgsBmqiR951P
NA3kWZQ73D3IxeLEMaGHpvS7andPN3Z2qPhe+FbJKcF6ZZNTrFQkh/Fpz3wmYPo1
GIL4+09kNgMRWapaROqI+/3+qJQ+GVJZIPfYC0poJOO6vYqifWe8
-----END RSA PRIVATE KEY-----
`),
Certificate: []byte(`
-----BEGIN CERTIFICATE-----
MIIC+TCCAeGgAwIBAgIJAK78ukR/Qu4rMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
BAMMCGZvbzEuY29tMB4XDTE2MDYxOTIyMDMyM1oXDTI2MDYxNzIyMDMyM1owEzER
MA8GA1UEAwwIZm9vMS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQDo6ocZ3AbLbT7clzP0iB83ghHfbZfYeHCTqfweyz9azsV5Nmg+9dby4d4jVuZA
mzL0LrGjeh3M7rijumuAxmXl4PDl+TWaZSKPcneczeDC1z8Jz7wANcaV1q4BJ0cE
VNG9ZCB7Q+/9DlTR/IvZUIehH2Ya/gJDudE0o+6zS9gkxtehNs7zPiwhs3Pc6/2j
8cYxFvwPSs09Mx0Lra0dJuI7VSjEtev11wE4a3vzoCyJFMnxur0YJVCDN3RZ+1vz
Pp11bZi5auYTGWQd18LigbQPlJTVAHiV0/KXt+FVaV8fALU1f5xGcNIR5iQBx2+8
h6R0z/If7PrZeHBOgzQT1MLPAgMBAAGjUDBOMB0GA1UdDgQWBBRFLH1wF6BT51uq
yWNqBnCrPFIglzAfBgNVHSMEGDAWgBRFLH1wF6BT51uqyWNqBnCrPFIglzAMBgNV
HRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAr7aH3Db6TeAZkg4Zd7SoF2q11
erzv552PgQUyezMZcRBo2q1ekmUYyy2600CBiYg51G+8oUqjJKiKnBuaqbMX7pFa
FsL7uToZCGA57cBaVejeB+p24P5bxoJGKCMeZcEBe5N93Tqu5WBxNEX7lQUo6TSs
gSN2Olf3/grNKt5V4BduSIQZ+YHlPUWLTaz5B1MXKSUqjmabARP9lhjO14u9USvi
dMBDFskJySQ6SUfz3fyoXELoDOVbRZETuSodpw+aFCbEtbcQCLT3A0FG+BEPayZH
tt19zKUlr6e+YFpyjQPGZ7ZkY7iMgHEkhKrXx2DiZ1+cif3X1xfXWQr0S5+E
-----END CERTIFICATE-----
`),
},
},
{
Domains: Domain{
Main: "foo2.com",
SANs: []string{}},
Certificate: &Certificate{
Domain: "foo2.com",
CertURL: "url",
CertStableURL: "url",
PrivateKey: []byte(`
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA7rIVuSrZ3FfYXhR3qaWwfVcgiqKS//yXFzNqkJS6mz9nRCNT
lPawvrCFIRKdR7UO7xD7A5VTcbrGOAaTvrEaH7mB/4FGL+gN4AiTbVFpKXngAYEW
A3//zeBZ7XUSWaQ+CNC+l796JeoDvQD++KwCke4rVD1pGN1hpVEeGhwzyKOYPKLo
4+AGVe1LFWw4U/v8Iil1/gBBehZBILuhASpXy4W132LJPl76/EbGqh0nVz2UlFqU
HRxO+2U2ba4YIpI+0/VOQ9Cq/TzHSUdTTLfBHE/Qb+aDBfptMWTRvAngLqUglOcZ
Fi6SAljxEkJO6z6btmoVUWsoKBpbIHDC5++dZwIDAQABAoIBAAD8rYhRfAskNdnV
vdTuwXcTOCg6md8DHWDULpmgc9EWhwfKGZthFcQEGNjVKd9VCVXFvTP7lxe+TPmI
VW4Rb2k4LChxUWf7TqthfbKTBptMTLfU39Ft4xHn3pdTx5qlSjhhHJimCwxDFnbe
nS9MDsqpsHYtttSKfc/gMP6spS4sNPZ/r9zseT3eWkBEhn+FQABxJiuPcQ7q7S+Q
uOghmr7f3FeYvizQOhBtULsLrK/hsmQIIB4amS1QlpNWKbIoiUPNPjCA5PVQyAER
waYjuc7imBbeD98L/z8bRTlEskSKjtPSEXGVHa9OYdBU+02Ci6TjKztUp6Ho7JE9
tcHj+eECgYEA+9Ntv6RqIdpT/4/52JYiR+pOem3U8tweCOmUqm/p/AWyfAJTykqt
cJ8RcK1MfM+uoa5Sjm8hIcA2XPVEqH2J50PC4w04Q3xtfsz3xs7KJWXQCoha8D0D
ZIFNroEPnld0qOuJzpIIteXTrCLhSu17ZhN+Wk+5gJ7Ewu/QMM5OPjECgYEA8qbw
zfwSjE6jkrqO70jzqSxgi2yjo0vMqv+BNBuhxhDTBXnKQI1KsHoiS0FkSLSJ9+DS
CT3WEescD2Lumdm2s9HXvaMmnDSKBY58NqCGsNzZifSgmj1H/yS9FX8RXfSjXcxq
RDvTbD52/HeaCiOxHZx8JjmJEb+ZKJC4MDvjtxcCgYBM516GvgEjYXdxfliAiijh
6W4Z+Vyk5g/ODPc3rYG5U0wUjuljx7Z7xDghPusy2oGsIn5XvRxTIE35yXU0N1Jb
69eiWzEpeuA9bv7kGdal4RfNf6K15wwYL1y3w/YvFuorg/LLwNEkK5Ge6e//X9Ll
c2KM1fgCjXntRitAHGDMoQKBgDnkgodioLpA+N3FDN0iNqAiKlaZcOFA8G/LzfO0
tAAhe3dO+2YzT6KTQSNbUqXWDSTKytHRowVbZrJ1FCA4xVJZunNQPaH/Fv8EY7ZU
zk3cIzq61qZ2AHtrNIGwc2BLQb7bSm9FJsgojxLlJidNJLC/6Q7lo0JMyCnZfVhk
sYu5AoGAZt/MfyFTKm674UddSNgGEt86PyVYbLMnRoAXOaNB38AE12kaYHPil1tL
FnL8OQLpbX5Qo2JGgeZRlpMJ4Jxw2zzvUKr/n+6khaLxHmtX48hMu2QM7ZvnkZCs
Kkgz6v+Wcqm94ugtl3HSm+u9xZzVQxN6gu/jZQv3VpQiAZHjPYc=
-----END RSA PRIVATE KEY-----
`),
Certificate: []byte(`
-----BEGIN CERTIFICATE-----
MIIC+TCCAeGgAwIBAgIJAK25/Z9Jz6IBMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
BAMMCGZvbzIuY29tMB4XDTE2MDYyMDA5MzUyNloXDTI2MDYxODA5MzUyNlowEzER
MA8GA1UEAwwIZm9vMi5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQDushW5KtncV9heFHeppbB9VyCKopL//JcXM2qQlLqbP2dEI1OU9rC+sIUhEp1H
tQ7vEPsDlVNxusY4BpO+sRofuYH/gUYv6A3gCJNtUWkpeeABgRYDf//N4FntdRJZ
pD4I0L6Xv3ol6gO9AP74rAKR7itUPWkY3WGlUR4aHDPIo5g8oujj4AZV7UsVbDhT
+/wiKXX+AEF6FkEgu6EBKlfLhbXfYsk+Xvr8RsaqHSdXPZSUWpQdHE77ZTZtrhgi
kj7T9U5D0Kr9PMdJR1NMt8EcT9Bv5oMF+m0xZNG8CeAupSCU5xkWLpICWPESQk7r
Ppu2ahVRaygoGlsgcMLn751nAgMBAAGjUDBOMB0GA1UdDgQWBBQ6FZWqB9qI4NN+
2jFY6xH8uoUTnTAfBgNVHSMEGDAWgBQ6FZWqB9qI4NN+2jFY6xH8uoUTnTAMBgNV
HRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQCRhuf2dQhIEOmSOGgtRELF2wB6
NWXt0lCty9x4u+zCvITXV8Z0C34VQGencO3H2bgyC3ZxNpPuwZfEc2Pxe8W6bDc/
OyLckk9WLo00Tnr2t7rDOeTjEGuhXFZkhIbJbKdAH8cEXrxKR8UXWtZgTv/b8Hv/
g6tbeH6TzBsdMoFtUCsyWxygYwnLU+quuYvE2s9FiCegf2mdYTCh/R5J5n/51gfB
uC+NakKMfaCvNg3mOAFSYC/0r0YcKM/5ldKGTKTCVJAMhnmBnyRc/70rKkVRFy2g
iIjUFs+9aAgfCiL0WlyyXYAtIev2gw4FHUVlcT/xKks+x8Kgj6e5LTIrRRwW
-----END CERTIFICATE-----
`),
},
},
},
}
newCertificate := &Certificate{
Domain: "foo1.com",
CertURL: "url",
CertStableURL: "url",
PrivateKey: []byte(`
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA1OdSuXK2zeSLf0UqgrI4pjkpaqhra++pnda4Li4jXo151svi
Sn7DSynJOoq1jbfRJAoyDhxsBC4S4RuD54U5elJ4wLPZXmHRsvb+NwiHs9VmDqwu
It21btuqeNMebkab5cnDnC6KKufMhXRcRAlluYXyCkQe/+N+LlUQd6Js34TixMpk
eQOX4/OVrokSyVRnIq4u+o0Ufe7z5+41WVH63tcy7Hwi7244aLUzZCs+QQa2Dw6f
qEwjbonr974fM68UxDjTZEQy9u24yDzajhDBp1OTAAklh7U+li3g9dSyNVBFXqEu
nW2fyBvLqeJOSTihqfcrACB/YYhYOX94vMXELQIDAQABAoIBAFYK3t3fxI1VTiMz
WsjTKh3TgC+AvVkz1ILbojfXoae22YS7hUrCDD82NgMYx+LsZPOBw1T8m5Lc4/hh
3F8W8nHDHtYSWUjRk6QWOgsXwXAmUEahw0uH+qlA0ZZfDC9ZDexCLHHURTat03Qj
4J4GhjwCLB2GBlk4IWisLCmNVR7HokrpfIw4oM1aB5E21Tl7zh/x7ikRijEkUsKw
7YhaMeLJqBnMnAdV63hhF7FaDRjl8P2s/3octz/6pqDIABrDrUW3KAkNYCZIWdhF
Kk0wRMbZ/WrYT9GIGoJe7coQC7ezTrlrEkAFEIPGHCLkgXB/0TyuSy0yY59e4zmi
VvHoWUECgYEA/rOL2KJ/p+TZW7+YbsUzs0+F+M+G6UCr0nWfYN9MKmNtmns3eLDG
+pIpBMc5mjqeJR/sCCdkD8OqHC202Y8e4sr0pKSBeBofh2BmXtpyu3QQ50Pa63RS
SK6mYUrFqPmFFDbNGpFI4sIeI+Vf6hm96FQPnyPtUTGqk39m0RbWM/UCgYEA1f04
Nf3wbqwqIHZjYpPmymfjleyMn3hGUjpi7pmI6inXGMk3nkeG1cbOhnfPxL5BWD12
3RqHI2B4Z4r0BMyjctDNb1TxhMIpm5+PKm5KeeKfoYA85IS0mEeq6VdMm3mL1x/O
3LYvcUvAEVf6pWX/+ZFLMudqhF3jbTrdNOC6ZFkCgYBKpEeJdyW+CD0CvEVpwPUD
yXxTjE3XMZKpHLtWYlop2fWW3iFFh1jouci3k8L3xdHuw0oioZibXhYOJ/7l+yFs
CVpknakrj0xKGiAmEBKriLojbClN80rh7fzoakc+29D6OY0mCgm4GndGwcO4EU8s
NOZXFupHbyy0CRQSloSzuQKBgQC1Z/MtIlefGuijmHlsakGuuR+gS2ZzEj1bHBAe
gZ4mFM46PuqdjblqpR0TtaI3AarXqVOI4SJLBU9NR+jR4MF3Zjeh9/q/NvKa8Usn
B1Svu0TkXphAiZenuKnVIqLY8tNvzZFKXlAd1b+/dDwR10SHR3rebnxINmfEg7Bf
UVvyEQKBgAEjI5O6LSkLNpbVn1l2IO8u8D2RkFqs/Sbx78uFta3f9Gddzb4wMnt3
jVzymghCLp4Qf1ump/zC5bcQ8L97qmnjJ+H8X9HwmkqetuI362JNnz+12YKVDIWi
wI7SJ8BwDqYMrLw6/nE+degn39KedGDH8gz5cZcdlKTZLjbuBOfU
-----END RSA PRIVATE KEY-----
`),
Certificate: []byte(`
-----BEGIN CERTIFICATE-----
MIIC+TCCAeGgAwIBAgIJAPQiOiQcwYaRMA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV
BAMMCGZvbzEuY29tMB4XDTE2MDYxOTIyMTE1NFoXDTI2MDYxNzIyMTE1NFowEzER
MA8GA1UEAwwIZm9vMS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQDU51K5crbN5It/RSqCsjimOSlqqGtr76md1rguLiNejXnWy+JKfsNLKck6irWN
t9EkCjIOHGwELhLhG4PnhTl6UnjAs9leYdGy9v43CIez1WYOrC4i3bVu26p40x5u
RpvlycOcLooq58yFdFxECWW5hfIKRB7/434uVRB3omzfhOLEymR5A5fj85WuiRLJ
VGciri76jRR97vPn7jVZUfre1zLsfCLvbjhotTNkKz5BBrYPDp+oTCNuiev3vh8z
rxTEONNkRDL27bjIPNqOEMGnU5MACSWHtT6WLeD11LI1UEVeoS6dbZ/IG8up4k5J
OKGp9ysAIH9hiFg5f3i8xcQtAgMBAAGjUDBOMB0GA1UdDgQWBBQPfkS5ehpstmSb
8CGJE7GxSCxl2DAfBgNVHSMEGDAWgBQPfkS5ehpstmSb8CGJE7GxSCxl2DAMBgNV
HRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQA99A+itS9ImdGRGgHZ5fSusiEq
wkK5XxGyagL1S0f3VM8e78VabSvC0o/xdD7DHVg6Az8FWxkkksH6Yd7IKfZZUzvs
kXQhlOwWpxgmguSmAs4uZTymIoMFRVj3nG664BcXkKu4Yd9UXKNOWP59zgvrCJMM
oIsmYiq5u0MFpM31BwfmmW3erqIcfBI9OJrmr1XDzlykPZNWtUSSfVuNQ8d4bim9
XH8RfVLeFbqDydSTCHIFvYthH/ESbpRCiGJHoJ8QLfOkhD1k2fI0oJZn5RVtG2W8
bZME3gHPYCk1QFZUptriMCJ5fMjCgxeOTR+FAkstb/lTRuCc4UyILJguIMar
-----END CERTIFICATE-----
`),
}
err := domainsCertificates.renewCertificates(
newCertificate,
Domain{
Main: "foo1.com",
SANs: []string{}})
if err != nil {
t.Errorf("Error in renewCertificates :%v", err)
}
if len(domainsCertificates.Certs) != 2 {
t.Errorf("Expected domainsCertificates length %d %+v\nGot %+v", 2, domainsCertificates.Certs, len(domainsCertificates.Certs))
}
if !reflect.DeepEqual(domainsCertificates.Certs[0].Certificate, newCertificate) {
t.Errorf("Expected new certificate %+v \nGot %+v", newCertificate, domainsCertificates.Certs[0].Certificate)
}
}

View File

@ -1,56 +0,0 @@
package acme
import (
"crypto/tls"
"sync"
"crypto/x509"
"github.com/xenolf/lego/acme"
)
type wrapperChallengeProvider struct {
challengeCerts map[string]*tls.Certificate
lock sync.RWMutex
}
func newWrapperChallengeProvider() *wrapperChallengeProvider {
return &wrapperChallengeProvider{
challengeCerts: map[string]*tls.Certificate{},
}
}
func (c *wrapperChallengeProvider) getCertificate(domain string) (cert *tls.Certificate, exists bool) {
c.lock.RLock()
defer c.lock.RUnlock()
if cert, ok := c.challengeCerts[domain]; ok {
return cert, true
}
return nil, false
}
func (c *wrapperChallengeProvider) Present(domain, token, keyAuth string) error {
cert, _, err := acme.TLSSNI01ChallengeCert(keyAuth)
if err != nil {
return err
}
cert.Leaf, err = x509.ParseCertificate(cert.Certificate[0])
if err != nil {
return err
}
c.lock.Lock()
defer c.lock.Unlock()
for i := range cert.Leaf.DNSNames {
c.challengeCerts[cert.Leaf.DNSNames[i]] = &cert
}
return nil
}
func (c *wrapperChallengeProvider) CleanUp(domain, token, keyAuth string) error {
c.lock.Lock()
defer c.lock.Unlock()
delete(c.challengeCerts, domain)
return nil
}

View File

@ -1,78 +0,0 @@
package acme
import (
"crypto/rand"
"crypto/rsa"
"crypto/sha256"
"crypto/tls"
"crypto/x509"
"crypto/x509/pkix"
"encoding/hex"
"encoding/pem"
"fmt"
"math/big"
"time"
)
func generateDefaultCertificate() (*tls.Certificate, error) {
rsaPrivKey, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
return nil, err
}
rsaPrivPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(rsaPrivKey)})
randomBytes := make([]byte, 100)
_, err = rand.Read(randomBytes)
if err != nil {
return nil, err
}
zBytes := sha256.Sum256(randomBytes)
z := hex.EncodeToString(zBytes[:sha256.Size])
domain := fmt.Sprintf("%s.%s.traefik.default", z[:32], z[32:])
tempCertPEM, err := generatePemCert(rsaPrivKey, domain)
if err != nil {
return nil, err
}
certificate, err := tls.X509KeyPair(tempCertPEM, rsaPrivPEM)
if err != nil {
return nil, err
}
return &certificate, nil
}
func generatePemCert(privKey *rsa.PrivateKey, domain string) ([]byte, error) {
derBytes, err := generateDerCert(privKey, time.Time{}, domain)
if err != nil {
return nil, err
}
return pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: derBytes}), nil
}
func generateDerCert(privKey *rsa.PrivateKey, expiration time.Time, domain string) ([]byte, error) {
serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)
serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
if err != nil {
return nil, err
}
if expiration.IsZero() {
expiration = time.Now().Add(365)
}
template := x509.Certificate{
SerialNumber: serialNumber,
Subject: pkix.Name{
CommonName: "TRAEFIK DEFAULT CERT",
},
NotBefore: time.Now(),
NotAfter: expiration,
KeyUsage: x509.KeyUsageKeyEncipherment,
BasicConstraintsValid: true,
DNSNames: []string{domain},
}
return x509.CreateCertificate(rand.Reader, &template, &template, &privKey.PublicKey, privKey)
}

View File

@ -1,34 +0,0 @@
/*
Copyright
*/
package main
import (
"net/http"
log "github.com/Sirupsen/logrus"
)
// OxyLogger implements oxy Logger interface with logrus.
type OxyLogger struct {
}
// Infof logs specified string as Debug level in logrus.
func (oxylogger *OxyLogger) Infof(format string, args ...interface{}) {
log.Debugf(format, args...)
}
// Warningf logs specified string as Warning level in logrus.
func (oxylogger *OxyLogger) Warningf(format string, args ...interface{}) {
log.Warningf(format, args...)
}
// Errorf logs specified string as Warningf level in logrus.
func (oxylogger *OxyLogger) Errorf(format string, args ...interface{}) {
log.Warningf(format, args...)
}
func notFoundHandler(w http.ResponseWriter, r *http.Request) {
http.NotFound(w, r)
//templatesRenderer.HTML(w, http.StatusNotFound, "notFound", nil)
}

View File

@ -1,25 +1,37 @@
FROM golang:1.6.2
FROM golang:1.13-alpine
RUN go get github.com/Masterminds/glide \
&& go get github.com/jteeuwen/go-bindata/... \
&& go get github.com/golang/lint/golint \
&& go get github.com/kisielk/errcheck
RUN apk --update upgrade \
&& apk --no-cache --no-progress add git mercurial bash gcc musl-dev curl tar ca-certificates tzdata \
&& update-ca-certificates \
&& rm -rf /var/cache/apk/*
# Which docker version to test on
ARG DOCKER_VERSION=1.10.1
ARG DOCKER_VERSION=18.09.7
# Download docker
RUN set -ex; \
curl https://get.docker.com/builds/Linux/x86_64/docker-${DOCKER_VERSION} -o /usr/local/bin/docker-${DOCKER_VERSION}; \
chmod +x /usr/local/bin/docker-${DOCKER_VERSION}
RUN mkdir -p /usr/local/bin \
&& curl -fL https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz \
| tar -xzC /usr/local/bin --transform 's#^.+/##x'
# Set the default Docker to be run
RUN ln -s /usr/local/bin/docker-${DOCKER_VERSION} /usr/local/bin/docker
# Download go-bindata binary to bin folder in $GOPATH
RUN mkdir -p /usr/local/bin \
&& curl -fsSL -o /usr/local/bin/go-bindata https://github.com/containous/go-bindata/releases/download/v1.0.0/go-bindata \
&& chmod +x /usr/local/bin/go-bindata
# Download golangci-lint binary to bin folder in $GOPATH
RUN curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | bash -s -- -b $GOPATH/bin v1.20.0
# Download golangci-lint and misspell binary to bin folder in $GOPATH
RUN GO111MODULE=off go get github.com/client9/misspell/cmd/misspell
# Download goreleaser binary to bin folder in $GOPATH
RUN curl -sfL https://install.goreleaser.com/github.com/goreleaser/goreleaser.sh | sh
WORKDIR /go/src/github.com/containous/traefik
COPY glide.yaml glide.yaml
COPY glide.lock glide.lock
RUN glide install
# Download go modules
COPY go.mod .
COPY go.sum .
RUN GO111MODULE=on GOPROXY=https://proxy.golang.org go mod download
COPY . /go/src/github.com/containous/traefik
COPY . /go/src/github.com/containous/traefik

View File

@ -1,36 +0,0 @@
machine:
pre:
- sudo docker -d -e lxc -s btrfs -H tcp://0.0.0.0:2375:
background: true
- curl --retry 15 --retry-delay 3 -v http://172.17.42.1:2375/version
environment:
REPO: $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME
DOCKER_HOST: tcp://172.17.42.1:2375
MAKE_DOCKER_HOST: $DOCKER_HOST
VERSION: v1.0.alpha.$CIRCLE_BUILD_NUM
dependencies:
pre:
- docker version
- go get github.com/tcnksm/ghr
- make validate
override:
- make binary
test:
override:
- make test-unit
- make test-integration
post:
- make crossbinary
- make image
deployment:
hub:
branch: master
commands:
- ghr -t $GITHUB_TOKEN -u $CIRCLE_PROJECT_USERNAME -r $CIRCLE_PROJECT_REPONAME --prerelease ${VERSION} dist/
- docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS
- docker push ${REPO,,}:latest
- docker tag ${REPO,,}:latest ${REPO,,}:${VERSION}
- docker push ${REPO,,}:${VERSION}

34
cmd/configuration.go Normal file
View File

@ -0,0 +1,34 @@
package cmd
import (
"time"
"github.com/containous/traefik/v2/pkg/config/static"
"github.com/containous/traefik/v2/pkg/types"
)
// TraefikCmdConfiguration wraps the static configuration and extra parameters.
type TraefikCmdConfiguration struct {
static.Configuration `export:"true"`
// ConfigFile is the path to the configuration file.
ConfigFile string `description:"Configuration file to use. If specified all other flags are ignored." export:"true"`
}
// NewTraefikConfiguration creates a TraefikCmdConfiguration with default values.
func NewTraefikConfiguration() *TraefikCmdConfiguration {
return &TraefikCmdConfiguration{
Configuration: static.Configuration{
Global: &static.Global{
CheckNewVersion: true,
},
EntryPoints: make(static.EntryPoints),
Providers: &static.Providers{
ProvidersThrottleDuration: types.Duration(2 * time.Second),
},
ServersTransport: &static.ServersTransport{
MaxIdleConnsPerHost: 200,
},
},
ConfigFile: "",
}
}

22
cmd/context.go Normal file
View File

@ -0,0 +1,22 @@
package cmd
import (
"context"
"os"
"os/signal"
"syscall"
)
// ContextWithSignal creates a context canceled when SIGINT or SIGTERM are notified
func ContextWithSignal(ctx context.Context) context.Context {
newCtx, cancel := context.WithCancel(ctx)
signals := make(chan os.Signal)
signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM)
go func() {
select {
case <-signals:
cancel()
}
}()
return newCtx
}

View File

@ -0,0 +1,74 @@
package healthcheck
import (
"errors"
"fmt"
"net/http"
"os"
"time"
"github.com/containous/traefik/v2/pkg/cli"
"github.com/containous/traefik/v2/pkg/config/static"
)
// NewCmd builds a new HealthCheck command.
func NewCmd(traefikConfiguration *static.Configuration, loaders []cli.ResourceLoader) *cli.Command {
return &cli.Command{
Name: "healthcheck",
Description: `Calls Traefik /ping endpoint (disabled by default) to check the health of Traefik.`,
Configuration: traefikConfiguration,
Run: runCmd(traefikConfiguration),
Resources: loaders,
}
}
func runCmd(traefikConfiguration *static.Configuration) func(_ []string) error {
return func(_ []string) error {
traefikConfiguration.SetEffectiveConfiguration()
resp, errPing := Do(*traefikConfiguration)
if resp != nil {
resp.Body.Close()
}
if errPing != nil {
fmt.Printf("Error calling healthcheck: %s\n", errPing)
os.Exit(1)
}
if resp.StatusCode != http.StatusOK {
fmt.Printf("Bad healthcheck status: %s\n", resp.Status)
os.Exit(1)
}
fmt.Printf("OK: %s\n", resp.Request.URL)
os.Exit(0)
return nil
}
}
// Do try to do a healthcheck
func Do(staticConfiguration static.Configuration) (*http.Response, error) {
if staticConfiguration.Ping == nil {
return nil, errors.New("please enable `ping` to use health check")
}
pingEntryPoint, ok := staticConfiguration.EntryPoints["traefik"]
if !ok {
return nil, errors.New("missing `ping` entrypoint")
}
client := &http.Client{Timeout: 5 * time.Second}
protocol := "http"
// FIXME Handle TLS on ping etc...
// if pingEntryPoint.TLS != nil {
// protocol = "https"
// tr := &http.Transport{
// TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
// }
// client.Transport = tr
// }
path := "/"
return client.Head(protocol + "://" + pingEntryPoint.Address + path + "ping")
}

314
cmd/traefik/traefik.go Normal file
View File

@ -0,0 +1,314 @@
package main
import (
"context"
"encoding/json"
"fmt"
stdlog "log"
"net/http"
"os"
"path/filepath"
"strings"
"time"
"github.com/containous/traefik/v2/autogen/genstatic"
"github.com/containous/traefik/v2/cmd"
"github.com/containous/traefik/v2/cmd/healthcheck"
cmdVersion "github.com/containous/traefik/v2/cmd/version"
"github.com/containous/traefik/v2/pkg/cli"
"github.com/containous/traefik/v2/pkg/collector"
"github.com/containous/traefik/v2/pkg/config/dynamic"
"github.com/containous/traefik/v2/pkg/config/static"
"github.com/containous/traefik/v2/pkg/log"
"github.com/containous/traefik/v2/pkg/provider/acme"
"github.com/containous/traefik/v2/pkg/provider/aggregator"
"github.com/containous/traefik/v2/pkg/safe"
"github.com/containous/traefik/v2/pkg/server"
"github.com/containous/traefik/v2/pkg/server/router"
traefiktls "github.com/containous/traefik/v2/pkg/tls"
"github.com/containous/traefik/v2/pkg/version"
"github.com/coreos/go-systemd/daemon"
assetfs "github.com/elazarl/go-bindata-assetfs"
"github.com/sirupsen/logrus"
"github.com/vulcand/oxy/roundrobin"
)
func main() {
// traefik config inits
tConfig := cmd.NewTraefikConfiguration()
loaders := []cli.ResourceLoader{&cli.FileLoader{}, &cli.FlagLoader{}, &cli.EnvLoader{}}
cmdTraefik := &cli.Command{
Name: "traefik",
Description: `Traefik is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease.
Complete documentation is available at https://traefik.io`,
Configuration: tConfig,
Resources: loaders,
Run: func(_ []string) error {
return runCmd(&tConfig.Configuration)
},
}
err := cmdTraefik.AddCommand(healthcheck.NewCmd(&tConfig.Configuration, loaders))
if err != nil {
stdlog.Println(err)
os.Exit(1)
}
err = cmdTraefik.AddCommand(cmdVersion.NewCmd())
if err != nil {
stdlog.Println(err)
os.Exit(1)
}
err = cli.Execute(cmdTraefik)
if err != nil {
stdlog.Println(err)
os.Exit(1)
}
os.Exit(0)
}
func runCmd(staticConfiguration *static.Configuration) error {
configureLogging(staticConfiguration)
http.DefaultTransport.(*http.Transport).Proxy = http.ProxyFromEnvironment
if err := roundrobin.SetDefaultWeight(0); err != nil {
log.WithoutContext().Errorf("Could not set roundrobin default weight: %v", err)
}
staticConfiguration.SetEffectiveConfiguration()
if err := staticConfiguration.ValidateConfiguration(); err != nil {
return err
}
log.WithoutContext().Infof("Traefik version %s built on %s", version.Version, version.BuildDate)
jsonConf, err := json.Marshal(staticConfiguration)
if err != nil {
log.WithoutContext().Errorf("Could not marshal static configuration: %v", err)
log.WithoutContext().Debugf("Static configuration loaded [struct] %#v", staticConfiguration)
} else {
log.WithoutContext().Debugf("Static configuration loaded %s", string(jsonConf))
}
if staticConfiguration.API != nil && staticConfiguration.API.Dashboard {
staticConfiguration.API.DashboardAssets = &assetfs.AssetFS{Asset: genstatic.Asset, AssetInfo: genstatic.AssetInfo, AssetDir: genstatic.AssetDir, Prefix: "static"}
}
if staticConfiguration.Global.CheckNewVersion {
checkNewVersion()
}
stats(staticConfiguration)
providerAggregator := aggregator.NewProviderAggregator(*staticConfiguration.Providers)
tlsManager := traefiktls.NewManager()
acmeProviders := initACMEProvider(staticConfiguration, &providerAggregator, tlsManager)
serverEntryPointsTCP := make(server.TCPEntryPoints)
for entryPointName, config := range staticConfiguration.EntryPoints {
ctx := log.With(context.Background(), log.Str(log.EntryPointName, entryPointName))
serverEntryPointsTCP[entryPointName], err = server.NewTCPEntryPoint(ctx, config)
if err != nil {
return fmt.Errorf("error while building entryPoint %s: %v", entryPointName, err)
}
serverEntryPointsTCP[entryPointName].RouteAppenderFactory = router.NewRouteAppenderFactory(*staticConfiguration, entryPointName, acmeProviders)
}
svr := server.NewServer(*staticConfiguration, providerAggregator, serverEntryPointsTCP, tlsManager)
resolverNames := map[string]struct{}{}
for _, p := range acmeProviders {
resolverNames[p.ResolverName] = struct{}{}
svr.AddListener(p.ListenConfiguration)
}
svr.AddListener(func(config dynamic.Configuration) {
for rtName, rt := range config.HTTP.Routers {
if rt.TLS == nil || rt.TLS.CertResolver == "" {
continue
}
if _, ok := resolverNames[rt.TLS.CertResolver]; !ok {
log.WithoutContext().Errorf("the router %s uses a non-existent resolver: %s", rtName, rt.TLS.CertResolver)
}
}
})
ctx := cmd.ContextWithSignal(context.Background())
if staticConfiguration.Ping != nil {
staticConfiguration.Ping.WithContext(ctx)
}
svr.Start(ctx)
defer svr.Close()
sent, err := daemon.SdNotify(false, "READY=1")
if !sent && err != nil {
log.WithoutContext().Errorf("Failed to notify: %v", err)
}
t, err := daemon.SdWatchdogEnabled(false)
if err != nil {
log.WithoutContext().Errorf("Could not enable Watchdog: %v", err)
} else if t != 0 {
// Send a ping each half time given
t /= 2
log.WithoutContext().Infof("Watchdog activated with timer duration %s", t)
safe.Go(func() {
tick := time.Tick(t)
for range tick {
resp, errHealthCheck := healthcheck.Do(*staticConfiguration)
if resp != nil {
resp.Body.Close()
}
if staticConfiguration.Ping == nil || errHealthCheck == nil {
if ok, _ := daemon.SdNotify(false, "WATCHDOG=1"); !ok {
log.WithoutContext().Error("Fail to tick watchdog")
}
} else {
log.WithoutContext().Error(errHealthCheck)
}
}
})
}
svr.Wait()
log.WithoutContext().Info("Shutting down")
logrus.Exit(0)
return nil
}
// initACMEProvider creates an acme provider from the ACME part of globalConfiguration
func initACMEProvider(c *static.Configuration, providerAggregator *aggregator.ProviderAggregator, tlsManager *traefiktls.Manager) []*acme.Provider {
challengeStore := acme.NewLocalChallengeStore()
localStores := map[string]*acme.LocalStore{}
var resolvers []*acme.Provider
for name, resolver := range c.CertificatesResolvers {
if resolver.ACME != nil {
if localStores[resolver.ACME.Storage] == nil {
localStores[resolver.ACME.Storage] = acme.NewLocalStore(resolver.ACME.Storage)
}
p := &acme.Provider{
Configuration: resolver.ACME,
Store: localStores[resolver.ACME.Storage],
ChallengeStore: challengeStore,
ResolverName: name,
}
if err := providerAggregator.AddProvider(p); err != nil {
log.WithoutContext().Errorf("Unable to add ACME provider to the providers list: %v", err)
continue
}
p.SetTLSManager(tlsManager)
if p.TLSChallenge != nil {
tlsManager.TLSAlpnGetter = p.GetTLSALPNCertificate
}
p.SetConfigListenerChan(make(chan dynamic.Configuration))
resolvers = append(resolvers, p)
}
}
return resolvers
}
func configureLogging(staticConfiguration *static.Configuration) {
// configure default log flags
stdlog.SetFlags(stdlog.Lshortfile | stdlog.LstdFlags)
// configure log level
// an explicitly defined log level always has precedence. if none is
// given and debug mode is disabled, the default is ERROR, and DEBUG
// otherwise.
levelStr := "error"
if staticConfiguration.Log != nil && staticConfiguration.Log.Level != "" {
levelStr = strings.ToLower(staticConfiguration.Log.Level)
}
level, err := logrus.ParseLevel(levelStr)
if err != nil {
log.WithoutContext().Errorf("Error getting level: %v", err)
}
log.SetLevel(level)
var logFile string
if staticConfiguration.Log != nil && len(staticConfiguration.Log.FilePath) > 0 {
logFile = staticConfiguration.Log.FilePath
}
// configure log format
var formatter logrus.Formatter
if staticConfiguration.Log != nil && staticConfiguration.Log.Format == "json" {
formatter = &logrus.JSONFormatter{}
} else {
disableColors := len(logFile) > 0
formatter = &logrus.TextFormatter{DisableColors: disableColors, FullTimestamp: true, DisableSorting: true}
}
log.SetFormatter(formatter)
if len(logFile) > 0 {
dir := filepath.Dir(logFile)
if err := os.MkdirAll(dir, 0755); err != nil {
log.WithoutContext().Errorf("Failed to create log path %s: %s", dir, err)
}
err = log.OpenFile(logFile)
logrus.RegisterExitHandler(func() {
if err := log.CloseFile(); err != nil {
log.WithoutContext().Errorf("Error while closing log: %v", err)
}
})
if err != nil {
log.WithoutContext().Errorf("Error while opening log file %s: %v", logFile, err)
}
}
}
func checkNewVersion() {
ticker := time.Tick(24 * time.Hour)
safe.Go(func() {
for time.Sleep(10 * time.Minute); ; <-ticker {
version.CheckNewVersion()
}
})
}
func stats(staticConfiguration *static.Configuration) {
logger := log.WithoutContext()
if staticConfiguration.Global.SendAnonymousUsage {
logger.Info(`Stats collection is enabled.`)
logger.Info(`Many thanks for contributing to Traefik's improvement by allowing us to receive anonymous information from your configuration.`)
logger.Info(`Help us improve Traefik by leaving this feature on :)`)
logger.Info(`More details on: https://docs.traefik.io/v2.0/contributing/data-collection/`)
collect(staticConfiguration)
} else {
logger.Info(`
Stats collection is disabled.
Help us improve Traefik by turning this feature on :)
More details on: https://docs.traefik.io/v2.0/contributing/data-collection/
`)
}
}
func collect(staticConfiguration *static.Configuration) {
ticker := time.Tick(24 * time.Hour)
safe.Go(func() {
for time.Sleep(10 * time.Minute); ; <-ticker {
if err := collector.Collect(staticConfiguration); err != nil {
log.WithoutContext().Debug(err)
}
}
})
}

60
cmd/version/version.go Normal file
View File

@ -0,0 +1,60 @@
package version
import (
"fmt"
"io"
"os"
"runtime"
"text/template"
"github.com/containous/traefik/v2/pkg/cli"
"github.com/containous/traefik/v2/pkg/version"
)
var versionTemplate = `Version: {{.Version}}
Codename: {{.Codename}}
Go version: {{.GoVersion}}
Built: {{.BuildTime}}
OS/Arch: {{.Os}}/{{.Arch}}`
// NewCmd builds a new Version command
func NewCmd() *cli.Command {
return &cli.Command{
Name: "version",
Description: `Shows the current Traefik version.`,
Configuration: nil,
Run: func(_ []string) error {
if err := GetPrint(os.Stdout); err != nil {
return err
}
fmt.Print("\n")
return nil
},
}
}
// GetPrint write Printable version
func GetPrint(wr io.Writer) error {
tmpl, err := template.New("").Parse(versionTemplate)
if err != nil {
return err
}
v := struct {
Version string
Codename string
GoVersion string
BuildTime string
Os string
Arch string
}{
Version: version.Version,
Codename: version.Codename,
GoVersion: runtime.Version(),
BuildTime: version.BuildDate,
Os: runtime.GOOS,
Arch: runtime.GOARCH,
}
return tmpl.Execute(wr, v)
}

View File

@ -1,314 +0,0 @@
package main
import (
"errors"
"fmt"
"github.com/containous/traefik/acme"
"github.com/containous/traefik/provider"
"github.com/containous/traefik/types"
"regexp"
"strings"
"time"
)
// TraefikConfiguration holds GlobalConfiguration and other stuff
type TraefikConfiguration struct {
GlobalConfiguration
ConfigFile string `short:"c" description:"Configuration file to use (TOML)."`
}
// GlobalConfiguration holds global configuration (with providers, etc.).
// It's populated from the traefik configuration file passed as an argument to the binary.
type GlobalConfiguration struct {
GraceTimeOut int64 `short:"g" description:"Duration to give active requests a chance to finish during hot-reload"`
Debug bool `short:"d" description:"Enable debug mode"`
AccessLogsFile string `description:"Access logs file"`
TraefikLogsFile string `description:"Traefik logs file"`
LogLevel string `short:"l" description:"Log level"`
EntryPoints EntryPoints `description:"Entrypoints definition using format: --entryPoints='Name:http Address::8000 Redirect.EntryPoint:https' --entryPoints='Name:https Address::4442 TLS:tests/traefik.crt,tests/traefik.key'"`
Constraints types.Constraints `description:"Filter services by constraint, matching with service tags."`
ACME *acme.ACME `description:"Enable ACME (Let's Encrypt): automatic SSL"`
DefaultEntryPoints DefaultEntryPoints `description:"Entrypoints to be used by frontends that do not specify any entrypoint"`
ProvidersThrottleDuration time.Duration `description:"Backends throttle duration: minimum duration between 2 events from providers before applying a new configuration. It avoids unnecessary reloads if multiples events are sent in a short amount of time."`
MaxIdleConnsPerHost int `description:"If non-zero, controls the maximum idle (keep-alive) to keep per-host. If zero, DefaultMaxIdleConnsPerHost is used"`
Retry *Retry `description:"Enable retry sending request if network error"`
Docker *provider.Docker `description:"Enable Docker backend"`
File *provider.File `description:"Enable File backend"`
Web *WebProvider `description:"Enable Web backend"`
Marathon *provider.Marathon `description:"Enable Marathon backend"`
Consul *provider.Consul `description:"Enable Consul backend"`
ConsulCatalog *provider.ConsulCatalog `description:"Enable Consul catalog backend"`
Etcd *provider.Etcd `description:"Enable Etcd backend"`
Zookeeper *provider.Zookepper `description:"Enable Zookeeper backend"`
Boltdb *provider.BoltDb `description:"Enable Boltdb backend"`
Kubernetes *provider.Kubernetes `description:"Enable Kubernetes backend"`
}
// DefaultEntryPoints holds default entry points
type DefaultEntryPoints []string
// String is the method to format the flag's value, part of the flag.Value interface.
// The String method's output will be used in diagnostics.
func (dep *DefaultEntryPoints) String() string {
return strings.Join(*dep, ",")
}
// Set is the method to set the flag value, part of the flag.Value interface.
// Set's argument is a string to be parsed to set the flag.
// It's a comma-separated list, so we split it.
func (dep *DefaultEntryPoints) Set(value string) error {
entrypoints := strings.Split(value, ",")
if len(entrypoints) == 0 {
return errors.New("Bad DefaultEntryPoints format: " + value)
}
for _, entrypoint := range entrypoints {
*dep = append(*dep, entrypoint)
}
return nil
}
// Get return the EntryPoints map
func (dep *DefaultEntryPoints) Get() interface{} { return DefaultEntryPoints(*dep) }
// SetValue sets the EntryPoints map with val
func (dep *DefaultEntryPoints) SetValue(val interface{}) {
*dep = DefaultEntryPoints(val.(DefaultEntryPoints))
}
// Type is type of the struct
func (dep *DefaultEntryPoints) Type() string {
return fmt.Sprint("defaultentrypoints")
}
// EntryPoints holds entry points configuration of the reverse proxy (ip, port, TLS...)
type EntryPoints map[string]*EntryPoint
// String is the method to format the flag's value, part of the flag.Value interface.
// The String method's output will be used in diagnostics.
func (ep *EntryPoints) String() string {
return fmt.Sprintf("%+v", *ep)
}
// Set is the method to set the flag value, part of the flag.Value interface.
// Set's argument is a string to be parsed to set the flag.
// It's a comma-separated list, so we split it.
func (ep *EntryPoints) Set(value string) error {
regex := regexp.MustCompile("(?:Name:(?P<Name>\\S*))\\s*(?:Address:(?P<Address>\\S*))?\\s*(?:TLS:(?P<TLS>\\S*))?\\s*((?P<TLSACME>TLS))?\\s*(?:Redirect.EntryPoint:(?P<RedirectEntryPoint>\\S*))?\\s*(?:Redirect.Regex:(?P<RedirectRegex>\\S*))?\\s*(?:Redirect.Replacement:(?P<RedirectReplacement>\\S*))?")
match := regex.FindAllStringSubmatch(value, -1)
if match == nil {
return errors.New("Bad EntryPoints format: " + value)
}
matchResult := match[0]
result := make(map[string]string)
for i, name := range regex.SubexpNames() {
if i != 0 {
result[name] = matchResult[i]
}
}
var tls *TLS
if len(result["TLS"]) > 0 {
certs := Certificates{}
if err := certs.Set(result["TLS"]); err != nil {
return err
}
tls = &TLS{
Certificates: certs,
}
} else if len(result["TLSACME"]) > 0 {
tls = &TLS{
Certificates: Certificates{},
}
}
var redirect *Redirect
if len(result["RedirectEntryPoint"]) > 0 || len(result["RedirectRegex"]) > 0 || len(result["RedirectReplacement"]) > 0 {
redirect = &Redirect{
EntryPoint: result["RedirectEntryPoint"],
Regex: result["RedirectRegex"],
Replacement: result["RedirectReplacement"],
}
}
(*ep)[result["Name"]] = &EntryPoint{
Address: result["Address"],
TLS: tls,
Redirect: redirect,
}
return nil
}
// Get return the EntryPoints map
func (ep *EntryPoints) Get() interface{} { return EntryPoints(*ep) }
// SetValue sets the EntryPoints map with val
func (ep *EntryPoints) SetValue(val interface{}) {
*ep = EntryPoints(val.(EntryPoints))
}
// Type is type of the struct
func (ep *EntryPoints) Type() string {
return fmt.Sprint("entrypoints")
}
// EntryPoint holds an entry point configuration of the reverse proxy (ip, port, TLS...)
type EntryPoint struct {
Network string
Address string
TLS *TLS
Redirect *Redirect
}
// Redirect configures a redirection of an entry point to another, or to an URL
type Redirect struct {
EntryPoint string
Regex string
Replacement string
}
// TLS configures TLS for an entry point
type TLS struct {
Certificates Certificates
}
// Certificates defines traefik certificates type
type Certificates []Certificate
// String is the method to format the flag's value, part of the flag.Value interface.
// The String method's output will be used in diagnostics.
func (certs *Certificates) String() string {
if len(*certs) == 0 {
return ""
}
return (*certs)[0].CertFile + "," + (*certs)[0].KeyFile
}
// Set is the method to set the flag value, part of the flag.Value interface.
// Set's argument is a string to be parsed to set the flag.
// It's a comma-separated list, so we split it.
func (certs *Certificates) Set(value string) error {
files := strings.Split(value, ",")
if len(files) != 2 {
return errors.New("Bad certificates format: " + value)
}
*certs = append(*certs, Certificate{
CertFile: files[0],
KeyFile: files[1],
})
return nil
}
// Type is type of the struct
func (certs *Certificates) Type() string {
return fmt.Sprint("certificates")
}
// Certificate holds a SSL cert/key pair
type Certificate struct {
CertFile string
KeyFile string
}
// Retry contains request retry config
type Retry struct {
Attempts int `description:"Number of attempts"`
}
// NewTraefikDefaultPointersConfiguration creates a TraefikConfiguration with pointers default values
func NewTraefikDefaultPointersConfiguration() *TraefikConfiguration {
//default Docker
var defaultDocker provider.Docker
defaultDocker.Watch = true
defaultDocker.Endpoint = "unix:///var/run/docker.sock"
// default File
var defaultFile provider.File
defaultFile.Watch = true
defaultFile.Filename = "" //needs equivalent to viper.ConfigFileUsed()
// default Web
var defaultWeb WebProvider
defaultWeb.Address = ":8080"
// default Marathon
var defaultMarathon provider.Marathon
defaultMarathon.Watch = true
defaultMarathon.Endpoint = "http://127.0.0.1:8080"
defaultMarathon.ExposedByDefault = true
defaultMarathon.Constraints = []types.Constraint{}
// default Consul
var defaultConsul provider.Consul
defaultConsul.Watch = true
defaultConsul.Endpoint = "127.0.0.1:8500"
defaultConsul.Prefix = "traefik"
defaultConsul.Constraints = []types.Constraint{}
// default ConsulCatalog
var defaultConsulCatalog provider.ConsulCatalog
defaultConsulCatalog.Endpoint = "127.0.0.1:8500"
defaultConsulCatalog.Constraints = []types.Constraint{}
// default Etcd
var defaultEtcd provider.Etcd
defaultEtcd.Watch = true
defaultEtcd.Endpoint = "127.0.0.1:2379"
defaultEtcd.Prefix = "/traefik"
defaultEtcd.Constraints = []types.Constraint{}
//default Zookeeper
var defaultZookeeper provider.Zookepper
defaultZookeeper.Watch = true
defaultZookeeper.Endpoint = "127.0.0.1:2181"
defaultZookeeper.Prefix = "/traefik"
defaultZookeeper.Constraints = []types.Constraint{}
//default Boltdb
var defaultBoltDb provider.BoltDb
defaultBoltDb.Watch = true
defaultBoltDb.Endpoint = "127.0.0.1:4001"
defaultBoltDb.Prefix = "/traefik"
defaultBoltDb.Constraints = []types.Constraint{}
//default Kubernetes
var defaultKubernetes provider.Kubernetes
defaultKubernetes.Watch = true
defaultKubernetes.Endpoint = "http://127.0.0.1:8080"
defaultKubernetes.Constraints = []types.Constraint{}
defaultConfiguration := GlobalConfiguration{
Docker: &defaultDocker,
File: &defaultFile,
Web: &defaultWeb,
Marathon: &defaultMarathon,
Consul: &defaultConsul,
ConsulCatalog: &defaultConsulCatalog,
Etcd: &defaultEtcd,
Zookeeper: &defaultZookeeper,
Boltdb: &defaultBoltDb,
Kubernetes: &defaultKubernetes,
Retry: &Retry{},
}
return &TraefikConfiguration{
GlobalConfiguration: defaultConfiguration,
}
}
// NewTraefikConfiguration creates a TraefikConfiguration with default values
func NewTraefikConfiguration() *TraefikConfiguration {
return &TraefikConfiguration{
GlobalConfiguration: GlobalConfiguration{
GraceTimeOut: 10,
AccessLogsFile: "",
TraefikLogsFile: "",
LogLevel: "ERROR",
EntryPoints: map[string]*EntryPoint{},
Constraints: []types.Constraint{},
DefaultEntryPoints: []string{},
ProvidersThrottleDuration: time.Duration(2 * time.Second),
MaxIdleConnsPerHost: 200,
},
ConfigFile: "",
}
}
type configs map[string]*types.Configuration

File diff suppressed because it is too large Load Diff

1055
contrib/grafana/traefik.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,41 @@
[Unit]
Description=Traefik
Documentation=https://docs.traefik.io
#After=network-online.target
#AssertFileIsExecutable=/usr/bin/traefik
#AssertPathExists=/etc/traefik/traefik.toml
[Service]
ExecStart=/usr/bin/traefik --configFile=/etc/traefik.toml
Restart=on-failure
# Run traefik as its own user (create new user with: useradd -r -s /bin/false -U -M traefik)
#User=traefik
#AmbientCapabilities=CAP_NET_BIND_SERVICE
# configure service behavior
Type=notify
#ExecStart=/usr/bin/traefik --configFile=/etc/traefik/traefik.toml
Restart=always
WatchdogSec=1s
# lock down system access
# prohibit any operating system and configuration modification
#ProtectSystem=strict
# create separate, new (and empty) /tmp and /var/tmp filesystems
#PrivateTmp=true
# make /home directories inaccessible
#ProtectHome=true
# turns off access to physical devices (/dev/...)
#PrivateDevices=true
# make kernel settings (procfs and sysfs) read-only
#ProtectKernelTunables=true
# make cgroups /sys/fs/cgroup read-only
#ProtectControlGroups=true
# allow writing of acme.json
#ReadWritePaths=/etc/traefik/acme.json
# depending on log and entrypoint configuration, you may need to allow writing to other paths, too
# limit number of processes in this unit
#LimitNPROC=1
[Install]
WantedBy=multi-user.target

1
docs/.dockerignore Normal file
View File

@ -0,0 +1 @@
site/

11
docs/.markdownlint.json Normal file
View File

@ -0,0 +1,11 @@
{
"no-hard-tabs": false,
"MD007": { "indent": 4 },
"MD009": false,
"MD013": false,
"MD024": false,
"MD026": false,
"MD033": false,
"MD034": false,
"MD036": false
}

52
docs/Makefile Normal file
View File

@ -0,0 +1,52 @@
#######
# This Makefile contains all targets related to the documentation
#######
DOCS_VERIFY_SKIP ?= false
DOCS_LINT_SKIP ?= false
TRAEFIK_DOCS_BUILD_IMAGE ?= traefik-docs
TRAEFIK_DOCS_CHECK_IMAGE ?= $(TRAEFIK_DOCS_BUILD_IMAGE)-check
SITE_DIR := $(CURDIR)/site
DOCKER_RUN_DOC_PORT := 8000
DOCKER_RUN_DOC_MOUNTS := -v $(CURDIR):/mkdocs
DOCKER_RUN_DOC_OPTS := --rm $(DOCKER_RUN_DOC_MOUNTS) -p $(DOCKER_RUN_DOC_PORT):8000
# Default: generates the documentation into $(SITE_DIR)
docs: docs-clean docs-image docs-lint docs-build docs-verify
# Writer Mode: build and serve docs on http://localhost:8000 with livereload
docs-serve: docs-image
docker run $(DOCKER_RUN_DOC_OPTS) $(TRAEFIK_DOCS_BUILD_IMAGE) mkdocs serve
# Utilities Targets for each step
docs-image:
docker build -t $(TRAEFIK_DOCS_BUILD_IMAGE) -f docs.Dockerfile ./
docs-build: docs-image
docker run $(DOCKER_RUN_DOC_OPTS) $(TRAEFIK_DOCS_BUILD_IMAGE) sh -c "mkdocs build \
&& chown -R $(shell id -u):$(shell id -g) ./site"
docs-verify: docs-build
@if [ "$(DOCS_VERIFY_SKIP)" != "true" ]; then \
docker build -t $(TRAEFIK_DOCS_CHECK_IMAGE) -f check.Dockerfile ./; \
docker run --rm -v $(CURDIR):/app $(TRAEFIK_DOCS_CHECK_IMAGE) /verify.sh; \
else \
echo "DOCS_VERIFY_SKIP is true: no verification done."; \
fi
docs-lint:
@if [ "$(DOCS_LINT_SKIP)" != "true" ]; then \
docker build -t $(TRAEFIK_DOCS_CHECK_IMAGE) -f check.Dockerfile ./ && \
docker run --rm -v $(CURDIR):/app $(TRAEFIK_DOCS_CHECK_IMAGE) /lint.sh; \
else \
echo "DOCS_LINT_SKIP is true: no linting done."; \
fi
docs-clean:
rm -rf $(SITE_DIR)
.PHONY: all docs-verify docs docs-clean docs-build docs-lint

View File

@ -1,267 +0,0 @@
# Concepts
Let's take our example from the [overview](https://docs.traefik.io/#overview) again:
> Imagine that you have deployed a bunch of microservices on your infrastructure. You probably used a service registry (like etcd or consul) and/or an orchestrator (swarm, Mesos/Marathon) to manage all these services.
> If you want your users to access some of your microservices from the Internet, you will have to use a reverse proxy and configure it using virtual hosts or prefix paths:
> - domain `api.domain.com` will point the microservice `api` in your private network
> - path `domain.com/web` will point the microservice `web` in your private network
> - domain `backoffice.domain.com` will point the microservices `backoffice` in your private network, load-balancing between your multiple instances
> ![Architecture](img/architecture.png)
Let's zoom on Træfɪk and have an overview of its internal architecture:
![Architecture](img/internal.png)
- Incoming requests end on [entrypoints](#entrypoints), as the name suggests, they are the network entry points into Træfɪk (listening port, SSL, traffic redirection...).
- Traffic is then forwarded to a matching [frontend](#frontends). A frontend defines routes from [entrypoints](#entrypoints) to [backends](#backends).
Routes are created using requests fields (`Host`, `Path`, `Headers`...) and can match or not a request.
- The [frontend](#frontends) will then send the request to a [backend](#backends). A backend can be composed by one or more [servers](#servers), and by a load-balancing strategy.
- Finally, the [server](#servers) will forward the request to the corresponding microservice in the private network.
## Entrypoints
Entrypoints are the network entry points into Træfɪk.
They can be defined using:
- a port (80, 443...)
- SSL (Certificates. Keys...)
- redirection to another entrypoint (redirect `HTTP` to `HTTPS`)
Here is an example of entrypoints definition:
```toml
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[[entryPoints.https.tls.certificates]]
certFile = "tests/traefik.crt"
keyFile = "tests/traefik.key"
```
- Two entrypoints are defined `http` and `https`.
- `http` listens on port `80` and `https` on port `443`.
- We enable SSL on `https` by giving a certificate and a key.
- We also redirect all the traffic from entrypoint `http` to `https`.
## Frontends
A frontend is a set of rules that forwards the incoming traffic from an entrypoint to a backend.
Frontends can be defined using the following rules:
- `Headers: Content-Type, application/json`: Headers adds a matcher for request header values. It accepts a sequence of key/value pairs to be matched.
- `HeadersRegexp: Content-Type, application/(text|json)`: Regular expressions can be used with headers as well. It accepts a sequence of key/value pairs, where the value has regex support.
- `Host: traefik.io, www.traefik.io`: Match request host with given host list.
- `HostRegexp: traefik.io, {subdomain:[a-z]+}.traefik.io`: Adds a matcher for the URL hosts. It accepts templates with zero or more URL variables enclosed by `{}`. Variables can define an optional regexp pattern to be matched.
- `Method: GET, POST, PUT`: Method adds a matcher for HTTP methods. It accepts a sequence of one or more methods to be matched.
- `Path: /products/, /articles/{category}/{id:[0-9]+}`: Path adds a matcher for the URL paths. It accepts templates with zero or more URL variables enclosed by `{}`.
- `PathStrip`: Same as `Path` but strip the given prefix from the request URL's Path.
- `PathPrefix`: PathPrefix adds a matcher for the URL path prefixes. This matches if the given template is a prefix of the full URL path.
- `PathPrefixStrip`: Same as `PathPrefix` but strip the given prefix from the request URL's Path.
You can use multiple rules by separating them by `;`
You can optionally enable `passHostHeader` to forward client `Host` header to the backend.
Here is an example of frontends definition:
```toml
[frontends]
[frontends.frontend1]
backend = "backend2"
[frontends.frontend1.routes.test_1]
rule = "Host:test.localhost,test2.localhost"
[frontends.frontend2]
backend = "backend1"
passHostHeader = true
priority = 10
entrypoints = ["https"] # overrides defaultEntryPoints
[frontends.frontend2.routes.test_1]
rule = "Host:localhost,{subdomain:[a-z]+}.localhost"
[frontends.frontend3]
backend = "backend2"
[frontends.frontend3.routes.test_1]
rule = "Host:test3.localhost;Path:/test"
```
- Three frontends are defined: `frontend1`, `frontend2` and `frontend3`
- `frontend1` will forward the traffic to the `backend2` if the rule `Host:test.localhost,test2.localhost` is matched
- `frontend2` will forward the traffic to the `backend1` if the rule `Host:localhost,{subdomain:[a-z]+}.localhost` is matched (forwarding client `Host` header to the backend)
- `frontend3` will forward the traffic to the `backend2` if the rules `Host:test3.localhost` **AND** `Path:/test` are matched
### Combining multiple rules
As seen in the previous example, you can combine multiple rules.
In TOML file, you can use multiple routes:
```toml
[frontends.frontend3]
backend = "backend2"
[frontends.frontend3.routes.test_1]
rule = "Host:test3.localhost"
[frontends.frontend3.routes.test_2]
rule = "Host:Path:/test"
```
Here `frontend3` will forward the traffic to the `backend2` if the rules `Host:test3.localhost` **AND** `Path:/test` are matched.
You can also use the notation using a `;` separator, same result:
```toml
[frontends.frontend3]
backend = "backend2"
[frontends.frontend3.routes.test_1]
rule = "Host:test3.localhost;Path:/test"
```
Finally, you can create a rule to bind multiple domains or Path to a frontend, using the `,` separator:
```toml
[frontends.frontend2]
[frontends.frontend2.routes.test_1]
rule = "Host:test1.localhost,test2.localhost"
[frontends.frontend3]
backend = "backend2"
[frontends.frontend3.routes.test_1]
rule = "Path:/test1,/test2"
```
### Priorities
By default, routes will be sorted (in descending order) using rules length (to avoid path overlap):
`PathPrefix:/12345` will be matched before `PathPrefix:/1234` that will be matched before `PathPrefix:/1`.
You can customize priority by frontend:
```
[frontends]
[frontends.frontend1]
backend = "backend1"
priority = 10
passHostHeader = true
[frontends.frontend1.routes.test_1]
rule = "PathPrefix:/to"
[frontends.frontend2]
priority = 5
backend = "backend2"
passHostHeader = true
[frontends.frontend2.routes.test_1]
rule = "PathPrefix:/toto"
```
Here, `frontend1` will be matched before `frontend2` (`10 > 5`).
## Backends
A backend is responsible to load-balance the traffic coming from one or more frontends to a set of http servers.
Various methods of load-balancing is supported:
- `wrr`: Weighted Round Robin
- `drr`: Dynamic Round Robin: increases weights on servers that perform better than others. It also rolls back to original weights if the servers have changed.
A circuit breaker can also be applied to a backend, preventing high loads on failing servers.
Initial state is Standby. CB observes the statistics and does not modify the request.
In case if condition matches, CB enters Tripped state, where it responds with predefines code or redirects to another frontend.
Once Tripped timer expires, CB enters Recovering state and resets all stats.
In case if the condition does not match and recovery timer expires, CB enters Standby state.
It can be configured using:
- Methods: `LatencyAtQuantileMS`, `NetworkErrorRatio`, `ResponseCodeRatio`
- Operators: `AND`, `OR`, `EQ`, `NEQ`, `LT`, `LE`, `GT`, `GE`
For example:
- `NetworkErrorRatio() > 0.5`: watch error ratio over 10 second sliding window for a frontend
- `LatencyAtQuantileMS(50.0) > 50`: watch latency at quantile in milliseconds.
- `ResponseCodeRatio(500, 600, 0, 600) > 0.5`: ratio of response codes in range [500-600) to [0-600)
To proactively prevent backends from being overwhelmed with high load, a maximum connection limit can
also be applied to each backend.
Maximum connections can be configured by specifying an integer value for `maxconn.amount` and
`maxconn.extractorfunc` which is a strategy used to determine how to categorize requests in order to
evaluate the maximum connections.
For example:
```toml
[backends]
[backends.backend1]
[backends.backend1.maxconn]
amount = 10
extractorfunc = "request.host"
```
- `backend1` will return `HTTP code 429 Too Many Requests` if there are already 10 requests in progress for the same Host header.
- Another possible value for `extractorfunc` is `client.ip` which will categorize requests based on client source ip.
- Lastly `extractorfunc` can take the value of `request.header.ANY_HEADER` which will categorize requests based on `ANY_HEADER` that you provide.
## Servers
Servers are simply defined using a `URL`. You can also apply a custom `weight` to each server (this will be used by load-balancing).
Here is an example of backends and servers definition:
```toml
[backends]
[backends.backend1]
[backends.backend1.circuitbreaker]
expression = "NetworkErrorRatio() > 0.5"
[backends.backend1.servers.server1]
url = "http://172.17.0.2:80"
weight = 10
[backends.backend1.servers.server2]
url = "http://172.17.0.3:80"
weight = 1
[backends.backend2]
[backends.backend2.LoadBalancer]
method = "drr"
[backends.backend2.servers.server1]
url = "http://172.17.0.4:80"
weight = 1
[backends.backend2.servers.server2]
url = "http://172.17.0.5:80"
weight = 2
```
- Two backends are defined: `backend1` and `backend2`
- `backend1` will forward the traffic to two servers: `http://172.17.0.2:80"` with weight `10` and `http://172.17.0.3:80` with weight `1` using default `wrr` load-balancing strategy.
- `backend2` will forward the traffic to two servers: `http://172.17.0.4:80"` with weight `1` and `http://172.17.0.5:80` with weight `2` using `drr` load-balancing strategy.
- a circuit breaker is added on `backend1` using the expression `NetworkErrorRatio() > 0.5`: watch error ratio over 10 second sliding window
# Launch
Træfɪk can be configured using a TOML file configuration, arguments, or both.
By default, Træfɪk will try to find a `traefik.toml` in the following places:
- `/etc/traefik/`
- `$HOME/.traefik/`
- `.` *the working directory*
You can override this by setting a `configFile` argument:
```bash
$ traefik --configFile=foo/bar/myconfigfile.toml
```
Træfɪk uses the following precedence order. Each item takes precedence over the item below it:
- arguments
- configuration file
- default
It means that arguments overrides configuration file.
Each argument is described in the help section:
```bash
$ traefik --help
```

View File

@ -1,213 +0,0 @@
# Benchmarks
## Configuration
I would like to thanks [vincentbernat](https://github.com/vincentbernat) from [exoscale.ch](https://www.exoscale.ch) who kindly provided the infrastructure needed for the benchmarks.
I used 4 VMs for the tests with the following configuration:
- 32 GB RAM
- 8 CPU Cores
- 10 GB SSD
- Ubuntu 14.04 LTS 64-bit
## Setup
1. One VM used to launch the benchmarking tool [wrk](https://github.com/wg/wrk)
2. One VM for traefik (v1.0.0-beta.416) / nginx (v1.4.6)
3. Two VMs for 2 backend servers in go [whoami](https://github.com/emilevauge/whoamI/)
Each VM has been tuned using the following limits:
```bash
sysctl -w fs.file-max="9999999"
sysctl -w fs.nr_open="9999999"
sysctl -w net.core.netdev_max_backlog="4096"
sysctl -w net.core.rmem_max="16777216"
sysctl -w net.core.somaxconn="65535"
sysctl -w net.core.wmem_max="16777216"
sysctl -w net.ipv4.ip_local_port_range="1025 65535"
sysctl -w net.ipv4.tcp_fin_timeout="30"
sysctl -w net.ipv4.tcp_keepalive_time="30"
sysctl -w net.ipv4.tcp_max_syn_backlog="20480"
sysctl -w net.ipv4.tcp_max_tw_buckets="400000"
sysctl -w net.ipv4.tcp_no_metrics_save="1"
sysctl -w net.ipv4.tcp_syn_retries="2"
sysctl -w net.ipv4.tcp_synack_retries="2"
sysctl -w net.ipv4.tcp_tw_recycle="1"
sysctl -w net.ipv4.tcp_tw_reuse="1"
sysctl -w vm.min_free_kbytes="65536"
sysctl -w vm.overcommit_memory="1"
ulimit -n 9999999
```
### Nginx
Here is the config Nginx file use `/etc/nginx/nginx.conf`:
```
user www-data;
worker_processes auto;
worker_rlimit_nofile 200000;
pid /var/run/nginx.pid;
events {
worker_connections 10000;
use epoll;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 300;
keepalive_requests 10000;
types_hash_max_size 2048;
open_file_cache max=200000 inactive=300s;
open_file_cache_valid 300s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
server_tokens off;
dav_methods off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log combined;
error_log /var/log/nginx/error.log warn;
gzip off;
gzip_vary off;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*.conf;
}
```
Here is the Nginx vhost file used:
```
upstream whoami {
server IP-whoami1:80;
server IP-whoami2:80;
keepalive 300;
}
server {
listen 8001;
server_name test.traefik;
access_log off;
error_log /dev/null crit;
if ($host != "test.traefik") {
return 404;
}
location / {
proxy_pass http://whoami;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header X-Forwarded-Host $host;
}
}
```
### Traefik
Here is the `traefik.toml` file used:
```
MaxIdleConnsPerHost = 100000
defaultEntryPoints = ["http"]
[entryPoints]
[entryPoints.http]
address = ":8000"
[file]
[backends]
[backends.backend1]
[backends.backend1.servers.server1]
url = "http://IP-whoami1:80"
weight = 1
[backends.backend1.servers.server2]
url = "http://IP-whoami2:80"
weight = 1
[frontends]
[frontends.frontend1]
backend = "backend1"
[frontends.frontend1.routes.test_1]
rule = "Host: test.traefik"
```
## Results
### whoami:
```
wrk -t20 -c1000 -d60s -H "Host: test.traefik" --latency http://IP-whoami:80/bench
Running 1m test @ http://IP-whoami:80/bench
20 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 70.28ms 134.72ms 1.91s 89.94%
Req/Sec 2.92k 742.42 8.78k 68.80%
Latency Distribution
50% 10.63ms
75% 75.64ms
90% 205.65ms
99% 668.28ms
3476705 requests in 1.00m, 384.61MB read
Socket errors: connect 0, read 0, write 0, timeout 103
Requests/sec: 57894.35
Transfer/sec: 6.40MB
```
### nginx:
```
wrk -t20 -c1000 -d60s -H "Host: test.traefik" --latency http://IP-nginx:8001/bench
Running 1m test @ http://IP-nginx:8001/bench
20 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 101.25ms 180.09ms 1.99s 89.34%
Req/Sec 1.69k 567.69 9.39k 72.62%
Latency Distribution
50% 15.46ms
75% 129.11ms
90% 302.44ms
99% 846.59ms
2018427 requests in 1.00m, 298.36MB read
Socket errors: connect 0, read 0, write 0, timeout 90
Requests/sec: 33591.67
Transfer/sec: 4.97MB
```
### traefik:
```
wrk -t20 -c1000 -d60s -H "Host: test.traefik" --latency http://IP-traefik:8000/bench
Running 1m test @ http://IP-traefik:8000/bench
20 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 91.72ms 150.43ms 2.00s 90.50%
Req/Sec 1.43k 266.37 2.97k 69.77%
Latency Distribution
50% 19.74ms
75% 121.98ms
90% 237.39ms
99% 687.49ms
1705073 requests in 1.00m, 188.63MB read
Socket errors: connect 0, read 0, write 0, timeout 7
Requests/sec: 28392.44
Transfer/sec: 3.14MB
```
## Conclusion
Traefik is obviously slower than Nginx, but not so much: Traefik can serve 28392 requests/sec and Nginx 33591 requests/sec which gives a ratio of 85%.
Not bad for young project :) !
Some areas of possible improvements:
- Use [GO_REUSEPORT](https://github.com/kavu/go_reuseport) listener
- Run a separate server instance per CPU core with `GOMAXPROCS=1` (it appears during benchmarks that there is a lot more context switches with traefik than with nginx)

43
docs/check.Dockerfile Normal file
View File

@ -0,0 +1,43 @@
FROM alpine:3.9 as alpine
# The "build-dependencies" virtual package provides build tools for html-proofer installation.
# It compile ruby-nokogiri, because alpine native version is always out of date
# This virtual package is cleaned at the end.
RUN apk --no-cache --no-progress add \
libcurl \
ruby \
ruby-bigdecimal \
ruby-etc \
ruby-ffi \
ruby-json \
&& apk add --no-cache --virtual build-dependencies \
build-base \
libcurl \
libxml2-dev \
libxslt-dev \
ruby-dev \
&& gem install --no-document html-proofer -v 3.10.2 \
&& apk del build-dependencies
# After Ruby, some NodeJS YAY!
RUN apk --no-cache --no-progress add \
git \
nodejs \
npm \
&& npm install markdownlint@0.12.0 markdownlint-cli@0.13.0 --global
# Finally the shell tools we need for later
# tini helps to terminate properly all the parallelized tasks when sending CTRL-C
RUN apk --no-cache --no-progress add \
ca-certificates \
curl \
tini
COPY ./scripts/verify.sh /verify.sh
COPY ./scripts/lint.sh /lint.sh
WORKDIR /app
VOLUME ["/tmp","/app"]
ENTRYPOINT ["/sbin/tini","-g","sh"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 452 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

View File

@ -0,0 +1,4 @@
/* Highlight */
(function(hljs) {
hljs.initHighlightingOnLoad();
})(hljs);

View File

@ -0,0 +1,24 @@
Copyright (c) 2006, Ivan Sagalaev
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of highlight.js nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,96 @@
/*
Atom One Light by Daniel Gamage
Original One Light Syntax theme from https://github.com/atom/one-light-syntax
base: #fafafa
mono-1: #383a42
mono-2: #686b77
mono-3: #a0a1a7
hue-1: #0184bb
hue-2: #4078f2
hue-3: #a626a4
hue-4: #50a14f
hue-5: #e45649
hue-5-2: #c91243
hue-6: #986801
hue-6-2: #c18401
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
color: #383a42;
background: #fafafa;
}
.hljs-comment,
.hljs-quote {
color: #a0a1a7;
font-style: italic;
}
.hljs-doctag,
.hljs-keyword,
.hljs-formula {
color: #a626a4;
}
.hljs-section,
.hljs-name,
.hljs-selector-tag,
.hljs-deletion,
.hljs-subst {
color: #e45649;
}
.hljs-literal {
color: #0184bb;
}
.hljs-string,
.hljs-regexp,
.hljs-addition,
.hljs-attribute,
.hljs-meta-string {
color: #50a14f;
}
.hljs-built_in,
.hljs-class .hljs-title {
color: #c18401;
}
.hljs-attr,
.hljs-variable,
.hljs-template-variable,
.hljs-type,
.hljs-selector-class,
.hljs-selector-attr,
.hljs-selector-pseudo,
.hljs-number {
color: #986801;
}
.hljs-symbol,
.hljs-bullet,
.hljs-link,
.hljs-meta,
.hljs-selector-id,
.hljs-title {
color: #4078f2;
}
.hljs-emphasis {
font-style: italic;
}
.hljs-strong {
font-weight: bold;
}
.hljs-link {
text-decoration: underline;
}

View File

@ -0,0 +1,63 @@
@import url('https://fonts.googleapis.com/css?family=Noto+Sans|Noto+Serif');
.md-logo img {
background-color: white;
border-radius: 50%;
width: 30px;
height: 30px;
}
/* Fix for Chrome */
.md-typeset__table td code {
word-break: unset;
}
.md-typeset__table tr :nth-child(1) {
word-wrap: break-word;
max-width: 30em;
}
body {
font-family: 'Noto Sans', sans-serif;
}
h1 {
font-weight: bold !important;
color: rgba(0,0,0,.9) !important;
}
h2 {
font-weight: bold !important;
}
h3 {
font-weight: bold !important;
}
.md-typeset h5 {
text-transform: none;
}
figcaption {
text-align: center;
font-size: 0.8em;
font-style: italic;
color: #8D909F;
}
p.subtitle {
color: rgba(0,0,0,.54);
padding-top: 0;
margin-top: -2em;
font-weight: bold;
font-size: 1.25em;
}
.markdown-body .task-list-item {
list-style-type: none !important;
}
.markdown-body .task-list-item input[type="checkbox"] {
margin: 0 4px 0.25em -20px;
vertical-align: middle;
}

View File

@ -0,0 +1,10 @@
# Advocating
Spread the Love & Tell Us about It
{: .subtitle }
There are many ways to contribute to the project, and there is one that always spark joy: when we see/read about users talking about how Traefik helps them solve their problems.
If you're talking about Traefik, [let us know](https://blog.containo.us/spread-the-love-ba5a40aa72e7) and we'll promote your enthusiasm!
Also, if you've written about Traefik or shared useful information you'd like to promote, feel free to add links in the [dedicated wiki page on Github](https://github.com/containous/traefik/wiki/Awesome-Traefik).

View File

@ -0,0 +1,173 @@
# Building and Testing
Compile and Test Your Own Traefik!
{: .subtitle }
So you want to build your own Traefik binary from the sources?
Let's see how.
## Building
You need either [Docker](https://github.com/docker/docker) and `make` (Method 1), or `go` (Method 2) in order to build Traefik.
For changes to its dependencies, the `dep` dependency management tool is required.
### Method 1: Using `Docker` and `Makefile`
Run make with the `binary` target.
This will create binaries for the Linux platform in the `dist` folder.
```bash
$ make binary
docker build -t traefik-webui -f webui/Dockerfile webui
Sending build context to Docker daemon 2.686MB
Step 1/11 : FROM node:8.15.0
---> 1f6c34f7921c
[...]
Successfully built ce4ff439c06a
Successfully tagged traefik-webui:latest
[...]
docker build -t "traefik-dev:4475--feature-documentation" -f build.Dockerfile .
Sending build context to Docker daemon 279MB
Step 1/10 : FROM golang:1.13-alpine
---> f4bfb3d22bda
[...]
Successfully built 5c3c1a911277
Successfully tagged traefik-dev:4475--feature-documentation
docker run -e "TEST_CONTAINER=1" -v "/var/run/docker.sock:/var/run/docker.sock" -it -e OS_ARCH_ARG -e OS_PLATFORM_ARG -e TESTFLAGS -e VERBOSE -e VERSION -e CODENAME -e TESTDIRS -e CI -e CONTAINER=DOCKER -v "/home/ldez/sources/go/src/github.com/containous/traefik/"dist":/go/src/github.com/containous/traefik/"dist"" "traefik-dev:4475--feature-documentation" ./script/make.sh generate binary
---> Making bundle: generate (in .)
removed 'autogen/genstatic/gen.go'
---> Making bundle: binary (in .)
$ ls dist/
traefik*
```
The following targets can be executed outside Docker by setting the variable `PRE_TARGET` to an empty string (we don't recommend that):
- `test-unit`
- `test-integration`
- `validate`
- `binary` (the webUI is still generated by using Docker)
ex:
```bash
PRE_TARGET= make test-unit
```
### Method 2: Using `go`
Requirements:
- `go` v1.13+
- environment variable `GO111MODULE=on`
!!! tip "Source Directory"
It is recommended that you clone Traefik into the `~/go/src/github.com/containous/traefik` directory.
This is the official golang workspace hierarchy that will allow dependencies to be properly resolved.
!!! note "Environment"
Set your `GOPATH` and `PATH` variable to be set to `~/go` via:
```bash
export GOPATH=~/go
export PATH=$PATH:$GOPATH/bin
```
For convenience, add `GOPATH` and `PATH` to your `.bashrc` or `.bash_profile`
Verify your environment is setup properly by running `$ go env`.
Depending on your OS and environment, you should see an output similar to:
```bash
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/<yourusername>/go"
GORACE=""
## ... and the list goes on
```
#### Build Traefik
Once you've set up your go environment and cloned the source repository, you can build Traefik.
Beforehand, you need to get `go-bindata` (the first time) in order to be able to use the `go generate` command (which is part of the build process).
```bash
cd ~/go/src/github.com/containous/traefik
# Get go-bindata. (Important: the ellipses are required.)
GO111MODULE=off go get github.com/containous/go-bindata/...
# Let's build
# generate
# (required to merge non-code components into the final binary, such as the web dashboard and the provider's templates)
go generate
# Standard go build
go build ./cmd/traefik
```
You will find the Traefik executable (`traefik`) in the `~/go/src/github.com/containous/traefik` directory.
### Updating the templates
If you happen to update the provider's templates (located in `/templates`), you must run `go generate` to update the `autogen` package.
## Testing
### Method 1: `Docker` and `make`
Run unit tests using the `test-unit` target.
Run integration tests using the `test-integration` target.
Run all tests (unit and integration) using the `test` target.
```bash
$ make test-unit
docker build -t "traefik-dev:your-feature-branch" -f build.Dockerfile .
# […]
docker run --rm -it -e OS_ARCH_ARG -e OS_PLATFORM_ARG -e TESTFLAGS -v "/home/user/go/src/github/containous/traefik/dist:/go/src/github.com/containous/traefik/dist" "traefik-dev:your-feature-branch" ./script/make.sh generate test-unit
---> Making bundle: generate (in .)
removed 'gen.go'
---> Making bundle: test-unit (in .)
+ go test -cover -coverprofile=cover.out .
ok github.com/containous/traefik 0.005s coverage: 4.1% of statements
Test success
```
For development purposes, you can specify which tests to run by using (only works the `test-integration` target):
```bash
# Run every tests in the MyTest suite
TESTFLAGS="-check.f MyTestSuite" make test-integration
# Run the test "MyTest" in the MyTest suite
TESTFLAGS="-check.f MyTestSuite.MyTest" make test-integration
# Run every tests starting with "My", in the MyTest suite
TESTFLAGS="-check.f MyTestSuite.My" make test-integration
# Run every tests ending with "Test", in the MyTest suite
TESTFLAGS="-check.f MyTestSuite.*Test" make test-integration
```
More: https://labix.org/gocheck
### Method 2: `go`
Unit tests can be run from the cloned directory using `$ go test ./...` which should return `ok`, similar to:
```test
ok _/home/user/go/src/github/containous/traefik 0.004s
```
Integration tests must be run from the `integration/` directory and require the `-integration` switch: `$ cd integration && go test -integration ./...`.

View File

@ -0,0 +1,95 @@
# Data Collection
Understanding How Traefik is Being Used
{: .subtitle }
## Configuration Example
Understanding how you use Traefik is very important to us: it helps us improve the solution in many different ways.
For this very reason, the sendAnonymousUsage option is mandatory: we want you to take time to consider whether or not you wish to share anonymous data with us so we can benefit from your experience and use cases.
!!! example "Enabling Data Collection"
```toml tab="File (TOML)"
[global]
# Send anonymous usage data
sendAnonymousUsage = true
```
```yaml tab="File (YAML)"
global:
# Send anonymous usage data
sendAnonymousUsage: true
```
```bash tab="CLI"
# Send anonymous usage data
--global.sendAnonymousUsage
```
## Collected Data
This feature comes from the public proposal [here](https://github.com/containous/traefik/issues/2369).
In order to help us learn more about how Traefik is being used and improve it, we collect anonymous usage statistics from running instances.
Those data help us prioritize our developments and focus on what's important for our users (for example, which provider is popular, and which is not).
### What's collected / when ?
Once a day (the first call begins 10 minutes after the start of Traefik), we collect:
- the Traefik version number
- a hash of the configuration
- an **anonymized version** of the static configuration (token, user name, password, URL, IP, domain, email, etc, are removed).
!!! info
- We do not collect the dynamic configuration information (routers & services).
- We do not collect this data to run advertising programs.
- We do not sell this data to third-parties.
### Example of Collected Data
```toml tab="Original configuration"
[entryPoints]
[entryPoints.web]
address = ":80"
[api]
[providers.docker]
endpoint = "tcp://10.10.10.10:2375"
exposedByDefault = true
swarmMode = true
[providers.docker.TLS]
ca = "dockerCA"
cert = "dockerCert"
key = "dockerKey"
insecureSkipVerify = true
```
```toml tab="Resulting Obfuscated Configuration"
[entryPoints]
[entryPoints.web]
address = ":80"
[api]
[providers.docker]
endpoint = "xxxx"
exposedByDefault = true
swarmMode = true
[providers.docker.TLS]
ca = "xxxx"
cert = "xxxx"
key = "xxxx"
insecureSkipVerify = false
```
## The Code for Data Collection
If you want to dig into more details, here is the source code of the collecting system: [collector.go](https://github.com/containous/traefik/blob/master/pkg/collector/collector.go)
By default we anonymize all configuration fields, except fields tagged with `export=true`.

View File

@ -0,0 +1,100 @@
# Documentation
Features Are Better When You Know How to Use Them
{: .subtitle }
You've found something unclear in the documentation and want to give a try at explaining it better?
Let's see how.
## Building Documentation
### General
This [documentation](https://docs.traefik.io/) is built with [mkdocs](https://mkdocs.org/).
### Method 1: `Docker` and `make`
You can build the documentation and test it locally (with live reloading), using the `docs` target:
```bash
$ make docs
docker build -t traefik-docs -f docs.Dockerfile .
# […]
docker run --rm -v /home/user/go/github/containous/traefik:/mkdocs -p 8000:8000 traefik-docs mkdocs serve
# […]
[I 170828 20:47:48 server:283] Serving on http://0.0.0.0:8000
[I 170828 20:47:48 handlers:60] Start watching changes
[I 170828 20:47:48 handlers:62] Start detecting changes
```
!!! tip "Default URL"
Your local documentation server will run by default on [http://127.0.0.1:8000](http://127.0.0.1:8000).
If you only want to build the documentation without serving it locally, you can use the following command:
```bash
$ make docs-build
...
```
### Method 2: `mkdocs`
First, make sure you have `python` and `pip` installed.
```bash
$ python --version
Python 2.7.2
$ pip --version
pip 1.5.2
```
Then, install mkdocs with `pip`.
```bash
pip install --user -r requirements.txt
```
To build the documentation locally and serve it locally, run `mkdocs serve` from the root directory.
This will start a local server.
```bash
$ mkdocs serve
INFO - Building documentation...
INFO - Cleaning site directory
[I 160505 22:31:24 server:281] Serving on http://127.0.0.1:8000
[I 160505 22:31:24 handlers:59] Start watching changes
[I 160505 22:31:24 handlers:61] Start detecting changes
```
### Check the Documentation
To check that the documentation meets standard expectations (no dead links, html markup validity, ...), use the `docs-verify` target.
```bash
$ make docs-verify
docker build -t traefik-docs-verify ./script/docs-verify-docker-image ## Build Validator image
...
docker run --rm -v /home/travis/build/containous/traefik:/app traefik-docs-verify ## Check for dead links and w3c compliance
=== Checking HTML content...
Running ["HtmlCheck", "ImageCheck", "ScriptCheck", "LinkCheck"] on /app/site/basics/index.html on *.html...
```
!!! note "Clean & Verify"
If you've made changes to the documentation, it's safter to clean it before verifying it.
```bash
$ make docs-clean docs-verify
...
```
!!! note "Disabling Documentation Verification"
Verification can be disabled by setting the environment variable `DOCS_VERIFY_SKIP` to `true`:
```shell
DOCS_VERIFY_SKIP=true make docs-verify
...
DOCS_LINT_SKIP is true: no linting done.
```

View File

@ -0,0 +1,176 @@
# Maintainers
## The team
* Emile Vauge [@emilevauge](https://github.com/emilevauge)
* Vincent Demeester [@vdemeester](https://github.com/vdemeester)
* Ed Robinson [@errm](https://github.com/errm)
* Daniel Tomcej [@dtomcej](https://github.com/dtomcej)
* Manuel Zapf [@SantoDE](https://github.com/SantoDE)
* Timo Reimann [@timoreimann](https://github.com/timoreimann)
* Ludovic Fernandez [@ldez](https://github.com/ldez)
* Julien Salleyron [@juliens](https://github.com/juliens)
* Nicolas Mengin [@nmengin](https://github.com/nmengin)
* Marco Jantke [@marco-jantke](https://github.com/marco-jantke)
* Michaël Matur [@mmatur](https://github.com/mmatur)
* Gérald Croës [@geraldcroes](https://github.com/geraldcroes)
* Jean-Baptiste Doumenjou [@jbdoumenjou](https://github.com/jbdoumenjou)
* Damien Duportal [@dduportal](https://github.com/dduportal)
* Mathieu Lonjaret [@mpl](https://github.com/mpl)
## Contributions Daily Meeting
* 3 Maintainers should attend to a Contributions Daily Meeting where we sort and label new issues ([is:issue label:status/0-needs-triage](https://github.com/containous/traefik/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Astatus%2F0-needs-triage+)), and review every Pull Requests
* Every pull request should be checked during the Contributions Daily Meeting
* Even if its already assigned
* Even PR labelled with `contributor/waiting-for-corrections` or `contributor/waiting-for-feedback`
* Issues labeled with `priority/P0` and `priority/P1` should be assigned.
* Modifying an issue or a pull request (labels, assignees, milestone) is only possible:
* During the Contributions Daily Meeting
* By an assigned maintainer
* In case of emergency, if a change proposal is approved by 2 other maintainers (on Slack, Discord, Discourse, etc)
## PR review process:
* The status `needs-design-review` is only used in complex/heavy/tricky PRs.
* From `1` to `2`: 1 comment that says “design LGTM” (by a senior maintainer).
* From `2` to `3`: 3 LGTM approvals by any maintainer.
* If needed, a specific maintainer familiar with a particular domain can be requested for the review.
* If a PR has been implemented in pair programming, one peer's LGTM goes into the review for free
* Amending someone else's pull request is authorized only in emergency, if a rebase is needed, or if the initial contributor is silent
We use [PRM](https://github.com/ldez/prm) to manage locally pull requests.
## Bots
### [Myrmica Lobicornis](https://github.com/containous/lobicornis/)
Update and Merge Pull Request.
The maintainer giving the final LGTM must add the `status/3-needs-merge` label to trigger the merge bot.
By default, a squash-rebase merge will be carried out.
To preserve commits, add `bot/merge-method-rebase` before `status/3-needs-merge`.
The status `status/4-merge-in-progress` is only used by the bot.
If the bot is not able to perform the merge, the label `bot/need-human-merge` is added.
In such a situation, solve the conflicts/CI/... and then remove the label `bot/need-human-merge`.
To prevent the bot from automatically merging a PR, add the label `bot/no-merge`.
The label `bot/light-review` decreases the number of required LGTM from 3 to 1.
This label is used when:
* Updating the vendors from previously reviewed PRs
* Merging branches into the master
* Preparing the release
### [Myrmica Bibikoffi](https://github.com/containous/bibikoffi/)
* closes stale issues [cron]
* use some criterion as number of days between creation, last update, labels, ...
### [Myrmica Aloba](https://github.com/containous/aloba)
Manage GitHub labels.
* Add labels on new PR [GitHub WebHook]
* Add milestone to a new PR based on a branch version (1.4, 1.3, ...) [GitHub WebHook]
* Add and remove `contributor/waiting-for-corrections` label when a review request changes [GitHub WebHook]
* Weekly report of PR status on Slack (CaptainPR) [cron]
## Labels
A maintainer that looks at an issue/PR must define its `kind/*`, `area/*`, and `status/*`.
### Status - Workflow
The `status/*` labels represent the desired state in the workflow.
* `status/0-needs-triage`: all the new issues and PRs have this status. _[bot only]_
* `status/1-needs-design-review`: needs a design review. **(only for PR)**
* `status/2-needs-review`: needs a code/documentation review. **(only for PR)**
* `status/3-needs-merge`: ready to merge. **(only for PR)**
* `status/4-merge-in-progress`: merge is in progress. _[bot only]_
### Contributor
* `contributor/need-more-information`: we need more information from the contributor in order to analyze a problem.
* `contributor/waiting-for-feedback`: we need the contributor to give us feedback.
* `contributor/waiting-for-corrections`: we need the contributor to take actions in order to move forward with a PR. **(only for PR)** _[bot, humans]_
* `contributor/needs-resolve-conflicts`: use it only when there is some conflicts (and an automatic rebase is not possible). **(only for PR)** _[bot, humans]_
### Kind
* `kind/enhancement`: a new or improved feature.
* `kind/question`: a question. **(only for issue)**
* `kind/proposal`: a proposal that needs to be discussed.
* _Proposal issues_ are design proposals
* _Proposal PRs_ are technical prototypes that need to be refined with multiple contributors.
* `kind/bug/possible`: a possible bug that needs analysis before it is confirmed or fixed. **(only for issues)**
* `kind/bug/confirmed`: a confirmed bug (reproducible). **(only for issues)**
* `kind/bug/fix`: a bug fix. **(only for PR)**
### Resolution
* `resolution/duplicate`: a duplicate issue/PR.
* `resolution/declined`: declined (Rule #1 of open-source: no is temporary, yes is forever).
* `WIP`: Work In Progress. **(only for PR)**
### Platform
* `platform/windows`: Windows related.
### Area
* `area/acme`: ACME related.
* `area/api`: Traefik API related.
* `area/authentication`: Authentication related.
* `area/cluster`: Traefik clustering related.
* `area/documentation`: Documentation related.
* `area/infrastructure`: CI or Traefik building scripts related.
* `area/healthcheck`: Health-check related.
* `area/logs`: Logs related.
* `area/middleware`: Middleware related.
* `area/middleware/metrics`: Metrics related. (Prometheus, StatsD, ...)
* `area/middleware/tracing`: Tracing related. (Jaeger, Zipkin, ...)
* `area/oxy`: Oxy related.
* `area/provider`: related to all providers.
* `area/provider/boltdb`: Boltd DB related.
* `area/provider/consul`: Consul related.
* `area/provider/docker`: Docker and Swarm related.
* `area/provider/ecs`: ECS related.
* `area/provider/etcd`: Etcd related.
* `area/provider/eureka`: Eureka related.
* `area/provider/file`: file provider related.
* `area/provider/k8s`: Kubernetes related.
* `area/provider/kv`: KV related.
* `area/provider/marathon`: Marathon related.
* `area/provider/mesos`: Mesos related.
* `area/provider/rancher`: Rancher related.
* `area/provider/servicefabric`: Azure service fabric related.
* `area/provider/zk`: Zoo Keeper related.
* `area/rules`: Rules related.
* `area/server`: Server related.
* `area/sticky-session`: Sticky session related.
* `area/tls`: TLS related.
* `area/websocket`: WebSocket related.
* `area/webui`: Web UI related.
### Issues Priority
* `priority/P0`: needs hot fix.
* `priority/P1`: need to be fixed in next release.
* `priority/P2`: need to be fixed in the future.
* `priority/P3`: maybe.
### PR size
Automatically set by a bot.
* `size/S`: small PR.
* `size/M`: medium PR.
* `size/L`: Large PR.

View File

@ -0,0 +1,44 @@
# Submitting Issues
Help Us Help You!
{: .subtitle }
We use the [GitHub issue tracker](https://github.com/containous/traefik/issues) to keep track of issues in Traefik.
The process of sorting and checking the issues is a daunting task, and requires a lot of work (more than an hour a day ... just for sorting).
To save us some time and get quicker feedback, be sure to follow the guide lines below.
!!! important "Getting Help Vs Reporting an Issue"
The issue tracker is not a general support forum, but a place to report bugs and asks for new features.
For end-user related support questions, try using first:
- the Traefik community forum: [![Join the chat at https://community.containo.us/](https://img.shields.io/badge/style-register-green.svg?style=social&label=Discourse)](https://community.containo.us/)
## Issue Title
The title must be short and descriptive. (~60 characters)
## Description
Follow the [issue template](https://github.com/containous/traefik/blob/master/.github/ISSUE_TEMPLATE.md) as much as possible.
Explain us in which conditions you encountered the issue, what is your context.
Remain as clear and concise as possible
Take time to polish the format of your message so we'll enjoy reading it and working on it.
Help the readers focus on what matters, and help them understand the structure of your message (see the [Github Markdown Syntax](https://help.github.com/articles/github-flavored-markdown)).
## Feature Request
Traefik is an open-source project and aims to be the best edge router possible.
Remember when asking for new features that these must be useful to the majority (and not only useful in edge case scenarios, or hack-like setups).
Do you best to explain what you're looking for, and why it would improve Traefik for everyone.
## International English
Every maintainer / Traefik user is not a native English speaker, so if you feel sometimes that some messages sound rude, remember that it probably is a language barrier problem from someone willing to help you.

View File

@ -0,0 +1,45 @@
# Submitting Pull Requests
A Quick Guide for Efficient Contributions
{: .subtitle }
So you've decide to improve Traefik?
Thank You!
Now the last step is to submit your Pull Request in a way that makes sure it gets the attention it deserves.
Let's go though the classic pitfalls to make sure everything is right.
## Title
The title must be short and descriptive. (~60 characters)
## Description
Follow the [pull request template](https://github.com/containous/traefik/blob/master/.github/PULL_REQUEST_TEMPLATE.md) as much as possible.
Explain the conditions which led you to write this PR: give us context.
The context should lead to something, an idea or a problem that youre facing.
Remain clear and concise.
Take time to polish the format of your message so we'll enjoy reading it and working on it.
Help the readers focus on what matters, and help them understand the structure of your message (see the [Github Markdown Syntax](https://help.github.com/articles/github-flavored-markdown)).
## PR Content
- Make it small.
- One feature per Pull Request.
- Write useful descriptions and titles.
- Avoid re-formatting code that is not on the path of your PR.
- Make sure the [code builds](building-testing.md).
- Make sure [all tests pass](building-testing.md).
- Add tests.
- Address review comments in terms of additional commits (and don't amend/squash existing ones unless the PR is trivial).
!!! note "third-party dependencies"
If a PR involves changes to third-party dependencies, the commits pertaining to the vendor folder and the manifest/lock file(s) should be committed separated.
!!! tip "10 Tips for Better Pull Requests"
We enjoyed this article, maybe you will too! [10 tips for better pull requests](https://blog.ploeh.dk/2015/01/15/10-tips-for-better-pull-requests/).

View File

@ -0,0 +1,27 @@
# Thank You!
_You_ Made It
{: .subtitle}
Traefik truly is an [open-source project](https://github.com/containous/traefik/),
and wouldn't have become what it is today without the help of our [many contributors](https://github.com/containous/traefik/graphs/contributors) (at the time of writing this),
not accounting for people having helped with issues, tests, comments, articles, ... or just enjoying it and letting others know.
So once again, thank you for your invaluable help on making Traefik such a good product.
!!! question "Where to Go Next?"
If you want to:
- Propose and idea, request a feature a report a bug,
read the page [Submitting Issues](./submitting-issues.md).
- Discover how to make an efficient contribution,
read the page [Submitting Pull Requests](./submitting-pull-requests.md).
- Learn how to build and test Traefik,
the page [Building and Testing](./building-testing.md) is for you.
- Contribute to the documentation,
read the related page [Documentation](./documentation.md).
- Understand how do we learn about Traefik usage,
read the [Data Collection](./data-collection.md) page.
- Spread the love about Traefik, please check the [Advocating](./advocating.md) page.
- Learn about who are the maintainers and how they work on the project,
read the [Maintainers](./maintainers.md) page.

View File

@ -0,0 +1,36 @@
# Concepts
Everything You Need to Know
{: .subtitle }
## Edge Router
Traefik is an _Edge Router_, it means that it's the door to your platform, and that it intercepts and routes every incoming request:
it knows all the logic and every rule that determine which services handle which requests (based on the [path](../routing/routers/index.md#rule), the [host](../routing/routers/index.md#rule), [headers](../routing/routers/index.md#rule), [and so on](../routing/routers/index.md#rule) ...).
![The Door to Your Infrastructure](../assets/img/traefik-concepts-1.png)
## Auto Service Discovery
Where traditionally edge routers (or reverse proxies) need a configuration file that contains every possible route to your services, Traefik gets them from the services themselves.
Deploying your services, you attach information that tells Traefik the characteristics of the requests the services can handle.
![Decentralized Configuration](../assets/img/traefik-concepts-2.png)
It means that when a service is deployed, Traefik detects it immediately and updates the routing rules in real time.
The opposite is true: when you remove a service from your infrastructure, the route will disappear accordingly.
You no longer need to create and synchronize configuration files cluttered with IP addresses or other rules.
!!! info "Many different rules"
In the example above, we used the request [path](../routing/routers/index.md#rule) to determine which service was in charge, but of course you can use many other different [rules](../routing/routers/index.md#rule).
!!! info "Updating the requests"
In the [middleware](../middlewares/overview.md) section, you can learn about how to update the requests before forwarding them to the services.
!!! question "How does Traefik discover the services?"
Traefik is able to use your cluster API to discover the services and read the attached information. In Traefik, these connectors are called [providers](../providers/overview.md) because they _provide_ the configuration to Traefik. To learn more about them, read the [provider overview](../providers/overview.md) section.

View File

@ -0,0 +1,90 @@
# Configuration Introduction
How the Magic Happens
{: .subtitle }
![Configuration](../assets/img/static-dynamic-configuration.png)
Configuration in Traefik can refer to two different things:
- The fully dynamic routing configuration (referred to as the _dynamic configuration_)
- The startup configuration (referred to as the _static configuration_)
Elements in the _static configuration_ set up connections to [providers](../providers/overview.md) and define the [entrypoints](../routing/entrypoints.md) Traefik will listen to (these elements don't change often).
The _dynamic configuration_ contains everything that defines how the requests are handled by your system.
This configuration can change and is seamlessly hot-reloaded, without any request interruption or connection loss.
!!! warning "Incompatible Configuration"
Please be aware that the old configurations for Traefik v1.x are NOT compatible with the v2.x config as of now.
If you are running v2, please ensure you are using a v2 configuration.
## The Dynamic Configuration
Traefik gets its _dynamic configuration_ from [providers](../providers/overview.md): whether an orchestrator, a service registry, or a plain old configuration file.
Since this configuration is specific to your infrastructure choices, we invite you to refer to the [dedicated section of this documentation](../routing/overview.md).
!!! info ""
In the [Quick Start example](../getting-started/quick-start.md), the dynamic configuration comes from docker in the form of labels attached to your containers.
!!! info "HTTPS Certificates also belong to the dynamic configuration."
You can add / update / remove them without restarting your Traefik instance.
## The Static Configuration
There are three different, **mutually exclusive** (e.g. you can use only one at the same time), ways to define static configuration options in Traefik:
1. In a configuration file
1. In the command-line arguments
1. As environment variables
These ways are evaluated in the order listed above.
If no value was provided for a given option, a default value applies.
Moreover, if an option has sub-options, and any of these sub-options is not specified, a default value will apply as well.
For example, the `--providers.docker` option is enough by itself to enable the docker provider, even though sub-options like `--providers.docker.endpoint` exist.
Once positioned, this option sets (and resets) all the default values of the sub-options of `--providers.docker`.
### Configuration File
At startup, Traefik searches for a file named `traefik.toml` (or `traefik.yml` or `traefik.yaml`) in:
- `/etc/traefik/`
- `$XDG_CONFIG_HOME/`
- `$HOME/.config/`
- `.` (_the working directory_).
You can override this using the `configFile` argument.
```bash
traefik --configFile=foo/bar/myconfigfile.toml
```
### Arguments
To get the list of all available arguments:
```bash
traefik --help
# or
docker run traefik[:version] --help
# ex: docker run traefik:2.0 --help
```
All available arguments can also be found [here](../reference/static-configuration/cli.md).
### Environment Variables
All available environment variables can be found [here](../reference/static-configuration/env.md)
## Available Configuration Options
All the configuration options are documented in their related section.
You can browse the available features in the menu, the [providers](../providers/overview.md), or the [routing section](../routing/overview.md) to see them in action.

View File

@ -0,0 +1,70 @@
# Install Traefik
You can install Traefik with the following flavors:
* [Use the official Docker image](./#use-the-official-docker-image)
* [Use the binary distribution](./#use-the-binary-distribution)
* [Compile your binary from the sources](./#compile-your-binary-from-the-sources)
## Use the Official Docker Image
Choose one of the [official Docker images](https://hub.docker.com/_/traefik) and run it with the [sample configuration file](https://raw.githubusercontent.com/containous/traefik/v2.0/traefik.sample.toml):
```bash
docker run -d -p 8080:8080 -p 80:80 \
-v $PWD/traefik.toml:/etc/traefik/traefik.toml traefik:v2.0
```
For more details, go to the [Docker provider documentation](../providers/docker.md)
!!! tip
* Prefer a fixed version than the latest that could be an unexpected version.
ex: `traefik:v2.0.0`
* Docker images are based from the [Alpine Linux Official image](https://hub.docker.com/_/alpine).
* All the orchestrator using docker images could fetch the official Traefik docker image.
## Use the Binary Distribution
Grab the latest binary from the [releases](https://github.com/containous/traefik/releases) page.
??? info "Check the integrity of the downloaded file"
```bash tab="Linux"
# Compare this value to the one found in traefik-${traefik_version}_checksums.txt
sha256sum ./traefik_${traefik_version}_linux_${arch}.tar.gz
```
```bash tab="macOS"
# Compare this value to the one found in traefik-${traefik_version}_checksums.txt
shasum -a256 ./traefik_${traefik_version}_darwin_amd64.tar.gz
```
```powershell tab="Windows PowerShell"
# Compare this value to the one found in traefik-${traefik_version}_checksums.txt
Get-FileHash ./traefik_${traefik_version}_windows_${arch}.zip -Algorithm SHA256
```
??? info "Extract the downloaded archive"
```bash tab="Linux"
tar -zxvf traefik_${traefik_version}_linux_${arch}.tar.gz
```
```bash tab="macOS"
tar -zxvf ./traefik_${traefik_version}_darwin_amd64.tar.gz
```
```powershell tab="Windows PowerShell"
Expand-Archive traefik_${traefik_version}_windows_${arch}.zip
```
And run it:
```bash
./traefik --help
```
## Compile your Binary from the Sources
All the details are available in the [Contributing Guide](../contributing/building-testing.md)

View File

@ -0,0 +1,111 @@
# Quick Start
A Simple Use Case Using Docker
{: .subtitle }
![quickstart-diagram](../assets/img/quickstart-diagram.png)
## Launch Traefik With the Docker Provider
Create a `docker-compose.yml` file where you will define a `reverse-proxy` service that uses the official Traefik image:
```yaml
version: '3'
services:
reverse-proxy:
# The official v2.0 Traefik docker image
image: traefik:v2.0
# Enables the web UI and tells Traefik to listen to docker
command: --api.insecure=true --providers.docker
ports:
# The HTTP port
- "80:80"
# The Web UI (enabled by --api.insecure=true)
- "8080:8080"
volumes:
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
```
**That's it. Now you can launch Traefik!**
Start your `reverse-proxy` with the following command:
```shell
docker-compose up -d reverse-proxy
```
You can open a browser and go to [http://localhost:8080/api/rawdata](http://localhost:8080/api/rawdata) to see Traefik's API rawdata (we'll go back there once we have launched a service in step 2).
## Traefik Detects New Services and Creates the Route for You
Now that we have a Traefik instance up and running, we will deploy new services.
Edit your `docker-compose.yml` file and add the following at the end of your file.
```yaml
# ...
whoami:
# A container that exposes an API to show its IP address
image: containous/whoami
labels:
- "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)"
```
The above defines `whoami`: a simple web service that outputs information about the machine it is deployed on (its IP address, host, and so on).
Start the `whoami` service with the following command:
```shell
docker-compose up -d whoami
```
Go back to your browser ([http://localhost:8080/api/rawdata](http://localhost:8080/api/rawdata)) and see that Traefik has automatically detected the new container and updated its own configuration.
When Traefik detects new services, it creates the corresponding routes so you can call them ... _let's see!_ (Here, we're using curl)
```shell
curl -H Host:whoami.docker.localhost http://127.0.0.1
```
_Shows the following output:_
```yaml
Hostname: a656c8ddca6c
IP: 172.27.0.3
#...
```
## More Instances? Traefik Load Balances Them
Run more instances of your `whoami` service with the following command:
```shell
docker-compose up -d --scale whoami=2
```
Go back to your browser ([http://localhost:8080/api/rawdata](http://localhost:8080/api/rawdata)) and see that Traefik has automatically detected the new instance of the container.
Finally, see that Traefik load-balances between the two instances of your service by running the following command twice:
```shell
curl -H Host:whoami.docker.localhost http://127.0.0.1
```
The output will show alternatively one of the followings:
```yaml
Hostname: a656c8ddca6c
IP: 172.27.0.3
#...
```
```yaml
Hostname: s458f154e1f1
IP: 172.27.0.4
# ...
```
!!! question "Where to Go Next?"
Now that you have a basic understanding of how Traefik can automatically create the routes to your services and load balance them, it is time to dive into [the documentation](/) and let Traefik work for you!

22
docs/content/glossary.md Normal file
View File

@ -0,0 +1,22 @@
# TODO -- Glossary
Where Every Technical Word finds its Definition`
{: .subtitle}
- [ ] Provider
- [ ] Types of providers (KV, annotation based, label based, configuration based)
- [ ] Entrypoint
- [ ] Routers
- [ ] Middleware
- [ ] Service
- [ ] [Static configuration](getting-started/configuration-overview.md#the-static-configuration)
- [ ] [Dynamic configuration](getting-started/configuration-overview.md#the-dynamic-configuration)
- [ ] ACME
- [ ] TraefikEE
- [ ] Tracing
- [ ] Metrics
- [ ] Orchestrator
- [ ] Key Value Store
- [ ] Logs
- [ ] Traefiker
- [ ] Traefik (How to pronounce)

Some files were not shown because too many files have changed in this diff Show More