Kubernetes Networking: полное руководство по модели сети

Опубликовано: 2020-02-18

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

Но не волнуйтесь, потому что в этом подробном руководстве мы будем обсуждать то же самое. Kubernetes — это инструмент управления контейнерами, и в этой статье вы узнаете, почему он используется, каковы его сетевые компоненты и как они направляют трафик.

Изучайте разработку программного обеспечения онлайн в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

Давайте погрузимся.

Оглавление

Что такое Кубернетес?

Прежде чем мы начнем обсуждать работу с сетью в Kubernetes, мы должны рассмотреть основные концепции этого инструмента. Таким образом, вы не столкнетесь с путаницей в дальнейшем в статье и получите общее представление обо всем, что здесь упоминается.

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

В то время как Docker помогает профессионалам создавать контейнеры, Kubernetes помогает им управлять ими. Вот почему они оба так важны. Kubernetes запускает распределенную систему в кластере. Понимание его структуры и сетевого взаимодействия позволит вам избежать ошибок и безошибочно управлять контейнерами.

Почему используется Kubernetes?

За последние несколько лет потребности компаний в контейнерах значительно возросли. Если они не слишком малы, они не могут полагаться на один или два контейнера. Им потребуется большой набор контейнеров для балансировки нагрузки. Потребность может исчисляться сотнями для поддержания высокой доступности и балансировки трафика.

Когда трафик увеличится, им потребуется больше контейнеров для обработки запросов. Точно так же, когда трафик будет меньше, им потребуется уменьшить размер контейнеров. Управление контейнерами в соответствии со спросом может быть сложной задачей, особенно если вы делаете это вручную.

Оркестровка контейнеров вручную может занять много времени и ресурсов, которые можно было бы легко потратить на что-то другое. Автоматизация этой задачи значительно упрощает работу. Тогда вам не придется беспокоиться о масштабировании и очистке контейнеров от накипи. Это то, что делает Kubernetes. Узнайте, как создавать проекты DevOps для начинающих с помощью Kubernetes, в нашей статье о лучших проектах DevOps для начинающих.

Он автоматизирует оркестровку и управление контейнерами. Он широко популярен из-за своей функциональности. Это продукт Google, и его производительность значительно помогает организациям автоматизировать масштабирование контейнеров.

Компоненты Кубернета

Теперь, когда вы знаете, что такое Kubernetes и каковы его функции, мы можем приступить к обсуждению его многочисленных компонентов. Вы можете понять работу сети в этом инструменте, только ознакомившись с ее различными частями. Впрочем, волноваться особо не о чем. Это потому, что мы здесь, чтобы помочь. Ниже приводится краткое описание его различных компонентов. Хотя описание краткое, его должно быть достаточно, чтобы дать вам общее представление.

стручки

Помните атомы в химии, мельчайшие независимые объекты материи? Что ж, поды — это атомы Kubernetes. One Pod — это рабочая нагрузка в кластере. Он может содержать один или несколько контейнеров с хранилищем. У каждого пода есть уникальный IP-адрес, который действует как его идентификатор при взаимодействии с другими компонентами Kubernetes. Все контейнеры модуля запланированы и расположены на одном компьютере.

Контроллеры

Контроллеры создают Kubernetes. Контроллеры наблюдают за состоянием сервера API, чтобы убедиться, что его текущее состояние соответствует указанному вами состоянию. Если состояние API-сервера по какой-либо причине изменяется, он реагирует соответствующим образом. Контроллеры используют цикл для проверки состояний кластеров и для сравнения их с требуемыми состояниями. Он также может выполнять задачи по изменению текущего состояния в необходимое состояние.

Узлы

Если поды — это атомы, то узлы — это механизмы Kubernetes. Они управляют кластером. Виртуальные машины — это доступные узлы в кластерах Kubernetes. Многие люди склонны использовать слово «хост» вместо «узел». В этой статье мы попытались последовательно использовать термин «узлы».

API-сервер

Сервер API — это шлюз к хранилищу данных в Kubernetes. Он позволяет указать желаемое состояние для кластеров. Вам придется выполнять вызовы API, если вы хотите изменить состояние своего кластера Kubernetes и описать требуемое состояние.

Поскольку вы знакомы с компонентами сети Kubernetes, мы можем начать с ее сетевой модели и того, как она работает.

Объяснение сети Kubernetes

Сеть Kubernetes следует определенной модели со следующими ограничениями:

  • Модули взаимодействуют со всеми другими модулями без преобразования сетевых адресов.
  • Ноды могут общаться с подами без преобразования сетевых адресов.
  • IP-адрес модуля, который видят другие модули, совпадает с IP-адресом, который он видит для себя.

Из-за этих ограничений в Kubernetes есть только несколько сетевых разделов. Они есть:

  • Контейнерные перевозки
  • Переходы между модулями
  • Pod to service переводы
  • Переводы из Интернета в сервис

Контейнер в контейнер

Вы можете подумать, что в сети виртуальная машина напрямую взаимодействует с устройством Ethernet, но это еще не все.

Если вы используете Linux, сетевое пространство имен предоставит вам сетевой стек со своими сетевыми устройствами, маршрутами и правилами для брандмауэра. Каждый запущенный процесс в Linux будет взаимодействовать с этим сетевым пространством имен.

Pod содержит группу контейнеров в сетевом пространстве имен. Эти контейнеры имеют одинаковое пространство портов и IP-адрес, который назначается им через сетевое пространство имен. Эти контейнеры находят друг друга через локальный хост, потому что они расположены в одном пространстве имен. Если ваши приложения находятся внутри модуля, они также могут получить доступ к общим томам.

От стручка к стручку

Поды общаются друг с другом через свои IP-адреса. У каждого пода есть реальный и отличный IP-адрес в Kubernetes. Вы уже знаете, что такое стручки, поэтому нам не нужно касаться этой темы. Мы знаем, что Kubernetes использует IP-адреса для облегчения связи между подами; давайте обсудим, как это делается.

Поды общаются через свои узлы. Вот почему, чтобы понять связь между модулями, вам необходимо понять взаимодействие между узлами.

  • Связь между узлами
  • Связь внутри узла

Мы подробно обсудим каждый из них:

Связь между узлами

Когда узлы расположены в разных модулях, они будут взаимодействовать с помощью этого метода. Мы можем понять этот метод общения на простом примере. Предположим, что есть четыре различных сети pod, а именно pod 1, pod 2, pod 3 и так далее. Поды 1 и 2 расположены в корневой сети узла 1, а поды 3 и 4 — во второй сети.

Вам нужно передать пакет из pod 1 в pod 4.

Сначала пакет должен покинуть сеть pod 1 и пройти в корневую сеть через veth0. Он проходит через мост Linux, который помогает ему найти пункт назначения. Поскольку у узла нет цели в своем поде, он отправляется обратно на интерфейс eth0. Теперь он оставляет первый узел для таблицы маршрутизации. Таблица маршрутов направляет пакет на нужный узел, который находится в pod4. Пакет сначала достигает узла 2, затем достигает моста, который направляет его к месту назначения.

Связь внутри узла

Взаимодействие внутри узла происходит, когда узлы находятся в одном поде. Мы можем объяснить связь внутри узла так же, как мы объяснили связь между узлами. В этих случаях пакет отправляется из первого пода по адресу eth0. Он выходит в корневую сеть через veth0. Затем он должен перейти на мост, после чего он переходит к назначенному IP.

Вот как модули взаимодействуют друг с другом в Kubernetes. Давайте перейдем к следующему разделу.

Под для обслуживания

В предыдущем разделе вы уже видели, как трафик маршрутизируется между IP-адресами подов. Однако есть проблема с IP-адресами. IP-адреса пода могут исчезать и появляться снова в зависимости от масштабирования контейнеров. Таким образом, если контейнеры масштабируются, количество IP-адресов pod будет увеличиваться, и наоборот тоже верно.

Сервисы помогают справиться с этой ситуацией. Вот краткое объяснение того, какие сервисы есть в Kubernetes, чтобы у вас не возникло путаницы.

Что такое службы в Kubernetes?

Сервисы в Kubernetes настраивают прокси, которые должны передавать запросы группе подов. Эти модули получают трафик, а селектор выполняет эту задачу. После создания службы она получает IP-адрес, который обрабатывает ее запросы. Существует несколько типов сервисов, и мы должны обсудить их, прежде чем переходить к Pod для связи между сервисами.

Всего в Kubernetes существует 4 вида сервисов. Они есть:

  • IP кластера
  • NodePort
  • LoadBalancer
  • ВнешнееИмя

ClusterIP — это тип службы по умолчанию. В этом типе служба доступна только в кластере. В NodePort служба доступна для IP-адреса каждого узла. NodePort направляет к службе ClusterIP, поскольку система создает его заранее. В отличие от ClusterIP, вы можете связаться с этой службой за пределами кластера.

LoadBalancer использует балансировщик нагрузки в облаке, чтобы предоставить услугу внешним сетям. Из-за него автоматически создаются NodePort и ClusterIP, а служба ExternalName передает их, поскольку они отражают CNAME-запись.

Теперь, когда вы знаете, что такое сервисы и сколько существует типов сервисов, давайте обсудим, как происходит связь между подами и сервисами.

Как это работает?

В этом случае пакет покидает Pod через eth0. Он идет на мост через Ethernet-устройство, откуда передается на маршрут по умолчанию eth0. Тем не менее, он должен пройти через iptables, прежде чем он будет принят на eth0. Iptables определяет пункт назначения пакета, используя заданные правила, и отправляет пакет в требуемый модуль. После этого пакет отправляется на реальный IP-адрес модуля, а не на виртуальный IP-адрес службы.

Внешний по отношению к сервису

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

При подключении к внешней сети Kubernetes может выполнять две функции:

  • Направить трафик из Интернета в свою сеть
  • Направить трафик из своей сети в Интернет

Для первого требуется сеть Ingress, а для второго — сеть Egress. Давайте посмотрим на них.

Вход

Направить трафик из общедоступной сети в вашу систему Kubernetes очень сложно. Для обработки пакетов требуется LoadBalancer и Controller. Вот пример того, как это работает.

Сначала вы развернете службу, а ваш облачный провайдер создаст новый балансировщик нагрузки. Балансировщик нагрузки будет распределять трафик между виртуальными машинами в вашем кластере, используя назначенный порт вашей службы. Здесь iptables передают трафик, который они получают от балансировщика нагрузки, в нужный под. Pod ответит клиенту своим IP-адресом, а conntrack поможет правильно переписать IP-адреса.

Балансировщики нагрузки уровня 7, присутствующие в сети, способны сегментировать входящий трафик в соответствии с URL-адресами и путями. Это очень полезно, когда вы работаете с сетью Ingress.

Выход

Когда вы направляете трафик из узла вашей сети Kubernetes в Интернет, то, как все будет работать, во многом зависит от конфигурации вашей сети. Мы обсудим здесь общий пример, чтобы коснуться темы.

Пакет начинается с пространства имен пода и проходит в корневое пространство имен через veth. Затем он переходит к мосту, откуда он переходит к службе по умолчанию, потому что IP-адрес, на который ему нужно перейти, не связан с мостом. Он проходит через iptables при переходе в корневое пространство имен.

Читайте: Предварительное условие для DevOps: это не то, что вы думаете

Теперь интернет-шлюзы принимают только те IP-адреса, которые связаны с виртуальными машинами. И исходный модуль нашего кармана не подключен к виртуальной машине. Таким образом, iptables выполняет исходный NAT и меняет источник пакета. Теперь он достигает интернет-шлюза, где проходит через другой NAT, а затем входит в общедоступный Интернет (пункт назначения).

И это все. Теперь вы знаете все о сети Kubernetes и ее различных компонентах.

Заключение

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

Если вы хотите изучить и освоить Kubernetes, DevOps и многое другое, ознакомьтесь с программой Executive PG IIIT-B и upGrad в области разработки программного обеспечения — специализация в разработке полного стека.

Подготовьтесь к карьере будущего

Подать заявку на степень магистра компьютерных наук