注意 请配置
fallthrough,否则会造成非定制hosts域名解析失败。
场景五:集群外部访问集群内服务如果您希望运行在集群ECS上的进程能够访问到集群内的服务,虽然可以通过将ECS的/etc/resolv.conf文件内nameserver配置为集群kube-dns的ClusterIP地址来达到目的,但不推荐您直接更改ECS的/etc/resolv.conf文件的方式来达到任何目的。
内网场景下,您可以将集群内的服务通过内网SLB进行暴露,然后在云解析PrivateZone控制台通过添加A记录到该SLB的内网IP进行解析。具体操作,请参见添加解析记录。
场景六:统一域名访问服务或是在集群内对域名的做CNAME解析您可以实现在公网、内网和集群内部通过统一域名foo.example.com访问您的服务,原理如下:
集群内的服务foo.default.svc.cluster.local通过公网SLB进行了暴露,且有域名foo.example.com解析到该公网SLB的IP。
集群内服务foo.default.svc.cluster.local通过内网SLB进行了暴露,且通过云解析PrivateZone在VPC内网中将foo.example.com解析到该内网SLB的IP。具体步骤,请参见上述为特定域名指定hosts。
在集群内部,您可以通过Rewrite插件将foo.example.com CNAME到foo.default.svc.cluster.local。示例配置如下: Corefile: |
.:53 {
errors
health {
lameduck 5s
ready
rewrite stop {
name regex foo.example.com foo.default.svc.cluster.local
answer name foo.default.svc.cluster.local foo.example.com
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
ttl 30
prometheus :9153
forward . /etc/resolv.conf
cache 30
reload
loadbalance
场景七:监控CoreDNS解析失败记录当您需要打开CoreDNS的日志收集日志并监控解析失败的情况时(可参见上述
场景一:开启日志服务),您还需要为CoreDNS配置autopath。示例配置如下(更多信息,请参见
使用Autopath插件):
Corefile: |
.:53 {
errors
health
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods verified
fallthrough in-addr.arpa ip6.arpa
autopath @kubernetes
prometheus :9153
forward . /etc/resolv.conf
cache 30
reload
loadbalance
编译应用新配置后,执行命令
kubectl get pods -n kube-system | grep coredns先查看CoreDNS Pod,然后执行命令
kubectl logs coredns-{pod id} -n kube-system查看每个Pod的日志。当监控到NXDOMAIN、SERVFAIL类型的返回码时,即代表CoreDNS解析失败。
