kubernetes dns 原理(k8s dns解析原理)

作者 : 慕源网 本文共2272个字,预计阅读时间需要6分钟 发布时间: 2023-02-28 共408人阅读

Kubernetes DNS简介

Kubernetes中的DNS,或者一般来说,指的是域名系统。它包含多种易于理解和阅读的信息,其中通常包括用易记名称替换的IP地址。在Kubernetes中,大多数集群默认启用域服务,并帮助我们提供轻量级的服务发现机制。但是,Kubernetes中DNS的实现随着时间的推移而发生了变化,这可以在最新版本或最近版本的Kubernetes中看到。集群中定义的任何服务都会与DNS名称相关联。在本文的下一部分中,我们将详细解释Kubernetes中DNS的内部实现,以便更清晰地理解它的工作方式。

Kubernetes DNS 服务

Kubernetes DNS服务的内部实现正在随着最新版本的Kubernetes而发生变化。在本节中,我们将详细了解 DNS 服务的工作原理。Kubernetes 允许我们创建一组容器,并在其上定义服务。所有这些服务都被分配了一个静态 IP 地址,为了在集群内部解析这些 IP 地址,Kubernetes 会生成 DNS 来帮助解析。此外,Kubernetes 为每个 Pod 和 Service 创建了 NS(命名空间),我们知道服务与 IP 地址相关联。因此,我们可以使用 Kubernetes 生成的易于记忆的 DNS 名称来代替 IP 地址与服务进行通信。

DNS 记录中包含两种类型的对象,分别是:

  1. Service(服务)
  2. Pod(Pod)

下面我们将详细介绍它们。

  1. Service(服务):每个服务都分配了一个 DNS 记录,可以是 DNS A 记录或 AAAA 记录,这取决于服务的 IP 类型。因此,这些服务都与 DNS 记录 A/AAAA 相关联。

此外,在没有集群 IP 地址的情况下,这些服务也会分配一个 DNS 记录,同样是 A/AAAA 记录,主要取决于服务的 IP 类型。我们可以将其分为两类:

  • 普通服务(Normal)或非 Headless 服务;
  • Headless 服务。

下面是一个示例:

my-svc.my-namespace.svc.cluster-domain.example

2)Pods: 现在我们要讨论的是Pods,在Kubernetes中它也有一个基本的DNS解析结构。假设我们有一个位于默认命名空间的Pod,那么该Pod的IP地址将为“172.17.0.3”,与该Pod关联的域名将为“cluster.local”。因此,按照已定义的DNS解析结构,我们可以创建以下内容:

结构:pod-ip-address.my-namespace.pod.cluster-domain.example

示例:172-17-0-3.default.pod.cluster.local

这是解析Pod DNS名称的一种方式。

创建Kubernetes DNS和示例Kubernetes DNS 为了创建Kubernetes DNS,我们可以在Kubernetes中使用CoreDNS。让我们来看看我们需要进行的所有配置和映射,让我们开始看下面的内容:

1)为此,我们必须维护一个核心文件,其中包含许多配置作为键值对条目,该文件称为CoreDNS配置文件。

2)要安装CoreDNS,请运行以下文件:

例如:

DNS核心文件可以更改DNS服务发现的行为,适用于该集群。

在Kubernetes中,默认情况下使用以下默认的Corefile配置来安装CoreDNS:

apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
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
}

这是安装CoreDNS的标准文件。

2)此核心文件将为我们提供以下CoreDNS插件:

a) error

b) health

c) reload

d) loop

e) cache

f) forward

g) load balance

通过使用CoreDNS,我们可以在Kubernetes中创建DNS。

DNS中的错误-k8s dns解析失败

在使用Kubernetes中的DNS服务或pods时,我们可能会遇到各种问题,常见问题如下:

1)由于我们未连接到网络或失去了Internet访问权限,因此无法连接到DNS服务或IP地址。

2)换句话说,它帮助我们将域名转换为IP地址,或将我们的名称转换为IP地址,反之亦然。

3)我们可以采取以下步骤进行基本故障排除,以解决此类问题,请参见以下步骤:

a) 尝试重新启动路由器:尝试重新启动并等待几分钟再重新启动。

b) 检查网站:尝试确认您遇到错误的特定网站的DNS名称。

c) 尝试检查连接和电缆:如果我们通过Wi-Fi或LAN连接,我们应该先检查它是否已正确插入,以确保它正常工作。

尝试检查服务或pods是否正在运行,可以使用以下命令进行确认:

kubectl get pods

结论

在本文中,我们详细介绍了如何在Kubernetes中创建DNS服务,并通过示例进行了演示。遵循本文的说明可以更好地了解Kubernetes中的DNS。我们已经知道为什么在Kubernetes中使用它们。DNS在使用、创建和维护方面都很简单。它还帮助开发人员通过为它们分配的DNS名称解析Pod或Service的IP地址。

 


慕源网 » kubernetes dns 原理(k8s dns解析原理)

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录