Корпоративная практика 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,добавлено кэш, сжатие, Запросить в сегменте locationConfiguration первоклассную конфигурацию
  • 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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose