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. Траефик В зависимости от точки входа、маршрутизатор、Промежуточное программное обеспечение и концепция обслуживания:
nginx-ingress:
Используйте nginx в качестве внешнего балансировщика нагрузки, постоянно взаимодействуйте с API Kubernetes через входной контроллер, получайте изменения во внутренних службах, модулях и т. д. в режиме реального времени, затем динамически обновляйте конфигурацию nginx и обновляйте конфигурацию для использования. эффект, достигая цели обнаружения услуг.
Traefik: сам Traefik предназначен для взаимодействия с API Kubernetes в режиме реального времени, отслеживания изменений во внутренних службах, модулях и т. д., а также автоматического обновления конфигураций и перезагрузки.
Официально предусмотрены следующие способы установки Traefik:
В этой статье будет использоваться Helm Приходить Установить Траефик。Убедитесь, что выполнены следующие требования:
Описание окружающей среды:
[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 ~]#
Чтобы использовать тип сервиса LoadBalancer в локальном кластере, мы развернем Metallb для его реализации. Что касается принципа реализации metalb, в этой главе он не будет подробно объясняться. Заинтересованные дети могут провести собственное исследование и установить сервис metallb. заранее, чтобы traefik svc мог использовать службы LoadBalancer
Посетите официальный сайт: https://metallb.universe.tf/installation/.
[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.
Посмотреть модуль
[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
Настроить IP-пул
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
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
Посмотреть услуги
[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 Labs Репозиторий диаграмм добавлен в Helm:
helm repo add traefik https://traefik.github.io/charts
# Вы можете обновить репозиторий диаграмм, выполнив следующую команду:
helm repo update
Установка и развертывание
# использоватьhelmкомандная строка Установитьэто:
kubectl create ns traefik
helm install -n traefik traefik traefik/traefik
Эффект развертывания
[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 мы используем CRD, поставляемый с Traefik, чтобы создать правило входа для доступа к панели мониторинга.
# 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
[root@localhost ~]# kubectl apply -f traefik-dashboard.yaml
ingressroute.traefik.containo.us/dashboard created
В этом кластере развернут балансировщик нагрузки MetalLB и используется LoadBalancer для предоставления службы traefik, доступ к которой можно получить напрямую с помощью EXTERNAL-IP-адреса.
Добавить локальные хосты
192.168.36.140 traefik.lc
Посетите http://traefik.lc/ для успешного развертывания.
В этой статье представлен Treafik и его сравнение с Nginx INgress, а также шаг за шагом объясняется процесс развертывания. В следующей главе будут описаны более практические способы борьбы с Treafik на уровне предприятия, так что следите за обновлениями!