Доступ к модулям / сервисам Kubernetes через один IP-адрес (предпочтительно главный узел)

У меня локальная установка Kubernetes с главным узлом и двумя рабочими узлами. Есть ли способ получить доступ ко всем службам / модулям, которые будут установлены на Kubernetes, через IP-адрес главного узла?

Я имею в виду, что у меня есть тестовая служба, работающая на порте 30001 на каждом работнике, и я хочу получить доступ к этой службе, например, http://master-node:30001. Любая помощь приветствуется.


person Mustafa Yılmaz    schedule 02.08.2017    source источник


Ответы (2)


Вы можете использовать «прокси-глагол» для доступа к узлам, модулям или службам через мастер. Только HTTP и HTTPS могут быть проксированы. См. Эти документы и эти документы .

person Eric Tune    schedule 02.08.2017
comment
Разве это не только для встроенных сервисов? - person Mustafa Yılmaz; 03.08.2017
comment
Нет, понял сейчас. Спасибо! - person Mustafa Yılmaz; 03.08.2017

Есть несколько способов сделать это:

  • Определение службы 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