Сеть: от имени приложения до ответа
Проследи запрос по шагам: имя, адрес, Service, Pod и процесс. Исправь готовое сетевое упражнение, затем разберись с изоляцией и внешним доступом.
Ещё не начатГде выполнять задания
Автоматически проверяется только подготовленное задание Service и DNS (Domain Name System — система доменных имён). Политики и внешний Gateway требуют отдельного стенда и собственных доказательств.
Открыть практикум и терминал ↗Читай урок в этой вкладке, команды выполняй в соседней. Подстановки в угловых скобках сначала замени своими значениями. Ctrl+C останавливает наблюдение или учебный сервер.
Сокращения этого модуля: расшифровки и смысл
- API
- Application Programming Interface — программный интерфейс
- CIDR
- Classless Inter-Domain Routing — запись диапазона адресов с длиной префикса
- CNI
- Container Network Interface — интерфейс подключения контейнеров к сети
- DNS
- Domain Name System — система доменных имён
- HTTP
- Hypertext Transfer Protocol — протокол передачи веб-данных
- IP
- Internet Protocol — межсетевой протокол
- KaaS
- Kubernetes as a Service — Kubernetes как услуга
- MTU
- Maximum Transmission Unit — максимальный размер пакета
- TCP
- Transmission Control Protocol — протокол управления передачей
- TLS
- Transport Layer Security — защита соединения на транспортном уровне
- UDP
- User Datagram Protocol — протокол пользовательских датаграмм
- VM
- Virtual Machine — виртуальная машина
- YAML
- YAML Ain’t Markup Language — язык описания данных
В командах сохраняется точное написание параметров и имён. В тексте сокращения раскрываются в скобках.
Результат модуля
- Проследить путь от имени Service до ответа приложения.
- Исправить DNS (Domain Name System — система доменных имён) клиента и targetPort, получить серверный зачёт.
- На отдельной сети доказать разрешение и запрет; описать внешний доступ.
Перед началом: Устройство Kubernetes и безопасная лаборатория, Приложения: запуск, ресурсы и обновление.
1. Как запрос находит приложение
Представь, что один Pod хочет открыть страницу другого. DNS (Domain Name System — система доменных имён) переводит имя Service в IP (Internet Protocol — межсетевой протокол) адрес. Service даёт стабильную точку обращения, а EndpointSlice хранит адреса выбранных Pod и их готовность. Сам Service не запускает сервер и не исправляет его конфигурацию.
Порт — номер точки приёма соединения. У Service поле port описывает порт для клиента, targetPort — порт приложения. Например, клиент обращается к 80, а программа слушает 8080. Selector Service должен совпадать с метками нужных Pod. Если выбранных готовых адресов нет, правильное имя не спасёт запрос.
CNI (Container Network Interface — интерфейс подключения контейнеров к сети) и его реализация обеспечивают сетевое подключение Pod. Проверяй путь по частям: разрешилось ли имя, есть ли готовые адреса, верен ли порт, отвечает ли процесс. Ошибка «имя не найдено» и «соединение отклонено» требуют разных исправлений.
- Service
- Постоянная точка обращения к выбранным готовым Pod.
- EndpointSlice
- Список обнаруженных адресов и их состояния.
- targetPort
- Порт программы, на который нужно доставить запрос.
- Gateway
- Точка приёма внешнего трафика с правилами маршрутизации.
По шагам
- Клиент не находит имя: проверяем его настройки разрешения имён.
- Имя найдено, соединение не идёт: сравниваем адреса и порты.
- Страница получена: проверяем ожидаемое содержимое, а не только отсутствие ошибки.
2. Как проверить запрет доступа
Namespace разделяет имена и административные права, но сам не запрещает сетевые соединения. NetworkPolicy задаёт разрешения для выбранных Pod. Реальная блокировка возникает только при поддержке этой функции сетевым плагином. Kubernetes может принять объект политики, который никто не исполняет.
На существующем стенде используется Flannel. Не считай это доказательством исполнения NetworkPolicy и не меняй общий сетевой плагин ради упражнения. Для проверки изоляции нужна отдельная сеть с подходящим плагином, например Cilium, установленным по совместимой инструкции. Сначала проверяют связь без запрета, затем блокировку и только потом разрешение.
Default deny означает исходный запрет выбранного направления трафика. Разрешения нескольких политик складываются. Для DNS (Domain Name System — система доменных имён) учитывай UDP (User Datagram Protocol — протокол пользовательских датаграмм) и TCP (Transmission Control Protocol — протокол управления передачей). Разрешающий тест должен сопровождаться запрещающим: нужный клиент проходит, контрольный чужой — нет.
3. Как дать доступ снаружи
Внутренний Service типа ClusterIP обычно доступен внутри кластера. NodePort открывает порт на нодах, а LoadBalancer просит внешнюю реализацию подготовить точку входа. Без такой реализации адрес может навсегда остаться Pending. Создание объекта не означает, что балансировщик в облаке действительно появился.
Gateway API (Application Programming Interface — программный интерфейс) описывает правила входного трафика: где слушать соединения и куда их направлять. Нужен работающий контроллер Gateway, а не только YAML (YAML (YAML Ain’t Markup Language — язык описания данных) Ain’t Markup Language — язык описания данных) файл. HTTP (Hypertext Transfer Protocol — протокол передачи веб-данных) маршруты позволяют выбирать приложение по имени сайта и пути.
TLS (Transport Layer Security — защита соединения на транспортном уровне) добавляет сертификаты и шифрование. Указывай, где соединение расшифровывается: на внешнем прокси, Gateway или приложении. Проверка изнутри кластера и запрос из браузера проверяют разные части пути.
4. Что добавляет OpenStack
VM (Virtual Machine — виртуальная машина) имеет облачный порт, подсеть и правила security group. Поверх этой сети работает сеть Pod. CIDR (Classless Inter-Domain Routing — запись диапазона адресов с длиной префикса) помогает описать диапазоны: сети Pod, Service, домашней лабы и облака не должны случайно пересекаться.
MTU (Maximum Transmission Unit — максимальный размер передаваемого пакета) уменьшается из-за дополнительных заголовков туннеля. Иногда маленький запрос проходит, а большой зависает. Поэтому успех ping между виртуальными машинами ещё не подтверждает работу приложений внутри Pod.
Для KaaS (Kubernetes as a Service — Kubernetes как услуга) нарисуй два пути: клиент к управляющему интерфейсу кластера и пользователь к опубликованному приложению. Отметь маршрутизатор, внешний адрес, балансировщик, правила доступа и границы ответственности. Непроверенную облачную функцию пометь «требует проверки», а не «работает».
Практика через терминал портала
Подготовь сетевую неисправность
Сначала получи зачёт Deployment и очисти его. Открой сетевое задание, нажми подготовку. Все команды этой части работают только с interview-lab.
kubectl -n interview-lab get pods,service -o wideЧто должно получиться. Есть portal-net и portal-client. Имена и симптомы соответствуют сетевому заданию.
Если результат отличается
Если видны portal-demo или portal-image, открыто другое упражнение. Не применяй к нему сетевые исправления.
Проверь сервер и выбранные адреса
Сравни метки, selector и EndpointSlice. Отдельно найди port и targetPort.
kubectl -n interview-lab get service portal-net -o yaml kubectl -n interview-lab get pods --show-labels kubectl -n interview-lab get endpointslices -l kubernetes.io/service-name=portal-net -o yamlЧто должно получиться. Ты видишь, что сервисный порт и порт приложения отличаются. Адреса не нужно придумывать вручную.
Если результат отличается
Пустой список адресов требует проверки selector и Ready, а не редактирования DNS (Domain Name System — система доменных имён).
Увидь ошибку имени
Посмотри настройки DNS (Domain Name System — система доменных имён) учебного клиента. Команда nslookup выполняется внутри контейнера, где возникает проблема.
kubectl -n interview-lab get deployment portal-client -o yaml kubectl -n interview-lab exec deployment/portal-client -- nslookup portal-net.interview-lab.svc.cluster.localЧто должно получиться. У клиента неправильная политика DNS (Domain Name System — система доменных имён) и адрес 127.0.0.1. Ошибка имени записана до исправления.
Если результат отличается
При ошибке exec проверь, что клиентский Pod уже Running. Не редактируй CoreDNS общего кластера.
Исправь клиента
Верни стандартное разрешение имён кластера и убери неправильный пользовательский сервер DNS (Domain Name System — система доменных имён).
kubectl -n interview-lab patch deployment portal-client --type=merge -p '{"spec":{"template":{"spec":{"dnsPolicy":"ClusterFirst","dnsConfig":null}}}}' kubectl -n interview-lab rollout status deployment/portal-client --timeout=90s kubectl -n interview-lab exec deployment/portal-client -- nslookup portal-net.interview-lab.svc.cluster.localЧто должно получиться. Имя разрешается. Это промежуточный успех, ещё не доказательство работы сайта.
Если результат отличается
Если rollout ждёт, прочитай Events и квоту. Не добавляй внешние серверы DNS (Domain Name System — система доменных имён) вместо кластерного.
Исправь порт и проверь содержимое
У сервера именованный порт http указывает на 8080. Service должен ссылаться на него. После исправления сравни ответ с маркером задания.
kubectl -n interview-lab patch service portal-net --type=json -p '[{"op":"replace","path":"/spec/ports/0/targetPort","value":"http"}]' kubectl -n interview-lab exec deployment/portal-client -- wget -qO- http://portal-netЧто должно получиться. Получена учебная страница, а не только установленное соединение. Нажми «Проверить результат».
Если результат отличается
Имя разрешается, но ответа нет: снова проверь targetPort, Ready и слушающий процесс.
Узнай возможности текущей сети
Эти команды только читают конфигурацию. Не устанавливай новый плагин на общий кластер.
kubectl -n kube-flannel get daemonset kubectl get networkpolicy -A kubectl get services -AЧто должно получиться. В журнале указана фактическая реализация сети и отдельно статус «исполнение политик здесь не доказано».
Если результат отличается
Отсутствие политик не говорит о способности плагина их исполнять. Наличие политики тоже не является положительным тестом.
Проверь изоляцию на отдельном стенде
По инструкции создай отдельный kind с отключённым стандартным плагином и установи совместимый Cilium. Затем используй network-policy.yaml. Проверь исходную связь, запрет и выборочное разрешение; не начинай с запрета на общем стенде.
kubectl --context kind-kaas-net -n kaas-lab get pods,networkpolicy kubectl --context kind-kaas-net -n kaas-lab apply -f https://test.igorhome.ru/static/learning/network-policy.yamlЧто должно получиться. Записаны результаты до и после политики для разрешённого и запрещённого клиента. Одного apply недостаточно.
Если результат отличается
Если нет готового сетевого плагина или клиентов, остановись и выполни подготовку из инструкции. Оставь критерии изоляции неотмеченными.
Нарисуй полный путь
В заметках запиши имя, адрес, порт клиента, порт приложения и границу облака. Очисти готовое задание штатной кнопкой. Внешний Gateway исследуется отдельно, когда установлен его контроллер.
kubectl -n interview-lab get service portal-net -o wideЧто должно получиться. Есть объяснение двух разных неисправностей и схема публикации будущего приложения.
Если результат отличается
Не добавляй внешний адрес в схему как существующий без фактического запроса извне.
Открыть терминал ↗ · Скачать файлы лаборатории →
Файлы и подготовка к этой работе
Критерии готовности
Отмечай только то, что проверил на указанном стенде. Эти галочки сохраняются в браузере. Для готовых упражнений зачёт выдаёт отдельная серверная проверка практикума; остальные задания подтверждай журналом и доказательствами. Учебная модель не заменяет реальный облачный опыт.
Что сохранить в портфолио
- Журнал: исходное состояние → команда или действие → ожидаемый результат → фактическое наблюдение.
- Доказательства по критериям ниже: очищенный от секретов вывод, схема или ссылка на проверенный коммит.
- Отдельный список: что пока не запускалось, почему и какой стенд нужен для продолжения.
Проверь понимание
8 вопросов по этому модулю. Проходной результат — 7 из 8. После ответа — объяснения и ссылки на разделы, к которым стоит вернуться.
Пройти тест модуляОфициальные источники
Чек-листы уроков, заметки к ним и результаты тестов хранятся в этом браузере; для переноса используй экспорт. Автоматические проверки и журнал практикума сохраняются отдельно на сервере.