如何在Kubernetes中添加内部DNS记录



我目前正在建立一个运行私有和公共服务的Kubernetes集群。虽然公共服务应该通过互联网(和FQDN(访问,但私人服务不应该(其想法是在集群内运行VPN,其中私人服务应该通过简单FQDN访问(。

目前,我正在使用nginxingress并配置ingress资源,在那里我设置了公共资源的主机名。外部dns然后添加相应的dns记录(在GoogleCloudDNS中(-这已经起作用了。

我现在面临的问题是:我不确定如何以相同的方式添加DNS记录(即,简单地在Ingress定义中指定主机并使用一些入口类private(,但这些DNS记录只能从集群中访问。

我的印象是,我可以将这些记录添加到CoreDNS正在使用的Corefile中。然而,我不知道如何实现自动化。

谢谢你的帮助!

如果您不希望它们被公开访问,则不希望为它们添加入口规则。Ingress只是将外部流量路由到您的集群中。

您的所有服务都已在CoreDNS中注册,并可使用其本地名称访问,无需添加任何其他内容。

我自己设法解决了这个问题。。。编写了一个小Go应用程序,它监视Ingress资源,并相应地将rewrite规则添加到CoreDNS读取的Corefile中。。。就像一个符咒:(

附言:如果有人想使用这个工具,请告诉我。如果有任何需求,我很乐意将其开源。

Kubernetes有内置的DNS,每个服务都接收内部fqdn。除非,否则无法从外部获得这些服务

  • 服务类型为"LoadBalancer">
  • 您为该服务定义了ingress(假设您已经部署了像nginx这样的ingress控制器(

因此,部署在"default"命名空间中的示例服务可以在集群内通过service1.default.svc.cluster.local

您可以通过指定自定义ExternalName 来更改名称

apiVersion: v1
kind: Service
metadata:
name: service1
namespace: prod
spec:
type: ExternalName
externalName: service1.database.example.com

请注意,没有进行代理,您需要确保给定的新名称可以从集群内路由(允许出站连接等(

由于您的k8s集群是用gcloud托管的,您可以尝试使用Cloud DNS。在那里,您可以添加一个带有DNS名称的private zone

然后你可以在你的vpn配置中将这个dns服务器推送到你的客户端:

push "dhcp-option DOMAIN gitlab.internal.example.com"
push "dhcp-option DNS 169.254.169.254"

169.254.169.254是谷歌的dns,只能从谷歌专用网络内部访问

如果您有一个可以解析FQDN的内部DNS服务器,那么您可以配置核心文件将内部服务域解析转发到该DNS服务器。

例如,如果内部域/FDND是*.mycompany.local,则Corefile可能有一个部分用于:

mycompany.local {
log
errors
ready
cache 10
forward . <internal DNS server IP> {
}
}

app.mycompany.localfrontend.middleware.backend.mycompany.local的所有请求都将转发到您的内部DNS进行解析。

这里提供了forward插件的文档:https://coredns.io/plugins/forward/

相关内容

  • 没有找到相关文章

最新更新