Корпоративная практика Traefik: внедрение Traefik на производственном уровне
Корпоративная практика Traefik: внедрение Traefik на производственном уровне
В предыдущей статье говорилось о развертывании Практика Ingress Enterprise: развертывание высокой надежности

Введение в Траефик

Traefik — это пограничный маршрутизатор с открытым исходным кодом, который делает услуги публикации интересными и простыми. Он получает запросы от имени вашей системы и определяет компоненты, ответственные за обработку этих запросов. Уникальность его заключается в том, что в дополнение к многочисленным функциям он может автоматически определять правильную конфигурацию для вашего сервиса. Когда Traefik проверяет вашу инфраструктуру, он обнаруживает соответствующую информацию и определяет, какая служба обслуживает какой запрос. Traefik изначально совместим со всеми основными технологиями кластеризации, такими как Kubernetes, Docker, Docker Swarm, AWS, Mesos, Marathon и другими, и может обрабатывать несколько одновременно; (Он работает даже с устаревшим программным обеспечением, работающим на «голом железе».) С Traefik нет необходимости поддерживать и синхронизировать отдельные файлы конфигурации: все происходит автоматически в реальном времени (без перезагрузок, без разрывов соединений). С Traefik вам нужно тратить время только на разработку и развертывание новых функций в вашей системе, а не на настройку и поддержание ее рабочего состояния. Адрес проекта: https://github.com/traefik/traefik, документ официального сайта: https://doc.traefik.io/traefik/

Схема движения

Ниже приводится официальная диаграмма

концепция

Из приведенного выше рисунка мы знаем, что при запросе Traefik запрос сначала поступает к точкам входа, а затем анализирует входящие запросы, чтобы увидеть, соответствуют ли они определенным маршрутизаторам. Если он соответствует, он будет обработан через ряд промежуточных программ, затем трафик будет перенаправлен на traefikServices и, наконец, запрос будет отправлен к службам Kubernetes. Траефик В зависимости от точки входа、маршрутизатор、Промежуточное программное обеспечение и концепция обслуживания:

  • Провайдеры: основные компоненты,Отслеживание изменений информации о маршрутизации,Обновить маршрут,Аналогичная модификация nginxConfiguration,reloadСлужить
  • Точки входа: Точки входа в сеть.,Слушайте входящий трафик,Файл конфигурации, аналогичный nginxlistenУкажите порт прослушивания
  • Маршрутизаторы: запрос анализа (хост,path,headers,SSLждать),Правила сопоставления,Файл конфигурации, аналогичный nginxserver_name+location
  • Промежуточное программное обеспечение: промежуточное программное обеспечение,Используется для изменения запросов или принятия решений на основе запросов.,Файл конфигурации, аналогичный nginx,locationКонфигурациякеш добавлен в сегмент、сжатие、Запросить первоклассную конфигурацию
  • Service:Воля Переслать запрос в приложение,Фактический Служить, ответственный за то, как Конфигурация в конечном итоге обрабатывает входящие запросы.,Служба Traefik находится между промежуточным программным обеспечением и KubernetesService.,Может реализовать такие функции, как взвешенная нагрузка и копирование трафика.,Аналогично восходящему потоку в httpКонфигурация в nginx Конфигурация

Сравнение с Nginx-Ingress

nginx-ingress:

Используйте nginx в качестве внешнего балансировщика нагрузки, постоянно взаимодействуйте с API Kubernetes через входной контроллер, получайте изменения во внутренних службах, модулях и т. д. в режиме реального времени, затем динамически обновляйте конфигурацию nginx и обновляйте конфигурацию для использования. эффект, достигая цели обнаружения услуг.

Traefik: сам Traefik предназначен для взаимодействия с API Kubernetes в режиме реального времени, отслеживания изменений во внутренних службах, модулях и т. д., а также автоматического обновления конфигураций и перезагрузки.

Преимущества траэфика

  • Никаких других зависимостей не требуется, используйте GO Исполняемый файл, скомпилированный на языке
  • Поддерживает несколько бэкэндов, таких как Docker, режим Swarm, Kubernetes, Marathon, Consul, Etcd, Rancher, Amazon ECS и т. д.
  • Поддержка REST API
  • Горячая перезагрузка файла конфигурации,Может автоматически отслеживать изменения конфигурации и обнаруживать новые Служить,и Автоматические обновления Не требуется ручной перезапуск
  • Поддержка функций предохранителя и ограничения тока
  • Поддержка обучения ротации и балансировке нагрузки
  • Обеспечьте простой пользовательский интерфейс
  • Поддержка веб-сокета, HTTP/2, GRPC
  • Автоматически обновлять сертификаты HTTPS
  • Поддержка режима кластера высокой доступности

Установить Траефик

Официально предусмотрены следующие способы установки Traefik:

  • Используйте официальный образ Docker.
  • использоватьHelmУстановить
  • использоватьдвоичный Установить
  • Компилировать двоичные файлы из исходного кода

В этой статье будет использоваться Helm Приходить Установить Траефик。Убедитесь, что выполнены следующие требования:

  • Kubernetes 1.16+
  • Helm version 3.9+

Описание окружающей среды:

Язык кода:javascript
копировать
[root@localhost ~]# kubectl get nodes
NAME                    STATUS   ROLES                  AGE    VERSION
localhost.localdomain   Ready    control-plane,master   1d     v1.22.10
 
[root@localhost ~]# helm version    
version.BuildInfo{Version:"v3.11.3", GitCommit:"323249351482b3bbfc9f5004f65d400aa70f9ae7", GitTreeState:"clean", GoVersion:"go1.20.3"}
[root@localhost ~]#

Развертывание балансировщика нагрузки MetalLB

Чтобы использовать тип сервиса LoadBalancer в локальном кластере, мы развернем Metallb для его реализации. Что касается принципа реализации metalb, в этой главе он не будет подробно объясняться. Заинтересованные дети могут провести собственное исследование и установить сервис metallb. заранее, чтобы traefik svc мог использовать службы LoadBalancer

Установка руля металлб

Посетите официальный сайт: https://metallb.universe.tf/installation/.

Язык кода:javascript
копировать
[root@localhost ~]# kubectl create ns metallb-system
 
[root@localhost ~]# helm repo add metallb https://metallb.github.io/metallb
"metallb" has been added to your repositories
 
[root@localhost ~]# helm install -n metallb-system metallb metallb/metallb
NAME: metallb
LAST DEPLOYED: Mon Aug 21 16:51:37 2023
NAMESPACE: metallb-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
MetalLB is now running in the cluster.
 
Now you can configure it via its CRs. Please refer to the metallb official docs
on how to use the CRs.

Посмотреть модуль

Язык кода:javascript
копировать
[root@localhost ~]# kubectl get pod -n metallb-system
NAME                                  READY   STATUS    RESTARTS       AGE
metallb-controller-77bbffbc7b-jr78f   1/1     Running   1 (1d ago)     1d
metallb-speaker-7pqhj                 1/1     Running   1 (1d ago)     1d

Конфигурация режима уровня 2

Настроить IP-пул

Язык кода:javascript
копировать
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: default
  namespace: metallb-system
spec:
  addresses:
  - 192.168.36.139.139-192.168.36.200  # Ручная настройка Диапазон IP
  autoAssign: true
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: default
  namespace: metallb-system
spec:
  ipAddressPools:
  - default

Создайте тестовое приложение

Язык кода:javascript
копировать
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - name: http
          containerPort: 80
 
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

Посмотреть услуги

Язык кода:javascript
копировать
[root@localhost ~]# kubectl get service
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
kubernetes   ClusterIP      10.96.0.1      <none>           443/TCP        1d
nginx        LoadBalancer  10.102.129.137 192.168.36.139   80:31274/TCP   1d
 
# Извне кластера получите доступ к этому IP-адресу: 192.168.36.139.

Успешный доступ указывает на успешное развертывание.

image.png

Хелм использует Traefik

Добавить репозиторий traefik

Язык кода:javascript
копировать
# Воля Traefik Labs Репозиторий диаграмм добавлен в Helm:
helm repo add traefik https://traefik.github.io/charts
 
# Вы можете обновить репозиторий диаграмм, выполнив следующую команду:
helm repo update

Установка и развертывание

Язык кода:javascript
копировать
# использоватьhelmкомандная строка Установитьэто:
kubectl create ns traefik
helm install -n traefik traefik traefik/traefik

Эффект развертывания

Язык кода:javascript
копировать
[root@localhost ~]# kubectl get all  -n  traefik   
NAME                           READY   STATUS    RESTARTS   AGE
pod/traefik-65944f8d5f-k5bfl   1/1     Running   0          1d
 
NAME              TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                      AGE
service/traefik   LoadBalancer   10.110.60.107   192.168.36.140   80:32301/TCP,443:31378/TCP   1d
 
NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/traefik   1/1     1            1           1d
 
NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/traefik-65944f8d5f   1         1         1       1d

Traefik Dashboard

После установки traefik мы используем CRD, поставляемый с Traefik, чтобы создать правило входа для доступа к панели мониторинга.

Маршрутизация в режиме CRD

Язык кода:javascript
копировать
# traefik-dashboard.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: dashboard
  namespace: traefik
spec:
  entryPoints:
    - web
  routes:
    - match: Host(`traefik.lc`)
      kind: Rule
      services:
        - name: api@internal
          kind: TraefikService
Язык кода:javascript
копировать
[root@localhost ~]# kubectl apply -f traefik-dashboard.yaml
ingressroute.traefik.containo.us/dashboard created

В этом кластере развернут балансировщик нагрузки MetalLB и используется LoadBalancer для предоставления службы traefik, доступ к которой можно получить напрямую с помощью EXTERNAL-IP-адреса.

Добавить локальные хосты

Язык кода:javascript
копировать
192.168.36.140 traefik.lc

Посетите http://traefik.lc/ для успешного развертывания.

Подвести итог

В этой статье представлен Treafik и его сравнение с Nginx INgress, а также шаг за шагом объясняется процесс развертывания. В следующей главе будут описаны более практические способы борьбы с Treafik на уровне предприятия, так что следите за обновлениями!

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода