Как связать два кластера в Куберне

У меня такая ситуация:

  • кластер веб-машин
  • кластер дб машин и других сервисов

Вопрос в том, как соединить 2 кластера, чтобы использовать некоторые имена хостов в / etc / hosts веб-машин.

Чтобы защитить ваши данные, безопасно ли создавать входной сервис, чтобы сделать видимым БД из внешнего источника? Я пытался с сервисом nodePort (поэтому с использованием внутренних IP-адресов), но я не могу установить контакт db-web между различными кластерами

На данный момент мое временное решение:

а) определить публичный статический ip с помощью команды: gcloud compute addresses create my-public-static-ip --global

б) использовать входную конфигурацию для моей службы БД, где я устанавливаю статический ip с опцией:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: my-public-static-ip 

в) в моем daemonset.yaml я определяю hostAliases:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: my-daemonset

spec:
  updateStrategy:
    type: RollingUpdate

  template:            
    spec:
      nodeSelector:
        app: frontend-node

      terminationGracePeriodSeconds: 30

      hostAliases:
      - ip: <public_ip_addr>
        hostnames:
        - "my-db-service"

и это работает. Но я не слишком убежден, что это решение является лучшим или, тем не менее, правильным в реальной среде.

2 ответа

На мой взгляд, я думаю, что лучший способ получить 2 разных кластера Kubernetes(GKE-Google Kubernetes Engine) для взаимодействия друг с другом - это использовать Istio - открытую платформу для подключения, управления и защиты микросервисов. Взгляните на следующую ссылку: - https://istio.io/docs/examples/multicluster/gke/. Это довольно просто и также хотелось бы отметить, что Istio должен хорошо сочетаться с такими реализациями, как Amazon Elastic Container, Azure Kubernetes Service и т. Д.

Вы можете предоставить свой сервис db с помощью NodePort или LoadBalancer в первом кластере, а затем создать сервис, указывающий на ip-конечную точку в секунду.

Сервис на втором кластере может выглядеть так:

apiVersion: v1
metadata:
  name: pg-database
spec:
  ports:
  - protocol: TCP
    port: 5432
    targetPort: 5432

---

kind: Endpoints
apiVersion: v1
metadata:
  name: pg-database
subsets:
  - addresses:
      - ip: <IP address of load balancer or node>
    ports:
      - port: 5432

Это очень хорошее чтение и примеры того, как это сделать, даже если кластеры будут в разных проектах. https://github.com/GoogleCloudPlatform/gke-networking-demos/tree/master/gke-to-gke-peering(То же самое работает в других облаках или с самоуправляемыми кластерами, такими как kops вместо GKE

Использование функции мульти-кластера istios также допустимо, но это дополнительный и сложный компонент, который вы устанавливаете в свои кластеры и который может вообще не понадобиться.

Другие вопросы по тегам