В минувший вторник компания Containous представила крупное обновление к своему флагманскому Open Source-продукту — service mesh-решению Traefik — в виде версии 2.0.



Главным новшеством в Traefik 2.0 стало появление поддержки протокола TCP. В случае шифрования по TLS для маршрутизации используются данные SNI (Server Name Indication). Примечательная особенность — возможность работы с entrypoint сразу по двум протоколам: HTTP и TCP — на одном и том же порту. Иллюстрация этой фичи:

tcp:
  routers:
    to-db-1:
      entrypoints:
      - web-secure
      rule: "HostSNI(`db1.domain`)"
      service: "db-1"
      tls: {}
http:
  routers:
    to-db1-dashboard:
      entrypoints:
      - web-secure
      rule: "Host(`dashboard.db1.domain`)"
      service: "db1-dashboard"
      tls: {}

В этом примере HTTP-запросы к dashboard.db1.domain направляются на веб-сервис управления базой данных, а TCP к db1.domain — на сервис самой СУБД.

Среди прочих значимых изменений в релизе Traefik 2.0:

  • поддержка так называемых middleware — промежуточных звеньев для запросов, суть которых сводится к возможности проводить специальные операции над запросами до того, как они попадают в сервис (или перед тем, как ответ сервиса отправляется клиентам). Примеры таких операций, названия которых говорят за себя: BasicAuth, Compress, Headers, RateLimit… Часто используемые совместно middleware можно объединять в цепочки (chains);

  • новый веб-интерфейс (WebUI) для просмотра информации о кластере и управления настройками Traefik;


  • поддержка канареечных выкатов (canary deployments) и, соответственно, возможности A/B-тестирования, что реализовано в виде Service Load Balancers, перенаправляющих запросы к сервисам приложения;
  • поддержка зеркалирования запросов для дублирования одного и того же входящего трафика на различные сервисы (тоже реализовано в Service Load Balancers);

  • конфигурация для Kubernetes в виде CRD;
  • альтернативный формат конфигурации в YAML.

Полный список изменений — см. в GitHub-репозитории проекта.

P.S.


Читайте также в нашем блоге:

Комментарии (6)


  1. powerman
    19.09.2019 23:09
    +1

    А ещё лёгким движением руки перенесли поддержку работы в кластере (даже такой невинной, как синхронизация обновляемых сертификатов LE через консул) в платную версию. Что, собственно, убило возможность использовать автоматическое обновление сертификатов LE при запуске traefik в docker swarm, например.


    1. negasus
      19.09.2019 23:38

      Именно перенесли? Я просто не пользовался этой возможностью, но необходимости появляется. То есть, в первой версии это было в OpenSource а сейчас нет? Или я не так понял.


      1. powerman
        20.09.2019 18:26

        Всё так. Было и сплыло.


        1. negasus
          20.09.2019 19:28

          То есть, речь не о этом? (пример из документации)

          # Enable ACME (Let's Encrypt): automatic SSL.
          [certificatesResolvers.sample.acme]
            # File or key used for certificates storage.
            #
            # Required
            #
            storage = "acme.json"
          



          Когда traefik кладет сертификат в Consul KV?


          1. powerman
            20.09.2019 19:36
            +1

            Бесплатный traefik не работает больше с консулом и не кладёт туда сертификаты. Так обстояли дела в 2.0.0-alpha4, это писали на официальном форуме и в слаке, это (правда, очень завуалировано) даже есть в официальном блоге. Насколько я понял, возвращать эту фичу в 2.0.0 они не планировали, но лично я список изменений относительно этой альфы ещё не изучал.


            1. negasus
              20.09.2019 23:18

              Как вариант, может быть дело во времени и их приоритетах? Например, сейчас релиз v2 не работает с Consul Catalog в виде провайдера. А мне вот именно эта фишка очень нужна. Ну что ж, сделал PR, подал. Сейчас дописываю несколько интеграционных тестов, надеюсь скоро влиться в мастер.