mirror of https://github.com/k3s-io/k3s
Merge pull request #1845 from bketelsen/master
Documentation for using SkyDNS with Kubernetespull/6/head
commit
14f5631600
|
@ -0,0 +1,51 @@
|
|||
# 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](https://github.com/skynetservices/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](https://github.com/skydnsservices/skydns)
|
||||
and abbreviated information is available by typing `skydns --help`.
|
Loading…
Reference in New Issue