kubernetes 服务发现实现(kube-dns)
2018-03-05 11:40
615 查看
DNS会监控Kubernetes的新的Service并且会为其创建一组DNS记录。如果DNS在整个集群中都被启用的话,那所有的Pod应该能自动对Service进行命名解析。
例如,如果你有一个叫做my-service的Service,其位于"my-ns"的Namespace下,那么对于"my-service.my-ns"就会有一个DNS的记录被创建。位于名为"my-ns" Namespace下的Pod可以通过简单地使用"my-service"进行查找。而位于其他Namespaces的Pod必须把查找名称指定为"my-service.my-ns"。这些命名查找的结果是一个集群的IP地址。
对于命名的端口,Kubernetes也支持DNS SRV (service)记录。如果名为"my-service.my-ns"的Service 有一个协议为TCP的名叫"http"的端口,你可以对"_http._tcp.my-service.my-ns"做一次DNS SRV查询来发现”http”的端口号。
一、安装DNS服务
DNS 服务不是独立的系统服务,而是一种 addon ,作为插件来安装的,不是 kubernetes 集群必须的(但是非常推荐安装)。可以把它看做运行在集群上的应用,只不过这个应用比较特殊而已。
DNS 有两种配置方式,在 1.3 之前使用 etcd + kube2sky + skydns 的方式,在 1.3 之后可以使用 kubedns + dnsmasq 的方式。
下载kubernetes安装包 https://github.com/kubernetes/kubernetes/releases/download/v1.7.8/kubernetes.tar.gz, 解压后在kubernetes/cluster/addons/dns目录下有kubedns的部署文件。
1.kubedns-cm.yaml和kubedns-sa.yaml
kubedns-cm.yaml和kubedns-sa.yaml无须修改,直接使用。
2.kubedns-svc.yaml
kubedns-svc.yaml有三种类型的模板文件,我们使用kubedns-svc.yaml.sed文件来生成kubedns-svc.yaml文件,替换$DNS_SERVER_IP为指定K8s DNS IP(默认为apiserver ip 加 1),我们使用10.254.0.2。
cp kubedns-svc.yaml.sed kubedns-svc.yaml
sed -i 's/$DNS_SERVER_IP/10.254.0.2/g' kubedns-svc.yaml
3.kubedns-controller.yaml
kubedns-controller.yaml有三种类型的模板文件,我们使用kubedns-controller.yaml.sed文件来生成kubedns-controller.yaml文件,替换$DNS_DOMAIN为cluster.local.(在与kube-apiserver定义的一致)。
cp kubedns-controller.yaml.sed kubedns-controller.yaml
sed -i 's/$DNS_DOMAIN/cluster.local./g' kubedns-controller.yaml
4.启动kubedns服务
kubectl create -f kubedns-cm.yaml
kubectl create -f kubedns-sa.yaml
kubectl create -f kubedns-svc.yaml
kubectl create -f kubedns-controller.yaml
二、测试DNS:
1. 创建一个测试 pod 和svr :
2. 启动一个dns测试工具POD
3. 进入dns工具POD,检查DNS:
a. 检查A记录
kubectl exec -it tools-dns-4108965606-5rrtb bash
root@tools-dns-4108965606-5rrtb:/# nslookup -query=a _http._tcp.curl.kube-system
Server: 10.254.0.2
Address: 10.254.0.2#53
_http._tcp.curl.kube-system.svc.cluster.local canonical name = curl.kube-system.svc.cluster.local.
Name: curl.kube-system.svc.cluster.local
Address: 10.254.186.53b. 检查srv记录
SRV记录是一个域名系统(DNS)资源记录,用于标识承载特定服务的计算机。
安装参考: https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns http://blog.csdn.net/zhuchuangang/article/details/76093887
例如,如果你有一个叫做my-service的Service,其位于"my-ns"的Namespace下,那么对于"my-service.my-ns"就会有一个DNS的记录被创建。位于名为"my-ns" Namespace下的Pod可以通过简单地使用"my-service"进行查找。而位于其他Namespaces的Pod必须把查找名称指定为"my-service.my-ns"。这些命名查找的结果是一个集群的IP地址。
对于命名的端口,Kubernetes也支持DNS SRV (service)记录。如果名为"my-service.my-ns"的Service 有一个协议为TCP的名叫"http"的端口,你可以对"_http._tcp.my-service.my-ns"做一次DNS SRV查询来发现”http”的端口号。
一、安装DNS服务
DNS 服务不是独立的系统服务,而是一种 addon ,作为插件来安装的,不是 kubernetes 集群必须的(但是非常推荐安装)。可以把它看做运行在集群上的应用,只不过这个应用比较特殊而已。
DNS 有两种配置方式,在 1.3 之前使用 etcd + kube2sky + skydns 的方式,在 1.3 之后可以使用 kubedns + dnsmasq 的方式。
下载kubernetes安装包 https://github.com/kubernetes/kubernetes/releases/download/v1.7.8/kubernetes.tar.gz, 解压后在kubernetes/cluster/addons/dns目录下有kubedns的部署文件。
1.kubedns-cm.yaml和kubedns-sa.yaml
kubedns-cm.yaml和kubedns-sa.yaml无须修改,直接使用。
2.kubedns-svc.yaml
kubedns-svc.yaml有三种类型的模板文件,我们使用kubedns-svc.yaml.sed文件来生成kubedns-svc.yaml文件,替换$DNS_SERVER_IP为指定K8s DNS IP(默认为apiserver ip 加 1),我们使用10.254.0.2。
cp kubedns-svc.yaml.sed kubedns-svc.yaml
sed -i 's/$DNS_SERVER_IP/10.254.0.2/g' kubedns-svc.yaml
3.kubedns-controller.yaml
kubedns-controller.yaml有三种类型的模板文件,我们使用kubedns-controller.yaml.sed文件来生成kubedns-controller.yaml文件,替换$DNS_DOMAIN为cluster.local.(在与kube-apiserver定义的一致)。
cp kubedns-controller.yaml.sed kubedns-controller.yaml
sed -i 's/$DNS_DOMAIN/cluster.local./g' kubedns-controller.yaml
4.启动kubedns服务
kubectl create -f kubedns-cm.yaml
kubectl create -f kubedns-sa.yaml
kubectl create -f kubedns-svc.yaml
kubectl create -f kubedns-controller.yaml
二、测试DNS:
1. 创建一个测试 pod 和svr :
[root@maste curl]# cat ./curl-system.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: curl namespace: kube-system spec: replicas: 1 template: metadata: labels: app: curl spec: containers: - name: curl image: appropriate/curl command: ["sleep"] args: ["5000"] --- apiVersion: v1 kind: Service metadata: name: curl namespace: kube-system labels: app: curl spec: type: ClusterIP selector: app: curl ports: - port: 80 targetPort: 80 name: http protocol: TCP
2. 启动一个dns测试工具POD
[root@master busybox]# cat test.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tools-dns namespace: default spec: replicas: 1 template: metadata: labels: app: tools-dns spec: containers: - name: tools-dns image: tutum/dnsutils:latest command: ["sleep"] args: ["5000"]
3. 进入dns工具POD,检查DNS:
a. 检查A记录
kubectl exec -it tools-dns-4108965606-5rrtb bash
root@tools-dns-4108965606-5rrtb:/# nslookup -query=a _http._tcp.curl.kube-system
Server: 10.254.0.2
Address: 10.254.0.2#53
_http._tcp.curl.kube-system.svc.cluster.local canonical name = curl.kube-system.svc.cluster.local.
Name: curl.kube-system.svc.cluster.local
Address: 10.254.186.53b. 检查srv记录
SRV记录是一个域名系统(DNS)资源记录,用于标识承载特定服务的计算机。
SRV记录是一个域名系统(DNS)资源记录,用于标识承载特定服务的计算机。 root@tools-dns-4108965606-5rrtb:/# nslookup -query=srv _http._tcp.curl.kube-system Server: 10.254.0.2 Address: 10.254.0.2#53 _http._tcp.curl.kube-system.svc.cluster.local service = 10 100 80 curl.kube-system.svc.cluster.local. (说明:service = 10(优先级) 100(比重) 80(端口) curl.kube-system.svc.cluster.local(主机名).)参考: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
安装参考: https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns http://blog.csdn.net/zhuchuangang/article/details/76093887
相关文章推荐
- Kubernetes(k8s)如何使用kube-dns实现服务发现
- Kubernetes(k8s)如何使用kube-dns实现服务发现
- Kubernetes如何使用kube-dns实现服务发现
- Kubernetes如何使用kube-dns实现服务发现
- Kubernetes如何使用kube-dns实现服务发现
- kubernetes 简介:kube-dns 和服务发现
- [测试环境]K8s使用kube-dns实现服务发现【转载】
- 【Kubernetes】最佳实践1:kube-proxy与服务发现
- Mesos-DNS 实现Mesos集群的服务发现
- kubernetes学习记录(5)——服务发现机制与Cluster DNS的安装(无CA认证版)
- 基于Consul+Registrator+Nginx实现容器服务自动发现的集群框架 推荐
- 基于网络抓包实现kubernetes中微服务的应用级监控
- BIND实现DNS服务----视频下载
- 【微信群分享预告】Kubernetes结合LVS实现高可用负载均衡与集群外服务访问
- 使用kubeadm部署kubernetes1.9.1+coredns+kube-router(ipvs)高可用集群
- C#实现DNS解析服务
- springcloud consul +consul 实现服务注册及发现
- Spring cloud实现服务注册及发现
- kubernetes:kubedns安装
- Traefik实现Kubernetes集群服务外部https访问