DNS 访问 Service — Kubernetes(25)steemCreated with Sketch.

in kubernetes •  7 years ago 

在 Cluster 中,除了可以通过 Cluster IP 访问 Service,Kubernetes 还提供了更为方便的 DNS 访问。

kubeadm 部署时会默认安装 kube-dns 组件。

676.png

kube-dns 是一个 DNS 服务器。每当有新的 Service 被创建,kube-dns 会添加该 Service 的 DNS 记录。Cluster 中的 Pod 可以通过 <SERVICE_NAME>.<NAMESPACE_NAME> 访问 Service。

比如可以用 httpd-svc.default 访问 Service httpd-svc

677.png

如上所示,我们在一个临时的 busybox Pod 中验证了 DNS 的有效性。另外,由于这个 Pod 与 httpd-svc 同属于 default namespace,可以省略 default 直接用 httpd-svc 访问 Service。

678.png

nslookup 查看 httpd-svc 的 DNS 的信息。

679.png

DNS 服务器是 kube-dns.kube-system.svc.cluster.local,这实际上就是 kube-dns 组件,它本身是部署在 kube-system namespace 中的一个 Service。

httpd-svc.default.svc.cluster.localhttpd-svc 的完整域名。

如果要访问其他 namespace 中的 Service,就必须带上 namesapce 了。kubectl get namespace 查看已有的 namespace。

680.png

kube-public 中部署 Service httpd2-svc,配置如下:

681.png

通过 namespace: kube-public 指定资源所属的 namespace。多个资源可以在一个 YAML 文件中定义,用 --- 分割。执行 kubectl apply 创建资源:

682.png

查看 kube-public 的 Service:

683.png

在 busybox Pod 中访问 httpd2-svc

684.png

因为属于不同的 namespace,必须使用 httpd2-svc.kube-public 才能访问到。

Kubernetes 集群内部可以通过 Cluster IP 和 DNS 访问 Service,那么集群外部如何访问呢?下一节我们将讨论这个问题。

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

老师您的最后一张截图的wget 命令多打了一个wget

确实是这样,当时居然没注意到。

奇怪, 我这里试了<SERVICE_NAME>.<NAMESPACE_NAME> 不行

可以 :
nslookup httpd-svc
nslookup httpd-svc.default.svc.cluster.local
nslookup httpd2-svc.kube-public.svc.cluster.local

不可以: can't resolve xxx
nslookup httpd-svc.default
nslookup httpd2-svc.kube-public

嗯我也是 版本1.9

老师,进入到容器内部后,wget命令没问题,但是在查看DNS的时候,只能看到K8S自己的DNS,而且只有IP,没有域名,我们自己创建的service的DNS查看不到,结果如下:


/ # nslookup httpd-svc
Server: 10.96.0.10
Address: 10.96.0.10:53

** server can't find httpd-svc: NXDOMAIN

*** Can't find httpd-svc: No answer


不知道是不是K8S版本问题,我的版本是1.11