Skip to content

Latest commit

 

History

History
51 lines (43 loc) · 3.08 KB

dns.md

File metadata and controls

51 lines (43 loc) · 3.08 KB

DNS Integration with SkyDNS

Since Kubernetes services changed to assign a single IP address to each service, it is now possible to use DNS to resolve a DNS name directly to a Kubernetes service, which would then use Kubernetes' proxy to connect to an appropriate pod running the application pointed to by the service definition.

How it Works

Version 2.0.1a of SkyDNS added a change that allows it to poll the Kubernetes API looking for changes to the service definitions. Newly added services are published in SkyDNS, and removed services are deleted from SkyDNS's internal registry.

Concrete Example

If you run the Guestbook example in the Kubernetes repository, you'll end up with a service called redismaster. If you were also running SkyDNS with the -kubernetes=true flag and -master=http://my.kubernetes.master:8080 you would immediately be able to run queries against the SkyDNS server for the redismaster service. By default, SkyDNS is authoratative for the domain skydns.local, so a query to the SkyDNS server requesting redismaster.skydns.local will return the IP Address of the redismaster service.

Configuration

SkyDNS allows you to change the domain name that it will resolve by passing in a domain on the command line using -domain=mydomain.com or by setting an environment variable SKYDNS_DOMAIN.

If you change the Docker daemon on your Kubernetes minions to use SkyDNS for domain name resolution, your pods will all be able to connect to services via DNS instead of using environment variables or other configuration methods. To change Docker to use SkyDNS resolution, add --dns=ip.of.skydns.server to the Docker startup command.

docker -d --dns=10.2.0.5 ...

SkyDNS uses the etcd instance in Kubernetes as its storage backend, which means that you can run multiple SkyDNS daemons if you wish to have more than one resolver on your cluster. You could run a SkyDNS instance on each node in your Kubernetes cluster, and set Docker to use 127.0.0.1 as the DNS resolver.

Starting SkyDNS in a Kubernetes Cluster

At a minimum, you need to provide the -kubernetes flag, and the -master=http://my.kubernetes.master.ip:8080 flag when you start SkyDNS. You may also wish to use -domain=mydomain.com to change the domain that SkyDNS resolves.

SkyDNS can act as your external resolver, too. If you set your domain to use the external IP address of the server running SkyDNS and bind SkyDNS to listen on all interfaces, SkyDNS will serve DNS for your domain. You could then use a mixture of manually created hosts in SkyDNS and Kubernetes service resolution to serve your various DNS endpoints. A simple example might be to run a Wordpress pod in Kubernetes and create a service called blog in Kubernetes. Then external DNS requests to blog.mydomain.com will automatically resolve to the service proxy and be forwarded to the pods running Wordpress.

Full documentation of the SkyDNS server is in the SkyDNS repository and abbreviated information is available by typing skydns --help.