0Pricing
Docker & DevOps Fundamentals · Урок

Сервисы для сетевого доступа

Открывайте доступ к приложениям внутри кластера и за его пределами с помощью разных типов сервисов Kubernetes.

«Сервисы для сетевого доступа» — бесплатный урок Docker & DevOps Fundamentals на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Docker & DevOps Fundamentals, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Docker & DevOps Fundamentals содержит 4 уроков всего.

Что такое сервис Kubernetes?

В Kubernetes поды — это наименьшие развёртываемые единицы. Они рассчитаны на недолговременное существование: их можно в любой момент создать, удалить или заменить, при этом они часто получают новые IP-адреса.

Из-за такой динамики другим приложениям сложно надёжно находить поды и обмениваться с ними данными. Здесь на помощь приходят сервисы!

Сервисы для сетевого доступа — иллюстрация 1

Стабильный сетевой доступ

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

  • Сервисы предоставляют постоянный IP-адрес и имя DNS.
  • Они могут распределять трафик между несколькими подами.
  • Они обеспечивают непрерывную доступность при масштабировании или перезапуске подов.

Подключение подов к сервисам

Как сервис узнаёт, к каким подам направлять трафик? Он использует метки и селекторы.

При создании подов им назначаются метки — пары «ключ-значение», например app: my-app. Затем сервис указывает селектор, соответствующий этим меткам, и создаёт динамическую связь.

Внутренний доступ с помощью ClusterIP

ClusterIP — это тип сервиса по умолчанию и самый распространённый тип. Он назначает стабильный внутренний IP-адрес внутри кластера Kubernetes. Этот IP-адрес доступен только другим подам или узлам внутри кластера.

Это идеальный вариант для внутренних сервисов (например, базы данных или API), которым необходимо взаимодействовать только с другими сервисами приложения.

Определение сервиса ClusterIP

Ниже приведено простое определение сервиса ClusterIP в YAML. Обратите внимание на selector, соответствующий метке app: my-backend, а также на то, как port сопоставляется с targetPort.

apiVersion: v1
kind: Service
metadata:
  name: my-backend-service
spec:
  selector:
    app: my-backend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080 # Port your application listens on
  type: ClusterIP

Внешний доступ с помощью NodePort

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

Значение nodePort обычно находится в диапазоне 30000–32767. Такой вариант удобен для простого внешнего доступа или сред разработки.

Определение сервиса NodePort

Чтобы открыть внешний доступ к сервису через NodePort, задайте type: NodePort. При желании можно указать nodePort; в противном случае Kubernetes выберет значение самостоятельно.

apiVersion: v1
kind: Service
metadata:
  name: my-frontend-service
spec:
  selector:
    app: my-frontend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80 # Port your application listens on
      nodePort: 30080 # Optional: specific port on the Node
  type: NodePort

Облачные балансировщики нагрузки

Тип сервиса LoadBalancer предназначен для облачных сред. При создании сервиса этого типа Ваш облачный провайдер (например, AWS, GCP или Azure) автоматически создаёт внешний балансировщик нагрузки.

Этот балансировщик получает публичный IP-адрес и направляет внешний трафик непосредственно к подам, часто предоставляя расширенные возможности, например завершение SSL.

Определение сервиса LoadBalancer

Для приложений, доступных из интернета и работающих в облачном кластере Kubernetes, обычно выбирают LoadBalancer. Он значительно упрощает управление внешним доступом.

apiVersion: v1
kind: Service
metadata:
  name: my-web-app-lb
spec:
  selector:
    app: my-web-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

Выбор подходящего сервиса

Ваша команда развёртывает новое приложение в Kubernetes. Рассмотрите следующие сценарии:

  • внутренний API, к которому должны обращаться только другие сервисы внутри кластера;
  • внешний веб-сервер, доступный из интернета и развёрнутый у облачного провайдера (AWS, GCP или Azure).

Какой тип сервиса лучше всего подходит для внешнего веб-сервера?

Итоги: сервисы для сетевого доступа

Мы узнали, что сервисы Kubernetes обеспечивают стабильный сетевой доступ к динамическим подам. Они необходимы для надёжного взаимодействия приложений.

  • ClusterIP: только для внутреннего взаимодействия внутри кластера.
  • NodePort: открывает сервис через статический порт на IP-адресе каждого узла и обеспечивает внешний доступ для определённых сценариев.
  • LoadBalancer: взаимодействует с облачными провайдерами и создаёт внешний балансировщик нагрузки для публичного доступа.

Правильный выбор типа сервиса крайне важен для управления способом публикации приложений.

Часто задаваемые вопросы

Урок «Сервисы для сетевого доступа» бесплатный?

Да — полный текст урока «Сервисы для сетевого доступа» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Docker & DevOps Fundamentals, подпишись на CoddyKit PRO. Курс Docker & DevOps Fundamentals содержит 4 уроков всего.

Чему я научусь в уроке «Сервисы для сетевого доступа»?

Открывайте доступ к приложениям внутри кластера и за его пределами с помощью разных типов сервисов Kubernetes. Ты практикуешь Docker & DevOps Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Docker & DevOps Fundamentals?

Предыдущий опыт не требуется. Docker & DevOps Fundamentals на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Сервисы для сетевого доступа»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Docker & DevOps Fundamentals?

Да. Каждый урок Docker & DevOps Fundamentals включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Развёртывания для приложений без состояния
  2. Сервисы для сетевого доступа
  3. ConfigMaps и секреты
  4. Ingress и внешняя маршрутизация
← Назад к Docker & DevOps Fundamentals