k8s教程(service篇)-pod的dns域名

简介: k8s教程(service篇)-pod的dns域名

01 引言

声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记

Pod作为集群中提供具体服务的实体,也可以像Service一样设置DNS域名。 另外,系统为客户端应用Pod需要使用的DNS策略提供了多种选择。

02 Pod的DNS域名

对Pod来说,Kubernetes会为其设置一个<pod-ip>.<namespace>.pod.<cluster-domain>格式的DNS域名,其中Pod IP部分需要用 “-” 替换 “.” 符号,例如下面Pod的IP地址为10.0.95.63


系统为这个Pod设置的DNS域名为10-0-95-63.default.pod.cluster.local,用 nslookup进行验证,便可以成功解析该域名的IP地址为10.0.95.63


对于以DeploymentDaemonset类型创建的PodKubernetes会为每个Pod 都以其IP地址和控制器名称设置一个DNS域名,格式为 <pod-ip>.<deployment/daemonset-name>.<namespace>.svc.<cluster-domain>Pod IP地址段字符串需要用 “-” 替换 “.”符号,例如下面PodIP地址为10.0.95.48


系统为这个Pod设置的DNS域名为10-0-95-48.demo- app.default.svc.cluster.local,用nslookup进行验证,便可以成功解析该域名的IP 地址为10.0.95.48

03 为Pod自定义hostname和subdomain

在默认情况下,Pod的名称将被系统设置为容器环境内的主机名称 (hostname),但通过副本控制器创建的Pod名称会有一段随机后缀名,无法固定,此时可以通过在Pod yaml配置中设置hostname字段定义容器环境的主机名。 同时,可以设置subdomain字段定义容器环境的子域名

3.1 定义pod

通过下面的Pod定义,将会在Pod容器环境中设置主机名为"webapp-1",子域名为"mysubdomain":

apiversion: v1
kind: Pod
metadata:
  name: webapp1
  labels:
    app:webapp1
spec:
  hostname: webapp-1 
  subdomain: mysubdomain
  containers:
  - name: webapp1
    image: kubeguide/tomcat-app: v1 
  ports:
  - containerPort: 8080

创建完成后,查看该pod的IP地址:

Pod创建成功之后,Kubernetes系统为其设置的DNS域名(FQDN)为 webapp-1.mysubdomain.default.svc.cluster.local,可以通过登录Podwebapp1‘ 查看 /etc/hosts文件的记录:

3.2 定义Headless Service

为了使集群内的其他应用能够访问Pod的DNS域名,还需要部署一个Headless Service,其服务名称为Pod的子域名(subdomain),这样系统就会在DNS服务器中自动创建相应的DNS记录。

Headless Service的定义如下,名称(name)被设置为Pod的子域名 “mysubdomain”:

apiVersion: v1
kind: Service
metadata:
  name: mysubdomain
spec:
selector:
  app: webapp
clusterIP: None
ports:
- port:8080

创建完Headless Service之后,查看该Service详情:

此时,其他应用就可以通过PodDNS域名webapp--1.mysubdomain.default.svc.cluster.local访问Pod的服务了:

04 Pod的DNS策略

Kubernetes可以在Pod级别通过dnsPolicy字段设置DNS策略

目前支持的DNS策略如下:

策略 描述
Default 继承Pod所在宿主机的域名解析设置
ClusterFirst 优先使用Kubernetes环境的DNS服务(如:CoreDNS提供的域名解析服务),将无法解析的域名转发到系统配置的上游DNS服务器
Cluster FirstWithHostNet 适用于以hostNetwork模式运行的Pod
None 忽略Kubernetes集群的DNS配置,需要手工通过dnsConfig自定义DNS配置

下面是一个使用了hostNetworkPod,其dnsPolicy设置为"ClusterFirstWithHostNet":

apiversion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx 
    image: nginx
  hostNetwork: true
  dnsPolicy: ClusterFirstWithHostNet

05 Pod中的自定义DNS配置

在默认情况下,系统会自动为Pod配置好域名服务器等DNS参数,此外Kubernetes也提供在Pod定义中由用户自定义DNS相关配置的方法。

这可以通过在Pod定义中设置dnsConfig字段进行DNS相关配置。该字段是可选字段,在 dnsPolicy为任意策略时都可以设置,但是当dnsPolicy=“None“时必须设置。

自定义DNS可以设置以下内容:

  • nameservers:用于域名解析的DNS服务器列表,最多可以设置3个。当Pod的insPolicy=“None“时,该nameserver列表必须包含至少一个IP地址,配置的nameserver列表会与系统自动设置的nameserver进行合并和去重;
  • searches:用于域名搜索的DNS域名后缀,最多可以设置6个,也会与系统自动设置的search列表进行合并和去重;
  • options:配置其他可选DNS参数,例如ndots、timeout等,以name或name/value对的形式表示,也会与系统自动设置的option列表进行合并和去重。

以下面的dnsConfig为例:

apiVersion: v1
kind: Pod
metadata:
name: custom-dns
spec:
  containers:
  - name: custom-dns 
    image: tomcat
    imagePullPolicy: IfNotPresent 
    ports:
    - containerPort: 8080
  dnsPolicy: "None"
  dnsConfig:
    nameservers:
    - 8.8.8.8
    searches:
    - ns1.svc.cluster-domain.example 
    - my.dns.search.suffix 
    options:
    - name: ndots 
    - value: "2"
    - name: edns0

在Pod成功创建后,容器内DNS配置文件/etc/resolv.conf的内容将被系统设置如下:

nameserver  8.8.8.8
search nsl.svc.cluster.local my.dns.search.suffix 
options ndots:2 edns0

在IPv6环境中,Pod内/etc/resolv.conf文件中nameserverIP地址也会以 IPv6格式进行表示,例如:

nameserver fd00:79:30:a
search default.svc.cluster-domain.example svc.cluster-domain.example cluster-domain.example
options ndots:5
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
监控
新功能上线:云解析DNS-重点域名监控功能发布
新功能上线:云解析DNS-重点域名监控功能发布
|
2月前
|
存储 域名解析 弹性计算
阿里云上云流程参考:云服务器+域名+备案+域名解析绑定,全流程图文详解
对于初次通过阿里云完成上云的企业和个人用户来说,很多用户不仅是需要选购云服务器,同时还需要注册域名以及完成备案和域名的解析相关流程,从而实现网站的上线。本文将以上云操作流程为核心,结合阿里云的活动政策与用户系统梳理云服务器选购、域名注册、备案申请及域名绑定四大关键环节,以供用户完成线上业务部署做出参考。
|
7月前
|
域名解析 存储 网络协议
域名解析的终极指南:从基础到进阶,彻底搞懂 DNS 记录
域名解析是网站运行的基础,正确配置DNS记录至关重要。本文从基础到进阶全面解析DNS知识,涵盖A、AAAA、CNAME、MX、TXT、CAA等常见记录类型及其应用场景。通过学习,你将了解DNS的工作原理,掌握如何优化域名配置,确保网站与邮件服务高效运行。无论搭建个人博客还是企业官网,本文都能助你轻松搞定域名解析!
1591 0
|
5月前
|
网络协议 安全 区块链
DNS+:互联网的下一个十年,为什么域名系统正在重新定义数字生态? ——解读《“DNS+”发展白皮书(2023)》
DNS+标志着域名系统从基础寻址工具向融合技术、业态与治理的数字生态中枢转变。通过与IPv6、AI和区块链结合,DNS实现了智能调度、加密传输等新功能,支持工业互联网、Web3及万物互联场景。当前,中国IPv6用户达7.6亿,全球DNSSEC支持率三年增长80%,展现了其快速发展态势。然而,DNS+仍面临安全威胁、技术普惠瓶颈及生态协同挑战。未来,需推动零信任DNS模型、加强威胁情报共享,并加速标准制定,以筑牢数字时代网络根基,实现更安全、高效的数字生态建设。
425 3
|
8月前
|
域名解析 存储 缓存
深入学习 DNS 域名解析
在平时工作中相信大家都离不开 DNS 解析,因为 DNS 解析是互联网访问的第一步,无论是使用笔记本浏览器访问网络还是打开手机APP的时候,访问网络资源的第一步必然要经过DNS解析流程。
|
8月前
|
网络协议
【Azure App Service】App Service 如何配置私网域名以及证书呢?
本文解答了关于 Azure App Service 如何配置私网域名及证书的问题。App Service 不支持私网域名,自定义域名需配置在公共 DNS 服务器上。文章引用官方文档详细说明了映射自定义 DNS 的步骤,并附带参考资料链接,帮助用户深入了解相关配置方法。
202 6
|
9月前
|
域名解析 弹性计算 负载均衡
新手上云教程参考:阿里云服务器租用、域名注册、备案及域名解析流程图文教程
对于想要在阿里云上搭建网站或应用的用户来说,购买阿里云服务器和注册域名,绑定以及备案的流程至关重要。本文将以图文形式为您介绍阿里云服务器购买、域名注册、备案及绑定的全流程,以供参考,帮助用户轻松上手。
|
11月前
|
网络协议 应用服务中间件 网络安全
免费泛域名https证书教程—无限免费续签
随着互联网安全意识提升,越来越多网站采用HTTPS协议。本文介绍如何通过JoySSL轻松获取并实现免费泛域名SSL证书的无限续签。JoySSL提供永久免费通配符SSL证书,支持无限制域名申请及自动续签,全中文界面适合国内用户。教程涵盖注册账号、选择证书类型、验证域名所有权、下载与安装证书以及设置自动续签等步骤,帮助网站简化SSL证书管理流程,确保长期安全性。
1015 20
|
10月前
|
数据建模 网络安全
阿里云SSL证书不同类型DV、OV和EV如何收费?单域名和通配符SSL价格整理
阿里云SSL证书提供免费和收费版本,涵盖DV、OV、EV多种类型。收费证书品牌包括DigiCert、GlobalSign等,价格从238元/年起。免费SSL证书由Digicert提供,单域名有效3个月,每个实名主体每年可领取20个。具体价格和详情见阿里云SSL官方页面。

推荐镜像

更多
下一篇
oss云网关配置