İşbirlikte Docker konteynerleri, bir konteynerin başladığı veya durakladığı geleneksel proxy dosyalarının optimizasyonu ve yeniden yapılandırılması için karmaşık hale getirir.Bu makale, Docker daemon'a kadar olan sabitleme, yapılandırma, yapılandırma, geliştirme, güvenlik gerektiren geleneksel referanslar ile bu görevleri doğrudan entegre ederek, Traefik'i tekrar yapılandırır ve yeniden yapılandırır.Bu makale, sabit ölçeklendirme ve sabitleme ortamların nasıl azaltıldığını anlamanızı sağlar.

Traefik nedir?

Traefik, açık kaynak bir şekilde tersine dönüşen ve yük dengesi özellikle mikro hizmet ve konteynerli mimariler için inşa edilmiştir. Birden fazla sağlayıcıyı destekler - Docker, Kubernetes, Konsolosluk, Amazon ECS ve diğerleri - otomatik hizmet keşif ve dinamik routing sağlar.

  • [0]Automatic SSL/TLS[Dönetici:0) Otomatik sertifika yönetimi ile Let's Encrypt (ACME) ile otomatik sertifika yönetimi ile.
  • [FONT:0)Middleware support[[[Dönetici:0)) limit, kimlik doğrulama, geri yazma ve daha fazla talep etmek için.
  • [FONT:0]Built-in izleme[[Dönetici: 1 ) bir web pano ve Prometheus metrics ile.
  • [FONT=0)Load dengeleme[[Dönetici:0) Birden fazla konteyner örneği arasında.
  • [FONT:0]Dynamic konfigürasyon[Dynamic configuration dosya, etiketler veya API aracılığıyla.

Traefik'in mimarisi ayrıdır:0)[Dönemli noktalar[Döneticileri Nereden gelene kadar kontrol sağlar) [Döneticileri [Döneticileri ile uyumlu adresler) ve [[Döneticiler[Dönderler)[Döneticiler[Döneticiler)

Önlemler Önlemler

Kuruluma girmeden önce, aşağıdakilere sahip olmanızı sağlayın:

  • Bir sunucu veya yerel makine çalıştırıyor:0)Docker Motor) (vers 20.10 veya daha sonra tavsiye edilir).
  • Docker komutları ve ağ konseptleri ile temel aşinalık.
  • Domain adı ( HTTPS örnekleri için) ve DNS kayıtlarını sunucunuza işaret etme yeteneği.
  • PortsFLT:0)80[DÜT:1) ve [[Dönetici:2)443[DÜDÜDÜDÜDÜDÜDÜDÜDÜSTRİYE) HTTP ve HTTPS trafiği için güvenlik duvarına açık.

AWS veya DigitalOcean gibi bir bulut sağlayıcı kullanıyorsanız, güvenlik grubunuz bu limanlarda inbound trafik sağlar.

Set Up Docker with Traefik

Bu bölüm temel adımlarla yürür: adanmış bir Docker ağı oluşturmak, uygun yapılandırma ile Traefik konteyneri başlatmak ve doğru şekilde çalıştırdığını doğrulamak.

Docker Network Oluşturma

Tüm konteynerler - Traefik kendisi ve uygulama konteynerleri - sorunsuz iletişim için aynı Docker ağı paylaşmalıdır. Bir kullanıcı tanımlı köprü ağı oluşturun:

docker network create traefik-net

Özel bir ağ kullanarak, varsayılan köprü ağı ile çatışmaları önler ve konteynerlerin birbirlerini isimle çözmesine izin verir. Traefik, hizmeti keşfetmesi için Docker etiketleri kullanır, ancak ağ bağlantıları uygulama konteynerlerine ulaşmak için gereklidir.

Traefik Konteyneri Koşuyor

Aşağıdaki komutla Traefik'i başlatın.Docker soketini, Traefik'in konteyner olayları için dinlemesine izin vermek için koyduğumuzu unutmayın, harita portu 80 ve 443 ve bir yapılandırma dosyası. Ayrıca port 8080'de panoyu da açığa çıkarıyoruz.

docker run -d \
 --name=traefik \
 --network=traefik-net \
 -p 80:80 \
 -p 443:443 \
 -p 8080:8080 \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v $PWD/traefik.yml:/traefik.yml \
 -v $PWD/acme.json:/acme.json \
 traefik:v2.9

Explanation of the options:

  • [FONT:2) ve [[Dönetici: Expose HTTP ve HTTPS giriş noktaları.
  • [FONT: 4): Panelin (daha sonra kimlik doğrulama ile)
  • [[Docker API'ye erişim sağlamak. Bu dinamik algılama için gereklidir ancak güvenlik etkilerini (daha sonra ortaya çıkar).
  • [[BİLMİN: Binbaşı statik konfigürasyon ve SSL sertifikası depolama.

WDÜ3'ün dosyası, Traefik'e başlamadan önce (yalnızca kök için hazır) izinler ile mevcut:

touch acme.json && chmod 600 acme.json

Traefik

Traefik'in yapılandırması iki parçaya bölünmüştür: [Dönetici:0) [Dönetici: 1) ve [[Dönetici:2) Karşılaştırma[Dönetici[Döneticileri için) konfigürasyonu (Dönderlik dosyası, giriş seviyesi ve panolar gibi küresel ayarlar.

Statik Konsülasyon (traefik.y ml)

Aynı dizide, konteyner çalıştırdığınız bir dosya oluşturun. Aşağıda HTTP ve HTTP giriş noktaları ile üretim hazır bir örnek, Docker sağlayıcı yapılandırması ve SSL için şifre atalım.

entryPoints:
 web:
 address: ":80"
 # Redirect HTTP to HTTPS if desired (commented out for initial setup)
 # http:
 # redirections:
 # entryPoint:
 # to: web-secure
 # scheme: https

 web-secure:
 address: ":443"

 dashboard:
 address: ":8080"

providers:
 docker:
 exposedByDefault: false # Only expose containers with traefik.enable=true
 network: traefik-net

api:
 dashboard: true
 debug: true

certificatesResolvers:
 letsencrypt:
 acme:
 email: [email protected]
 storage: /acme.json
 httpChallenge:
 entryPoint: web

log:
 level: INFO

Anahtar noktaları:

  • [FONT=0)Entry puanları[[[Dönemli: 1.Bölümler:)) <>[0]Entry puanları[[Dönemliler: 9/14; [[)) 80.
  • [FONT:0)Providers[[Dönetici: Docker sağlayıcı, sadece [[GÖRÜŞÜNCÜŞÜNCÜŞÜNCÜŞÜNCÜŞÜNCÜŞÜNCÜŞÜNCÜŞÜNCÜŞÜNCÜŞÜNCÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜŞÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ
  • [FONT=0)API & Dashboard[Dönetici: Üretimde pankartın tamamının kontrol edilmesi için kullanılabilir.
  • [FONT=0)))))))[FONT=0))))))))))))) · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
  • [FONT=0)Log level[D][/FONT=0)[[FONT=0))[[FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=TR][/FONT=FONT=FONT=TR][/FONT=FONT=TR][/FONT=FONT=FONT=FONT=TR][/FONT=FONT=TR][/FONT=)))

Docker Tags aracılığıyla dinamik yapılandırma

Traefik Docker sağlayıcısı ile çalışırken, konteynerleri çalışan konteynerlerden gelen etiketler okur. Etiketler, routing kuralları, ortawares ve diğer ayarlar tanımlayan konteynerlere bağlı olarak metadata bulunur. Örneğin, basit bir web hizmeti gibi etiketlere sahip olabilir:

docker run -d \
 --name=app1 \
 --network=traefik-net \
 -l "traefik.enable=true" \
 -l "traefik.http.routers.app1.rule=Host(`app1.example.com`)" \
 -l "traefik.http.routers.app1.entrypoints=web-secure" \
 -l "traefik.http.routers.app1.tls.certResolver=letsencrypt" \
 my-web-image

Etiketler, yönlendiriciler, hizmetler ve orta sınıflar dinamik olarak inşa etmek için Traefik tarafından parsedilir. Herhangi bir değişiklik, Traefik'i yeniden başlatmadan hemen etkilenmektedir.

İşbirlikleri

Şimdi Traefik'e trafik nasıl yol açacağını söyleyen etiketlerle gerçek uygulama konteynerlerini dağıtıyoruz. Aşağıda iki ortak desen vardır: tek bir domain hizmeti ve birden fazla hizmet için bir yol tabanlı yönlendirme.

Örnek 1: Basit Web Servisi HTTPS ile

80 numaralı limanda bir web uygulaması çalıştırdığınız bir konteynere sahip olduğunuz gibi, hedef onu ESFLT:22'de hizmet etmektir: Run:

docker run -d \
 --name=myapp \
 --network=traefik-net \
 -l "traefik.enable=true" \
 -l "traefik.http.routers.myapp.rule=Host(`myapp.example.com`)" \
 -l "traefik.http.routers.myapp.entrypoints=web-secure" \
 -l "traefik.http.routers.myapp.tls=true" \
 -l "traefik.http.routers.myapp.tls.certResolver=letsencrypt" \
 -l "traefik.http.services.myapp.loadbalancer.server.port=80" \
 my-web-app-image

İç limana açıkça işaret ettiğimizi unutmayın ([[DÜDÜŞÜN) çünkü konteyner birden fazla liman ortaya çıkarabilir.Eğer konteynerin “Düzük” port doğruysa, Traefik otomatik olarak onu kapatabilir, ancak açık daha güvenli.

Örnek 2: Birden Çok Hizmetler için Pat bazlı Routing

İki mikro hizmet olduğunu varsayalım - [[DörtÜye ve ►DÜye ait olan (kahkaha) - aynı alanda da akıp giden bir şekilde, (kahkaha) ⁇ .

API servisi için:

docker run -d \
 --name=api \
 --network=traefik-net \
 -l "traefik.enable=true" \
 -l "traefik.http.routers.api.rule=Host(`app.example.com`) && PathPrefix(`/api`)" \
 -l "traefik.http.routers.api.entrypoints=web-secure" \
 -l "traefik.http.routers.api.tls=true" \
 -l "traefik.http.routers.api.tls.certResolver=letsencrypt" \
 -l "traefik.http.services.api.loadbalancer.server.port=3000" \
 api-image

Önde:

docker run -d \
 --name=frontend \
 --network=traefik-net \
 -l "traefik.enable=true" \
 -l "traefik.http.routers.frontend.rule=Host(`app.example.com`) && PathPrefix(`/`)" \
 -l "traefik.http.routers.frontend.entrypoints=web-secure" \
 -l "traefik.http.routers.frontend.tls=true" \
 -l "traefik.http.routers.frontend.tls.certResolver=letsencrypt" \
 -l "traefik.http.services.frontend.loadbalancer.server.port=80" \
 frontend-image

Traefik, belirli bir süre için kuralları değerlendirir; daha spesifik yollar (örneğin, 03.30 gibi) ilk olarak eşleştirilir. Bu, her isteğin doğru geri dönüş idaresini sağlar.

Gelişmiş Traefik Özellikler

Temel routing ötesinde, Traefik güvenlik, güvenilirlik ve gözlemlenebilirliği artırmak için güçlü özellikler sunar.

Ortawares

Ortawareler, geri dönüşlere ulaşmadan önce bu işlem talepleridir.Demirler arasında zincirlenebilir ve yeniden kullanılabilirler. Güvenlik Ortawares şunları içerir:

  • [FONT:0)BasicAuth[[Dönetici: panoyu veya bir stilize ortamı koruyun.
  • [FONT:0)RateLimit[[DÜDÜT:1): Tek bir IP'den Throttle istekleri.
  • [FONT:0]Headers[DÜDÜT:1)[Üye Olmayanlar (örneğin, Âdem, Âdem, Âdem, Âdem, Âdem, Âdem, Âdem, ÂHÂH, ÂH, ÂH, ÂH, ÂH, ÂHÂH, ÂH, ÂHÂH, ÂHÂHÂHÂHÂHÂH, ÂHÂH, ÂHÂHÂH, ÂHÂH, ÂHÂH, ÂHÂHÂHÂHÂHÂHÂHÂHÂHÂH ÂH, ÂH ÂHÂH ÂH ÂH ÂHÂHÂHÂH ÂH ÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂHÂH ÂH ÂHÂH ÂHÂHÂHÂHÂHÂH
  • [FONT:0)RedirectScheme[[Dönetici: Force HTTP to HTTPS yönlendirmesi.
  • [FONT:0)IP WhiteList[[Dönemli IP aralıklarına erişim.

Örnek: HTTP Basic Auth ile Traefik panteyi Güvenli. İlk olarak aurFLT:38 dosyası oluşturun:

htpasswd -nB user | tee -a .htpasswd

Sonra dinamik bir yapılandırma dosyasında orta bir dikkat (veya Traefik konteyner üzerindeki etiketler aracılığıyla) ve bunu pano yönlendiricisinde referanslayın. Basitlik için, ayrı bir dosyada orta dikkat edin (örneğin, 03.03.2012) ve dosya sağlayıcı aracılığıyla yükleyin:

http:
 middlewares:
 dashboard-auth:
 basicAuth:
 usersFile: /etc/traefik/.htpasswd

Sonra Traefik konteyneri aynı zamanda arayış için güncelleyin ve [[DüzDÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜ:

providers:
 file:
 filename: /dynamic.yml

Son olarak, pano yönlendiricisini ortaware (veya dosya sağlayıcısında pano yönlendiricisini tanımlamak) etiketini etiketle. Resmi Traefik dokümanlar ayrıntılı rehberlik sağlar.

Yük Balancing

Yük dengelemesi, birden fazla konteyner aynı hizmet adını paylaştığında otomatikdir. Traefik, gelen talepleri varsayılan olarak bir tur-robin algoritması kullanarak dağıtırsınız. Örneğin, trafik 70/30 iki versiyon arasında taşıyabilirsiniz:

docker run -d \
 --name=myapp-v1 \
 --network=traefik-net \
 -l "traefik.http.services.myapp.loadbalancer.server.port=80" \
 -l "traefik.http.routers.myapp.rule=Host(`app.example.com`)" \
 -l "traefik.http.routers.myapp.service=myapp" \
 myapp:v1

docker run -d \
 --name=myapp-v2 \
 --network=traefik-net \
 -l "traefik.http.services.myapp.loadbalancer.server.port=80" \
 -l "traefik.http.services.myapp.loadbalancer.server.weight=30" \
 myapp:v2

Sağlık Kontrolleri

Traefik, konteyner sağlığını izleyebilir ve sağlıksız örneklere yönlendirmeyi durdurabilir. Ambalajlama sağlığı, etiketlerle yük dengeleyici servisine göz atabilir:

-l "traefik.http.services.myapp.loadbalancer.healthcheck.path=/health"
-l "traefik.http.services.myapp.loadbalancer.healthcheck.interval=10s"
-l "traefik.http.services.myapp.loadbalancer.healthcheck.timeout=3s"

Bir konteyner sağlık kontrolü başarısız olursa, Traefik tekrar geçinceye kadar havuzun dışına çıkar.

Dashboard ve Metriks ile Takip Et

Panel (port 808080'de varsayılan olarak kullanılabilir), yönlendiriciler, hizmetler, orta sınıflar ve sağlık. Üretim için Prometheus metrikleri etkinleştirin:

metrics:
 prometheus:
 addEntryPointsLabels: true
 addServicesLabels: true

Sonra metrik uç noktası (düşman) Prometheus'tan çıkarıp Grafana ile görselleştirin.

Traefik Kullanımının Faydaları

Traefik, geleneksel ters proxyların eşleştiremeyeceği şekillerde konteyner dağıtım iş akışlarını kolaylaştırır:

  • [FONT=0)Zero- touch routing[[DÜT:1): Yeni konteynerler otomatik olarak proxy veya düzenleme yapılandırma dosyalarına yeniden başlamadan keşfedildi ve rotalandı.
  • [FONT=0)Integrated[[Dönetici: Şifreleme sertifikası ihraç ve yenileme, manuel ek ve sertifika sonlama hataları azaltalım.
  • [FONT:0)Layer 7 routing[[Dönt: 1 ): Yol önceden ek, host, başlık, sorgu parametreleri ve karmaşık kural kombinasyonları için destek.
  • [FONT:0)Middleware ekosistemi[Dönetici: Zengin güvenlik, dönüşüm ve throttling için orta dikkatler.
  • [FONT:0) Çok yüksek performanslı destek[Dönetici: Use Docker, Kubernetes, Konsolosluk, hatta düz dosya tabanlı konfigürasyon - Traefik adapts.
  • [FONT:0)Observability: Dashboard, loglar ve metrikler, sorunları çabucak teşhis etmeye yardımcı olur.

Bu avantajlar daha hızlı dağıtım döngülerine, daha az konfigürasyon hatalarına ve daha kolay ölçeklendirmeye tercüme edilir. Bir konteyner çoğaltıldığında, Traefik otomatik olarak yük-balances in examples; bir konteyner kazasında, geri dönüş hemen trafiği göndermeyi durur.

Sorun Ortak Konuları Sorun Gidermek

Traefik'in otomasyonuyla bile sorunlar ortaya çıkabilir. Aşağıda sık sık sık tuzaklar ve çözümleri vardır.

  • [FONT:0)Kontainer rotalarda görünmedi : Aynı Docker ağına ([DÜT:50) eklenmiş ve etiketliFLT:51’ye sahiptir.
  • [FONT:0]SSL sertifikası elde edilmez[[Dönetici: Domaininizin sunucunun halka IP'ye çözülmesini sağlayın.O port 80'in HTTP-01 meydan okuması için erişilebilir olduğunu kontrol edin.If using a DNS challenges, configure the provider right. Check Traefik logs for ACME errors.
  • [[Dashboard güvenilmez[[Dashboard-Dashboard]: Panel varsayılan olarak 8080 port'de servis edilir.Eğer giriş noktası adını veya portını değiştirirseniz, pano yönlendiricisi için etiketler ayarlamanız gerekir.
  • [FONT:0]Köpek kuralların uygun olmadığının aksine; Traefik, kuralları, [[DÜŞÜNCÜT:54] olarak değerlendiriyor.Eğer iki yönlendirici aynı istekle aynı istekle karşılanırsa, daha spesifik kurala sahip olan bir kişi kullanılır.
  • [0]502 Kötü Gateway[[Dönetici: Bu genellikle Traefik'in arka uç konteynere ulaşamayacağını gösterir.Kaçıştan gelen limanda dinleyebilmeyi sağlar.

Her zaman ayrıntılı routing kararlarını görmeye sorunken,FL: 5 ile başlayın.

Güvenlik Önergeleri

Docker soketi ile Traefik'i çalıştırın, Traefik konteynerinin kontrolünü kazanırsa, Docker daemon'u manipüle edebilirler.

  • [FONT:0)Docker soketine erişim[Dönetici: Filtre API aramalarına bağlı olarak soket proxy çözümleri kullanın.
  • [0]Ködülü olmayan bir kullanıcı olarak Traefik'i ([Dönetici: 60) ve düşler: ►)
  • [FONT:0]Isolating network[[Dönetici: Rehlikeli konteynerler olarak aynı ağa bağlanmayın.
  • [FONT:0]Dint için kimlik doğrulama[Dönetici:0)
  • [0]Yönekmesel güncellemeler[[Dönetici: Keep Traefik ve temel resmi tarihe kadar.

Ek olarak, yalnızca iç IP'lerden (örneğin VPN) port 8080'e erişimi kısıtlamak için güvenlik duvarı kuralları yapılandırın.

Diğer Ters Proxies ile Karşılaştırma

Traefik, Docker için tek geri dönmez; Nginx ve HAProxy popüler alternatiflerdir. İşte Traefik nasıl ortaya çıkıyor:

  • [FONT=0]Z.Nginx[[FONTT:0) Nginx, Nginx-proxy gibi manuel yapılandırma dosyası yönetimi veya araçları gerektirir. Traefik, yerel Docker entegrasyonunu ek senaryolar olmadan sağlar. Nginx daha hafif topluluk desteği ve basit bir şekilde yapılandırmak için daha iyidir, ancak Traefik'in dinamik yeniden yapılandırması hızla değişen ortamlar için üstündür.
  • [FONT:0]Z. HAProxy[DÜT:1): HAProxy, ham TCP yük dengeleme ve performansta üstündür, ancak yerleşik otomatik hizmet keşfinden yoksundur ve Şifrelemenin daha kolay ve kapsayıcı bir ekosistemde HTTP/HTTPS için yapılandırmak daha kolaydır.
  • [FONT=0]Z. Caddy[Dönetici: Caddy otomatik HTTPS ve basit konfigürasyonu da sunuyor, ancak Traefik, tek kullanımlık dağıtımlar için daha basit bir orta sınıf desteği ve bir paniğe sahiptir; Traefik mikro hizmet için daha iyi ölçekler.

Docker Compose veya Kubernetes kullanan takımlar için, Traefik'in sağlayıcı entegrasyonu operasyonel yükü önemli ölçüde azaltır.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Transefik, Docker konteyner dağıtımını akıllı, kendini yapılandırma yeteneği, otomatik olarak hizmet keşfetme yeteneği, SSL sertifikalarını yönetme ve etiketleme trafiğinin, geliştirme ve operasyonları yavaşlatan birçok manuel adımı ortadan kaldırır.Bu makale, en iyi uygulamaları ele alır: bir Docker ağı oluşturmak, sabit ve dinamik ayarlarla birlikte, uygulama konteynerlerini otomatik olarak dağıtma yeteneği, yüksek kaliteli dokümanlar gibi gelişmiş özellikleri yönetmek, yük dengelemek, dengeleme ve sağlık kontrolleri gibi birçok kılavuzu ortadan kaldırır.