云容器引擎 CCE-工作负载DNS配置说明:工作负载的DNS配置实践
工作负载的DNS配置实践
前面介绍了Linux系统 域名 解析文件以及Kubernetes为应用提供的DNS相关配置项,下面将举例介绍应用如何进行DNS配置。
- 场景1 对接Kubernetes内置的Kube-DNS/CoreDNS
场景说明:
这种方式适用于应用中的域名解析只涉及集群内部域名,或者集群内部域名+外部域名两种方式,应用默认采用这种配置。
示例:
apiVersion: v1 kind: Pod metadata: namespace: default name: dns-example spec: containers: - name: test image: nginx:alpine dnsPolicy: ClusterFirst imagePullSecrets: - name: default-secret
该配置下容器的域名解析文件将如下所示:
nameserver 10.247.3.10 search default.svc.cluster.local svc.cluster.local cluster.local options ndots:5
- 场景2 直接对接云DNS
场景说明:
这种方式适用于应用只访问注册到互联网的外部域名,该场景不能解析集群内部域名。
示例:
apiVersion: v1 kind: Pod metadata: namespace: default name: dns-example spec: containers: - name: test image: nginx:alpine dnsPolicy: Default #使用kubelet的“--resolv-conf”参数指向的域名解析文件(CCE集群在该配置下对接云DNS) imagePullSecrets: - name: default-secret
该配置下容器的域名解析文件将如下所示:
nameserver 100.125.x.x
- 场景3 主机网络模式的应用对接Kube-DNS/CoreDNS
场景说明:
对于配置主机网络模式的应用,默认对接云DNS,如果应用需要对接Kube-DNS/CoreDNS,需将dnsPolicy设置为“ClusterFirstWithHostNet”。
示例:
apiVersion: v1 kind: Pod metadata: name: nginx spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet containers: - name: nginx image: nginx:alpine ports: - containerPort: 80 imagePullSecrets: - name: default-secret
该配置下容器的域名解析文件将如下所示:
nameserver 10.247.3.10 search default.svc.cluster.local svc.cluster.local cluster.local options ndots:5
- 场景4 自定义应用的域名配置
场景说明:
用户可以完全自定义配置应用的域名解析文件,这种方式非常灵活,dnsPolicy和dnsConfig配合使用,几乎能够满足所有使用场景,如对接用户自建DNS的场景、串联多个DNS的场景以及优化DNS配置选项的场景等等。
示例1:对接用户自建DNS
该配置下,dnsPolicy为“None”,应用的域名解析文件完全根据dnsConfig配置生成。
apiVersion: v1 kind: Pod metadata: namespace: default name: dns-example spec: containers: - name: test image: nginx:alpine dnsPolicy: "None" dnsConfig: nameservers: - 10.2.3.4 #用户自建DNS的IP地址 searches: - ns1.svc.cluster.local - my.dns.search.suffix options: - name: ndots value: "2" - name: timeout value: "3" imagePullSecrets: - name: default-secret
该配置下容器的域名解析文件将如下所示:
nameserver 10.2.3.4 search ns1.svc.cluster.local my.dns.search.suffix options timeout:3 ndots:2
示例2:修改域名解析文件的ndots选项,减少无效的DNS查询
该配置下,dnsPolicy不为“None”,会在基于dnsPolicy生成的域名解析文件的基础上,追加dnsConfig中配置的dns参数。
apiVersion: v1 kind: Pod metadata: namespace: default name: dns-example spec: containers: - name: test image: nginx:alpine dnsPolicy: "ClusterFirst" dnsConfig: options: - name: ndots value: "2" #该配置会将基于ClusterFirst策略生成的域名解析文件的ndots:5参数改写为ndots:2 imagePullSecrets: - name: default-secret
该配置下容器的域名解析文件将如下所示:
nameserver 10.247.3.10 search default.svc.cluster.local svc.cluster.local cluster.local options ndots:2
示例3:串联使用多个DNS
apiVersion: v1 kind: Pod metadata: namespace: default name: dns-example spec: containers: - name: test image: nginx:alpine dnsPolicy: ClusterFirst # 追加域名解析配置,集群中会默认对接CoreDNS dnsConfig: nameservers: - 10.2.3.4 # 用户自建DNS的IP地址 imagePullSecrets: - name: default-secret
容器DNS配置文件中nameserver最多可设置3个 DNS地址 :
- 当dnsPolicy设置为ClusterFirst时,如果集群使用CoreDNS,除CoreDNS地址外可追加2个自定义DNS地址,超出部分无效。
- 当dnsPolicy设置为ClusterFirst时,如果集群同时使用CoreDNS和NodeLocal DNSCache,除CoreDNS和NodeLocal DNSCache地址外可追加1个自定义DNS地址,超出部分无效。
该配置下容器的域名解析文件将如下所示:
nameserver 10.247.3.10 10.2.3.4 search default.svc.cluster.local svc.cluster.local cluster.local options ndots:5