Некоторое время назад автор написал «Одну статью для понимания маршрутизации и пересылки данных в различных сценариях», которая понравилась многим читателям. Однако в то же время некоторые читатели также оставили сообщения с вопросом, могут ли они написать практическую статью по этому вопросу. Настройка облачных поставщиков. Кстати, в предыдущей статье в основном практиковались на самых базовых принципах, потому что LB у многих производителей. Все сервисы основаны на Nginx, поэтому конкретного содержания по настройке использования нет. Однако недавно автор обнаружил, что использовать сервис LB поставщиков облачных услуг не так уж и «просто». На самом деле здесь еще много подводных камней. В этой статье для вашего удобства собрано несколько статей об услугах этих поставщиков облачных услуг.
В настоящее время Tencent Cloud、Alibaba Cloud и другие крупные поставщики облачных услуг по сутипроходитьпоставлятьCLB-сервисВыполнение маршрутизации и пересылки,Что такое КЛБ?
Через официальную документацию поставщика облачных услуг.определение:
Балансировка нагрузки (Облако Load Balancer,CLB)Это служба, которая распределяет трафик на несколько внутренних серверов.。балансировка нагрузка может расширить возможности внешнего обслуживания системы приложений за счет распределения трафика и устранить отдельные точки отказа для повышения доступности системы приложений.
Служба балансировки нагрузки виртуализирует ресурсы нескольких внутренних серверов, расположенных в одном регионе, в высокопроизводительный пул служб приложений с высокой доступностью, устанавливая адрес виртуальной службы (VIP). Распределяйте сетевые запросы от клиентов на пул серверов способом, заданным приложением.
Группа балансировки нагрузки, предоставляющая услуги, обычно состоит из следующих частей:
балансировка нагрузки Пример:один CLB Экземпляр — это работающая служба балансировки нагрузки, используемая для распределения трафика.
Слушатель:Используется для проверки клиентских запросов и пересылки запросов на внутренний сервер.。
Бэкэнд-сервер:задняя частьизгруппа Служитьустройство Пример,Используется для получения запросов от внешнего интерфейса.
Запросы доступа из-за пределов балансировки нагрузки распределяются на внутренние серверы для обработки через экземпляр балансировки нагрузки и в соответствии с соответствующими политиками и правилами пересылки.
CLB обычно предоставляет две услуги пересылки.Прямо сейчасчетвертый этажиседьмой этажэкспедиторская служба
Сценарии их применения совершенно разные, а именно:
ссылка:https://help.aliyun.com/zh/slb/classic-load-balancer/user-guide/listener-overview
В то же время между ними существуют некоторые различия в технических принципах:
Например, в случае переадресации по четвёртому этажу,экспедиторская службабольше похоже надаодинмаршрутизатор,Измените только адрес назначения сообщенияи т. д.,Не получить содержимое сообщения,Дальше вперед по алгоритму,Фактически, это все еще исходное TCP-соединение.,Одновременная пересылка в основном ИсправлятьЦелевой IP→Порт
И вседьмой этажэкспедиторская службасередина:экспедиторская службабольше похоже надаодинпрокси-сервер,потому чтоседьмой этажэкспедиторская службаможет быть основано наURL-адрес, имя домена, тип браузераПодождите переадресации,такНеобходимо получить содержимое сообщения,такможет толькоВосстановите новое TCP-соединение.
Здесь вы можете увидеть разницу между ними:
1.потому чтоседьмой служба переадресации этажа требует установления двух TCP-соединений, а четвертый этажэкспедиторская служба Необходимо создать только один разTCPсоединять,так Маршрутизация данныхспособность(Репост может работать тяжело)На тех же ресурсахчетвертый этажэкспедиторская служба Лучшая производительность
2.потому чтоседьмой Служба переадресации этажей может предоставить URL-адрес, имя домена, тип браузераспособность,такседьмой этажэкспедиторская служба Работает лучше
3. Потому что седьмой этаж мощный,Большой расход,Поэтому требования к аппаратному обеспечению выше.,это также означаетдороже
Во-первых, давайте посмотрим на внедрение сервиса Tencent Cloud CLB:
балансировка нагрузки CLB поставлятьчетвертый этаж(TCP Протокол/UDP Протокол/TCP SSL протокол)иседьмой этаж(HTTP Протокол/HTTPS протокол)балансировка нагрузки Служить。ты можешьпроходитьбалансировка нагрузки CLB Распределяйте бизнес-трафик на несколько внутренних серверов, чтобы исключить отдельные точки сбоя и обеспечить доступность бизнеса. балансировка нагрузки CLB Он использует кластерное развертывание для достижения синхронизации сеансов, устранения отдельных точек сервера, повышения избыточности системы и обеспечения стабильности обслуживания. В одном регионе можно развернуть несколько компьютерных залов для обеспечения аварийного восстановления в пределах города.
Видно, что служба CLB Tencent Cloud в основном предоставляет четырехуровневые и семиуровневые протоколы, поэтому давайте возьмем получение IP-адреса клиента в качестве примера, чтобы увидеть ситуацию с маршрутизацией и пересылкой данных.
Службы уровня 4 (TCP/UDP/TCP SSL) и уровня 7 (HTTP/HTTPS) CLB поддерживают получение реального IP-адреса клиента непосредственно на серверной CVM без дополнительной настройки.
в
четвертый этажбалансировка нагрузка (TGW), в бэкэнде CVM источник получен из IP то есть клиент IP。 седьмой этажбалансировка нагрузки(STGW),существовать CLB При использовании короткого соединения с серверной службой на серверной CVM источник получен из IP то есть клиент ИП; CLB При использовании длительного соединения с серверной службой CLB Нет более прозрачного источника ИП, можешь пройти X-Forwarded-For или remote_addr поле для прямого получения клиента IP。седьмой этажбалансировка Пожалуйста, посмотрите журнал доступа к нагрузкам Настройте журналы доступа для CLS。
Видно, что два метода получения IP-адреса клиента немного отличаются. В частности, в качестве примера мы возьмем сервис Nginx для приема данных, передаваемых из CLB:
ссылка:https://cloud.tencent.com/document/product/214/3728 Nginx План конфигурации
1. Когда Nginx используется в качестве сервера, используйте http_realip_module для получения реального IP-адреса клиента. Вы можете использовать команду nginx -V, чтобы проверить, установлен ли модуль http_realip_module. Если в Nginx не установлен этот модуль, вам необходимо перекомпилировать Nginx и добавить --with-http_realip_module.
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
wget http://nginx.org/download/nginx-1.17.0.tar.gz
tar zxvf nginx-1.17.0.tar.gz
cd nginx-1.17.0
./configure --prefix=/path/server/nginx --with-http_stub_status_module --without-http-cache --with-http_ssl_module --with-http_realip_module
make
make install
vi /etc/nginx/nginx.conf
Измените поля конфигурации и информацию в следующих разделах:
иллюстрировать в xx.xx.xx.xx Необходимо изменить прокси-сервер верхнего уровня. IP или ВОЗ IP часть.
fastcgi connect_timeout 300;
fastcgi send_timeout 300;
fastcgi read_timeout 300;
fastcgi buffer_size 64k;
fastcgi buffers 4 64k;
fastcgi busy_buffers_size 128k;
fastcgi temp_file_write_size 128k;
# Исправлять поля конфигурации и информацию следующих частей
# Если IP-адрес возврата к источнику прокси-сервера относительно разбросан и вы не знаете IP-адрес возврата к источнику прокси-сервера, вы можете записать его как 0.0.0.0/0, что означает, что все запросы поступают с IP-адреса источника XFFсерединаполучить
set_real_ip_from xx.xx.xx.xx;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
service nginx restart
cat /path/server/nginx/logs/access.log
Облачный контейнерный сервис Tencent (Tencent Kubernetes Engine , ТКЕ), именуемые в дальнейшем Под TKE можно понимать Tencent Cloud версии K8S. Из официальной документации TKE, в TKE середина,внешний по умолчаниюбалансировка устройство нагрузки Балансировка Tencent Cloud нагрузки В качестве первой точки доступа для служебного трафика существует четыре способа получения IP-адреса клиента.
Прямо сейчас Service Поля конфигурации в ресурсах Service.spec.externalTrafficPolicy. В этом поле указывается, хочет ли служба направлять внешний трафик на узел локально или на уровне всего кластера. Стручки. Существует два значения параметра: Кластер (по умолчанию) и Local Способ
Cluster:Указывает на скрытый источник клиента IP,LoadBalancer и NodePort Трафик службы типа может быть перенаправлен на другие узлы Pods。
Local:Указывает на сохранение источника клиента IP и избегать LoadBalancer и NodePort Тип служебного трафика, пересылаемого на другие узлы Pods
Поэтому вам нужно только изменить файл yaml службы на Local.
apiVersion: v1
kind: Service
metadata:
name: example-Service
spec:
selector:
app: example-Service
ports:
- port: 8765
targetPort: 9376
externalTrafficPolicy: Local
type: LoadBalancer
Преимущества и недостатки этого вида Способностей заключаются в следующем:
использовать TKE Встроенная поддержка CLB прямой Pod Функция пересылки (CLB Прозрачная переадресация и обход Kubernetes Service переадресация трафика), бэкэнд Pods Источник полученного запроса IP то есть клиент Истинный источник IP
У многих здесь друзей могут возникнуть вопросы, можно ли еще сделать так?
Давайте рассмотрим типы обслуживания K8S. Их три типа:
ClustrerIP,NodePort,LoadBalancerтри вида
вNodePortТип является доступным извне типом.,ClustrerIPТип является доступным типом внутри кластера.
иLoadBalancerТипы в основном подходят только для поддержки внешнихбалансировка облачный провайдер нагрузки
Тогда этот тип доступен в Tencent Cloud:
Родной LoadBalancer модель Service балансировка может быть создана автоматически нагрузки CLB и через кластер Nodeport Вперед в кластер, а затем передать iptable или ipvs Выполните вторую переадресацию.
фактически,Выше представлены наиболее избранные модели.,Разработчикам не нужно знать подробности здесь
Однако в следующих сценариях более рекомендуется напрямую подключаться к службе модели Pod:
Сцена здесь подходит как раз для,Однако этот вид использования имеет некоторые ограничения.,Конкретно:
Конкретное размещениессылкапозжеизсоединять:https://cloud.tencent.com/document/product/457/41897
Преимущества и недостатки этого вида Способностей заключаются в следующем.
В сценарии семиуровневой переадресации службы (HTTP/HTTPS) вы можете получить HTTP Header середина X-Forwarded-For и X-Real-IP Значение поля для получения реального источника клиента IP。TKE В серединаиспользовать есть два сценария. Способ,Принципиальная картина введения следующая Внизпоказано:
можно увидеть,Здесь и CLB Способность получения практически одинакова.,Это также было передано из CLB.
Анализ преимуществ и недостатков Способа выглядит следующим образом:
Получите реальный исходный IP-адрес через загрузку модуля ядра TOA.
Анализ преимуществ и недостатков Способа выглядит следующим образом:
Преимущества: для TCP Транспортные возможности, на уровне ядра и только для TCP Первый пакет соединения преобразуется практически без потери производительности.
Недостатки: Необходимо загружать на рабочий узел кластера. TOA Модуль ядра, и перенесенный источник необходимо получить посредством вызова функции на стороне сервера. IP и информацию о порте, конфигурация более сложная.
для UDP Способность передачи, каждый пакет данных будет изменен и добавлен. option данные (источник IP и исходный порт), что приводит к потере производительности канала передачи данных в сети.
TOA Принцип модуля ядра и возможность загрузки см. https://cloud.tencent.com/document/product/608/73564
общийссылка:https://cloud.tencent.com/document/product/457/48949
Во-первых, давайте посмотрим на внедрение сервиса Alibaba Cloud CLB:
CLB обеспечивает Установить адрес виртуальной службы,Виртуализируйте несколько добавленных облачных серверов в одном регионе в высокопроизводительный и доступный пул серверных служб.,и согласно правилам пересылки,придет от клиентаиз请求分发给задняя часть Служитьустройство池серединаизоблако Служитьустройство。 CLB по умолчанию проверяет состояние работоспособности облачных серверов в пуле облачных серверов, автоматически изолирует облачные серверы в нештатном состоянии, устраняет отдельные точки отказа одного облачного сервера и улучшает общие возможности обслуживания приложения. Кроме того, CLB также обладает способностью противостоять DDoS-атакам, повышая возможности защиты сервисов приложений. В этой статье представлена традиционная модель балансировки Alibaba Cloud. нагрузка Функции, предоставляемые CLB, и обзор функций, CLB поддерживает 4 уровня и 7 уровней балансировки. нагрузки,И предоставлять такие функции, как проверка работоспособности, обслуживание сеансов, переадресация доменных имен и т. д.,Обеспечьте высокую доступность серверных служб.
можно увидеть,CLB-сервис Alibaba Cloud также в основном обеспечивает протокол четвертого этажа иседьмой протокол протокола.,Итак, давайте возьмем в качестве примера получение IP-адреса клиента.,Взгляните на ситуацию с маршрутизацией и пересылкой данных.
Балансировка традиционного типа нагрузкиCLBчетвертый этаж мониторинга поддерживает получение реального IP-адреса клиента внутреннего сервера. Обычно внутренний сервер может определить реальный IP-адрес клиента без каких-либо действий. Но когда клиент использует адрес IPv6 для доступа к службе IPv4, прокси-сервер необходимо включить одновременно на прослушивающем и внутреннем сервере CLB. Протокол, внутренний сервер может получить реальный IP-адрес клиента.
можно увидеть,Alibaba Cloud середина за четвертое место этаж получает реальный IP-адрес, есть два решения: одно — напрямую, другое — через прокси Protocol,Конкретная реализация,Официальная документация содержит более подробную информацию.,Вот лишь часть основного содержания:
прямойполучатьосновной Способ:
Через прокси Protocolполучатьосновной Способ:
седьмой этажбалансировка нагрузки (протокол HTTP или HTTPS) поддерживает сохранение информации о реальном IP-адресе клиента в поле X-Forwarded-For заголовка HTTP. После соответствующей настройки сервер может получить реальный IP-адрес клиента.
можно увидеть,Alibaba Cloud середина реальный IP-адрес получающего клиента за седьмой этаж,основнойдапроходитьX-Forwarded-Forполучать,По сравнению с полем получения Tencent Cloud в сценарии короткой ссылки на один Remote_addr меньше.,Однако из-за восстановления самого TCP,Так что защитить только одно поле — не большая проблема.
Формат поля X-Forwarded-For следующий:
Объяснение рейтинга:
TKE:Облачный контейнерный сервис Tencent (Tencent Kubernetes Engine , TKE), под которым можно понимать версию Tencent Cloud K8S. STGW: Семиуровневая служба пересылки Tencent Cloud (безопасная Tencent Gateway,STGW) TGW:Облако Tencentчетвертый услуги пересылки этажей (Tencent Gateway,TGW)
Мы предполагаем, что проект развернут на сервисе TKE Tencent Cloud.,Проект, основанный на соображениях стоимости,Приобретены услуги STGW и TGW одновременно.
С тех пор,В тихий день в годах,Инженер по исследованиям и разработкам Сяо А взял на себя потребность в получении реального IP-адреса клиента.,Это строгое мышление Сяо А.,открытTKEДокументация:https://cloud.tencent.com/document/product/457/48949
Я обнаружил, что есть готовые ответы:
В качестве инженера по исследованиям и разработкам,Маленькая А думает 1,2、4все вовлеченыуровень развертываниятрансформация,Сейчас проект стабилен,старайся изо всех силсуществоватьбизнес-уровеньполучать,Поэтому я выбрал вариант 3
принимая во вниманиеX-Forwarded-Forжитьсуществоватьподделкаизвозможность,Сразуиспользовать ПонятноX-Real-IPвыполнятьполучать
Все идеально, отправляйте и выходите в интернет!
Потом нашел:
После определенного периода времени в сети клиенты сообщали, что некоторые из полученных клиентских IP-адресов были IP-адресами служб интрасети! ! !
Инженер по исследованиям и разработкам Сяо А глубоко задумался и обнаружил, что этот вопрос необходимо тщательно изучить.
После согласования с инженерами по эксплуатации,Обнаружить Служитьиспользовать Понятно Два видаизCLB——STGWиTGW
Инженер по исследованиям и разработкам Сяо А также уточнил маршрут передачи данных:
CLB--TKE(ingress)--Service--Pod
Итак, я начал проверять. Сначала я взглянул на конфигурацию входа TKE:
Здесь X-Real-IP получается через Remote_addr
В это время инженер по исследованиям и разработкам Сяо А проверил документацию CLB и обнаружил, что
Четырехуровневый сбалансированный сервис Tencent Cloud на внутренней стороне CVM источник получен из IP то есть клиент IP (фактически получение Nginx можно получить через $remote_addr) Семиуровневая служба пересылки Tencent Cloud (STGW) в CLB При использовании короткого соединения с серверной службой на серверной CVM источник получен из IP то есть клиент ИП; CLB При использовании длительного соединения с серверной службой CLB Нет более прозрачного источника ИП, могу пройти X-Forwarded-For или remote_addr поле для прямого получения клиента IP
Похоже, что CLB действительно присвоит значение Remote_addr, поэтому распечатайте журнал и посмотрите:
$remote_addrизценитьсуществоватьSTGWиTGWДва видаCLB-сервис Внизрезультатдадругойиз
Услуги в TGWсередина,это нормально,Услуги в STGWсередина,Стал IP-адресом интрасети
Также в журнале середина,также нашел,Результат X-Forwarded-Forэто нормально
Есть ли ОШИБКА?
Инженер по исследованиям и разработкам Сяо А нашел службу поддержки клиентов CLB и обнаружил, что есть еще одна точка знаний:
underlay VS Overlay
UnderlayСеть — это именно то, на что это похоже,даOverlayБазовая физическая основа сети,существоватьUnderlayсетьсередина,Взаимосвязанными устройствами могут быть различные типы коммутаторов, маршрутизаторов, оборудования балансировки нагрузки, межсетевых экранов и т.п.,носетьиз Каждое устройство должнопроходитьмаршрутизацияпротоколчтобы гарантировать, что междуIPвозможность подключения。для Понятноизбавляться отUnderlayсетьизразличные ограничения,сейчассуществовать多采использоватьсетьтехнология виртуализациисуществоватьUnderlayсеть Создать виртуальныйизOverlayсеть。
Большинство Облако TencentСлужить ВседаразвертыватьсуществоватьOverlayсетьиз,И маленькийAОтветственныйизпроектдаиспользоватьсуществоватьUnderlayсетьиз,Таким образом, $remote_addr терял данные при большом количестве уровней обмена данными.,иX-Forwarded-ForНакапливатьIP,такX-Forwarded-Forда Можетиз!
Заменить наполучатьX-Forwarded-For,При этом, учитывая возможность вмешательства со стороны клиента,Он не принимает первое значение напрямую,Вместо этого возьмите первый внешний IP-адрес сзади вперед.
Все идеально, отправляйте и выходите в интернет!
Проблема решена!
Предположим, проект развернут на сервисе собственной разработки Tencent Cloud.,Проект, основанный на соображениях стоимости,Приобретены услуги STGW и TGW одновременно.,В то же время мы использовали Nginx собственной разработки для получения данных CLB для вторичной пересылки.
С тех пор,В тихий день в годах,Инженер по исследованиям и разработкам Сяо А (справа),Опять он) берет на себя требование получить реальный IP клиента,Это основано на опыте Сяо А в предыдущем проекте.,на этот разпрямойбратьX-Forwarded-For
Все идеально, отправляйте и выходите в интернет!
Потом нашел:
После определенного периода времени в сети клиенты сообщали, что некоторые из полученных клиентских IP-адресов были IP-адресами служб интрасети! !
На этот раз инженер по исследованиям и разработкам Сяо А не стал теряться в мыслях и сразу пошел на согласование с инженером по эксплуатации и техническому обслуживанию.
Обнаружить Служить果然использовать Понятно Два видаизCLB——STGWиTGW
Инженер по исследованиям и разработкам Сяо А также уточнил маршрут передачи данных:
CLB--ServiceA--NGINX--ServiceB--Pod
Затем распечатайте журнал NGINX.,Обнаружить:X-Forwarded-ForизинформациясуществоватьSTGWиTGWвести себя по-другому
Услуги в TGWсередина,Это внутренний IP,Услуги в STGWсередина,это нормальноиз
Инженер по исследованиям и разработкам Сяо А сказал: «Совершенно противоположно последней проблеме!» ! !
«Это первая проблема ServiceA», — внезапно подумал инженер по исследованиям и разработкам Сяо А?
Служба — это абстрактное понятие, которое на самом деле является правилом пересылки. Конкретная пересылка фактически отслеживается и пересылается kubeproxy.
Откройте конфигурацию и найдите:
Для параметра externalTrafficPolicy установлено значение Cluster.
Из данных
При пересылке Kube-прокси выполняет SNAT (преобразование адреса исходной сети), поэтому исходный IP-адрес становится IP-адресом узла.
Использование loacl позволяет полностью сохранить IP-адрес клиента. Конечно, цена в этот раз заключается в том, что ServiceA можно будет перенаправить только на тот узел, где он расположен.
Тогда вам нужно иметь Nginx на каждом узле.
После согласования с инженером по эксплуатации и техническому обслуживанию инженер по исследованиям и разработкам Сяо А обнаружил, что Nginx представляет собой набор демонов со стандартными символами.
Затем измените externalTrafficPolicy на локальный.
Все идеально, отправляйте и выходите в интернет!
решение проблем