Траэфик с nip.io

#docker #docker-compose #traefik #jwilder-nginx-proxy

Вопрос:

Я пытаюсь представить некоторые приложения, использующие traefik и nip.io

Мой файл docker-compose выглядит следующим образом

 version: '3.3'

services:
  traefik:
    image: traefik:1.7-alpine
    command: --web --docker --docker.domain=app.test --logLevel=DEBUG
    ports:
      - 80:80
      - 8080:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro

  whoami:
    image: tons/whoami-go
    labels:
      - "traefik.port=8080"
      - "traefik.frontend.rule=Host:whoami.127.0.0.1.nip.io"
 

Но я не могу дозвониться до своей службы

 $ curl -vvv whoami.127.0.0.1.nip.io
 

Приведенное выше возвращает 404, и полный подробный вывод будет

 $ curl -vvv whoami.127.0.0.1.nip.io
*   Trying 127.0.0.1:80...
* Connected to whoami.127.0.0.1.nip.io (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: whoami.127.0.0.1.nip.io
> User-Agent: curl/7.71.1
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
< Content-Type: text/plain; charset=utf-8
< Vary: Accept-Encoding
< X-Content-Type-Options: nosniff
< Date: Mon, 19 Apr 2021 12:07:29 GMT
< Content-Length: 19
< 
404 page not found
* Connection #0 to host whoami.127.0.0.1.nip.io left intact
 

Это прекрасно работает, когда я это делаю

 $ curl -vvv -H "Host: whoami.127.0.0.1.nip.io" localhost
 

И полный результат очень похож

 $ curl -vvv -H "Host: whoami.127.0.0.1.nip.io" localhost
*   Trying ::1:80...
* Connected to localhost (::1) port 80 (#0)
> GET / HTTP/1.1
> Host: whoami.127.0.0.1.nip.io
> User-Agent: curl/7.71.1
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Length: 12
< Content-Type: text/plain; charset=utf-8
< Date: Mon, 19 Apr 2021 12:12:13 GMT
< 
* Connection #0 to host localhost left intact
49d197f2d4ae⏎
 

Примечательно, что заголовок хоста правильно отправляется с обоими запросами.

У меня та же проблема с использованием jwilder/nginx-прокси, но у меня нет проблем, когда я использую nip.io с помощью Kubernetes ingress независимо от использования Traefik или Nginx.

Кто-нибудь имеет представление о том, что случилось?

ОБНОВЛЕНИЕ: Это работает на Mac моих друзей и на виртуальной машине ubuntu, но не на моей коробке Fedora

Ответ №1:

Вы можете использовать основной домен, настроив HostRegexp. например : — «traefik.http.routers.app1.rule=HostRegexp( app1.{ip:.*}.nip.io )» Полная информация https://traefik.me