Подключите модули через сервисное имя в GCP K8 - PullRequest
0 голосов
/ 05 октября 2019

У меня есть несколько служб, работающих с модулями, размещенными в кластере в Google Cloud K8.

Служба 1 является входной - basic-ingress

Сервис 2 - это NodeJS API Gateway с 2 модулями - security-gateway-svc

Сервис 3 - это NodeJS API с 2 модулями - some-random-api-svc

и т. д. Служба 4/5/6 и т. д. *

Мой вход позволяет мне получать доступ к открытым службам через поддомен, однако я хотел бы переместить внешние API-интерфейсы за мой шлюз, чтобы я мог обрабатывать аутентификациюи т. д. в шлюзе.

Я хотел бы разрешить security-gateway-svc подключаться к some-random-api-svc без необходимости проходить через dns или за пределы моего кластера.

Я подумал, что яможет обновить мой вход, чтобы все поддомены использовали одну и ту же запись службы и позволяли шлюзу определять, куда должен идти трафик.

Я могу настроить это локально, так как все работает на localhost, и я указываюport так что это довольно просто.

Возможно ли, однако, выставить pшансы на другие модули в кластере через имя службы вместо реального домена / DNS посмотреть?

Ответы [ 3 ]

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

Ваша служба должна быть доступна в вашем кластере через имя службы.

Укажите запись вашего шлюза для каждого API на имя службы.

Должно работать что-то вроде http://some-random-api-svc.

0 голосов
/ 06 октября 2019

Kubernetes использует CoreDNS для разрешения DNS-запросов в кластере. По умолчанию всем Service s назначаются имена DNS в форме (FQDN) <service-name>.<namespace>.svc.cluster.local. Таким образом, ваш security-gateway-svc сможет пересылать запросы на some-random-api-svc через some-random-api-svc.<namespace>, не направляя трафик за пределы Kubernetes. Имейте в виду, что вы не должны взаимодействовать со стручками напрямую, потому что они эфемерны;всегда проходить через Service с.

0 голосов
/ 06 октября 2019

Самый простой способ сделать стручки доступными в вашем кластере kubernetes - это использовать сервисы ссылка на документацию по сервисам . Для этого вам нужно создать блок yaml, который будет создавать внутреннее имя хоста, привязанное конечной точкой к вашему модулю. Кроме того, селектор позволит вам привязать один или несколько модулей к этому внутреннему имени хоста. Вот пример:

---
apiVersion: v1
kind: Service
metadata:
  name: $YOUR_SERVICE_NAME
  namespace: $YOUR_NAMESPACE
  labels:
    app: $YOUR_SERVICE_NAME
spec:
  ports:
  - name: "8000"
    port: 8000
    targetPort: 8000
  selector:
    app: $YOUR_SERVICE_NAME

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: $YOUR_SERVICE_NAME
  namespace: $YOUR_NAMESPACE
  labels:
    app: $YOUR_SERVICE_NAME
spec:
  replicas: 1
  selector:
    matchLabels:
      app: $YOUR_SERVICE_NAME
  template:
    metadata:
      labels:
        app: k2m
    spec:
      containers:
        - name: $YOUR_SERVICE_NAME
          image: alpine:latest
      restartPolicy: Always

Наконец, используйте имя службы в маршруте вашего входящего контроллера, чтобы перенаправить трафик на ваш api-шлюз.

...