使用雲廠家提供託管式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。