3 पॉइंट द्वारा GN⁺ 2024-05-06 | 1 टिप्पणियां | WhatsApp पर शेयर करें

कंटेनर का उपयोग न करने पर भी Traefik पर विचार क्यों करें

Traefik के बारे में ज्ञात बातें

  • Traefik का मकसद माइक्रोसर्विसेज़ वर्ल्ड में मदद करना है
  • कई YouTuber ने साझा किया है कि वे Docker या Kubernetes जैसे कंटेनर इंफ्रास्ट्रक्चर का इस्तेमाल कर रहे हैं
  • Traefik को कंटेनर के रूप में रन किया जाता है, और Docker socket को Traefik container में mount करके Traefik उन अन्य कंटेनरों को ऑटोमेटिक रूप से डिटेक्ट कर सकता है जिन्हें इसे expose करना है
  • लेबल के जरिए किसी विशेष कंटेनर के लिए proxy व्यवहार को कॉन्फ़िगर किया जा सकता है
  • Traefik Let's Encrypt से TLS certificate को ऑटोमेटिक रूप से request करता है और नया कंटेनर दिखते ही सेवा तुरंत उपलब्ध हो जाती है

कंटेनर के बिना भी Traefik क्यों उपयोगी है

सामान्य गलतफहमी: कंटेनर इंजन की ज़रूरत नहीं

  • Traefik को कंटेनर इंजन पर चलने की ज़रूरत नहीं है, और सेवा को भी कंटेनर इंजन पर चलने की ज़रूरत नहीं होती
  • Traefik Golang में लिखा गया है और एक single binary के रूप में compile होता है
  • Golang में लिखा और single binary में compile होने वाला software देखकर सच में अच्छा लगता है
  • Deploy करना आसान है और पूर्ण नियंत्रण बना रहता है

सामान्य गलतफहमी: सेटिंग फाइल भी सपोर्ट होती है

  • यदि कंटेनर का उपयोग नहीं हो रहा है तो container label नहीं इस्तेमाल कर सकते, लेकिन labels अक्सर confusing और पढ़ने में कठिन होते हैं
  • Traefik को configuration file से भी सेट किया जा सकता है
  • Traefik कॉन्फ़िगरेशन को दो हिस्सों में बाँटता है: certificate provider (जैसे Let's Encrypt) और entry point (वे पोर्ट जहाँ Traefik listen करता है) को शामिल करने वाला "static" हिस्सा, तथा router, service और middleware को शामिल करने वाला "dynamic" हिस्सा
  • Traefik फ़ाइल सिस्टम इवेंट्स सुन सकता है और dynamic भाग को hot reload कर सकता है

दस्तावेज़ अच्छी तरह तैयार है

  • Traefik के सभी core concepts साफ़ तरीके से समझाए गए हैं
  • संबंधित पेज के शीर्ष पर चुनी गई instance-configuration method के उदाहरण मौजूद हैं
  • दस्तावेज़ अधिकांश ज़रूरतों को कवर करता है
  • साइडबार मददगार है

Traefik मज़बूत और अच्छी तरह डिज़ाइन की हुई लगती है

  • यदि configuration सही नहीं होती है तो यह warning दे देती है, और अभी तक कोई random समस्या देखी नहीं गई
  • Traefik शायद default में बहुत ज्यादा लॉग नहीं लिखती, लेकिन request कैसे process हो रही है यह आसानी से समझ आता है और बिना ज्यादा परेशान हुए जल्दी शुरू किया जा सकता है

वाकई पसंद आने वाले फीचर्स

TLS passthrough और PROXY protocol

  • Traefik TLS passthrough और HAProxy के PROXY protocol (inbound और outbound) का समर्थन करती है
  • TLS passthrough का मतलब यह है कि traffic सीधे उस web service तक भेजा जा सकता है जो अपना TLS certificate खुद provide करता है
  • proxy पर TLS को terminate किए बिना ही सेवा सीधे Let's Encrypt से certificate request कर सकती है
  • PROXY protocol एक ऐसा तरीका है जिससे उपयोगकर्ता से सबसे पहले proxy पर पहुँचकर गुम होने वाली information को सुरक्षित तरीके से आगे भेजा जा सके
  • PROXY protocol को लक्ष्य सेवा में भी enable होना चाहिए, लेकिन Apache2 और Nginx (इसलिए PHP) में उपलब्ध है; और protocol support करने वाली सेवाओं की सूची बढ़ती जा रही है

Traefik इस्तेमाल करने में जो खटकता है

authentication

  • NGINX में Vouch Proxy से कुछ सेवाओं को Azure AD द्वारा protect किया गया है
  • Traefik में NGINX-जैसे auth के लिए ForwardAuth है, लेकिन Vouch Proxy अभी तक Traefik पर काम नहीं करता
  • Keycloak instance को rollout करके AAD के साथ integrate करने के बाद इसे ForwardAuth में use किया जा सकता है, लेकिन पहले उस Keycloak instance को सुरक्षित और अपडेटेड रखना होगा
  • traefik-forward-auth बहुत recommend किया जाता है, लेकिन अंतिम अपडेट जून 2020 में हुआ था; डेवलपर GitHub से गायब हैं और dependencies अपडेट करनी पड़ेंगी
  • पहले oauth2-proxy के साथ खराब अनुभव रहा है
  • HTTP2/3, timeout, body size और WebSocket जैसी चीज़ों के लिए user और service के बीच की हर proxy में कॉन्फ़िगरेशन चाहिए, इसलिए proxy पर proxy करना बहुत error-prone लगता है
  • Traefik ForwardAuth सरल दिखता है, इसलिए AAD integration के लिए कोई छोटा अपना tool बनाना होगा या traefik-forward-auth को fork करके audit करना और dependencies अपडेट करनी होंगी

User-Agent और IP address block करना

  • archive.org में internal सेवाओं को archive नहीं करना चाहते
  • robots.txt और समान headers, archive.org पर असरदार नहीं होते, इसलिए crawler block करने का तरीका केवल "archive.org_bot" user-agent को block करना या IP range block करना ही है
  • Traefik में user-agent या IP address को block करने के लिए केवल third-party plugins के जरिए ही संभव है
  • Third-party plugins को अपडेट के लिहाज से ध्यान में रखना पड़ता है और वे security vulnerability का कारण बन सकते हैं, इसलिए पसंद नहीं है
  • IPAllowList middleware से IP block करके block करने वाली IP के अलावा बाकी सभी को allow किया जा सकता है
  • IP ranges को calculate किया जा सकता है और सीधे block करने से बेहतर लगता है, परंतु केवल बाकी IP देखकर ठीक-ठीक कौन से subnet block हुए हैं यह साफ़ नज़र नहीं आता, इसलिए यह तरीका उतना elegant नहीं लगता

GN+ की राय

  • Traefik, कंटेनर उपयोग करने हैं या नहीं, दोनों स्थिति में एक आकर्षक reverse proxy solution लगता है। खासकर Golang में लिखा और single binary में compile होने के कारण इसका deploy और management आसान बनता है।
  • दस्तावेज़ीकरण भी अच्छी तरह बना है, जिससे Traefik के concepts समझने और configuration examples खोजने में काफी मदद मिलेगी।
  • TLS passthrough या PROXY protocol support जैसी advanced features भी अच्छी तरह से उपलब्ध हैं।
  • लेकिन authentication वाले हिस्से में अभी तक कोई बहुत बेहतर समाधान नहीं दिखता; या तो अपना auth server बनाना पड़ेगा या मौजूद project को सुधारने का प्रयास करना होगा।
  • user-agent या IP block करने की सुविधा अगर default में मिलती तो बेहतर होता, लेकिन बाहर के plugin के अलावा कोई परिष्कृत तरीका नहीं दिखता।
  • NGINX के विकल्प के तौर पर Traefik का serious consideration योग्य विकल्प है; खासकर उन लोगों के लिए जो NGINX की configuration को बहुत complex महसूस करते हैं, Traefik का सरलपन आकर्षक लगेगा।

1 टिप्पणियां

 
GN⁺ 2024-05-06
Hacker News टिप्पणियाँ
  • Traefik के pros और cons की तुलना
    • फायदे: Let's Encrypt के ऑटोमेटेड इंटीग्रेशन के कारण NGINX से Traefik पर माइग्रेट किया
    • नुकसान: डॉक्यूमेंटेशन ठीक से नहीं था, लॉगिंग भी पर्याप्त नहीं थी, और certificate regeneration कभी-कभी फेल होकर production outage बना देता था
    • आखिरकार फिर से NGINX पर वापस चले गए
  • Traefik की जगह Caddy चुनने की राय
    • Traefik के YAML सेटअप से कहीं आसान है Caddyfile को manage करना
    • कई plugins का सपोर्ट (जैसे Caddy का Coraza WAF plugin)
  • Traefik के NGINX की तुलना में बेहतर होने के संभावित use case पर चर्चा
    • अगर 20–30 containers वाला छोटा Docker होस्ट environment हो, तो NGINX Proxy Manager पर्याप्त है
    • K3s में डिफ़ॉल्ट रूप से Traefik सेट होने से K8s cluster को जल्दी टेस्टिंग के लिए setup करना आसान होता है
  • अगर Caddy से Traefik पर switch करने पर विचार हो
    • Caddy के फायदे: Docker label-based auto config, TLS certificate management, DNS auto-setup आदि
    • Caddy के नुकसान: वर्कलोड restart होने पर Caddy पूरी तरह रीस्टार्ट हो जाता है, जिससे कुछ देर के लिए service डाउन होती है; wildcard certificate सेट करना complex है
    • K8s में Traefik का अच्छा अनुभव रहा, इसलिए इसे personal project में भी apply करने पर विचार है
  • Traefik के dynamic config और debugging कठिन होने की वजह से Caddy पर switch करने का अनुभव
    • Caddy सरल है और layer कम होने से config काफी easy हो जाती है
  • Traefik को लंबे समय तक use करने के बाद static config के फायदे समझ में आए
    • Docker labels से dynamic config करने की मुश्किल और debugging का झंझट
    • template engine से host/target/port combinations के लिए आसान static config फाइलें बनाना
    • Ansible से config फाइलें बनाकर deploy automate करना
  • HAProxy से तुलना
    • 10 साल से ज्यादा समय से HAProxy इस्तेमाल कर रहे हैं और runtime API जैसी features से dynamic config देकर इसे cloud era के हिसाब से modernized किया गया है
  • Traefik के उपयोग के सबसे बड़े फायदे और नुकसान
    • फायदा: Docker labels के जरिए config सीधे pass हो जाती है, इसलिए Traefik config में लगभग बदलाव की जरूरत नहीं पड़ती
    • नुकसान: Traefik का सही उच्चारण करना कठिन लगता है ("trey-feek" जैसा बोलने का मन करता है)