Обеспечьте балансировку нагрузки, виртуальный хостинг на основе имени и SSL-терминацию.
Введение
В этом руководстве показано, как использовать Traefik в качестве контроллера входящего трафика в Kubernetes (или k8s) для обеспечения балансировки нагрузки, виртуального хостинга на основе имени и терминации SSL.
Чтобы следовать этому руководству, вам нужно.
- Работающий кластер Kubernetes или управляемый Kubernetes
- Балансировщик нагрузки, который динамически распределяет ваш трафик на любой ресурс Kubernetes, помеченный как LoadBalancer.
- PRIMARY_DOMAIN
Примечание. В этом посте я использую домен PRIMARY_DOMAIN
, пожалуйста, измените его соответствующим образом. Если вам нужен домен paulsblog.dev
, замените PRIMARY_DOMAIN
на paulsblog.dev
.
Что такое Ingress-контроллер?
Ingress Controller — это объект API, который будет управлять внешним доступом к любой развернутой службе в кластере Kubernetes. Обычно используется HTTP или HTTPS. Кроме того, он обеспечивает балансировку нагрузки, виртуальный хостинг на основе имени и терминацию SSL.
Зачем вам Ingress Controller?
Этот список покажет наиболее важные преимущества использования Ingress Controller в кластере Kubernetes:
- Балансировка нагрузки любого трафика между каждой службой, развернутой за пределами кластера Kubernetes.
- Разрешите HTTP-трафик между службами внутри кластера, но примените HTTPS-трафик из-за пределов кластера Kubernetes при прекращении шифрования.
- Упростите взаимодействие между внутренними службами и при необходимости перенаправьте маршрут, изменив правило маршрутизации входящего трафика.
Подготовьте среду Kubernetes
Установка Helm, диспетчера пакетов Kubernetes
Чтобы установить Helm в свой кластер Kubernetes, вы можете использовать официальный скрипт установки Helm, который автоматически установит последнюю версию.
Перед установкой Helm вы можете получить более глубокое представление о Helm, если прочитаете об этом в официальной документации Helm. После этого загрузите скрипт и выполните его локально.
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh
Настройте kubectl
для доступа к кластеру Kubernetes
Если используется kubectl
, вы можете использовать три разных метода работы с кластером:
1. Используйте флаг --kubeconfig
для каждой команды:
kubectl get pods --kubeconfig=config1 kubectl get pods --kubeconfig=config2
2. Используйте переменную среды KUBECONFIG
:
export KUBECONFIG=config1 kubectl get pods kubectl get all export KUBECONFIG=config2 kubectl get pods kubectl get all
3. Скопируйте файл конфигурации в $HOME/.kube/config
Подготовьте диаграмму руля
Чтобы установить Traefik, вы должны добавить официальный репозиторий Traefik Helm в свой клиент Helm. Это можно сделать, выполнив:
helm repo add traefik https://helm.traefik.io/traefik helm repo update
После этого вам нужно настроить диаграмму Helm, создав файл values.yaml
. Все возможные значения можно найти в GitHub диаграммы Traefik Helm и они будут использоваться для установки статической конфигурации прокси Traefik.
Теперь вы должны создать values.yaml
и вставить в него следующее:
--- additionalArguments: - --entrypoints.websecure.http.tls.certresolver=ionos - --entrypoints.websecure.http.tls.domains[0].main=PRIMARY_DOMAIN - --entrypoints.websecure.http.tls.domains[0].sans=*.PRIMARY_DOMAIN - --certificatesresolvers.ionos.acme.dnschallenge.provider=ionos - --certificatesresolvers.ionos.acme.email=webmaster@PRIMARY_DOMAIN - --certificatesresolvers.ionos.acme.dnschallenge.resolvers=1.1.1.1 - --certificatesresolvers.ionos.acme.storage=/data/acme.json deployment: initContainers: - name: volume-permissions image: busybox:1.31.1 command: ["sh", "-c", "chmod -Rv 600 /data/*"] volumeMounts: - name: data mountPath: /data env: - name: IONOS_API_KEY valueFrom: secretKeyRef: key: IONOS_API_KEY name: ionos-api-credentials ingressRoute: dashboard: enabled: false persistence: enabled: true path: /data size: 128Mi
Этот values.yaml
используется для настройки прокси-сервера Traefik и будет:
- используйте IONOS в качестве преобразователя сертификатов. Чтобы найти своего провайдера, обратитесь к документации traefik
- установите основной домен сертификатов на
PRIMARY_DOMAIN
- установите без сертификатов значение
*.PRIMARY_DOMAIN
- хранить каждый сгенерированный сертификат в
/data/acme.json
- запустите контейнер инициализации busybox, чтобы исправить распространенную проблему с правами доступа, описанную здесь: https://github.com/containous/traefik/issues/6972
- загрузить IONOS_API_KEY из секрета. Если вы используете какой-либо другой провайдер, добавьте все необходимые переменные среды.
- деактивировать панель инструментов Traefik
- включить постоянство для прокси-сервера Traefik
Установите Traefik Proxy в качестве входного контроллера
Чтобы установить Traefik Proxy в свой кластер Kubernetes, выполните следующие четыре простых шага.
1. Начните с создания пространства имен Kubernetes:
kubectl create namespace traefik
2. Создайте treafik-secret.yaml
, который будет содержать секрет, используемый в диаграмме Helm для создания SSL-сертификата:
--- apiVersion: v1 kind: Secret metadata: name: ionos-api-credentials namespace: traefik type: Opaque stringData: IONOS_API_KEY: asdkjalshdasdlasdasd.asdahsdhasdkjahsdkasgdkasdg;aksda;d
3. Примените секрет в своем кластере Kubernetes:
kubectl apply -f traefik-secret.yaml
4. Установите Traefik с помощью Helm и примените values.yaml
helm install traefik traefik/traefik --namespace=traefik --values=values.yaml
Если вы что-то изменили в values.yaml
и хотите обновить прокси-сервер Traefik, это можно сделать, выполнив:
helm upgrade traefik traefik/traefik --namespace=traefik --values=values.yaml
Через несколько минут ваш Traefik развернут правильно, и вы можете сопоставить запись PRIMARY_DOMAIN A с IP-адресом балансировщика нагрузки Traefik. Вы можете найти внешний IP-адрес, выполнив:
kubectl get all -n traefik
Он должен вывести следующее:
Если внешний IP-адрес не установлен, подождите некоторое время и повторите попытку. Если вы не получили внешний IP, возможно, у вас не установлен/не куплен внешний балансировщик нагрузки.
Включить панель управления Traefik
Чтобы включить панель мониторинга Traefik в кластере Kubernetes, вам потребуется создать маршрут Ingress и промежуточное ПО для включения базовой аутентификации.
Создайте новую папку с именем traefik-dashboard
, которая будет содержать все файлы для настройки панели управления Traefik.
Теперь создайте пользователя и пароль в кодировке base64, которые будут использоваться в секрете Kubernetes:
htpasswd -nb superTraefikUser unbelievableSafePassword | openssl base64
После этого скопируйте строку htpasswd
и создайте секрет Kubernetes 001-auth-secret
.
--- apiVersion: v1 kind: Secret metadata: name: traefik-dashboard-auth namespace: traefik data: users: YOUR_UNBELIEVABLE_SECURE_HTPASSWD_STRING
Затем создайте промежуточное ПО Kubernetes 002-middleware
, которое будет использовать базовый секрет аутентификации:
apiVersion: traefik.containo.us/v1alpha1 kind: Middleware metadata: name: traefik-dashboard-basicauth namespace: traefik spec: basicAuth: secret: traefik-dashboard-auth
Теперь вы можете создать входящий маршрут 003-ingressroute
для панели инструментов Traefik:
--- apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: traefik-dashboard namespace: traefik spec: entryPoints: - websecure routes: - match: Host(`traefik.PRIMARY_DOMAIN`) kind: Rule middlewares: - name: traefik-dashboard-basicauth namespace: traefik services: - name: api@internal kind: TraefikService
Если вы назвали файлы, как описано, у вас должна быть следующая файловая структура:
traefik-dashboard --001-auth-secret --002-middleware --003-ingressroute
Переключитесь на верхнюю папку и используйте следующую команду, чтобы применить все файлы в правильном порядке:
kubectl apply -f traefik-dashboard
Через несколько минут панель инструментов Traefik будет подключена к сети и доступна по ее домену (https://traefik.PRIMARY_DOMAIN).
Заключительные примечания
Я надеюсь, что эта статья дала вам быстрый и четкий обзор того, как настроить Traefik Proxy в качестве Ingress Controller в вашем кластере Kubernetes.
Использование Helm для настройки контроллера Traefik Ingress упрощает установку, перенастройку и обновление прокси-сервера Traefik.
С помощью этой настройки вы можете развернуть любой модуль/службу Kubernetes и использовать IngressRoute, чтобы сделать его доступным через SSL с любым поддоменом.
Я хотел бы услышать ваши отзывы об этом уроке. Кроме того, если вы уже запустили установку Traefik и используете другой подход, прокомментируйте здесь и объясните, что вы сделали по-другому. Также, если у вас есть вопросы, задавайте их в комментариях. Я отвечу на них, если это возможно.
Не стесняйтесь связаться со мной в мой блог, LinkedIn, Twitter и GitHub.
Эта статья изначально была опубликована в моем блоге по адресу https://www.paulsblog.dev/how-to-install-traefik-ingress-controller-in-kubernetes/