如何在Kubernetes中进行两个集群的通信

时间:2017-12-11 17:10:31

标签: kubernetes google-cloud-platform docker-ingress

我有这样的情况:

  • 一组网络机器
  • 数据库计算机和其他服务的集群

问题是如何在2个集群中进行通信,以便在web机器的/ etc / hosts中使用某些主机名。

为了保护您的数据,是否可以安全地创建入口服务以使外部数据库可见? 我尝试使用nodePort服务(所以使用内部IP地址),但我无法在不同的集群之间联系db-web

目前我的临时解决方案是:

a)使用以下命令定义公共静态IP:gcloud compute addresses create my-public-static-ip --global

b)为我的数据库服务使用入口配置,我在其中使用选项

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

c)在我的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"

它正在发挥作用。但我不太相信这种解决方案在现场环境中是最好的或正确的

3 个答案:

答案 0 :(得分:0)

您可以在第一个群集中使用NodePort或LoadBalancer公开您的数据库服务,然后在第二个群集中创建指向ip-endpoint的服务。

第二个群集上的服务可能如下所示:

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

答案 1 :(得分:0)

我认为,使两个不同的Kubernetes集群(GKE-Google Kubernetes Engine)相互通信的最佳方法是使用Istio-开放平台来连接,管理和保护微服务。看一下以下链接:-https://istio.io/docs/examples/multicluster/gke/。很简单,我还要提到Istio应该也很适合Amazon Elastic Container,Azure Kubernetes Service等实现。

答案 2 :(得分:0)

这是一本很好的文章,并提供了有关如何执行此操作的示例,即使这些群集位于不同的项目中也是如此。 https://github.com/GoogleCloudPlatform/gke-networking-demos/tree/master/gke-to-gke-peering (在其他云或类似kops而不是GKE的自我管理集群中也可以使用

使用istios多集群功能也是有效的,但它是您在群集中安装的一个额外且复杂的组件,根本不需要。