Как работает kubectl port-forward?
Команды kubectl expose могут использоваться для создания службы для приложений и назначения IP-адреса для доступа к нему из Интернета.
Насколько я понимаю, для доступа к любому приложению в кластере Kubernetes должен быть создан ресурс службы, который должен иметь IP-адрес, доступный из внешней сети.
Но в случае переадресации портов, как kubectl создает соединение с приложением без IP-адреса, доступного извне?
Ответы
Ответ 1
kubectl port-forward
делает определенный запрос API Kubernetes. Это означает, что системе, в которой она работает, требуется доступ к серверу API, и любой трафик будет туннелироваться через одно соединение HTTP.
Наличие этого действительно полезно для отладки (если один конкретный модуль работает, вы можете подключиться к нему напрямую; в микросервисной среде вы можете общаться с серверной службой, которую вы не представляете иначе), но это не альтернатива настройке объекты обслуживания. Когда я работал с kubectl port-forward
это было заметно медленнее, чем подключение к модулю через службу, и я обнаружил, что команда просто останавливается через пару минут. Опять же, это не большие проблемы для отладки, но это не то, что я хотел бы для производственной системы.
Ответ 2
kubectl port-forward
переадресует соединения с локального порта на порт на модуле. По сравнению с kubectl proxy
kubectl port-forward
является более общей, поскольку она может пересылать трафик TCP, тогда kubectl proxy
может только пересылать трафик HTTP.
kubectl port-forward
полезен для целей тестирования/отладки, поэтому вы можете получить доступ к своему сервису локально, не раскрывая его.
Ниже приведено имя pod
и он перенаправит порт 6379
на localhost:6379
.
kubectl port-forward redis-master-765d459796-258hz 6379:6379
который так же, как
kubectl port-forward pods/redis-master-765d459796-258hz 6379:6379
или же
kubectl port-forward deployment/redis-master 6379:6379
или же
kubectl port-forward rs/redis-master 6379:6379
или же
kubectl port-forward svc/redis-master 6379:6379
Вот также небольшой пример переадресации портов для доступа к службе базы данных (clusterip) без ее предоставления.
Ответ 3
Если вы хотите перенаправить на другой порт в localhost. Попробуй это
kubectl port-forward <pod-name> <locahost-port>:<pod-port>
kubectl port-forward sample-pod-sadasds-sxawdd 8090:6379
Приведенная выше команда перенаправляет на локальный хост 8090 из стручка 6379