DNS簡介
DNS服務(wù)是域名系統(tǒng)的縮寫, 英文全稱:Domain Name System,將域名和IP地址相互映射。在容器環(huán)境中,DNS至關(guān)重要,例如在Kubernetes集群中,通常一組Pod由一個(gè)Service負(fù)載,但是Service的IP地址有可能需要變動,那么就可以讓Pod通過域名的方式去訪問Service,Pod無需理會IP地址的變化。
Docker DNS
Docker link
Docker link是一個(gè)遺留的特性,在新版本的Docker中,一般不推薦使用。簡單來說Docker link就是把兩個(gè)容器連接起來,容器可以使用容器名進(jìn)行通信,而不需要依賴ip地址(其實(shí)就是在容器的/etc/hosts文件添加了host記錄,原本容器之間的IP就是通的,只是我們增加了host記錄,可以不用IP去訪問)
創(chuàng)建容器centos-1:
[root@host1~]#dockerrun-itd--namecentos-1registry.cn-shanghai.aliyuncs.com/public-namespace/cr7-centos7-tool:v2
創(chuàng)建容器centos-2,使用--link name:alias,name就是要訪問的目標(biāo)機(jī)器,alias就是自定義的別名。
[root@host1~]#dockerrun-itd--namecentos-2--linkcentos-1:centos-1-aliasregistry.cn-shanghai.aliyuncs.com/public-namespace/cr7-centos7-tool:v2
查看容器centos-2的/etc/hosts文件:
[root@host1~]#dockerexeccentos-2cat/etc/hosts 127.0.0.1localhost ::1localhostip6-localhostip6-loopback fe00::0ip6-localnet ff00::0ip6-mcastprefix ff02::1ip6-allnodes ff02::2ip6-allrouters 172.18.0.2centos-1-alias9dde6339057acentos-1#容器centos-1的host記錄 172.18.0.3f1a7e5fa3d96#容器centos-2自身的host記錄
意味著centos-2可以用centos-1-alias,9dde6339057a,centos-1來訪問原先創(chuàng)建的容器。centos-1是不可以通過hostname訪問centos-2的。
[root@host1 ~]# docker exec centos-2 ping centos-1-alias PING centos-1-alias (172.18.0.2) 56(84) bytes of data. 64 bytes from centos-1-alias (172.18.0.2): icmp_seq=1 ttl=64 time=0.174 ms ^C [root@host1 ~]# docker exec centos-2 ping centos-1 PING centos-1-alias (172.18.0.2) 56(84) bytes of data. 64 bytes from centos-1-alias (172.18.0.2): icmp_seq=1 ttl=64 time=1.37 ms 64 bytes from centos-1-alias (172.18.0.2): icmp_seq=2 ttl=64 time=0.523 ms ^C [root@host1 ~]# docker exec centos-2 ping 9dde6339057a PING centos-1-alias (172.18.0.2) 56(84) bytes of data. 64 bytes from centos-1-alias (172.18.0.2): icmp_seq=1 ttl=64 time=2.59 ms 64 bytes from centos-1-alias (172.18.0.2): icmp_seq=2 ttl=64 time=3.75 ms
Embedded DNS
從Docker 1.10開始,Docker提供了一個(gè)內(nèi)置的DNS服務(wù)器,當(dāng)創(chuàng)建的容器屬于自定義網(wǎng)絡(luò)時(shí),容器的/etc/resolv.conf會使用內(nèi)置的DNS服務(wù)器(地址永遠(yuǎn)是127.0.0.11)來解析相同自定義網(wǎng)絡(luò)內(nèi)的其他容器。
為了向后兼容,default bridge網(wǎng)絡(luò)的DNS配置沒有改變,默認(rèn)的docker網(wǎng)絡(luò)使用的是宿主機(jī)的/etc/resolv.conf的配置。
創(chuàng)建一個(gè)自定義網(wǎng)絡(luò):
[root@host1~]#dockernetworkcreatemy-network #bridge,host,none為docker默認(rèn)創(chuàng)建的網(wǎng)絡(luò) [root@host1~]#dockernetworkls NETWORKIDNAMEDRIVERSCOPE 2115f17cd9d0bridgebridgelocal 19accfa096cfhosthostlocal a23c8b371c7fmy-networkbridgelocal 0a33edc20faenonenulllocal
分別創(chuàng)建兩個(gè)容器屬于自定義網(wǎng)絡(luò)my-network中:
[root@host1~]#dockerrun-itd--namecentos-3--netmy-networkregistry.cn-shanghai.aliyuncs.com/public-namespace/cr7-centos7-tool:v2 [root@host1~]#dockerrun-itd--namecentos-4--netmy-networkregistry.cn-shanghai.aliyuncs.com/public-namespace/cr7-centos7-tool:v2
查看容器centos-4的/etc/hosts和/etc/resolv.conf,可以看到nameserver添加的IP為127.0.0.11的Embedded DNS:
#/etc/hosts中沒有配置對方的host記錄 [root@host1~]#dockerexeccentos-4cat/etc/hosts 127.0.0.1localhost ::1localhostip6-localhostip6-loopback fe00::0ip6-localnet ff00::0ip6-mcastprefix ff02::1ip6-allnodes ff02::2ip6-allrouters 172.19.0.3555281f37ea3 #/etc/resolv.conf配置了dns服務(wù)器127.0.0.11 [root@host1~]#dockerexeccentos-4cat/etc/resolv.conf nameserver127.0.0.11 optionsndots:0
此時(shí)centos-3和centos-4可以互相解析:
[root@host1 ~]# docker exec centos-4 ping centos-3 PING centos-3 (172.19.0.2) 56(84) bytes of data. 64 bytes from centos-3.my-network (172.19.0.2): icmp_seq=1 ttl=64 time=0.128 ms 64 bytes from centos-3.my-network (172.19.0.2): icmp_seq=2 ttl=64 time=0.078 ms 64 bytes from centos-3.my-network (172.19.0.2): icmp_seq=3 ttl=64 time=0.103 ms ^C [root@host1 ~]# docker exec centos-3 ping centos-4 PING centos-4 (172.19.0.3) 56(84) bytes of data. 64 bytes from centos-4.my-network (172.19.0.3): icmp_seq=1 ttl=64 time=0.087 ms 64 bytes from centos-4.my-network (172.19.0.3): icmp_seq=2 ttl=64 time=0.101 ms 64 bytes from centos-4.my-network (172.19.0.3): icmp_seq=3 ttl=64 time=0.076 ms ^C
Docker DNS配置
方式一:docker run (針對單個(gè)容器)
Flag | Description |
---|---|
--dns | 指定DNS服務(wù)器地址,如果容器不能訪問指定的所有ip地址,則會使用8.8.8.8作為DNS服務(wù)器地址(Docker默認(rèn)定義的) |
--dns-search | 當(dāng)容器訪問一個(gè)不包括完全域名的主機(jī)名時(shí),在該主機(jī)名后面添加dns-search指定的域名后綴,例如容器訪問centos-1,dns-search配置的是example.com,則會解析成centos-1.example.com |
--dns-opt | options ndots:5的含義是當(dāng)查詢的域名字符串內(nèi)的點(diǎn)字符數(shù)量大于等于ndots值(5)時(shí),則認(rèn)為是完整域名,直接解析,不會走 search 域 |
--hostname | 指定容器hostname |
方式二:daemon.json
nameserver只針對docker默認(rèn)網(wǎng)絡(luò)所有容器,dns-search和dns-opts針對所有網(wǎng)絡(luò)容器。
{ "dns":["114.114.114.114","223.5.5.5"], "dns-opts":["ndots:5"], "dns-search":["example.com"] }
Kubernetes DNS
在kubernetes中,有以下4中DNS策略,可以通過dnsPolicy指定:
Default: Pod從運(yùn)行所在的節(jié)點(diǎn)繼承名稱解析配置,就是該 Pod 的 DNS 配置會跟宿主機(jī)完全一致。。Default 不是默認(rèn)的 DNS 策略。如果未明確指定dnsPolicy,則使用 ClusterFirst。
ClusterFirst: 它會預(yù)先把 kube-dns(或 CoreDNS)的信息當(dāng)作預(yù)設(shè)參數(shù)寫入到該 Pod 內(nèi)的 DNS 配置。不過ClusterFirst 還有一個(gè)沖突,如果你的 Pod 設(shè)置了 HostNetwork=true,則 ClusterFirst 就會被強(qiáng)制轉(zhuǎn)換成 Default。
ClusterFirstWithHostNet: 對于與 hostNetwork(網(wǎng)絡(luò)接口使用的是宿主機(jī)的) 一起運(yùn)行的 Pod,應(yīng)顯式設(shè)置其DNS策略 ClusterFirstWithHostNet,他將同時(shí)解決default和ClusterFirst的DNS解析。如果不加上dnsPolicy: ClusterFirstWithHostNet,Pod默認(rèn)使用所在宿主主機(jī)使用的DNS,這樣也會導(dǎo)致容器內(nèi)不能通過service name 訪問k8s集群中其他Pod。
None: 表示會清除 Pod 預(yù)設(shè)的 DNS 配置,當(dāng) dnsPolicy 設(shè)置成這個(gè)值之后,Kubernetes 不會為 Pod 預(yù)先載入任何自身邏輯判斷得到的 DNS 配置。因此若要將 dnsPolicy 的值設(shè)為 None,為了避免 Pod 里面沒有配置任何 DNS參數(shù),至少需要在dnsConfig中設(shè)置nameservers的參數(shù)。
在 Kubernetes 1.11 及其以后版本中,推薦使用 CoreDNS, kubeadm 默認(rèn)會安裝 CoreDNS。當(dāng)Pod向CoreDNS發(fā)起DNS解析請求時(shí),CoreDNS先會自己嘗試解析,如果無法解析該域名,會將DNS請求交給CoreDNS的Pod所在的宿主機(jī),讓宿主機(jī)嘗試解析。
本次實(shí)驗(yàn)kubernetes集群中coredns service的地址是10.247.3.10。
? kubectl get svc -n kube-system NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE coredns ClusterIP 10.247.3.10 53/UDP,53/TCP,8080/TCP 13d
宿主機(jī)的/etc/resolv.conf文件如下:
[root@cr7-k8s-85091-ydy99 ~]# cat /etc/resolv.conf # Generated by NetworkManager search openstacklocal nameserver 100.125.1.250 nameserver 100.125.64.250 options single-request-reopen
CluterFirst
CluterFirst是kubernetes集群中默認(rèn)的DNS策略,這里是一個(gè)普通的Pod yaml文件,沒有指定dnsPolicy。
apiVersion:v1 kind:Pod metadata: name:busybox namespace:default spec: containers: -image:busybox:1.28 command: -sleep -"3600" imagePullPolicy:IfNotPresent name:busybox restartPolicy:Always
創(chuàng)建Pod后,進(jìn)入該P(yáng)od查看/etc/resolv.conf配置,可以看到nameserver為CoreDNS的service的地址。
/#cat/etc/resolv.conf nameserver10.247.3.10 searchdefault.svc.cluster.localsvc.cluster.localcluster.localopenstacklocal optionssingle-request-reopentimeout:2ndots:5
如果在Pod的yaml文件中指定了DNS參數(shù),會和默認(rèn)的ClusterFirst的配置疊加:
apiVersion:v1 kind:Pod metadata: name:busybox namespace:default spec: containers: -image:busybox:1.28 command: -sleep -"3600" imagePullPolicy:IfNotPresent name:busybox restartPolicy:Always dnsConfig: nameservers: -1.2.3.4 searches: -ns1.svc.cluster-domain.example -my.dns.search.suffix options: -name:ndots value:"2" -name:edns0
/#cat/etc/resolv.conf nameserver10.247.3.10 nameserver1.2.3.4 searchdefault.svc.cluster.localsvc.cluster.localcluster.localopenstacklocalns1.svc.cluster-domain.examplemy.dns.search.suffix optionstimeout:2ndots:2edns0single-request-reopen
Default
dnsPolicy為Default模式時(shí),Pod使用的是宿主機(jī)的DNS配置:
apiVersion:v1 kind:Pod metadata: name:busybox namespace:default spec: containers: -image:busybox:1.28 command: -sleep -"3600" imagePullPolicy:IfNotPresent name:busybox restartPolicy:Always dnsPolicy:Default
/#cat/etc/resolv.conf nameserver100.125.1.250 nameserver100.125.64.250 searchopenstacklocal optionssingle-request-reopentimeout:2
ClusterFirstWithHostNet
當(dāng)Pod使用了hostNetwork模式時(shí),Pod使用的是宿主機(jī)的網(wǎng)卡:
#進(jìn)入pod后查看 /#ifconfig ...... eth0Linkencap:EthernetHWaddrFA3E14:9B inetaddr:192.168.0.8Bcast:192.168.0.255Mask:255.255.255.0 inet6addr:fe80:3eff149b/64Scope:Link UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1 RXpackets:44239432errors:0dropped:0overruns:0frame:0 TXpackets:47841007errors:0dropped:0overruns:0carrier:0 collisions:0txqueuelen:1000 RXbytes:19884749467(18.5GiB)TXbytes:34713001649(32.3GiB) ......
當(dāng)Pod使用hostNetwork模式,并且未指定dnsPolicy為ClusterFirstWithHostNet時(shí),Pod會使用的宿主機(jī)的DNS:
apiVersion:v1 kind:Pod metadata: name:busybox namespace:default spec: containers: -image:busybox:1.28 command: -sleep -"3600" imagePullPolicy:IfNotPresent name:busybox restartPolicy:Always hostNetwork:true
此時(shí)Pod無法通過域名訪問Kubernetes集群內(nèi)部:
#hostNetwork模式如果不指定dnsPolicy則使用default模式,使用的宿主機(jī)的DNS /#cat/etc/resolv.conf nameserver100.125.1.250 nameserver100.125.64.250 searchopenstacklocal optionssingle-request-reopentimeout:2 #pod可以通過域名訪問外網(wǎng),但是無法通過域名訪問kubernetes集群內(nèi)部 /#pingbaidu.com PINGbaidu.com(39.156.69.79):56databytes 64bytesfrom39.156.69.79:seq=0ttl=49time=29.193ms 64bytesfrom39.156.69.79:seq=1ttl=49time=29.104ms ^C ---baidu.compingstatistics--- 2packetstransmitted,2packetsreceived,0%packetloss round-tripmin/avg/max=29.104/29.148/29.193ms /#pingnginx ping:badaddress'nginx'
如果Pod在hostNetwork模式下要通過域名的方式訪問kubernetes集群內(nèi)的服務(wù),需要指定dnsPolicy為ClusterFirstWithHostNet:
apiVersion:v1 kind:Pod metadata: name:busybox namespace:default spec: containers: -image:busybox:1.28 command: -sleep -"3600" imagePullPolicy:IfNotPresent name:busybox restartPolicy:Always hostNetwork:true dnsPolicy:ClusterFirstWithHostNet
此時(shí)查看Pod的DNS配置,可以看到nameserver使用的是CoreDNS:
#ClusterFirstWithHostNet模式DNS使用的是coredns的地址, /#cat/etc/resolv.conf nameserver10.247.3.10 searchdefault.svc.cluster.localsvc.cluster.localcluster.localopenstacklocal optionssingle-request-reopentimeout:2ndots:5 #可以通過域名訪問外網(wǎng),也通過域名訪問集群內(nèi)部 /#nslookupbaidu.com Server:10.247.3.10 Address1:10.247.3.10coredns.kube-system.svc.cluster.local Name:baidu.com Address1:39.156.69.79 Address2:220.181.38.148 /# /#nslookupnginx Server:10.247.3.10 Address1:10.247.3.10coredns.kube-system.svc.cluster.local Name:nginx Address1:10.247.60.222nginx.default.svc.cluster.local /#
None
當(dāng)設(shè)置dnsPolicy為None時(shí),不會使用Kubernetes集群和宿主機(jī)的 DNS 策略,但是必須自己配置dnsConfig。
apiVersion:v1 kind:Pod metadata: name:busybox namespace:default spec: containers: -image:busybox:1.28 command: -sleep -"3600" imagePullPolicy:IfNotPresent name:busybox restartPolicy:Always dnsPolicy:None dnsConfig: nameservers: -1.2.3.4
/ # cat /etc/resolv.conf nameserver 1.2.3.4 options single-request-reopen timeout:2
StatefulSet 和 Service
StatefulSet Pod 具有唯一的標(biāo)識,該標(biāo)識包括順序標(biāo)識、穩(wěn)定的網(wǎng)絡(luò)標(biāo)識和穩(wěn)定的存儲。該標(biāo)識和 Pod 是綁定的,不管它被調(diào)度在哪個(gè)節(jié)點(diǎn)上。
StatefulSet 中的每個(gè) Pod 根據(jù) StatefulSet 的名稱和 Pod 的序號派生出它的主機(jī)名。組合主機(jī)名的格式為$(StatefulSet 名稱)-$(序號)。下例將會創(chuàng)建三個(gè)名稱分別為web-0、web-1、web-2的 Pod。StatefulSet 可以使用 Headless Service(無頭服務(wù))控制它的 Pod 的網(wǎng)絡(luò)域。管理域的這個(gè)服務(wù)的格式為:$(服務(wù)名稱).$(命名空間).svc.cluster.local,其中cluster.local是集群域。一旦每個(gè) Pod 創(chuàng)建成功,就會得到一個(gè)匹配的 DNS 子域,格式為:$(pod 名稱).$(所屬服務(wù)的 DNS 域名),其中所屬服務(wù)由 StatefulSet 的serviceName域來設(shè)定。
通過域名去訪問Headless Service負(fù)載的Pod是不走iptables的,通過域名去訪問ClusterIP負(fù)載的Pod要走Iptables。
下面給出一些選擇集群域、服務(wù)名、StatefulSet 名、及其怎樣影響 StatefulSet 的 Pod 上的 DNS 名稱的示例:
Cluster Domain | Service (ns/name) | StatefulSet (ns/name) | StatefulSet Domain | Pod DNS | Pod Hostname |
---|---|---|---|---|---|
cluster.local | default/nginx | default/web | nginx.default.svc.cluster.local | web-{0..N-1}.nginx.default.svc.cluster.local | web-{0..N-1} |
cluster.local | foo/nginx | foo/web | nginx.foo.svc.cluster.local | web-{0..N-1}.nginx.foo.svc.cluster.local | web-{0..N-1} |
kube.local | foo/nginx | foo/web | nginx.foo.svc.kube.local | web-{0..N-1}.nginx.foo.svc.kube.local | web-{0..N-1} |
Headless Service
首先我們將StatefulSet和Headless Service結(jié)合使用,(通常情況下是這么做的):
apiVersion:v1 kind:Service metadata: name:headless-nginx labels: app:nginx spec: ports: -port:80 name:web clusterIP:None selector: app:nginx --- apiVersion:apps/v1 kind:StatefulSet metadata: name:web spec: selector: matchLabels: app:nginx serviceName:headless-nginx replicas:3 template: metadata: labels: app:nginx spec: containers: -name:nginx image:nginx:1.7.9 ports: -containerPort:80 name:web
查看創(chuàng)建的StatefulSet的Pod,命名是有規(guī)律的按照0,1,2的順序遞增。
root@master01:~/yaml/service#kubectlgetpod-owide NAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESSGATES web-01/1Running06s192.168.5.59worker01 web-11/1Running05s192.168.30.117worker02 web-21/1Running03s192.168.5.58worker01
查看創(chuàng)建的Headless Service,可以看到ClusterIP為None:
root@master01:~/yaml/service#kubectlgetsvc NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE headless-nginxClusterIPNone80/TCP15m
找一個(gè)相同namespace的Pod來解析該Headless Service:
root@master01:~/yaml/service#kubectlexecbusybox1--nslookupheadless-nginx Server:10.96.0.10 Address1:10.96.0.10kube-dns.kube-system.svc.cluster.local #解析出來的ip地址為3個(gè)StatefulSet的pod的ip Name:headless-nginx Address1:192.168.30.117web-1.headless-nginx.default.svc.cluster.local Address2:192.168.5.59web-0.headless-nginx.default.svc.cluster.local Address3:192.168.5.58web-2.headless-nginx.default.svc.cluster.local
查看default命名空間下的Pod的/etc/resolv.conf配置:
root@master01:~/yaml/service#kubectlexecbusybox1--cat/etc/resolv.conf nameserver10.96.0.10 searchdefault.svc.cluster.localsvc.cluster.localcluster.local optionsndots:5
在不同的 namespace 下的 Pod 通過 Service 訪問的時(shí)候,需要在 Service name 后面加上 .。名字>
root@master01:~/yaml/service#kubectlexecbusybox2-nkube-system--nslookupheadless-nginx.default Server:10.96.0.10 Address1:10.96.0.10kube-dns.kube-system.svc.cluster.local Name:headless-nginx.default.svc.cluster.local Address1:192.168.5.58web-2.headless-nginx.default.svc.cluster.local Address2:192.168.5.59web-0.headless-nginx.default.svc.cluster.local Address3:192.168.30.117web-1.headless-nginx.default.svc.cluster.local
查看kube-system命名空間下的Pod的/etc/resolv.conf配置:
root@master01:~/yaml/service#kubectlexecbusybox2-nkube-system--cat/etc/resolv.confnameserver10.96.0.10 searchkube-system.svc.cluster.localsvc.cluster.localcluster.local optionsndots:5
ClusterIP Service
現(xiàn)在我們將StatefulSet和ClusterIP Service結(jié)合使用:
apiVersion:v1 kind:Service metadata: name:clusterip-nginx labels: app:nginx #ClusterIP不為None則表示該Service有ClusterIP spec: ports: -port:80 name:web selector: app:nginx
查看創(chuàng)建的Service:
root@master01:~/yaml/service#kubectlgetsvc NAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGE clusterip-nginxClusterIP10.110.176.20180/TCP13s
此時(shí)用Pod解析域名只能得到ClusterIP地址,無法得到Pod的IP地址:
root@master01:~/yaml/service#kubectlexecbusybox1--nslookupclusterip-nginx Server:10.96.0.10 Address1:10.96.0.10kube-dns.kube-system.svc.cluster.local Name:clusterip-nginx Address1:10.110.176.201clusterip-nginx.default.svc.cluster.local
Pod 的 hostname 與 subdomain
在 Kubernetes 中,如果不指定 Pod 的 hostname,其默認(rèn)為 pod.metadata.name,通過 spec.hostname 字段可以自定義;另外還可以給 Pod 設(shè)置 subdomain,通過 spec.subdomain 字段。比如下面這個(gè)例子:
創(chuàng)建一個(gè)Nginx Pod,指定Pod的hostname和subdomain:
apiVersion:v1 kind:Pod metadata: name:nginx labels: name:nginx spec: hostname:domain-test subdomain:subdomain-test containers: -image:nginx name:nginx --- apiVersion:v1 kind:Service metadata: name:subdomain-test spec: selector: name:nginx ports: -port:80 targetPort:80 protocol:TCP
可以查看這個(gè) Pod 的 hostname 和 hosts 文件:
[root@localhost ~]# kubectl get po -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES busybox-5bbb5d7ff7-dh68j 1/1 Running 0 112m 10.244.1.246 172-16-105-2 nginx 1/1 Running 0 2m 10.244.1.253 172-16-105-2 [root@localhost ~]# kubectl exec -it nginx bash root@domain-test:/# cat /etc/hosts # Kubernetes-managed hosts file. 127.0.0.1localhost ::1localhost ip6-localhost ip6-loopback fe00::0ip6-localnet fe00::0ip6-mcastprefix fe00::1ip6-allnodes fe00::2ip6-allrouters 10.244.1.253domain-test.subdomain-test.default.svc.cluster.localdomain-test root@domain-test:/#
在 busybox 容器中通過域名訪問這個(gè)Pod:
[root@localhost ~]# kubectl exec -it busybox-5bbb5d7ff7-dh68j sh / # wget domain-test.subdomain-test Connecting to domain-test.subdomain-test (10.244.1.253:80) saving to 'index.html' index.html 100% |*****************************************************| 612 000 ETA 'index.html' saved
責(zé)任編輯:彭菁
-
DNS服務(wù)器
+關(guān)注
關(guān)注
0文章
21瀏覽量
8478 -
ip地址
+關(guān)注
關(guān)注
0文章
303瀏覽量
17132 -
容器
+關(guān)注
關(guān)注
0文章
499瀏覽量
22124 -
Docker
+關(guān)注
關(guān)注
0文章
492瀏覽量
11967
原文標(biāo)題:如何管理 Docker 容器和 Kubernetes Pod 的 DNS
文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論