一.自定義dns ;
創(chuàng)新互聯(lián)是專業(yè)的皮山網(wǎng)站建設(shè)公司,皮山接單;提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行皮山網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!1.介紹; 2.怎樣獲取dns?名字; 3.支持的?DNS?模式; 4.自定義dns;Kubernetes DNS 在群集上調(diào)度 DNS Pod 和服務(wù),并配置 kubelet 以告知各個容器使用 DNS 服務(wù)的 IP 來解析 DNS 名稱。
在集群中定義的每個 Service(包括 DNS 服務(wù)器自身)都會被指派一個 DNS 名稱。 默認(rèn),一個客戶端 Pod 的 DNS 搜索列表將包含該 Pod 自己的 Namespace 和集群默認(rèn)域。 通過如下示例可以很好地說明:
假設(shè)在 Kubernetes 集群的 Namespace?bar
?中,定義了一個Service?foo
。 運行在Namespace?bar
?中的一個 Pod,可以簡單地通過 DNS 查詢?foo
?來找到該 Service。 運行在 Namespace?quux
?中的一個 Pod 可以通過 DNS 查詢?foo.bar
?找到該 Service。
以下各節(jié)詳細(xì)介紹了受支持的記錄類型和支持的布局。 其中代碼部分的布局,名稱或查詢命令均被視為實現(xiàn)細(xì)節(jié),如有更改,恕不另行通知。 有關(guān)最新規(guī)范請查看?Kubernetes 基于 DNS 的服務(wù)發(fā)現(xiàn).
3.支持的 DNS 模式
下面各段詳細(xì)說明支持的記錄類型和布局。 如果任何其它的布局、名稱或查詢,碰巧也能夠使用,這就需要研究下它們的實現(xiàn)細(xì)節(jié),以免后續(xù)修改它們又不能使用了。
“正?!?Service(除了 Headless Service)會以?my-svc.my-namespace.svc.cluster-domain.example
?這種名字的形式被指派一個 DNS A 記錄。 這會解析成該 Service 的 Cluster IP。
“Headless” Service(沒有Cluster IP)也會以?my-svc.my-namespace.svc.cluster-domain.example
?這種名字的形式被指派一個 DNS A 記錄。 不像正常 Service,它會解析成該 Service 選擇的一組 Pod 的 IP。 希望客戶端能夠使用這一組 IP,否則就使用標(biāo)準(zhǔn)的 round-robin 策略從這一組 IP 中進(jìn)行選擇。
命名端口需要創(chuàng)建 SRV 記錄,這些端口是正常 Service或?Headless Services?的一部分。 對每個命名端口,SRV 記錄具有?_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster-domain.example
?這種形式。 對普通 Service,這會被解析成端口號和 CNAME:my-svc.my-namespace.svc.cluster-domain.example
。 對 Headless Service,這會被解析成多個結(jié)果,Service 對應(yīng)的每個 backend Pod 各一個, 包含?auto-generated-name.my-svc.my-namespace.svc.cluster-domain.example
?這種形式 Pod 的端口號和 CNAME。
當(dāng)前,創(chuàng)建 Pod 后,它的主機名是該 Pod 的?metadata.name
?值。
在 v1.2 版本中,用戶可以配置 Pod annotation, 通過?pod.beta.kubernetes.io/hostname
?來設(shè)置 Pod 的主機名。 如果為 Pod 配置了 annotation,會優(yōu)先使用 Pod 的名稱作為主機名。 例如,給定一個 Pod,它具有 annotation?pod.beta.kubernetes.io/hostname: my-pod-name
,該 Pod 的主機名被設(shè)置為 “my-pod-name”。
在 v1.3 版本中,PodSpec 具有?hostname
?字段,可以用來指定 Pod 的主機名。這個字段的值優(yōu)先于 annotation?pod.beta.kubernetes.io/hostname
。 在 v1.2 版本中引入了 beta 特性,用戶可以為 Pod 指定 annotation,其中?pod.beta.kubernetes.io/subdomain
?指定了 Pod 的子域名。 最終的域名將是 “...svc.”。 舉個例子,Pod 的主機名 annotation 設(shè)置為 “foo”,子域名 annotation 設(shè)置為 “bar”,在 Namespace “my-namespace” 中對應(yīng)的 FQDN 為 “foo.bar.my-namespace.svc.cluster.local”。
在 v1.3 版本中,PodSpec 具有?subdomain
?字段,可以用來指定 Pod 的子域名。 這個字段的值優(yōu)先于 annotation?pod.beta.kubernetes.io/subdomain
?的值。
Pod 的 DNS 配置可讓用戶對 Pod 的 DNS 設(shè)置進(jìn)行更多控制。
dnsConfig
?字段是可選的,它可以與任何?dnsPolicy
?設(shè)置一起使用。 但是,當(dāng) Pod 的?dnsPolicy
?設(shè)置為 “None
” 時,必須指定?dnsConfig
?字段。
用戶可以在?dnsConfig
?字段中指定以下屬性:
nameservers
: 將用作于 Pod 的 DNS 服務(wù)器的 IP 地址列表。最多可以指定3個 IP 地址。 當(dāng) Pod 的?dnsPolicy
?設(shè)置為 “None
” 時,列表必須至少包含一個IP地址,否則此屬性是可選的。列出的服務(wù)器將合并到從指定的 DNS 策略生成的基本名稱服務(wù)器,并刪除重復(fù)的地址。
searches
: 用于在 Pod 中查找主機名的 DNS 搜索域的列表。此屬性是可選的。指定后,提供的列表將合并到根據(jù)所選 DNS 策略生成的基本搜索域名中。 重復(fù)的域名將被刪除。 ?? Kubernetes最多允許6個搜索域。
options
: 對象的可選列表,其中每個對象可能具有?name
?屬性(必需)和?value
?屬性(可選)。 此屬性中的內(nèi)容將合并到從指定的 DNS 策略生成的選項。 重復(fù)的條目將被刪除。
以下是具有自定義DNS設(shè)置的Pod示例
(1).dns yaml 配置詳細(xì);
(2).運行dns ymal
(3).測試解析dns;
(4).創(chuàng)建上面的Pod后,容器?test
?會在其?/etc/resolv.conf
?文件中獲取以下內(nèi)容:
二.通過?kube-dns 配置私有dns;
1.準(zhǔn)備開始 2.配置存根域和上游?DNS?服務(wù)器 3.理解?Kubernetes?中名字解析 4.ConfigMap?選項你必須擁有一個 Kubernetes 的集群,同時你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 如果你還沒有集群,你可以通過?Minikube?構(gòu)建一 個你自己的集群,或者你可以使用下面任意一個 Kubernetes 工具構(gòu)建:
Katacoda
Play with Kubernetes
要獲知版本信息,請輸入?kubectl version
.
Kubernetes 1.6 及其以上版本。
集群必須配置使用?kube-dns
?插件。
部署kube-dns 步驟如下;
(1).獲取:kube-dns yaml
wget?https://raw.githubusercontent.com/feiskyer/kubernetes-handbook/master/manifests/kubedns/kube-dns.yaml?
(2).設(shè)置?kube-dns.yaml??clusterIP 集群ip地址 (參考:kubernetes 網(wǎng)斷中未使用ip地址)
kubectl get service --all-namespaces?
(3).注意kube-dns 鏡像需要進(jìn)行進(jìn)行獲取;
通過為 kube-dns (kube-system:kube-dns
)提供 ConfigMap,集群管理員能夠指定自定義存根域和上游域名服務(wù)器。
例如,下面的 ConfigMap 建立了一個 DNS 配置,它具有一個單獨的存根域和兩個上游域名服務(wù)器:
apiVersion:?v1? kind:?ConfigMap? metadata:?? ????name:?kube-dns?? ????namespace:?kube-system? ????data:??stubDomains:?|???? ??????????????????????{"acme.local":?["1.2.3.4"]}?? ????????????????upstreamNameservers:?|???? ??????????????????????["8.8.8.8",?"8.8.4.4"]
按如上說明,具有 “.acme.local” 后綴的 DNS 請求被轉(zhuǎn)發(fā)到 DNS 1.2.3.4。Google 公共 DNS服務(wù)器 為上游查詢提供服務(wù)。 下表描述了具有特定域名的查詢?nèi)绾斡成涞剿鼈兊哪繕?biāo) DNS 服務(wù)器:
域名 | 響應(yīng)查詢的服務(wù)器 |
---|---|
kubernetes.default.svc.cluster.local | kube-dns |
foo.acme.local | 自定義 DNS (1.2.3.4) |
widget.com | 上游 DNS (8.8.8.8, 8.8.4.4,其中之一) |
查看?ConfigMap 選項?獲取更多關(guān)于配置選項格式的詳細(xì)信息。
可以為每個 Pod 設(shè)置 DNS 策略。 當(dāng)前 Kubernetes 支持兩種 Pod 特定的 DNS 策略:“Default” 和 “ClusterFirst”。 可以通過?dnsPolicy
?標(biāo)志來指定這些策略。?注意:“Default” 不是默認(rèn)的 DNS 策略。如果沒有顯式地指定?dnsPolicy
,將會使用 “ClusterFirst”。
如果?dnsPolicy
?被設(shè)置為 “Default”,則名字解析配置會繼承自 Pod 運行所在的節(jié)點。 自定義上游域名服務(wù)器和存根域不能夠與這個策略一起使用。
如果?dnsPolicy
?被設(shè)置為 “ClusterFirst”,處理名字解析有所不同,*依賴于是否配置了存根域和上游 DNS 服務(wù)器*。
未進(jìn)行自定義配置:沒有匹配上配置的集群域名后綴的任何請求,例如 “www.kubernetes.io”,將會被轉(zhuǎn)發(fā)到繼承自節(jié)點的上游域名服務(wù)器。
進(jìn)行自定義配置:如果配置了存根域和上游 DNS 服務(wù)器(類似于?前面示例?配置的內(nèi)容),DNS 查詢將基于下面的流程對請求進(jìn)行路由:
查詢首先被發(fā)送到 kube-dns 中的 DNS 緩存層。
從緩存層,檢查請求的后綴,并根據(jù)下面的情況轉(zhuǎn)發(fā)到對應(yīng)的 DNS 上:
*具有集群后綴的名字*(例如 “.cluster.local”):請求被發(fā)送到 kube-dns。
*具有存根域后綴的名字*(例如 “.acme.local”):請求被發(fā)送到配置的自定義 DNS 解析器(例如:監(jiān)聽在 1.2.3.4)。
*未能匹配上后綴的名字*(例如 “widget.com”):請求被轉(zhuǎn)發(fā)到上游 DNS(例如:Google 公共 DNS 服務(wù)器,8.8.8.8 和 8.8.4.4)。
kube-dns?kube-system:kube-dns
?對應(yīng)的 ConfigMap 選項如下所示:
字段 | 格式 | 描述 |
---|---|---|
stubDomains (可選) | 使用 DNS 后綴作為鍵(例如 “acme.local”)的 JSON map,以及由 DNS IP 的 JSON 數(shù)組組成的值。 | 目標(biāo)域名服務(wù)器可能是一個 Kubernetes Service。例如,可以運行自己的 dnsmasq 副本,將 DNS 名字暴露到 ClusterDNS namespace 中。 |
upstreamNameservers (可選) | DNS IP 的 JSON 數(shù)組。 | 注意:如果指定,則指定的值會替換掉被默認(rèn)從節(jié)點的?/etc/resolv.conf ?中獲取到的域名服務(wù)器。限制:最多可以指定三個上游域名服務(wù)器。 |
在這個例子中,用戶有一個 Consul DNS 服務(wù)發(fā)現(xiàn)系統(tǒng),他們希望能夠與 kube-dns 集成起來。 Consul 域名服務(wù)器地址為 10.150.0.1,所有的 Consul 名字具有后綴 “.consul.local”。 要配置 Kubernetes,集群管理員只需要簡單地創(chuàng)建一個 ConfigMap 對象,如下所示:
apiVersion:?v1 kind:?ConfigMap? metadata:?? ?????name:?kube-dns??? ?????namespace:?kube-system? ?????data:??stubDomains:?|???? ??????????????{"consul.local":?["10.150.0.1"]}
注意,集群管理員不希望覆蓋節(jié)點的上游域名服務(wù)器,所以他們不會指定可選的?upstreamNameservers
?字段。
在這個示例中,集群管理員不希望顯式地強制所有非集群 DNS 查詢進(jìn)入到他們自己的域名服務(wù)器 172.16.0.1。 而且這很容易實現(xiàn):他們只需要創(chuàng)建一個 ConfigMap,upstreamNameservers
?字段指定期望的域名服務(wù)器即可:
apiVersion:?v1? kind:?ConfigMap? metadata:?? ????name:?kube-dns?? ????namespace:?kube-system? data:??upstreamNameservers:?|??? ??????????["172.16.0.1"]
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。