带有GKE内部负载均衡器的DNS

问题描述 投票:3回答:3

我在GKE上有两个kubernetes集群:一个公共处理与外部世界的交互,一个私有仅供内部使用。

公共集群需要访问私有集群上的某些服务,并通过internal load balancers将这些服务暴露给公共集群的pod。目前我正在为负载均衡器指定内部IP地址并将这些IP传递给公共pod,但我更希望负载均衡器可以选择任何可用的内部IP地址,并且我可以将其DNS名称传递给公共pod 。

Internal load balancer DNS可用于为VM提供服务的常规内部负载平衡器,DNS的格式为[SERVICE_LABEL].[FORWARDING_RULE_NAME].il4.[REGION].lb.[PROJECT_ID].internal,但是GKE上的内部负载平衡器是否有可用的东西?或者是否有一种解决方法可以让我完成类似的事情?

kubernetes google-cloud-platform dns google-kubernetes-engine
3个回答
1
投票

从来没有听说过GKE中负载均衡器的内置DNS,但我们实际上非常简单。我们有External DNS Kubernetes服务,负责管理负载均衡器和入口等各种事物的DNS记录。你可以做什么:

  1. 创建云DNS内部区域。确保将其与VPC集成。
  2. 确保您的Kubernetes节点服务帐户具有DNS管理员(或超广泛编辑器)权限。
  3. 安装外部DNS。
  4. 使用external-dns.alpha.kubernetes.io/hostname=your.hostname.here注释内部Load Balancer服务
  5. 验证是否已创建DNS记录,并且可以在您的VPC中解析。

1
投票

我怀疑“内部负载均衡器DNS”路由是否有效,但是我想到了一些解决方法:

1)Ingress:在公共集群中,将所有私有服务名称映射到私有集群中的入口控制器。入口可以将每个主机名的请求路由到正确的服务。

2)存根域:为您的私有服务使用一些常见的后缀(例如* .private),并使用私有集群kube-dns来解析这些服务名称(请参阅https://kubernetes.io/blog/2017/04/configuring-private-dns-zones-upstream-nameservers-kubernetes/

例:

apiVersion: v1
kind: ConfigMap
metadata:
  name: kube-dns
  namespace: kube-system
data:
  stubDomains: |
    {"private": ["10.2.3.4"]}
  upstreamNameservers: |
    ["8.8.8.8", "8.8.4.4"]

3)没有尝试过,但kEdge似乎是在集群之间安全通信的另一种解决方案:https://improbable.io/blog/introducing-kedge-a-fresh-approach-to-cross-cluster-communication


1
投票

您可以通过为内部负载均衡器分配工作节点的CIDR来实现此目的。在GKE中,我们在创建集群时提供三个CIDR块1.工作节点cidr 2. Pod cidr 3.服务端点cidr(通常由loadbalancer使用)。我们为Pod sand Service提供的CIDR仅适用于Kubernetes。因此它在外面不可见。

您可以从工作节点CIDR分配来自VPC中子网的IP,而不是使用服务端点ip作为内部负载均衡器,因此ip在不同群集的pod之间是可见的。

这种方法的缺点是您将在自动缩放期间丢失一个工作节点。

© www.soinside.com 2019 - 2024. All rights reserved.