A. k8s網路配置DNS
Kubernetes支持Pod維度DNS策略設置,通過pod規約中dnsPolicy欄位設置,最終配置落到 /etc/resolv.conf 文件中,也就說k8s最終還是通過設置Pod容器中/etc/resolv.conf 文件來做設置解析配置,跟普通的虛擬機或者實體機是一樣,因為Pod容器本身就一個小的主機。
採用集群DNS,與配置的集群域後綴不匹配的任何 DNS 查詢 都將轉發到從節點繼承的上游名稱伺服器。簡單來說,就是使用 Kubernetes 中 kubedns 或 coredns 服務碼液進行域名解析,如果解析不成功,才會使用宿主機的 DNS 配置進行解析。
example容器/etc/resolv.conf
options ndots:5 代表當待解析域名包含.大於等於5時就會先解析域名,只有域名解析不成功時才會繼續匹配serach域或domain域
訪問test名字空間下example-svc服務,可以直接通過 example-svc 訪問,會與search域組合,最終組合成 example-svc.test.svc.cluster.local ,訪問test1名字空間下example-svc1,通過 example-svc.test1 ,會與search域組合,最終組合成 example-svc.test1.svc.cluster.local
自定義DNS策略,設置允許 Pod 忽略 Kubernetes 環境中的 DNS 設置,Pod 會使用其 dnsConfig 欄位 所提供的 DNS 設置。
用戶可以在 dnsConfig 欄位中指定以下屬性:
創建上面的 Pod 後,容器 test 會在其 /etc/resolv.conf 文件中獲取以下內容:
Pod 從運行所在的節點繼承名稱解析配置,即跟所在節點主機一致
對於以 hostNetwork 方式運行的 Pod,應顯式設置其 DNS 策略 為"ClusterFirstWithHostNet"
k8s新版本集群DNS服務是默認採用CoreDNS組件實現,1.13版本之前是採用Kube-dns
當 DNS 配置以及其它選項不合理陵慶的時候,通過向 Pod 的 /etc/hosts 文件中添加條目, 可以在 Pod 級別覆蓋對主機名的解析。你可以通過遲汪物 PodSpec 的 HostAliases 欄位來添加這些自定義條目.
pod列印/etc/hosts文件,多了以下內容