Использование kubectl port-forward

kubectl port-forward позволяет устанавливать прямой туннель между локальным компьютером и подом (или сервисом) внутри кластера Kubernetes. Это особенно полезно для отладки, тестирования или доступа к внутренним сервисам без открытия их через LoadBalancer или Ingress.

Основы синтаксиса

kubectl port-forward [ТИП_РЕСУРСА/ИМЯ_РЕСУРСА] [ЛОКАЛЬНЫЙ_ПОРТ]:ПОРТ_ПОДА

Примеры ресурсов:

  • pod/nginx-pod

  • service/nginx-svc

  • deployment/my-app

Обратите внимание: port-forward работает только с подами, даже если вы указываете service. Kubernetes автоматически выбирает один из подов, обслуживаемых сервисом.


Примеры использования

Для практического ознакомления рассмотрим полный пример: создадим простой под с Nginx и сервис, затем подключимся к ним через port-forward.

1. Создание манифеста

Сохраните следующее в файл test-nginx.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:alpine
    ports:
    - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 80
  type: ClusterIP

2. Применение манифеста

kubectl apply -f test-nginx.yaml

Проверьте статус:

kubectl get pods,svc
# Ожидаемый вывод:
# NAME            READY   STATUS    RESTARTS   AGE
# pod/nginx-pod   1/1     Running   0          1m
# 
# NAME             TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
# service/nginx-svc ClusterIP   10.96.45.212    <none>        8080/TCP   1m

3. Проброс порта пода

kubectl port-forward pod/nginx-pod 8080:80

Теперь Nginx доступен локально по адресу http://localhost:8080.

Проверка:

curl http://localhost:8080
# → возвращает HTML-контент Nginx

4. Проброс порта сервиса

kubectl port-forward service/nginx-svc 9000:8080

Локальный доступ: http://localhost:9000

Проверка:

curl http://localhost:9000
# → тоже возвращает HTML-контент Nginx

5. Автоматический выбор порта

Если второй порт не указан, kubectl использует тот же локальный порт, что и порт сервиса или пода

kubectl port-forward service/nginx-svc 8080

Эта команда эквивалентна следующей:

kubectl port-forward service/nginx-svc 8080:8080

6. Перенаправление нескольких портов

Для одновременного проброса нескольких портов:

kubectl port-forward pod/nginx-pod 8080:80 9090:80

Обратите внимание: в версиях v1.23+ поддерживается проброс нескольких портов за один вызов. Если под не принимает соединения на втором порту — команда завершится ошибкой.

7. Назначение случайного порта

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

kubectl port-forward pod/nginx-pod :80

8. Указание адреса для приема соединений

По умолчанию port-forward принимает соединения только по адресу 127.0.0.1. Чтобы сделать порт доступным в локальной сети:

kubectl port-forward --address 0.0.0.0 pod/nginx-pod 8080:80

⚠️ Осторожно: это может быть небезопасно — порт станет доступен всем в локальной сети.

Нам доверяют тысячи компаний и разработчиков

22 года
Предоставляем услуги профессионального хостинга
35 000+
Клиентов доверяют нам размещение своих сайтов
99.99%
Подтвержденный uptime наших серверов хостинга
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
Наши клиенты
ВК49865