Подключение клиента и сервера в кластере kubernetes

#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 для обеих служб. И когда вы пытаетесь связаться с какой-либо из служб, она случайным образом перенаправляет вас к клиенту или серверному модулю.

Пример:

  1. Вы используете nodeport:31515 , значит, сервис есть client-node-port .

    • Если служба перенаправит вас к вашему клиентскому модулю, будет доступен порт 4000. И порта 1114 не будет, поскольку клиентский модуль не имеет его открытым.
    • Если это перенаправит вас на ваш серверный модуль, порт 4000 будет недоступен, поскольку у серверного модуля такой порт не открыт. Одновременно открыт порт 1114, но эта служба не перенаправляется на порт 1114, поэтому она также не будет доступна.
  2. Вы используете 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