为什么要使用SkyDNS k8s最基础的调度单位是pod;当一个pod异常退出的时候会重新创建另一个pod,但是这个时候pod的ip就改变了,所以我们不能直接使用pod-ip来访问其他的pod。 SkyDNS组成 kube-dns是由四个容器组成。 SkyDNS是用于服务发现的开源框架,构建于etcd之上。作用是为k8s集群中的Pod提供DNS查询接口。 etcd是一种开源的分布式key-value存储,在kube-dns中的作用为存储SkyDNS需要的各种数据,写入方为kube2sky,读取方为SkyDNS。 搭建skydns 1.通过上面介绍我们知道skydns是由4个容器组成,所以我们第一步要拉取4个容器镜像(因为需要访问国外网站所以这里先手动拉取docek hub上面有大神已经上传,没弄健康检查)。 image: outrider/skydns resources: command: - /skydns - -machines=http://localhost:4001 - -addr=0.0.0.0
说明 SkyDNS2的github地址: https://github.com/skynetservices/skydns Version: v2.5.3a SkyDNS架构 关于SkyDNS是什么?. 下面我直接把我阅读代码后理解的SkyDNS架构贴出来: ? SkyDNS工作原理 SkyDNS Server的工作,依赖后端Key-Value存储的支持。 SkyDNS主要对应的etcd key path如下: /v2/keys/skydns/config /v2/keys/skydns/local/skydns/east/production/rails /v2/keys/skydns/local/skydns/dns/stub /v2/keys/skydns/local/skydns/... 中原有数据; 配置SkyDNS Server参数的default值,并创建SkyDNS server对象; 去etcd中加载...
Kubernetes默认使用SkyDNS 作为集群的DNS服务器, kubernetes可以为pod提供dns(skyDNS)内部域名解析服务。 启用了集群DNS选项,需要创建一个运行SkyDNS域名服务器的pod和一个对外提供集群service域名解析服务的SkyDNS service,并且还会为该service绑定一个稳定的静态IP地址作为入口 SkyDNS service的域名搜索顺序大致如下。 skyDNS由三部分组成:kube2sky、etcd、skydns。 而这一dns解析服务,实际是由Skydns提供的。
说明: 线路1:kubernetes cluster中的DNS请求被SkyDNS接受,SkyDNS配置了Backend为etcd/cluster,从etcd/cluster中读取数据,然后封装数据返回完成 在kubernetes 1.3中,KubeDNS容器把在1.2中分开部署的SkyDNS和Kube2Sky整合在程序kube-dns中,在容器KubeDNS中部署,其启动流程如下: Starting SkyDNS Listening on port:10053. skydns: metrics enabled on :/metrics. 线路2:若dnsmasq cache中无记录命中,则forward请求到KubeDNS容器中的SkyDNS Server处理,SkyDNS从KubeDNS维护的一块内存(cache)中查找数据并进行响应 ##总结 对比1.2和1.3中的实现,主要区别在: 1.2中SkyDNS和Kube2Sky分别部署在两个不同的容器中,直接由SkyDNS接受kubernetes cluster中的DNS请求; 1.3中将
搭建DNS服务器 简介 k8s提供的DNS服务是skydns,由四个组件组成 etcd:DNS信息存储 kube2sky:监控k8s中Service资源的变化,根据Service的名称的IP地址信息生成 DNS记录,并将其保存到etcd中 skyDNS:从etcd中读取DNS信息,并提供DNS查询服务 healthz:提供对skydns服务的健康检查功能 ? skydns配置文件说明 skydns服务有一个RC和一个Service组成,分别由配置文件skydns-rc.yaml和skydns-svc.yaml定义。 skydns-rc.yaml包含了四个容器的定义: apiVersion: v1 kind: ReplicationController metadata: name: kube-dns-v8 修改完参数之后,启动dns kubectl create -f skydns-rc.yaml kubectl create -f skydns-svc.yaml 验证 启动一个busybox容器。
; skyDNS: DNS 域名解析服务; healthz: 对 skyDNS 的健康检查。 skyDNS 服务由一个 RC 和一个 Service 组成。 在 RC 的配置文件中,需要定义 etcd / kube2sky / skydns / healthz 四个容器,以保证 DNS 服务正常工作。 容器启动后 kube2sky 会通过 API Server 监控集群中所有 service 的定义,生成相应的记录并保存到 etcd ; skydns 的启动参数 -addr=<IP:Port> 表示本机 在 DNS Service 的配置文件中,skyDNS 的 ClusterIP 需要我们指定,每个 Node 的 kubelet 都会使用这个 IP 地址,不会通过系统自动分配;另外,这个 IP 需要在
skyDNS:提供DNS域名解析服务。 healthz:提供对skydns服务的健康检查。 elcolio/etcd # docker pull docker.io/port/kubernetes-kube2sky # docker pull docker.io/skynetservices/skydns port/kubernetes-kube2sky registry.fjhb.cn/kubernetes-kube2sky # docker tag docker.io/skynetservices/skydns registry.fjhb.cn/skydns # docker tag docker.io/wu1boy/healthz registry.fjhb.cn/healthz # docker push # kubectl create -f skydns-svc.yaml # kubectl get rc # kubectl get pod # kubectl get svc image.png
19 [root@k8s-master k8s]# unzip skydns.zip 20 Archive: skydns.zip 21 creating: skydns/ 22 inflating : skydns/skydns-rc.yaml 23 inflating: skydns/skydns-svc.yaml 24 inflating: skydns/test_dns_pod.yaml 1 [root@k8s-master skydns]# kubectl create -f skydns-rc.yaml 2 deployment "kube-dns" created 3 [root ]# vim skydns-svc.yaml 2 [root@k8s-master skydns]# kubectl create -f skydns-svc.yaml 3 service "kube-dns 1 [root@k8s-master skydns]# ls 2 skydns-rc.yaml skydns-svc.yaml test_dns_pod.yaml 3 [root@k8s-master
Kubernetes默认使用SkyDNS 作为集群的DNS服务器, kubernetes可以为pod提供dns(skyDNS)内部域名解析服务。 启用了集群DNS选项,需要创建一个运行SkyDNS域名服务器的pod和一个对外提供集群service域名解析服务的SkyDNS service,并且还会为该service绑定一个稳定的静态IP地址作为入口 SkyDNS service的域名搜索顺序大致如下。 skyDNS由三部分组成:kube2sky、etcd、skydns。 而这一dns解析服务,实际是由Skydns提供的。
1.2.7版本中,Cluster DNS主要包含如下几项: 1)SkyDNS 提供DNS解析服务。 2)Etcd 用于DNS的存储。 4)healthz 提供对skydns服务的健康检查功能。 安装过程参考官方github文档。 服务使用的clusterIP需要我们指定一个固定的IP地址,每个Node的kubelet进程都将使用这个IP地址,不能通过Kuberneters自动给skydns分配。 skydns-rc.yaml.in和skydns-svc.yaml.in是两个模板文件,通过设置的环境变量修改其中的相应属性值,可以生成Replication Controller和Service的定义文件 - --domain=cluster.local - --kube-master-url=http://192.168.121.143:8080 - name: skydns
DNS 有两种配置方式,在 1.3 之前使用 etcd + kube2sky + skydns 的方式,在 1.3 之后可以使用 kubedns + dnsmasq 的方式。 skydns 下面是这种方式的部署配置文件: apiVersion: v1 kind: ReplicationController metadata: labels: k8s-app: kube-dns /skydns-rc.yml $ kubectl create -f . /skydns-rc.yml 测试 DNS 可用性 不管那种部署很是,kubernetes 对外提供的 DNS 服务是一致的。 kubeDNS:提供了原来 kube2sky + etcd + skyDNS 的功能,可以单独对外提供 DNS 查询服务 dnsmasq: 一个轻量级的 DNS 服务软件,可以提供 DNS 缓存功能。
使用一个伙伴进程(或者说是协同进程)来帮忙处理注册的任务 DNS SkyDNS https://github.com/skynetservices/skydns SkyDNS docker镜像 https://hub.docker.com/r/skynetservices/skydns/ skydock (SkyDNS集成到Docker的方案,目前只能用在一台Docker宿主机上) https
DNS服务在Kubernetes的发展过程中经历了3个阶段,SkyDNS ----> KubeDNS ----> CoreDNS。 1.2 SkyDNS 在Kubernetes 1.2版本时,DNS服务是由SkyDNS提供的,它由4个容器组成:kube2sky、skydns、etcd和healthz。 skydns容器从etcd中读取DNS记录,并为客户端容器应用提供DNS查询服务。 healthz容器提供对skydns服务的健康检查功能。 SkyDNS的总体架构如下: ? 1.3 KubeDNS 从Kubernetes 1.4版本开始,SkyDNS组件便被KubeDNS替换,主要考虑是SkyDNS组件之间通信较多,整体性能不高。 示例2:如下为使用etcd插件的配置示例,将以“.com”结尾的域名记录配置为从etcd中获取,并将域名记录保存在/skydns路径下。
1.2.3 SkyDNS 及其配置 关于 SkyDNS:它是一个开源的构建在 etcd 之上的分布式服务宣告(announcement)和发现(discovery)服务。 SkyDNS 的 server 部分支持被作为库文件使用,此时可以为其实现其它后端。 在 127.0.0.1:53 上,包装在 openshift 进程中的 SkyDNS 在侦听。 从已有资料上看看,所有节点上都需要安装 SkyDns,并组成一个分布式集群。因为 Master 节点上的 53 端口被另一个 SkyDns 进程占用,因此换到了端口8053。 2. (3)dnsmasq 将查询转到 127.0.0.1:53 上的 SkyDns 服务。 (4)SkyDNS 做查询。SkyDNS 能接收的域名格式:<prefix>.<service_name>.
的能力实现自定义host的功能,下面就对如何实现给出步骤说明 kube-dns pod默认启动三个容器 1. kubedns容器,负责监听集群service和endpoints资源的变化,并将信息更新到skyDNS 中,skyDNS负责解析dns解析,并监听10053端口 2. dnsmasq容器,负载集群dns解析,并将 cluster.local 后缀的集群域名转发到skyDNS:10053端口,非cluster.local
第一阶段,在kubernetes 1.2版本时,dns服务使用的是由SkyDNS提供的,由4个容器组成:kube2sky、skydns、etcd和healthz。 etcd存储dns记录;kube2sky监控service变化,生成dns记录;skydns读取服务,提供查询服务;healthz提供健康检查 第二阶段,在kubernetes 1.4版本开始使用kubedns
,,,要等建立好service后,,使用kubectl get svc来查询 所以我们要使用kube-dns来处理 直接使用域名来访问service dns是域名解析 将对应的域名转成ip地址 SkyDNS etcd 存储skydns需要的数据 比如域名和ip的映射 kube2sky 监听k8s service资源变化将数据写入etcd中 (通过kubernetes的Service调用k8s的list 和watch API) skydns 读取etcd的数据,提供域名解析的功能 域名格式 <service_name>. 遇到问题 //已处理 ca证书的理解 见另一篇skyDns。
/api-int '{"host":"192.168.57.60","ttl":60}' $ etcdctlv3 put /skydns/com/example/openshift4/etcd-0 ' ","ttl":60}' $ etcdctlv3 put /skydns/com/example/openshift4/etcd-2 '{"host":"192.168.57.64","ttl":60} ' $ etcdctlv3 put /skydns/com/example/openshift4/_tcp/_etcd-server-ssl/x1 '{"host":"etcd-0.openshift4 /master2 '{"host":"192.168.57.63","ttl":60}' $ etcdctlv3 put /skydns/com/example/openshift4/master3 ' ","ttl":60}' $ etcdctlv3 put /skydns/com/example/openshift4/worker2 '{"host":"192.168.57.66","ttl":60
nginx做的代理,可以看看/etc/goodrain/nginx/sites/maven 配置文件,artifactory 用户名密码默认:admin/password Q:云帮平台的管理节点启动了一个SkyDNS A:云帮使用开源的SkyDNS作为集群内部的DNS解析服务。提供内部各服务直接调用的 IP-->域名的解析服务。
使用Registry URI作为前缀,服务定义被储存为下面的格式: <prefix>/<service-name>/<service-id> = <ip>:<port> SkyDNS 2 skydns2 ://
:<port>/<domain> SkyDNS2 使用etcd,因此这个后端写服务定义的格式兼容SkyDNS2。 path不能被省略,必须是一个对SkyDNS有效的DNS域名。 如果没有指定地址和端口,它将是默认值:127.0.0.1:2379。 使用Registry URI和域名cluster.local,服务定义存储为下面的格式: /skydns/local/cluster/<service-name>/<service-id> = {"host ":"<ip>","port":<port>} SkyDNS要求服务ID是一个有效的DNS主机名,因此这个后端要求容器用一个有效的DNS名字覆盖服务ID。