Сервисы для сетевого доступа
Открывайте доступ к приложениям внутри кластера и за его пределами с помощью разных типов сервисов Kubernetes.
«Сервисы для сетевого доступа» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Что такое сервис Kubernetes?
В Kubernetes поды — это наименьшие развёртываемые единицы. Они рассчитаны на недолговременное существование: их можно в любой момент создать, удалить или заменить, при этом они часто получают новые IP-адреса.
Из-за такой динамики другим приложениям сложно надёжно находить поды и обмениваться с ними данными. Здесь на помощь приходят сервисы!

Стабильный сетевой доступ
Сервис 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) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Сервисы для сетевого доступа»?
Открывайте доступ к приложениям внутри кластера и за его пределами с помощью разных типов сервисов Kubernetes. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Сервисы для сетевого доступа»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Развёртывания для приложений без состояния
- Сервисы для сетевого доступа
- ConfigMaps и секреты
- Ingress и внешняя маршрутизация