k8sp / issues

We maintain a TODO list in https://github.com/k8sp/issues/issues
1 stars 0 forks source link

Understanding SkyDNS #32

Open wangkuiyi opened 8 years ago

wangkuiyi commented 8 years ago

Must Read

wangkuiyi commented 8 years ago

我花了几个小时学习DNS ( https://www.digitalocean.com/community/tutorials/an-introduction-to-dns-terminology-components-and-concepts ) 以及 dig 用法 ( http://www.thegeekstuff.com/2012/02/dig-command-examples/ ),然后试了试 —— SkyDNS 可以作为一个 DNS 服务器部署在我的MacBook Pro上,并且设置系统使用它作为DNS服务。具体步骤如下:

  1. 安装 etcd:

    curl -L https://github.com/coreos/etcd/releases/download/v3.0.2/etcd-v3.0.2-darwin-amd64.zip -o etcd-v3.0.2-darwin-amd64.zip
    unzip etcd-v3.0.2-darwin-amd64.zip
    cd etcd-v3.0.2-darwin-amd64
  2. 启动 etcd:

    ./etcd
  3. 下载和build SkyDNS:

    export GOPATH=`pwd`
    go get github.com/skynetservices/skydns
  4. 运行 SkyDNS,它会默认使用本地单节点etcd:

    sudo $GOPATH/bin/skydns
  5. 配置SkyDNS在自己解析不了域名的时候,forward到Google的DNS:

    ./etcdctl set /skydns/config '{"nameservers":["8.8.8.8:53", "8.8.4.4:53"]}'
  6. 设置域名 www.wangkuiyi.skydns.local 的IP地址是 10.10.10.111:8080

    ./etcdctl set skydns/local/skydns/wangkuiyi/www '{"host":"10.10.10.111","port":8080}'
  7. 用dig验证可以从本地DNS(SkyDNS)解析 www.wangkuiyi.com.skydns.local

    dig @localhost www.wangkuiyi.skydns.local +short
  8. 配置Mac OS X使用本地DNS:

    macosx-dns
  9. 测试ping可以解析 www.wangkuiyi.skydns.local:

    $ ping www.wangkuiyi.skydns.local
    PING www.wangkuiyi.skydns.local (10.10.10.111): 56 data bytes
    Request timeout for icmp_seq 0
    Request timeout for icmp_seq 1
wangkuiyi commented 8 years ago

基于上面的试验,以及刚才和 @vienlee 的电话讨论,我想验证一下这样一种配置:

  1. 机群里的机器分三组
    1. 1台PXE server,静态IP
    2. 5台Kubernetes masters(同时也是etcd members),静态IP
    3. 其他任意多 Kubernetes workers,动态IP,由 PXE server上的DHCP 服务分配
  2. 每台 Kubernetes worker 启动的时候,cloud-config 把本机的hostname和DHCP分配的IP地址,以SkyDNS 需要的形式入 etcd.
  3. 每一台Kubernetes master上,跑Kubernetes API server,以及 kube2sky。kube2sky 被配置成监听 API server 发来的关于Kubernetes service 创建和销毁的通知,然后更新到 etcd 里
  4. PXE server上跑 SkyDNS,利用 etcd 里的信息,做域名解析
    1. 因为 etcd 里有 kube2sky 维护的 service name 到 hostname:port 的映射,所以 SkyDNS 可以解析 Kubernetes service names。
    2. 同时,etcd 里有 Kubernetes worker 上 cloud-config 写入的hostname到 IP 地址的映射,所以 SkyDNS 可以解析 hostname。

以上设计是基于目前对相关技术的理解,还需要实际操作来验证。 @lipeng-unisound