每天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 | 汇总

每天5分钟玩转Kubernetes | Kubernetes集群日志管理

每天5分钟玩转Kubernetes | Kubernetes Dashboard安装

每天5分钟玩转Kubernetes | Deployment

每天5分钟玩转Kubernetes | Heapster