Kubernetes中kube-dns系统组件唯一是基于deployment资源管理器,并通过Service来通讯,很多应用前提都是要基于DNS组件来完成
DNS A记录的自动产生
- 基于Service NAME字段产生A记录,格式:svc名称.当前命名空间.当前集群的域名(默认就是svc.cluser.local ),比如:busybox1.default.svc.cluster.local
- 基于Pod的主机名产生A记录,需要基于hostname和subdomain指定,格式:hostname.subdomain.命名空间.svc.cluster.local ,比如:busybox1.subdomain.default.svc.cluster.local,但是无用,pod的生命周期问题根本无法使用
DNS策略类型
- None 无任何策略,也就是自定义DNS
- Default 使用节点DNS继承,注意这个不是系统默认选项
- ClusterFirst 集群 DNS,这个才是默认选项,也就是不配置dnsPliocy就默认为集群DNS
- ClusterFirstWithHostNet ,设置了hostNetwork,还需要使用集群DNS功能,写其他类型默认强制变成Default
None
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
hostname: busybox1
subdomain: subdomain
containers:
- image: busybox
args:
- sleep
- "30000"
name: busybox
restartPolicy: Always
dnsPolicy: None
dnsConfig:
nameservers: #注意要加s
- 114.114.114.114
验证
kubectl exec busybox cat /etc/resolv.conf
Default
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
hostname: busybox1
subdomain: subdomain
containers:
- image: busybox
args:
- sleep
- "30000"
name: busybox
restartPolicy: Always
dnsPolicy: Default #更简单,修改策略就行,ClusterFirst一样
验证
kubectl exec busybox cat /etc/resolv.conf
ClusterFirst
ClusterFirstWithHostNet
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
hostname: busybox1
subdomain: subdomain
containers:
- image: busybox
args:
- sleep
- "30000"
name: busybox
restartPolicy: Always
dnsPolicy: ClusterFirstWithHostNet
hostNetwork: true
验证
kubectl exec busybox cat /etc/resolv.conf