我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
我们在前面介绍svc的的时候,可以通过ping svc的而获取到svc的ClusterIP。而我们在linux进阶里面讲过从域名变成ip是dns的功能,在k8s的里面实现这个dns的功能是CoreDNS。
CoreDNS 是一个用于域名解析的开源软件。它是 Kubernetes 默认的 DNS 插件,并且也可以用作独立的 DNS 服务器。
以下是 CoreDNS 的一些主要特点和功能:
CoreDNS 在 Kubernetes 中扮演着重要的角色,为集群中的服务提供了域名解析功能。它可以解析 Kubernetes 中的服务和 Pod 的域名,实现内部服务之间的通信。同时,CoreDNS 也可以配置为将外部域名解析为集群中的服务,实现从集群内外的服务访问。
/etc/resolv.conf
文件中的配置,该文件指定了用于 DNS 查询的名称服务器,我们在讲Docker-联合文件的时候讲过,这个文件是自动生成,k8s创建的普通pod这个文件都会指向coredns的ClusterIP。/etc/resolv.conf
中配置了集群内部的 DNS 服务地址,那么 Pod 将会向 CoreDNS 发送 DNS 请求。CoreDNS 是 Kubernetes 默认的 DNS 服务,通常通过名为 kube-dns
或 coredns
的 Service IP 地址被访问。早期的版本才会使用的是kube-dns。简单来就是pod发起dns请求和普通服务器发起dns流程一样,先找hosts
,然后向/etc/resolv.conf
里面配置的dns进行请求(而这里默认配置的则是Coredns)参考下图,如果Coredns无法解析,则递归pod的/etc/resolv.conf
,而这个文件的内容刚好就是pod所在主机的resolv.conf(以前我记得是通过hostpath挂载的,现在的版本好像看不到这个配置)。所以主机的这个文件也不能轻易修改。
普通容器这个文件和coredns这个文件,都是docker创建的时候生成的,暂时不清楚他是怎么实现的逻辑导致他们的dns文件不一样。但是可以记住,这个域名解析流程就行,也可以通过控制Coredns的配置文件来修改dns的解析流程和路径。
CoreDNS是这个pod是在k8s安装的时候就自动生成,是通过deployment控制的,默认2个副本,配置文件通过configmap方式注入到pod。
历史推荐内容Docker-docker基本信息,基本命令,dockerfile,原理,仓库,存储网络日志,番外篇云计算&虚拟化-包括服务器购买,虚拟化介绍,虚拟磁盘,虚拟网络,创建虚拟机,安装虚拟机,dashboard,xml解释,克隆,快照,初始化,esxi介绍。Linux进阶-包括硬件,日常运维,基础软件,日志,进阶命令,防火墙,shell编程,内核,linux系统及初始化Linux基础-包括文件的增删改查,磁盘管理,网络配置,用户配置,权限配置 |
---|