使用云厂家提供托管式Kubernetes,Pod的域名解析参数,经过界面建立Pod的话,可能厂商界面没有开放dnsConfig配置,采用了一些默认值,在使用时候,须要了解清楚厂商提供的默认配置,不然会存在问题。
典型的一个配置是 ndots ,若是你在Pod内访问的域名字符串,点 数量在 ndots 阈值范围内,则被认为是Kubernetes集群内部域名,会被追加 .<namespace>.svc.cluster.local 后缀,这样会致使每次解析域名时候有2次(IP4/IP6)无效解析,在大规模并发场景下存在性能瓶颈。html
云厂商通常将Kubernetes的DNS服务(CoreDNS或SkyDNS)与厂商提供的外部DNS级联了,所以这种问题再功能测试阶段不会被暴露,只在性能测试阶段能暴露出来。nginx
DNS域名解析配置文件 /etc/resolv.conf
api
nameserver 10.247.x.x search default.svc.cluster.local svc.cluster.local cluster.local options ndots:3
参数说明服务器
对应的容器中的deployment的yaml中的dnsPolicy有三种配置参数ClusterFirst, Default, None并发
采用本身建的DNS来解析Pods中的应用域名配置,能够参考如下代码配置,此配置在Pod中的DNS能够彻底自定义,适用于已经有本身建的DNS,迁移后的应用也不须要去修改相关的配置;app
apiVersion: v1 kind: Pod metadata: namespace: default name: dns-example spec: containers: - name: test image: nginx dnsPolicy: "None" dnsConfig: nameservers: - 1.2.3.4 searches: - ns1.svc.cluster.local - my.dns.search.suffix options: - name: ndots value: "2" - name: edns0
优先使用Kubernetes的DNS服务解析,失败后再使用外部级联的DNS服务解析。性能
apiVersion: v1 kind: Pod metadata: namespace: default name: dns-example spec: containers: - name: test image: nginx dnsPolicy: ClusterFirst
适用于Pods中的域名配置都在公网访问,这样的话Pods中的应用都从外部的DNS中解析对应的域名测试
apiVersion: v1 kind: Pod metadata: namespace: default name: dns-example spec: containers: - name: test image: nginx dnsPolicy: Default
若是在POD中使用hostNetwork:true配置网络,pod中运行的应用程序能够直接看到宿主主机的网络接口,宿主主机所在的局域网上全部网络接口均可以访问到该应用程序spa
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: nginx spec: template: metadata: labels: app: nginx spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
若是不加上dnsPolicy: ClusterFirstWithHostNet, pod默认使用所在宿主主机使用的DNS,这样也会致使容器内不能经过service name 访问k8s集群中其余POD。