Kubernetes DNS 简要分析

Service

  • 创建普通service 会以my-svc.my-namespace.svc.cluster.local 的形式指派一个 DNS A 记录,并解析到该service的Cluster IP。
  • 创建“Headless” Service(没有Cluster IP)也会以 my-svc.my-namespace.svc.cluster.local 的形式被指派一个 DNS A 记录,但是并不会解析到的Cluster IP,而是解析到一组被选中的pod 的IP,如果没有backend则不做处理。
[root@kvm5-k8s-test1 ~]# kubectl get svc -n kube-system
NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
api-server             ClusterIP   172.18.23.244    <none>        8080/TCP                 47h

# DNS解析
[root@kvm5-k8s-test1 ~]# kubectl exec -it console-web-bcc786b9-4rmlw bash -n kube-system
root@console-web-bcc786b9-4rmlw:/cc/app# nslookup api-server.kube-system.svc.cluster.local
Server:		172.18.0.3
Address:	172.18.0.3#53

Name:	api-server.kube-system.svc.cluster.local
Address: 172.18.23.244

Pod

  • 创建Pod 会以 pod-ip-address.my-namespace.pod.cluster.local 这种形式被指派一个 DNS A 记录。
# Pod
[root@kvm5-k8s-test1 ~]# kubectl get pod -n kube-system -o wide
NAME                                          READY   STATUS    RESTARTS   AGE     IP               NODE                  NOMINATED NODE
api-server-654999ff9-z4bbc                    1/1     Running   0          160m    172.19.3.75      kvm100-k8s-test5   <none>

# DNS解析
[root@kvm5-k8s-test1 ~]# kubectl exec -it console-web-bcc786b9-4rmlw bash -n kube-system
root@console-web-bcc786b9-4rmlw:/lain/app# nslookup 172-19-3-75.kube-system.pod.cluster.local
Server:		172.18.0.3
Address:	172.18.0.3#53

Name:	172-19-3-75.kube-system.pod.cluster.local
Address: 172.19.3.75

Pod内部的本地DNS配置

root@console-web-bcc786b9-4rmlw:/cc/app# cat /etc/resolv.conf
nameserver 172.18.0.3
search kube-system.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

Pod’s DNS 策略

  • “Default“: pod 继承其运行的宿主机dns解析
  • “ClusterFirst“: 如果请求的地址与集群的域名后缀不一致,则转向宿主机的dns解析,相同则集群内部解析。这个选项是k8s pod 的 默认选项
  • “ClusterFirstWithHostNet“: hostNetwork 宿主机网络
  • “None“: 忽略k8s环境,用户可以在spec中使用dnsConfig关键字配置dns设置

k8s集群域名配置

  • kubelet配置
--cluster-dns=<dns-service-ip>
--cluster-domain=<default-local-domain>

K8S DNS 参考

CoreDNS

  1. 介绍
  • 插件化
  1. 配置
kubernetes [ZONES...] {
    resyncperiod DURATION
    endpoint URL [URL...]
    tls CERT KEY CACERT
    kubeconfig KUBECONFIG CONTEXT
    namespaces NAMESPACE...
    labels EXPRESSION
    pods POD-MODE
    endpoint_pod_names
    upstream [ADDRESS...]
    ttl TTL
    noendpoints
    transfer to ADDRESS...
    fallthrough [ZONES...]
    ignore empty_service
}
  • Corefile
    server 以什么协议监听在哪个端口(可以同时定义多个 server 监听不同端口)
    server 负责哪个 zone 的权威(authoritative)DNS 解析
    server 将加载哪些插件
  1. 当前集群配置在 kube-system->configmap->coredns 下
Corefile: |
    .:53 {
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          upstream /etc/resolv.conf
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        proxy . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }
  • 上述配置解释
    • errors:标准错误输出
    • health:服务健康检查
    • kubernetes:k8s 插件, 容器内部访问以laincloud.test为后缀的服务,由coredns 负责解析,其他则转到下一个插件去解析
    • 暴露给 prometheus 监控指标
    • proxy: 任何没有以laincloud.test为后缀的服务由容器所在宿主机解析
    • reload: 修改配置文件自动重启
    • loadbalance:负载均衡
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值