每天5分钟玩转Kubernetes | DNS访问Service
Posted COCOgsta
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天5分钟玩转Kubernetes | DNS访问Service相关的知识,希望对你有一定的参考价值。
书籍来源:cloudman《每天5分钟玩转Kubernetes》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
在Cluster中,除了可以通过Cluster IP访问Service,Kubernetes还提供了更为方便的DNS访问。
kubeadm部署时会默认安装coredns组件,如图所示。
coredns是一个DNS服务器。每当有新的Service被创建,coredns会添加该Service的DNS记录。Cluster中的Pod可以通过<SERVICE_NAME>.<NAMESPACE_NAME>访问Service。
比如可以用httpd-svc.default访问Service httpd-svc,如图所示。
如上所示,我们在一个临时的busybox Pod中验证了DNS的有效性。另外,由于这个Pod与httpd-svc同属于default namespace,因此可以省略default直接用httpd-svc访问Service,如图所示。
用nslookup查看httpd-svc的DNS信息,如图所示。
DNS服务器是
coredns.kube-system.svc.cluster.local,这实际上就是coredns组件,它本身是部署在kube-system namespace中的一个Service。
httpd-svc.default.svc.cluster.local是httpd-svc的完整域名。
如果要访问其他namespace中的Service,就必须带上namesapce了。kubectl get namespace查看已有的namespace,如图所示。
在kube-public中部署Service httpd2-svc,配置如下所示。
[root@k8s-master ~]# cat httpd2.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd2
namespace: kube-public
spec:
replicas: 3
selector:
matchLabels:
run: httpd2
template:
metadata:
labels:
run: httpd2
spec:
containers:
- name: httpd2
image: httpd
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: httpd2-svc
namespace: kube-public
spec:
selector:
run: httpd2
ports:
- protocol: TCP
port: 8080
targetPort: 80
[root@k8s-master ~]#
通过namespace: kube-public指定资源所属的namespace。多个资源可以在一个YAML文件中定义,用“---”分割。执行kubectl apply创建资源,如图所示。
查看kube-public的Service,如图所示。
在busybox Pod中访问httpd2-svc,如图所示。
因为不属于同一个namespace,所以必须使用httpd2-svc.kube- public才能访问到。
以上是关于每天5分钟玩转Kubernetes | DNS访问Service的主要内容,如果未能解决你的问题,请参考以下文章
每天5分钟玩转Kubernetes | 外网如何访问Service
每天5分钟玩转Kubernetes | Kubernetes集群日志管理
每天5分钟玩转Kubernetes | Kubernetes Dashboard安装