我目前正在建立一个同时运行私有和公共服务的Kubernetes集群。虽然应该可以通过Internet(和FQDN)访问公共服务,但不能访问私有服务(其思想是在可以通过简单 FQDN访问私有服务的群集中运行VPN)。
目前,我正在使用nginx-ingress并配置Ingress资源,并在其中设置公共资源的主机名。然后,external-dns添加相应的DNS记录(在Google CloudDNS中)-这已经起作用。
我现在面临的问题:我不确定如何以相同的方式添加DNS记录(即简单地在Ingress
定义中指定主机并使用一些入口类private
),但只能从集群内部访问这些DNS记录。
给我的印象是,可以将这些记录添加到CoreDNS正在使用的Corefile
中。但是,我无法弄清楚如何将其自动化。
谢谢您的帮助!
答案 0 :(得分:1)
我设法自己解决了这个问题...写了一个小的Go应用程序,它监视Ingress
资源,并向rewrite
添加Corefile
规则,从而使CoreDNS读取的{... 1 ...魅力:)
PS:如果有人想使用该工具,请告诉我。如果有需求,我很乐意将其开源。
答案 1 :(得分:0)
如果您不希望公开访问它们,则不想为其添加入口规则。入口仅用于将外部流量路由到您的群集中。
您的所有服务均已在CoreDNS中注册,并可以使用其本地名称进行访问,而无需添加其他任何内容。
答案 2 :(得分:0)
由于您的k8s集群由gcloud托管,因此您可以尝试使用Cloud DNS
。您可以在其中添加带有DNS名称的private zone
。
然后,您可以使用以下方法将此dns服务器以您的vpn配置推送到客户端:
push "dhcp-option DOMAIN gitlab.internal.example.com"
push "dhcp-option DNS 169.254.169.254"
169.254.169.254
是Google的DNS,只能从Google专用网络内部访问
答案 3 :(得分:0)
Kubernetes具有内置的DNS,每个服务都接收内部fqdn。 除非从外部无法提供这些服务,否则
因此,可以通过以下方式在群集内部直接访问部署在“默认”名称空间中的示例服务: service1.default.svc.cluster.local
您可以通过指定自定义ExternalName来更改名称
apiVersion: v1
kind: Service
metadata:
name: service1
namespace: prod
spec:
type: ExternalName
externalName: service1.database.example.com
请注意,没有代理可完成此工作,您需要确保从集群内部可以路由给定的新名称(允许出站连接等)