Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Federation] Setting up CoreDNS as DNS provider for Cluster Federation #2810

Merged
merged 1 commit into from
Apr 17, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions _data/tutorials.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,4 @@ toc:
- title: Federated Cluster Administration
section:
- docs/tutorials/federation/set-up-cluster-federation-kubefed.md
- docs/tutorials/federation/set-up-coredns-provider-federation.md
10 changes: 10 additions & 0 deletions docs/tutorials/federation/Values.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
isClusterService: false
serviceType: "LoadBalancer"
middleware:
kubernetes:
enabled: false
etcd:
enabled: true
zones:
- "example.com."
endpoint: "http://etcd-cluster.my-namespace:2379"
126 changes: 126 additions & 0 deletions docs/tutorials/federation/set-up-coredns-provider-federation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
---
title: Setting up CoreDNS as DNS provider for Cluster Federation
---

{% capture overview %}

This page shows how to configure and deploy CoreDNS to be used as the
DNS provider for Cluster Federation.

{% endcapture %}


{% capture objectives %}

* Configure and deploy CoreDNS server
* Bringup federation with CoreDNS as dns provider
* Setup CoreDNS server in nameserver lookup chain

{% endcapture %}


{% capture prerequisites %}

You need to have a running Kubernetes cluster (which is
referenced as host cluster). Please see one of the
[getting started](/docs/getting-started-guides/) guides for
installation instructions for your platform.

{% endcapture %}


{% capture lessoncontent %}

## Deploying CoreDNS and etcd charts

CoreDNS can be deployed in various configurations. Explained below is a
reference and can be tweaked to suit the needs of the platform and the
cluster federation.

To deploy CoreDNS, we shall make use of helm charts. CoreDNS will be
deployed with [etcd](https://coreos.com/etcd) as the backend and should
be pre-installed. etcd can also be deployed using helm charts. Shown
below are the instructions to deploy etcd.

helm install --namespace my-namespace --name etcd-operator stable/etcd-operator
helm upgrade --namespace my-namespace --set cluster.enabled=true etcd-operator stable/etcd-operator

*Note: etcd default deployment configurations can be overridden, suiting the
host cluster.*

After deployment succeeds, etcd can be accessed with the
[http://etcd-cluster.my-namespace:2379](http://etcd-cluster.my-namespace:2379) endpoint within the host cluster.

The CoreDNS default configuration should be customized to suit the federation.
Shown below is the Values.yaml, which overrides the default
configuration parameters on the CoreDNS chart.

{% include code.html language="yaml" file="Values.yaml" ghlink="/docs/tutorials/federation/Values.yaml" %}

The above configuration file needs some explanation:

- `isClusterService` specifies whether CoreDNS should be deployed as a
cluster-service, which is the default. You need to set it to false, so
that CoreDNS is deployed as a Kubernetes application service.
- `serviceType` specifies the type of Kubernetes service to be created
for CoreDNS. You need to choose either "LoadBalancer" or "NodePort" to
make the CoreDNS service accessible outside the Kubernetes cluster.
- Disable `middleware.kubernetes`, which is enabled by default by
setting `middleware.kubernetes.enabled` to false.
- Enable `middleware.etcd` by setting `middleware.etcd.enabled` to
true.
- Configure the DNS zone (federation domain) for which CoreDNS is
authoritative by setting `middleware.etcd.zones` as shown above.
- Configure the etcd endpoint which was deployed earlier by setting
`middleware.etcd.endpoint`

Now deploy CoreDNS by running

helm install --namespace my-namespace --name coredns -f Values.yaml stable/coredns

Verify that both etcd and CoreDNS pods are running as expected.


## Deploying Federation with CoreDNS as DNS provider

The Federation control plane can be deployed using `kubefed init`. CoreDNS
can be chosen as the DNS provider by specifying two additional parameters.

--dns-provider=coredns
--dns-provider-config=coredns-provider.conf

coredns-provider.conf has below format:

[Global]
etcd-endpoints = http://etcd-cluster.my-namespace:2379
zones = example.com.

- `etcd-endpoints` is the endpoint to access etcd.
- `zones` is the federation domain for which CoreDNS is authoritative and is same as --dns-zone-name flag of `kubefed init`.

*Note: middleware.etcd.zones in CoreDNS configuration and --dns-zone-name
flag to kubefed init should match.*


## Setup CoreDNS server in nameserver resolv.conf chain

Once the federation control plane is deployed and federated clusters
are joined to the federation, you need to add the CoreDNS server to the
pod's nameserver resolv.conf chain in all the federated clusters as this
self hosted CoreDNS server is not discoverable publicly. This can be
achieved by adding the below line to `dnsmasq` container's arg in
`kube-dns` deployment.

--server=/example.com./<CoreDNS endpoint>

Replace `example.com` above with federation domain.

*Note: Adding CoreDNS server to the pod's nameserver resolv.conf chain will be
automated in subsequent releases.*


Now the federated cluster is ready for cross-cluster service discovery!

{% endcapture %}

{% include templates/tutorial.md %}