一、Pod的DNS域名

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

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

系统为webapp-p598v这个pod设置的DNS域名为10-244-2-3.default.pod.cluster.local

[root@master ~]# kubectl get pod -o wide
NAME           READY   STATUS    RESTARTS   AGE     IP           NODE    NOMINATED NODE   READINESS GATES
busybox        1/1     Running   3          2d17h   10.244.1.3   node3   <none>           <none>
webapp-p598v   1/1     Running   0          3d3h    10.244.2.3   node4   <none>           <none>
webapp-wj5q7   1/1     Running   0          3d3h    10.244.3.2   node2   <none>           <none>
[root@master ~]# kubectl exec -it webapp-wj5q7 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@webapp-wj5q7:/usr/local/tomcat# ping 10-244-2-3.default.pod.cluster.local
PING 10-244-2-3.default.pod.cluster.local (10.244.2.3) 56(84) bytes of data.
64 bytes from 10-244-2-3.webapp.default.svc.cluster.local (10.244.2.3): icmp_seq=1 ttl=62 time=2.11 ms
64 bytes from 10-244-2-3.webapp.default.svc.cluster.local (10.244.2.3): icmp_seq=2 ttl=62 time=0.889 ms
^C
--- 10-244-2-3.default.pod.cluster.local ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 2ms
rtt min/avg/max/mdev = 0.889/1.500/2.111/0.611 ms
root@webapp-wj5q7:/usr/local/tomcat# 

对于Depoyment或Daemonset类型创建的Pod,Kubernetes会为每个Pod有以其IP地址和控制器名称设置一个DNS域名,格式<pod-ip>.<deployment/daemonset-name>.<namespace>.svc.<cluster-doamin>,其中Pod IP地址段字符串需要用“-”替代“.”符号,例如:

Pod地址为10.244.3.2,由ReplicationController部署名字为webapp,系统为这个Pod分配一个DNS域名为10-244-3-2.webapp.default.svc.cluster.local

[root@master ~]# kubectl get pod -o wide
NAME           READY   STATUS    RESTARTS   AGE     IP           NODE    NOMINATED NODE   READINESS GATES
busybox        1/1     Running   4          2d17h   10.244.1.3   node3   <none>           <none>
webapp-p598v   1/1     Running   0          3d4h    10.244.2.3   node4   <none>           <none>
webapp-wj5q7   1/1     Running   0          3d4h    10.244.3.2   node2   <none>           <none>
[root@master ~]# kubectl describe pod webapp-wj5q7
Name:         webapp-wj5q7
Namespace:    default
Priority:     0
Node:         node2/192.168.31.102
Start Time:   Sun, 29 Aug 2021 16:38:50 +0800
Labels:       app=webapp
Annotations:  <none>
Status:       Running
IP:           10.244.3.2
IPs:IP:           10.244.3.2
Controlled By:  ReplicationController/webapp
Containers:webapp:Container ID:   docker://6058d7e0fee16e2e42d2cc3d1a571a388f91ffe14d2f9544681ed39edd21a5f9Image:          tomcatImage ID:       docker-pullable://tomcat@sha256:1af502b6fd35c1d4ab6f24dc9bd36b58678a068ff1206c25acc129fb90b2a76aPort:           8080/TCPHost Port:      0/TCPState:          RunningStarted:      Sun, 29 Aug 2021 16:39:06 +0800Ready:          TrueRestart Count:  0Environment:    <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-27gz8 (ro)
Conditions:Type              StatusInitialized       True Ready             True ContainersReady   True PodScheduled      True
Volumes:default-token-27gz8:Type:        Secret (a volume populated by a Secret)SecretName:  default-token-27gz8Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:          <none>
[root@master ~]# kubectl exec -it webapp-p598v bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@webapp-p598v:/usr/local/tomcat# ping 10-244-3-2.webapp.svc.cluster.local
ping: 10-244-3-2.webapp.svc.cluster.local: Name or service not known
root@webapp-p598v:/usr/local/tomcat# ping 10-244-3-2.webapp.default.svc.cluster.local
PING 10-244-3-2.webapp.default.svc.cluster.local (10.244.3.2) 56(84) bytes of data.
64 bytes from 10-244-3-2.webapp.default.svc.cluster.local (10.244.3.2): icmp_seq=1 ttl=62 time=0.580 ms
64 bytes from 10-244-3-2.webapp.default.svc.cluster.local (10.244.3.2): icmp_seq=2 ttl=62 time=1.37 ms
^C
--- 10-244-3-2.webapp.default.svc.cluster.local ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 0.580/0.975/1.371/0.396 ms

二、为Pod自定义hostname和subdomain

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

apiVersion: v1
kind: Pod
metadata:name: my-webapplabels:app: my-webapp
spec:hostname: my-webappsubdomain: mysubdomaincontainers:- name: my-webappimage: kubeguide/tomcat-app:v1ports:- containerPort: 8080

查看创建的这个Pod:

[root@master ~]# kubectl get pod my-webapp
NAME        READY   STATUS    RESTARTS   AGE
my-webapp   1/1     Running   0          33s
[root@master ~]# 

查看你Pod的IP地址

root@master ~]# kubectl get pod my-webapp -o wide
NAME        READY   STATUS    RESTARTS   AGE   IP           NODE    NOMINATED NODE   READINESS GATES
my-webapp   1/1     Running   0          73s   10.244.3.5   node2   <none>           <none>

在Pod创建成功之后,Kubernetes系统为其设置的DNS域名为"my-webapp.mysubdomain.default.svc.cluster.local"

kubectl exec -it my-webapp bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@my-webapp:/usr/local/tomcat# cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.244.3.5      my-webapp.mysubdomain.default.svc.cluster.local my-webapp

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

apiVersion: v1
kind: Service
metadata:name: mysubdomain
spec:selector:app: my-webappclusterIP: Noneports:- port: 8080
在其它应用Pod中输入 curl <Pod.hostname>.mysubdomian.defalut.svc.cluster.local:8080可以访问

三、Pod中的DNS策略

Kubernetes可以在Pod级别通过dnsPolicy字段设置DNS策略,目前支持的DNS策略如下:

  • Default:继承Pod所在宿主机的域名解析设置
  • ClusterFirst:优先使用Kubernetes环境的DNS服务(如果CoreDNS提供的域名解析服务),将无法解析的域名转发到系统配置的上游DNS服务器
  • ClusterFirstWithHostNet:适用于以hostNetwork模式运行的Pod。
  • Node:忽略Kubernetes的DNS配置,需要手工通过dnsConfig自定义DNS配置
    apiVersion: v1
    kind: Pod
    metadata:name: nginx
    spec:containers:- name: nginximage: nginxhostNetwork: truednsPolicy: ClusterFirstWithHostNet
    
    四、Pod中的DNS策略
       在默认情况下,系统会自动为Pod配置好域名服务其等DNS参数,Kubernetes也提供Pod定义中由用户自定义DNS相关配置的方法。可以通过在Pod定义中设置dnsConfig自动进行DNS相关配置。该字段是可选字段,在dnsPolicy为任意策略时都可以设置,但是当dnsPolicy="None"时必须设置。
      自定义DNS可以设置内容:
    • nameservers:用于域名解析的DNS服务器列表,最多可以设置3个。当Pod的dnsPolicy="None"时,该nameservers列表必须包含至少一个IP地址。配置的nameserver列表会与系统自动设置的nameserver进行合并和去重
    • searches:用于域名搜索的DNS域名后缀,最多设置6个,也会与系统设置的合并和去重
    • options:配置其它DNS参数,例如,timeout等等
      apiVersion: v1
      kind: Pod
      metadata:name: custom-dns
      spec:containers:- name: custom-dnsimage: tomcatimagePullPolicy: IfNotPresentports:- containerPort: 8080dnsPolicy: "None"dnsConfig:nameservers:- 8.8.8.8searches:- ns1.svc.cluster-domain.example- my.dns.search.suffixoptions:- name: ndotsvalue: "2"- name: edns0

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

      root@custom-dns:/etc# cat resolv.conf
      nameserver 8.8.8.8
      search ns1.svc.cluster-domain.example my.dns.search.suffix
      options ndots:2 edns0

Kubernetes--Pod的DNS域名和相关特性相关推荐

  1. 使用 CoreDNS sidecar 来优化 Kubernetes Pod dns 性能

    简介:介绍一种给业务 Pod 添加 dns cache sidecar 来增强 dns 性能的方法. kubernetes 集群内,应用可能会遇到 dns 性能问题.可以在 Pod 内增加 nscd ...

  2. 【重识云原生】第六章容器基础6.4.9.6节——Service 与 Pod 的DNS

    1 Service 与 Pod 的 DNS Kubernetes 为 Service 和 Pod 创建 DNS 记录. 你可以使用一致的 DNS 名称而非 IP 地址访问 Service. Kuber ...

  3. k8s技术预研7--深入掌握Kubernetes Pod

    目录 1.Yaml格式的Pod定义文件完整模板详解 2.Pod的基本用法     2.1 由1个容器组成的Pod示例     2.2 由两个为紧耦合关系的容器打包组成的Pod示例 3.静态Pod    ...

  4. 在Kubernetes Pod中使用Service Account访问API Server

    2019独角兽企业重金招聘Python工程师标准>>> 在Kubernetes Pod中使用Service Account访问API Server 博客分类: Kubernetes ...

  5. linux 子域dns,linux下搭建DNS子域及相关授权详解

    linux下搭建DNS子域及相关授权详解forward功能是本地无法解析的域名,转发给指定DNS服务器 forward only; 所有无法解析的域名,都转发给指定DNS服务器,必须有解析结果 for ...

  6. 浅析Kubernetes Pod重启策略和健康检查

    使用Kubernetes的主要好处之一是它具有管理和维护集群中容器的能力,几乎可以提供服务零停机时间的保障.在创建一个Pod资源后,Kubernetes会为它选择worker节点,然后将其调度到节点上 ...

  7. Kubernetes学习总结(11)—— Kubernetes Pod 到底是什么?

    前言 [译]What are Kubernetes Pods Anyway?最近看到了一条关于Kubernetes Pods的推特,来自了不起的Amy Codes(我真的希望这是她的真名): 虽然不是 ...

  8. linux下搭建DNS子域及相关授权详解

    linux下搭建DNS子域及相关授权详解 forward功能是本地无法解析的域名,转发给指定DNS服务器 forward only; 所有无法解析的域名,都转发给指定DNS服务器,必须有解析结果 fo ...

  9. Kubernetes pod的生命周期

    本文翻译自:Kubernetes: Lifecycle of a Pod 原文出处:Kubernetes: Lifecycle of a Pod - DZone Integration 参考:Cont ...

最新文章

  1. scala akka 修炼之路5(scala特质应用场景分析)
  2. VC++ 获取系统时间的方法汇总
  3. oracle用户权限的管理
  4. 塑云科技基于 KafKa+OTS+MaxCompute 完成物联网系统技术重构
  5. 网页特效代码大全网址
  6. Zend Studio 12.5.1 破解、注册码
  7. Django-天天生鲜项目
  8. Golang代码注释规范及goland代码注释模板配置
  9. 软考备考-系统构架师-21-系统架构师考纲整理
  10. c语言二次方程的实根,C程序求二次方程的根
  11. nginx错误502,503,504分析
  12. IOS 四舍五入 进一法 去尾法
  13. golang:goredis库pipeline使用方式
  14. python实现字符串去重
  15. 前端工程师为什么会这么值钱?原来真相在这里
  16. html5中检测网络状态的方法,前端js监听浏览器网络变化
  17. 瀚海星云BBS python脚本登陆
  18. css 交集选择器 并集选择器 后代选择器
  19. 基于LCC谐振补偿网络的无线充电技术的研究
  20. Ps中的钢笔工具和快速选择工具

热门文章

  1. 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组
  2. VS2010启动后鼠标失灵解决方法
  3. 求不定积分的系列题型(一)
  4. 西瓜视频直播助手下载与安装过程 0523
  5. s32k144 isystem linux,S32k144 简易 Bootloader
  6. SQL注入靶场 RedTiger通关教程(level1~level10)
  7. windows画图板 ESL转RGB 实现区间渐变色
  8. python向自己qq邮件发信息_python实现自动向QQ邮箱发送天气预报邮件
  9. 解决OneDrive卸载后重新安装无法启动或闪退的问题
  10. 课题:shell脚本安装httpd