Traefik 2.0 ve Docker Compose etiketleriyle http'yi https'ye nasıl yeniden yönlendirebilirim?


14

Lütfen bunun bir Traefik V2 sorusu olduğunu unutmayın. V1'de bir çözümüm vardı ama V2 tam bir yeniden ıslatma.

Yukarıdaki durumun http://whoami.mysite.com adresini http s : //whoami.mysite.com adresine yönlendirmesi gerekiyordu .

  • Http s güzel çalışıyor.
  • Http, https'ye yönlendirmiyor ve 404 hatasını yükseltmiyor.

Başka dosya yok. Şimdilik bu Docker-compose.yml içinde daha fazla konuşlandırma hazırlamak için bir test olduğu için.

version: "3.3"

services:

  traefik:
    image: "traefik:v2.0"
    container_name: "traefik"
    command:
      - "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.web-secure.address=:443"
      - "--certificatesresolvers.myhttpchallenge.acme.httpchallenge=true"
      - "--certificatesresolvers.myhttpchallenge.acme.httpchallenge.entrypoint=web-secure"
      #- "--certificatesresolvers.myhttpchallenge.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
      - "--certificatesresolvers.myhttpchallenge.acme.email=me@mail.com"
      - "--certificatesresolvers.myhttpchallenge.acme.storage=/letsencrypt/acme.json"
    labels:
      - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - "./letsencrypt:/letsencrypt"
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

  whoami:
    image: "containous/whoami"
    container_name: "whoami"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`whoami.mysite.com`)"
      - "traefik.http.routers.whoami.entrypoints=web"
      - "traefik.http.routers.whoami.middlewares=redirect-to-https@docker"
      - "traefik.http.routers.whoami-secured.rule=Host(`whoami.mysite.com`)"
      - "traefik.http.routers.whoami-secured.entrypoints=web-secure"
      - "traefik.http.routers.whoami-secured.tls=true"
      - "traefik.http.routers.whoami-secured.tls.certresolver=myhttpchallenge"

Yanıtlar:


10

Şimdi Gérald Croës'in bir eğitiminde şu adreste çalışan bir çözüm var:

https://blog.containo.us/traefik-2-0-docker-101-fc2893944b9d

services:  
  traefik:  
    image: "traefik:v2.0.0"  
    # ...  
    labels:  
      # ...        
      # middleware redirect  
      - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"  
      # global redirect to https  
      - "traefik.http.routers.redirs.rule=hostregexp(`{host:.+}`)"  
      - "traefik.http.routers.redirs.entrypoints=web"  
      - "traefik.http.routers.redirs.middlewares=redirect-to-https"  


1
Mevcut bir acme.json'a sahip olmanın , ara katman yazılımının HTTPS'ye yeniden yönlendirilmesini engelleyebileceğini unutmayın . Traefik başlangıcında zaten varsa çıkarın.
AymDev

7

Traefik hizmetinin kendisini yapılandırmanız gerekmez. Traefik'te sadece şu giriş noktalarına sahip olmanız gerekir: 443 (web güvenli) ve: 80 (web)

Traefik yalnızca inputPoint işlevi gördüğünden ve yeniden yönlendirme yapmayacağından, hedef hizmetteki ara katman yazılımı bunu yapacaktır.

Şimdi hedef hizmetinizi aşağıdaki gibi yapılandırın:

version: '2'
services:
  mywebserver:
    image: 'httpd:alpine'
    container_name: mywebserver
    labels:
      - traefik.enable=true
      - traefik.http.middlewares.mywebserver-redirect-web-secure.redirectscheme.scheme=https
      - traefik.http.routers.mywebserver-web.middlewares=mywebserver-redirect-web-secure
      - traefik.http.routers.mywebserver-web.rule=Host(`sub.domain.com`)
      - traefik.http.routers.mywebserver-web.entrypoints=web
      - traefik.http.routers.mywebserver-web-secure.rule=Host(`sub.domain.com`)
      - traefik.http.routers.mywebserver-web-secure.tls.certresolver=mytlschallenge
      - traefik.http.routers.mywebserver-web-secure.tls=true
      - traefik.http.routers.mywebserver-web-secure.entrypoints=web-secure
      # if you have multiple ports exposed on the service, specify port in the web-secure service
      - traefik.http.services.mywebserver-web-secure.loadbalancer.server.port=9000

Temel olarak akış şu şekilde gider:

Talep: http://sub.domain.com:80 -> traefik (hizmet) -> mywebserver-web (yönlendirici, http kuralı) -> mywebserver-redirect-web-secure (ara katman yazılımı, https'ye yönlendir) - -> mywebserver-web-secure (yönlendirici, https kuralı) -> mywebserver (hizmet)


Bu gereksinim olduğundan emin değilim. Tarif ettiğiniz şekilde, talepler traefik bağlantı noktası 80'e gidiyor ve program arka uç hizmetine yönlendirilmeden önce https olarak değiştiriliyor gibi görünüyor. Ancak arka uç hizmeti https sonlandırmaz, bu yüzden başarısız olur. Fikir, ana sunucuyu koruyan 443 numaralı bağlantı noktasında traefik'e geri dönmek için gerçek bir http yönlendirmesi yapmak olacaktır. Traefik v1'de statik yapılandırma ile kolayca yapıldı.
Andrei Dascalu

Bu çalışıyor. Bu dokümantasyonda olmalı. Sadece http sürümü için bir yönlendirici yapmak ve yönlendirme ara katman yazılımı koymak gerekir.
milosa

2

Tamam, bulundu ... Orta yolların Traefik düzeyinde ilan edilebileceğini varsaydım, ancak bunların hizmet düzeyinde beyan edilmesi gerekiyor.

Bu hat :

- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"

Whoami servisinin etiketlerinde olmalı.

Açıklanan sorunla ilgili olmayan bir başka nokta, http sorununun 80 numaralı bağlantı noktasında yapılması gerektiğidir.

- "--certificatesresolvers.myhttpchallenge.acme.httpchallenge.entrypoint=web-secure"

"Web güvenli" içindeki "güvenli" yi kaldırın.


Bu garip. Traefik hizmetinde beyan edilen ve uygulama hizmetinden atıfta bulunulan yeniden yönlendirme ara katman yazılımı var ve çalışıyor.
Izydorr

Önceki kodla işe yarıyor gibi görünüyor ama http aslında https'ye yönlendirmiyor.
Thib

Uygulamadan Middleware'e nasıl başvuruyorsunuz?
Thib

Traefik hizmetinde ben ortakatmanını tanımlayan bir etiket vardır: traefik.http.middlewares.https-only.redirectscheme.scheme=https ve uygulama hizmeti bir etiket vardır: traefik.http.routers.myapp.rule=Host($ {APP_HOST} ), traefik.http.routers.myapp.entrypoints=web,traefik.http.routers.myapp.middlewares=https-only
Izydorr

1
Etiketlerde her şeyim var. Anladığım kadarıyla, ara katman yazılımı kullanmak iki etiket gerektirir: biri bildirim / yapılandırma için (traefik.http.middlewares.https-only.redirectscheme.scheme = https) ve ardından hizmete uygulama (traefik.http.routers.myapp.muteriwares) = HTTPS okunur). Beyan, tıpkı benim yaptığım gibi, uygulama hizmetinde veya treafik hizmetinde bulunabilir. Uygulama hizmetinde bir orta doğrultu bildirseniz bile, bunu başka yerlerde bildirilen diğer ara yazılımlarla birlikte gösterge tablosunda gördüğünüze dikkat edin. Belki yanılıyorum ama bence bunlardan herhangi birini herhangi bir hizmette kullanabilirsiniz.
Izydorr

1

Traefik v2.2 aracılığıyla her şeyi HTTPS'ye nasıl yönlendireceğimizi ararken bu cevabı arıyordum ve benim için en iyi seçenek bu ENV değişkenlerini Traefik'e eklemekti ve tüm trafiği otomatik olarak HTTPS'ye yönlendiriyordu.

TRAEFIK_ENTRYPOINTS_WEB_ADDRESS=:80
TRAEFIK_ENTRYPOINTS_WEBSECURE_ADDRESS=:443
TRAEFIK_ENTRYPOINTS_WEB_HTTP_REDIRECTIONS_ENTRYPOINT_TO=websecure

Bu ile ara katman için bir şey eklemek gerek yok.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.