我有这样的情况:
问题是如何在2个集群中进行通信,以便在web机器的/ etc / hosts中使用某些主机名。
为了保护您的数据,是否可以安全地创建入口服务以使外部数据库可见? 我尝试使用nodePort服务(所以使用内部IP地址),但我无法在不同的集群之间联系db-web
目前我的临时解决方案是:
a)使用以下命令定义公共静态IP:gcloud compute addresses create my-public-static-ip --global
b)为我的数据库服务使用入口配置,我在其中使用选项
设置静态IPapiVersion: 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"
它正在发挥作用。但我不太相信这种解决方案在现场环境中是最好的或正确的
答案 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多集群功能也是有效的,但它是您在群集中安装的一个额外且复杂的组件,根本不需要。