Kubernetes: как связать внутренние сервисы с разными пространствами имен? - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь связать воедино две службы Kubernetes, расположенные в разных пространствах имен, например this . Связывая их по DNS, с типом ExternalName.

В пространстве имен с именем "db" я хочу иметь развертывание с базой данных. Чтобы иметь возможность иметь 1 базу данных, которая может использоваться несколькими проектами. Чтобы иметь один постоянный том.

Но почему-то он не работает, как ожидалось.

Служба внутри пространства имен "db":

apiVersion: v1
kind: Service
metadata:
  labels:
    app: db-srv
  name: db-srv
  namespace: db
spec:
  ports:
  - name: "db-postgres"
    port: 5432
    targetPort: 5432
  selector:
    app: db
status:
  loadBalancer: {}

Служба, расположенная в пространстве имен «myspace», которое подключается к базе данных:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: myspace-db-service
  name: myspace-db-service
  namespace: myspace
spec:
  type: ExternalName
  externalName: db-srv.db.svc.cluster.local
  ports:
  - port: 5433
    # targetPort: 5432
status:
  loadBalancer: {}

Бэкэнд подключается к службе myspace на порту 5433.

Неправильны ли порты?

1 Ответ

1 голос
/ 02 октября 2019

Ответ заключается в том, что порты в Сервисе с ExternalType и в Сервисе, к которому он подключается, должны быть одинаковыми. Использование targetPort для ExternalType не работает.

Это правильно:

SVC (externalType) => PORT (5433) => SVC (другое пространство имен) на PORT (5433) => targetPort

Это НЕ правильно:

SVC (externalType) => PORT (5433) =>TARGETPORT (5432) => SVC (другое пространство имен) в PORT (5432) => targetPort

...