Есть несколько способов сделать это:
- Определение службы NodePort Kubernetes
- Используйте kubefwd или команду переадресации портов
- Используйте команду прокси (поддерживает только HTTP и HTTPS)
В этом ответе я объясню, как определить службу NodePort.
Служба NodePort описана ниже (Служба - Kubernetes).
NodePort: предоставляет услугу на каждом IP-адресе узла на статическом порте (NodePort). Служба ClusterIP, к которой маршрутизируется служба NodePort, создается автоматически. Вы сможете связаться со службой NodePort вне кластера, запросив:.
Вот пример службы NodePort для PostgreSQL:
apiVersion: v1
kind: Service
metadata:
name: postgres
namespace: postgres
labels:
app: postgres
spec:
ports:
- port: 5432
type: NodePort
selector:
app: postgres
Поле port
обозначает как сервисный порт, так и целевой порт по умолчанию. Также есть поле nodePort
, которое позволяет вам выбрать порт для доступа к сервису извне кластера (через IP-адрес узла и nodePort).
Чтобы просмотреть порт узла (если вы не указали его в манифесте), вы можете выполнить команду:
kubectl get services -n postgres
Результат должен выглядеть примерно так:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
postgres NodePort 10.96.156.75 <none> 5432:30864/TCP 6d9h app=postgres
В этом случае nodePort - это 30864
, это порт для доступа к службе извне кластера.
Чтобы узнать IP-адрес узла, используйте следующую команду:
kubectl get nodes -o wide
Результат должен выглядеть примерно так:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
homedev-control-plane Ready master 30d v1.19.1 172.18.0.2 <none> Ubuntu Groovy Gorilla (development branch) 5.9.1-arch1-1 containerd://1.4.0
Если вам нужен только IP:
kubectl get nodes -o wide --no-headers | awk '{print $6}'
В этом случае IP-адрес узла 172.18.0.2
. Следовательно, чтобы подключиться к Postgres в локальном кластере Kubernetes с вашего хост-компьютера, команда будет выглядеть так:
psql -U postgres -h 172.18.0.2 -p 30864-d postgres
person
duykhoa
schedule
26.11.2020