k8s pod的dns域名

简介: 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
目录
相关文章
|
2天前
|
域名解析 网络协议 网络安全
阿里云DNS常见问题之域名DNS完成实名认证还是锁定状态如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
2天前
|
域名解析 存储 缓存
Linux中搭建DNS 域名解析服务器(详细版)
Linux中搭建DNS 域名解析服务器(详细版)
|
2天前
|
网络协议 Windows
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
|
2天前
|
运维 网络协议 安全
Serverless 应用引擎产品使用之阿里云函数计算中添加自定义域名进行域名DNS验证如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
25 1
|
2天前
|
域名解析 负载均衡 网络协议
【专栏】理解DNS对于利用网络资源和理解互联网运作至关重要
【4月更文挑战第28天】DNS是互联网的关键组件,将域名转换为IP地址,简化了上网方式。它是一个分布式数据库,类似电话簿,但具有动态、层次化和分布式的特性。工作原理涉及多步查询过程,从本地DNS到根服务器,最终找到权威名称服务器获取IP。DNS还支持负载均衡、地理定位和DNSSEC安全技术。随着技术发展,DNS的角色不断扩展,提供域名隐私保护和智能DNS等服务,是连接用户与数字世界的桥梁。理解DNS对于利用网络资源和理解互联网运作至关重要。
|
2天前
|
域名解析 网络协议 大数据
阿里云域名购买与域名解析使用教程(图文教程)
该文档是关于在阿里云注册账号、购买域名及进行DNS解析的步骤指南。首先,需注册阿里云账号并进行实名认证,建议选择企业认证以便获取企业发票。接着,通过阿里云域名注册页面检查并购买未被注册的域名,将域名添加至购物车并完成支付。购买后,在云解析DNS界面进行实名认证,然后对域名进行解析设置,选择A记录类型,填写主机记录(如www),记录值为云服务器的IP地址,设置TTL,并校验解析是否成功。最后,文中还提及了如何在云服务器上进行实例名称的修改和查看服务器状态等操作。
|
2天前
|
域名解析 弹性计算 安全
阿里云域名注册到备案再到解析详细流程
本文主要讲解域名的注册,备案和解析流程,帮小白轻松搞定域名全流程
|
2天前
|
Kubernetes 网络协议 应用服务中间件
K8s中Pod4中DNS解析策略
K8s中Pod4中DNS解析策略
32 1
|
2天前
|
存储 缓存 负载均衡
阿里云DNS常见问题之域名DNS跳转有问题如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
2天前
|
域名解析 弹性计算 Linux
阿里云购买云服务器、注册域名、备案及绑定图文教程参考
本文为大家介绍了2024年购买阿里云服务器和注册域名,绑定以及备案的教程,适合需要在阿里云购买云服务器、注册域名并备案的用户参考,新手用户可通过此文您了解在从购买云服务器到完成备案的流程。
阿里云购买云服务器、注册域名、备案及绑定图文教程参考

相关产品

  • 云解析DNS