Setting up DNS service Add-On in kubernetes
What things get DNS names?
Every Service defined in the cluster (including the DNS server
itself) is assigned a DNS name. By default, a client Pod’s DNS
search list will include the Pod’s own namespace and the cluster’s
default domain. This is best illustrated by example:
Assume a Service named “
my-service”
in the Kubernetes namespace “
dev”
.
A Pod running in namespace “
dev”
can look up this service by simply doing a DNS query for
“
my-service”
.
A Pod running in namespace can look up this service by doing a DNS
query for my-service.dev
.
Kubernetes offers a cluster addon for DNS service discovery, which
most environments enable by default. “SkyDNS” seems to be the
standard DNS server of choice, since it was designed to work on top
of etcd. The “
kube-dns”
addon is
composed of a kubernetes service which, like all services, is
allocated an arbitrary VIP within the preconfigured subnet (this is
the IP that every other service will use for DNS); and a replication
controller that will manage pods with the following containers inside
them:- A local etcd instance
- The SkyDNS server
- A process called kube2sky which binds SkyDNS to the kubernetes cluster
- A health check called healthz that monitors how DNS is being resolve
DNS IP: 10.254.0.10 | We can choose an IP from cluster service range which should not allocated to any other service. |
Domain Name: kubernetes.local | Defined Domain name to use. |
In order to set everything up, we need to retrieve the definition
files for the service and replication controller, like the following:
Note: Change the Red Marked settings according to your setup.
[root@kube-master ~]#wget
https://gist.githubusercontent.com/jamiehannaford/850900e2d721a973bc6d/raw/710eade5b8d5a382cdc6d605d6cd2d43fb0c20fb/skydns-rc.yml
[root@kube-master ~]# wget https://gist.githubusercontent.com/jamiehannaford/b80465bf7d427b949542/raw/75e7c0ff3fc740ea0f4eb54e5d10753cccf1267b/skydns-svc.yml
Now we need to setup “MASTER-IP” and
Domain Name in the sysdns-rc.yaml file.
[root@kube-master ~]# vim skydns-rc.yaml
Line no. 51
- -domain=kubernetes.local
- -kube_master_url=http://10.10.1.136:8080
Line No. 62
- -domain=kubernetes.local →
Your Domain Name
- -cmd=nslookup
kubernetes.default.svc.kubernetes.local localhost >/dev/null
Next we need to change the DNS server ip in
skydns-svc.yaml file as follows.
[root@kube-master ~]# vim skydns-svc.yaml
Line No. 31
clusterIP: 10.254.0.10
Now we can define the service and
replication controller.
[root@kube-master ~]# kubectl create -f skydns-rc.yaml
[root@kube-master ~]# kubectl create -f skydns-svc.yaml
This will create a replication controller
and service under the kube-system namespace. To check their status,
run:
[root@kube-master ~]# kubectl get pods --namespace=kube-system
[root@kube-master ~]# kubectl get services --namespace=kube-system
Once our pod is completely up-and-running,
we
will need to pass in the DNS server IP
and domain to all of the kubelet agents running on
our
minion hosts.
To do this,
we
will likely need to change the
config files
on
our
minions.
we
will need to add the following flags.
[root@minion1 ~]# vim /etc/kubernetes/kubelet
KUBELET_ARGS="--cluster_dns=10.254.0.10 –cluster_domain=kubernetes.local"
[root@minion1 ~]# systemctl restart kubelet
We have done with the dns settings. To test DNS functions we can start one small
pod based on busybox Image as follows.
[root@kube-master ~]# vim /root/busybox.yaml
|
Now we can create pod using the above yaml file.
[root@kube-master ~]# kubectl create -f busybox.yaml
[root@kube-master ~]# kubectl exec busybox -- nslookup kubernetesWe
can substitute kubernetes any service name that is currently running, and it will
resolve to the IP of a pod that the service ordinarily directs to.
That’s all about the DNS Add-on in Kubernetes.
Comments
Post a Comment