#kubernetes
#kubernetes
Вопрос:
Я пытаюсь подключить 2 модуля в одном кластере Kubernetes (клиент и сервер) в среде разработки.
apiVersion: v1
kind: Service
metadata:
name: client-node-port spec:
type: NodePort
ports:
- port: 4000
targetPort: 4000
nodePort: 31515
selector:
component: nri
и сервер был бы
apiVersion: v1
kind: Service
metadata:
name: server-node-port
spec:
type: NodePort
ports:
- port: 1114
targetPort: 1114
nodePort: 30000
selector:
component: nri
Я могу успешно получить доступ к веб-странице, но, похоже, он может подключиться к серверу. (сервер работает на 1114 (express)), а клиент (реагирует на 4000)
Как я могу их подключить?
Комментарии:
1. Как вы пытаетесь подключиться к серверу из клиента?
Ответ №1:
Проблема в том, что у вас одинаковое selector
для обеих служб. И когда вы пытаетесь связаться с какой-либо из служб, она случайным образом перенаправляет вас к клиенту или серверному модулю.
Пример:
-
Вы используете
nodeport:31515
, значит, сервис естьclient-node-port
.- Если служба перенаправит вас к вашему клиентскому модулю, будет доступен порт 4000. И порта 1114 не будет, поскольку клиентский модуль не имеет его открытым.
- Если это перенаправит вас на ваш серверный модуль, порт 4000 будет недоступен, поскольку у серверного модуля такой порт не открыт. Одновременно открыт порт 1114, но эта служба не перенаправляется на порт 1114, поэтому она также не будет доступна.
-
Вы используете
nodeport:30000
, значит, сервис естьserver-node-port
.- Если служба перенаправит вас к вашему клиентскому модулю, порт 4000 будет недоступен, поскольку эта служба не перенаправляет на порт 4000. Одновременно порт 1114 будет недоступен, поскольку он не открыт в клиентском модуле.
- Если это перенаправит вас на ваш серверный модуль, то порт 1114 будет доступен. И порта 4000 не будет, поскольку серверный модуль не имеет его открытого.
Чтобы устранить эту проблему, вам необходимо добавить дополнительные метки к вашим клиентским и серверным модулям, например, app: client
и app: server
соответственно:
...
metadata:
name: client
labels:
component: nri
app: client #Here is the new label
...
---
...
metadata:
name: server
labels:
component: nri
app: server #Here is the new label
...
После этого добавьте эти ярлыки к службам:
apiVersion: v1
kind: Service
metadata:
name: client-node-port
spec:
type: NodePort
ports:
- port: 4000
targetPort: 4000
nodePort: 31515
selector:
component: nri
app: client #Here is the new label
---
apiVersion: v1
kind: Service
metadata:
name: server-node-port
spec:
type: NodePort
ports:
- port: 1114
targetPort: 1114
nodePort: 30000
selector:
component: nri
app: server #Here is the new label