2

我有这样的情况:

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

问题是如何让 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"

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

4

3 回答 3

0

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

于 2018-09-25T16:15:28.273 回答
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
于 2018-01-27T18:59:30.357 回答
0

这是一个很好的阅读和如何做到这一点的例子,即使集群将在不同的项目中。https://github.com/GoogleCloudPlatform/gke-networking-demos/tree/master/gke-to-gke-peering (同样适用于其他云或像 kops 而不是 GKE 的自我管理集群

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

于 2020-02-09T15:48:06.243 回答