发现Kubernetes服务DNS记录

时间:2020-04-07 15:08:04

标签: kubernetes

我在各种不同的云中研究各种不同的Kubernetes集群。我的问题是,很难发现kubernetes服务的FQDN是什么,因为不同的集群具有不同的配置。

是否可以通过kubectl获取服务的FQDN?使用kubectl describe svc时看不到它。

根据本文,它应该类似于my-svc.my-namespace.svc.cluster-domain.examplehttps://kubernetes.io/docs/concepts/services-networking/dns-pod-service/

如何确定FQDN的cluster-domain.example部分?我可以使用my-svc.my-namespace.svc并解决它,但是如果可以的话,我想使用FQDN。

2 个答案:

答案 0 :(得分:2)

集群域是在命名空间coredns中名为kube-system的configMap中定义的。此configMap是事实的来源,并由coreDNS使用。在下面的Configmap群集域中为cluster.local

kubectl get cm coredns -n kube-system -o yaml
apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health {
           lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }
kind: ConfigMap
metadata:
  creationTimestamp: "2020-04-03T14:24:44Z"
  name: coredns
  namespace: kube-system
  resourceVersion: "177"
  selfLink: /api/v1/namespaces/kube-system/configmaps/coredns
  uid: d00d8e5d-d089-4d7a-a1d3-4460703c23d9

答案 1 :(得分:1)

子域是通过标志--cluster-domainkubelet指定的,因此kubelet可以将其用作容器文件/etc/resolve.conf中的搜索域。在Pod中搜索服务名称时,FQDN通过文件/etc/resolve.conf中的设置自动完成。

对于kube-dns,它包含3个容器。其中一个名为kube-dns,它的标志-domain与群集域具有相同的值。