Как связать два кластера в Куберне
У меня такая ситуация:
- кластер веб-машин
- кластер дб машин и других сервисов
Вопрос в том, как соединить 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 также допустимо, но это дополнительный и сложный компонент, который вы устанавливаете в свои кластеры и который может вообще не понадобиться.