[Перевод] Что такое переадресация портов Kubectl и как она работает?

Kubernetes — это платформа для оркестровки контейнеров, которая позволяет запускать и управлять контейнеризированными приложениями. Иногда необходимо провести отладку или протестировать приложение локально, но при этом не безопасно открывать его внешнему миру. В этом случае на помощь приходит команда kubectl port-forward. Она позволяет перенаправлять трафик с вашего локального компьютера на под, в котором находится контейнеризированное приложение.

Перевели гайд о том, как использовать kubectl port-forward для перенаправления сетевого трафика с нашего локального компьютера на под с веб-сервером nginx. 

d8c1cd31a829995b623173c2300afdf9.png

Что такое kubectl-port-forward и почему мы должны использовать его в Kubernetes

kubectl port-forward — это команда, которая создаёт защищённый туннель между вашим локальным компьютером и подом, который работает в кластере Kubernetes. Это позволяет получить доступ к приложению, которое выполняется в поде, как если бы оно выполнялось локально на вашем компьютере.

Как работает переадресация портов в Kubernetes

Вот как работает переадресация портов в Kubernetes:

  • Выполнение команды: вы выполняете команду kubectl port-forward, указывая целевой под, локальный порт и целевой порт.

  • Настройка сетевого соединения: между вашим локальным компьютером и целевым подом устанавливается сетевое соединение с помощью API-сервера Kubernetes.

  • Переадресация сетевого трафика: как только сетевое соединение установлено, любой запрос, сделанный с локального компьютера, переадресовывается на целевой под. Аналогично, любой ответ от приложения, которое работает внутри пода, переадресовывается обратно на ваш локальный компьютер. Это позволяет вам взаимодействовать с приложением и диагностировать любые возникающие проблемы.

Синтаксис команды kubectl port-forward

Синтаксис команды kubectl port-forward следующий:

kubectl port-forward POD_NAME LOCAL_PORT:REMOTE_POD_PORT

Разберём компоненты этой команды:

  • kubectl — это инструмент командной строки, который используется для взаимодействия с кластерами Kubernetes.

  • port-forward — это действие, которое мы хотим выполнить с помощью «kubectl».

  • POD_NAME — это имя пода, к которому мы хотим переадресовать трафик.

  • LOCAL_PORT — это номер порта на локальном компьютере, который мы хотим использовать для установления соединения.

  • REMOTE_POD_PORT — это номер порта на поде, к которому мы хотим подключиться.

Чтобы выполнить пример из этой статьи, вам понадобится доступ к работающему кластеру Kubernetes с уже установленным kubectl. Если вы предпочитаете настраивать свой собственный кластер Kubernetes, вы можете использовать такой инструмент, как minikube.

Настройка переадресации портов с помощью kubectl

В примере ниже мы рассмотрим процесс настройки переадресации портов всего за два шага.

Шаг 1. Создайте развёртывание

Откройте окно терминала и выполните следующую команду, чтобы создать развёртывание mynginx в вашем кластере. Nginx — это популярный открытый веб-сервер.

kubectl create deployment mynginx --image=nginx

Здесь mynginx — это имя развёртывания. Вы можете выбрать любое имя, --image=nginx — это имя образа Docker, который используется для создания контейнера.

После выполнения команды вы должны увидеть вывод, похожий на этот:

Источник

Затем проверьте, что развертывание было успешно создано с помощью команды kubectl get deployments.

Источник

Мы видим, что развёртывание с именем mynginx успешно запущено. Теперь давайте убедимся, что под тоже работает. Для этого выполните следующую команду:

kubectl get pods

Эта команда предоставит вам информацию обо всех подах, которые в данный момент запущены в вашем кластере, включая их имена, состояние и другие полезные детали. Найдите под с именем, начинающимся с mynginx, и убедитесь, что он находится в состоянии Running.

Приведенный ниже вывод показывает, что под mynginx-ff886775c-zdrfc успешно запущен. Обратите внимание, что имя вашего пода будет отличаться от нашего. Это связано с тем, что Kubernetes создает имя пода путем добавления уникальных символов к имени развертывания.

Источник

Шаг 2. Перенаправьте локальный порт на порт в поде

Теперь, когда наш веб-сервер nginx запущен и работает внутри пода, нам нужно найти способ получить к нему доступ с нашего локального компьютера.

Замените часть в приведённой ниже команде на имя вашего пода, затем выполните её, чтобы создать маршрут между вашим локальным компьютером и подом:

kubectl port-forward  8080:80

После выполнения команды вы увидите вывод, похожий на следующий.

Источник

Пока сеанс терминала запущен, откройте веб-браузер и перейдите по адресу http://localhost:8080, чтобы получить доступ к серверу nginx, работающему внутри пода. Вы должны увидеть страницу по умолчанию «Welcome to nginx!». Это указывает на то, что локальный запрос перенаправляется на под.

Источник

Поздравляем! Перенаправление портов работает так, как ожидалось.

Помните, что сеанс терминала, в котором выполняется команда kubectl port-forward, должен оставаться открытым, чтобы перенаправление портов продолжало работать. Если вы закроете сеанс терминала, соединение между вашим локальным компьютером и подом, будет потеряно и вы больше не сможете получить доступ к веб-серверу. Если вы хотите продолжить работу с кластером Kubernetes, вам следует открыть другое окно терминала.

В чём разница между kubectl port-forward и nodeport?

Команда kubectl port-forward позволяет перенаправлять сетевой трафик с локального порта на вашем компьютере на порт в поде Kubernetes. Идея состоит в том, чтобы сделать приложение доступным только вам (пользователю kubectl), а не внешнему миру.

Также важно понимать, что kubectl port-forward обычно используется для тестирования и отладки. Это не готовая к работе в производственной среде функция.

NodePort — это тип сервиса Kubernetes. Это способ сделать приложение доступным для внешних клиентов за пределами кластера Kubernetes.

Когда вы создаёте сервис NodePort, Kubernetes открывает порт на каждом рабочем узле в кластере. Затем эти порты могут быть использованы внешними клиентами для доступа к приложению.

В чём разница между kubectl-proxy и kubectl port-forward?

Kubectl-proxy создаёт прокси-сервер между вашим локальным компьютером и сервером API Kubernetes. Это означает, что все запросы, сделанные клиентом к серверу API Kubernetes, перенаправляются через прокси.

Основное назначение kubectl proxy — доступ к серверу API Kubernetes.

С другой стороны, команда kubectl port-forward создаёт туннель с локального порта на вашем компьютере на целевой порт в поде. Это особенно полезно, когда вы хотите получить прямой доступ к определённому поду, например, при отладке приложения.

Вкратце, kubectl proxy больше подходит для общего доступа к кластеру, а kubectl port-forward лучше подходит для нацеливания на определённые поды.

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

Заключение

В этой статье мы узнали, как использовать команду kubectl port-forward для перенаправления сетевого трафика с нашего локального компьютера на определённый под в кластере Kubernetes. Мы увидели, как легко настроить перенаправление портов всего за несколько шагов, и как это может быть ценным инструментом для локальной разработки и тестирования Kubernetes.

Если вы хотите узнать больше о практиках DevOps, расширить стек технологий и систематизировать свои знания, приходите в Слёрм на курс DevOps Upgrade. Это пятимесячный курс, который позволяет на практике научиться решать наиболее распространённые задачи DevOps-инженера и познакомиться с популярными инструментами: Ansible, Docker, Kubernetes, Grafana & Prometheus, Terraform.

Подробнее о курсе можно узнать на нашем сайте.

© Habrahabr.ru