我有一个带有CoreDNS的Kubernetes 1.13.1集群,除了默认的<servicename>.nsc
之外,我还希望可以通过<servicename>.default.svc.cluster.local
访问默认名称空间中运行的许多服务。
我尝试的第一件事是手动重写每个服务,如下所示:
rewrite name gitea.nsc gitea.default.svc.cluster.local
运行nslookup gitea.nsc
返回预期的输出:
Server: 10.245.0.10
Address: 10.245.0.10#53
Name: gitea.nsc
Address: 10.245.64.203
我可以curl
,一切都很好。
但是后来我尝试将其抽象一些,因为为每个服务手动添加一行很繁琐。
我最终得到了这个
rewrite name suffix .nsc .default.svc.cluster.local
但是现在curl
突然失败了。 nslookup
提供了有关原因的可能线索:
Server: 10.245.0.10
Address: 10.245.0.10#53
Name: gitea.default.svc.cluster.local
Address: 10.245.64.203
现在,响应中的名称包含重写的主机,而不是原始输入。我的猜测是,这会抛出ping
,curl
,wget
。
我的Corefile当前看起来像这样:
.:53 {
errors
health
rewrite name git.nsc gitea.default.svc.cluster.local
rewrite name suffix .nsc .default.svc.cluster.local
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
proxy . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
我的托管服务提供商会自动生成除两条重写行以外的所有内容。我在一种情况下使用git.nsc
,因此在调试时可以同时在Corefile中进行两次重写。
我很困惑。如何获得CoreDNS重写<servicename>.nsc
,但不返回重写主机的响应?
答案 0 :(得分:1)
在rewrite plugin Readme中找出答案正确。总结:
事实证明,像上面的git.nsc
重写那样的精确重写可以免费重写响应,默认是返回重写的主机。对于其他类型(例如正则表达式或后缀),您必须明确地执行此操作。这仅适用于正则表达式重写,因此后缀重写需要先重写为正则表达式重写。
以下代码段对我有用:
rewrite stop {
name regex (.*)\.nsc {1}.default.svc.cluster.local
answer name (.*)\.default\.svc\.cluster\.local {1}.nsc
}
answer name
部分基本上是name regex
部分的反面。