{"id":8337,"date":"2021-09-28T16:52:58","date_gmt":"2021-09-28T11:22:58","guid":{"rendered":"https:\/\/opstree.com\/blog\/\/?p=8337"},"modified":"2021-09-28T21:55:12","modified_gmt":"2021-09-28T16:25:12","slug":"traefik-a-reverse-proxy-load-balancer","status":"publish","type":"post","link":"https:\/\/opstree.com\/blog\/2021\/09\/28\/traefik-a-reverse-proxy-load-balancer\/","title":{"rendered":"Traefik a Reverse Proxy\/Load Balancer"},"content":{"rendered":"\n<p>Traefik is an open-source Edge Router that is made to deploy services with ease. It is brilliant enough to request on behalf of your system and for finding which components are responsible for handling those requests.<\/p>\n\n\n\n<p>This is a 4 series blog where PART1 includes Introduction to Traefik with key Concepts and Configuration. Part2,Part3, and Part4 are to follow.<\/p>\n\n\n\n<p>In its essence, it is a <strong>dynamic <\/strong>reverse proxy written in the Go language.<\/p>\n\n\n\n<p>But before exploring how Traefik works and handles the requests, let\u2019s first take an idea about what exactly the terms <strong>edge router<\/strong> and <strong>reverse proxy<\/strong> mean.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\"><strong>EDGE ROUTER:<\/strong><\/h2>\n\n\n\n<p>A router basically is something that gives routes to your data as per your definitions whereas edge routers are special network devices that resides at the boundary of a network (acting as a gateway) ensuring that your network is connected with an external network and the data traffic flows according to the rules defined.<\/p>\n\n\n\n<p>Traefik as an <em>Edge Router<\/em> acts as a door to your platform intercepting and routing every incoming request: it knows all the logic and every rule that determine which services handle which requests (based on the path, the host, headers, and so on &#8230;).<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/kV6gf5hXtEynQxH8prCt7-CLN4mr8qZ5ZMjrjm_a1tpBLXolPgKhhdw8rd0LRJ21Sj-WMdM7o6xULlx8Htmea9NnJgwEVAmjcQAeXwcr5pqAJMo79avGcUjFxij2vYZ18JPNHnKb=s0\" alt=\"\" width=\"630\" height=\"413\" \/><figcaption>Traefik as an Edge Router<\/figcaption><\/figure>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>REVERSE PROXY\/LOAD BALANCER<\/strong><\/h2>\n\n\n\n<p>A reverse proxy is a server that sits in front of web servers and forwards client (e.g. web browser) requests to those web servers. They provide a layer of security and reliability over our web servers meanwhile also increasing the performance of the requests served by our web servers.<\/p>\n\n\n\n<p>It acts as a filter and barrier for our servers deciding which requests to be allowed to pass to the servers and which are to be filtered as discarded. Most reverse proxies also have the ability to load balance the requests distributing the incoming traffic according to the defined load balancing algorithm\/strategy.<\/p>\n\n\n\n<p>Traefik integrates with your existing infrastructure components (Docker, Swarm mode, Kubernetes, Marathon, Consul, Etcd, Rancher, Amazon ECS, \u2026) and configures itself automatically and dynamically. Pointing Traefik at your orchestrator should be the only configuration step you need. It is as simple as that.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>AUTO SERVICE DISCOVERY<\/strong><\/h2>\n\n\n\n<p>Another major concept of Traefik is Auto Service Discovery. Now a question might have popped in your mind that what exactly do we mean here and how does Traefik achieve it?&nbsp;<\/p>\n\n\n\n<p>Service discovery aims to reduce the configuration efforts required by users and administrators. It requires a configuration file where all the services which are to be integrated are mentioned. Their configuration parameters are represented in a key-value pair making it much easier to understand and manage.<\/p>\n\n\n\n<p>Traefik goes a level above that by implementing the concept of auto service discovery where we don\u2019t need to have a separate configuration file for any service like Docker, Kubernetes, Rancher, etc instead Traefik gets them from the services themselves. In order to achieve that, we just need to mention the provider in the traefik.toml configuration file.<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/1m5FwheJelfJaUamh3_oR5cdYr6yoPJ9GMfKlEFFdkDk-D6JSL4mleusDqzMduhiJ3AhCtktqO352kXncqb7Jo-gFIzplH2RpwW2ZfdtzUt4V01iRXdOTOn7uw0CZhhNshg-Qr6f=s0\" alt=\"\" width=\"630\" height=\"392\" \/><figcaption>Auto-Service Discovery in Traefik<\/figcaption><\/figure>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Configuration in Traefik :<\/strong><\/h2>\n\n\n\n<p>Configuration in Traefik is available in 2 ways :<\/p>\n\n\n\n<ul><li>Dynamic Routing Configuration.<\/li><li>Static Startup Configuration.<\/li><\/ul>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"348\" src=\"https:\/\/lh6.googleusercontent.com\/max1H7moo8rvSIBZexq8o5ZNGihAhQZFl2xsmk_fbV5YCQmF2rCxuZdfELT4rENRqxHdgmDrWrAnGwMfUZVYFaMFepyenGYKWVs1vKiYUNYgIFazKuW0f1ogRt8mpiWO9Cvx3FCp=s0\"><\/p>\n\n\n\n<p>Static configuration is used to define entry points (where to connect) and Providers (Which service is connected) whereas the Dynamic configuration is used to define how the requests of the incoming traffic are going to be handled.<\/p>\n\n\n\n<p>Traefik needs a configuration file to start naming traefik.toml or traefik.yaml. It follows an order of directories searching for the config file. The order lies as:<\/p>\n\n\n\n<ul><li><em>\/etc\/traefik<\/em><\/li><li><em>$XDG_CONFIG_HOME\/<\/em><\/li><li><em>$HOME\/.config\/<\/em><\/li><li><em>. (PWD)<\/em><\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Static Configuration:<\/strong><\/h3>\n\n\n\n<p>There are 3 ways to define static configuration in Traefik but all of them are mutually exclusive i.e., only one of them can be used at a time.<\/p>\n\n\n\n<ol><li>Configuration file.&nbsp;<\/li><li>CMD arguments.<\/li><li>Environment Variables.<\/li><\/ol>\n\n\n\n<p>Their priority is the same as they are stated.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Dynamic Configuration:<\/strong><\/h3>\n\n\n\n<p>Traefik gets its <em>dynamic configuration<\/em> from providers: whether an orchestrator, a service registry or a plain old configuration file. For example,<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/iIBJcytnBRe9Cwq7_Uqi1hgbSZTfAGJsouUM1klpinFLoV5_62HKpB8MnzhEbHNu6K2kfplqVPL-U7-PXpvAMZKMJ3TRJGf3caHSgMoyzS4zGv8hb4QfHfS_5nvwqX5gyBcHVxH1=s0\" alt=\"\" width=\"800\" height=\"339\" \/><figcaption>Static Configuration File for Traefik<\/figcaption><\/figure>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/Xg7KsMK1RM4tRMdVb1oaOUD4BJkEqHIYK-tyZ3_NqFQ-VQITUkcotNduetlbT6I03Kemwj7kEv57dGNQlRRY5OYO4urNgpWQEhoLlPzfIbmdxicmfK5caF5SqjsPb0MLMCsx5phJ=s0\" alt=\"\" width=\"800\" \/><figcaption>Dynamic Configuration file for Traefik<\/figcaption><\/figure>\n\n\n\n<p>Traefik is an edge router that reduces the overhead of maintaining separate configuration files for different providers in the market. It does act as a layer that routes traffic and acts a one shot access point for the infrastructure below.<\/p>\n\n\n\n<p>The next part of this series will continue with the magic of Traefik. We&#8217;ll talk in detail about its architecture and its installation, both on microservices as well as standalone and a neat bonus link for its ansible role. Till then Ciao!<\/p>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/doc.traefik.io\/traefik\/getting-started\/concepts\/\" target=\"_blank\">Image References<\/a><\/p>\n\n\n\n<p><strong> <strong>Blog Pundit: <\/strong><\/strong><a href=\"https:\/\/opstree.com\/blog\/\/author\/naveenverma023\/\"><strong> <\/strong><\/a><a rel=\"noreferrer noopener\" href=\"https:\/\/opstree.com\/blog\/\/author\/bhupendersinghb5dca0b393\/\" target=\"_blank\"><strong>Bhupender Singh<\/strong><\/a> and <strong><a rel=\"noreferrer noopener\" href=\"https:\/\/opstree.com\/blog\/\/author\/adeel109\/\" target=\"_blank\">Adeel Ahmad<\/a><\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/www.opstree.com\/contact-us?utm_source=blog&amp;utm_medium=wordpress&amp;utm_campaign=Traefik_a_Reverse_Proxy%2FLoad_Balancer\" target=\"_blank\" rel=\"noreferrer noopener\">Opstree<\/a> is an End to End DevOps solution provider<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button is-style-fill\"><a class=\"wp-block-button__link\" href=\"https:\/\/www.opstree.com\/contact-us\" target=\"_blank\" rel=\"noreferrer noopener\">CONTACT US<\/a><\/div>\n<\/div>\n\n\n\n<p class=\"has-text-align-center\"><strong>Connect Us <\/strong><\/p>\n\n\n\n<ul class=\"wp-block-social-links aligncenter is-content-justification-right is-layout-flex wp-container-core-social-links-is-layout-1 wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a href=\"https:\/\/www.linkedin.com\/company\/opstree-solutions\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a href=\"https:\/\/www.youtube.com\/channel\/UCeLma6SpNYH7jjYKSBNSexw\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-github  wp-block-social-link\"><a href=\"https:\/\/github.com\/OpsTree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,2C6.477,2,2,6.477,2,12c0,4.419,2.865,8.166,6.839,9.489c0.5,0.09,0.682-0.218,0.682-0.484 c0-0.236-0.009-0.866-0.014-1.699c-2.782,0.602-3.369-1.34-3.369-1.34c-0.455-1.157-1.11-1.465-1.11-1.465 c-0.909-0.62,0.069-0.608,0.069-0.608c1.004,0.071,1.532,1.03,1.532,1.03c0.891,1.529,2.341,1.089,2.91,0.833 c0.091-0.647,0.349-1.086,0.635-1.337c-2.22-0.251-4.555-1.111-4.555-4.943c0-1.091,0.39-1.984,1.03-2.682 C6.546,8.54,6.202,7.524,6.746,6.148c0,0,0.84-0.269,2.75,1.025C10.295,6.95,11.15,6.84,12,6.836 c0.85,0.004,1.705,0.114,2.504,0.336c1.909-1.294,2.748-1.025,2.748-1.025c0.546,1.376,0.202,2.394,0.1,2.646 c0.64,0.699,1.026,1.591,1.026,2.682c0,3.841-2.337,4.687-4.565,4.935c0.359,0.307,0.679,0.917,0.679,1.852 c0,1.335-0.012,2.415-0.012,2.741c0,0.269,0.18,0.579,0.688,0.481C19.138,20.161,22,16.416,22,12C22,6.477,17.523,2,12,2z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">GitHub<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a href=\"https:\/\/www.facebook.com\/opstree\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-medium  wp-block-social-link\"><a href=\"https:\/\/medium.com\/buildpiper\" class=\"wp-block-social-link-anchor\" target=\"_blank\" rel=\"noopener\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20.962,7.257l-5.457,8.867l-3.923-6.375l3.126-5.08c0.112-0.182,0.319-0.286,0.527-0.286c0.05,0,0.1,0.008,0.149,0.02 c0.039,0.01,0.078,0.023,0.114,0.041l5.43,2.715l0.006,0.003c0.004,0.002,0.007,0.006,0.011,0.008 C20.971,7.191,20.98,7.227,20.962,7.257z M9.86,8.592v5.783l5.14,2.57L9.86,8.592z M15.772,17.331l4.231,2.115 C20.554,19.721,21,19.529,21,19.016V8.835L15.772,17.331z M8.968,7.178L3.665,4.527C3.569,4.479,3.478,4.456,3.395,4.456 C3.163,4.456,3,4.636,3,4.938v11.45c0,0.306,0.224,0.669,0.498,0.806l4.671,2.335c0.12,0.06,0.234,0.088,0.337,0.088 c0.29,0,0.494-0.225,0.494-0.602V7.231C9,7.208,8.988,7.188,8.968,7.178z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Medium<\/span><\/a><\/li><\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Traefik is an open-source Edge Router that is made to deploy services with ease. It is brilliant enough to request on behalf of your system and for finding which components are responsible for handling those requests. This is a 4 series blog where PART1 includes Introduction to Traefik with key Concepts and Configuration. Part2,Part3, and &hellip; <a href=\"https:\/\/opstree.com\/blog\/2021\/09\/28\/traefik-a-reverse-proxy-load-balancer\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Traefik a Reverse Proxy\/Load Balancer&#8221;<\/span><\/a><\/p>\n","protected":false},"author":211804421,"featured_media":29900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[28070474],"tags":[724920645,724920641],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/opstree.com\/blog\/wp-content\/uploads\/2025\/11\/DevSecOps-1.jpg","jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfDBOm-2at","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/8337"}],"collection":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/users\/211804421"}],"replies":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/comments?post=8337"}],"version-history":[{"count":11,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/8337\/revisions"}],"predecessor-version":[{"id":8503,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/posts\/8337\/revisions\/8503"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media\/29900"}],"wp:attachment":[{"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/media?parent=8337"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/categories?post=8337"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opstree.com\/blog\/wp-json\/wp\/v2\/tags?post=8337"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}