sigs.k8s.io/external-dns@v0.14.1/docs/tutorials/rdns.md (about) 1 # Setting up ExternalDNS for RancherDNS(RDNS) with kubernetes 2 This tutorial describes how to setup ExternalDNS for usage within a kubernetes cluster that makes use of [RDNS](https://github.com/rancher/rdns-server) and [nginx ingress controller](https://github.com/kubernetes/ingress-nginx). 3 You need to: 4 * install RDNS with [etcd](https://github.com/etcd-io/etcd) enabled 5 * install external-dns with rdns as a provider 6 7 ## Installing RDNS with etcdv3 backend 8 9 ### Clone RDNS 10 ``` 11 git clone https://github.com/rancher/rdns-server.git 12 ``` 13 14 ### Installing ETCD 15 ``` 16 cd rdns-server 17 docker-compose -f deploy/etcdv3/etcd-compose.yaml up -d 18 ``` 19 20 > ETCD was successfully deployed on `http://172.31.35.77:2379` 21 22 ### Installing RDNS 23 ``` 24 export ETCD_ENDPOINTS="http://172.31.35.77:2379" 25 export DOMAIN="lb.rancher.cloud" 26 ./scripts/start etcdv3 27 ``` 28 29 > RDNS was successfully deployed on `172.31.35.77` 30 31 ## Installing ExternalDNS 32 ### Install external ExternalDNS 33 ETCD_URLS is configured to etcd client service address. 34 RDNS_ROOT_DOMAIN is configured to the same with RDNS DOMAIN environment. e.g. lb.rancher.cloud. 35 36 #### Manifest (for clusters without RBAC enabled) 37 ```yaml 38 apiVersion: apps/v1 39 kind: Deployment 40 metadata: 41 name: external-dns 42 namespace: kube-system 43 spec: 44 strategy: 45 type: Recreate 46 selector: 47 matchLabels: 48 app: external-dns 49 template: 50 metadata: 51 labels: 52 app: external-dns 53 spec: 54 serviceAccountName: external-dns 55 containers: 56 - name: external-dns 57 image: registry.k8s.io/external-dns/external-dns:v0.14.0 58 args: 59 - --source=ingress 60 - --provider=rdns 61 - --log-level=debug # debug only 62 env: 63 - name: ETCD_URLS 64 value: http://172.31.35.77:2379 65 - name: RDNS_ROOT_DOMAIN 66 value: lb.rancher.cloud 67 ``` 68 69 #### Manifest (for clusters with RBAC enabled) 70 ```yaml 71 72 --- 73 apiVersion: rbac.authorization.k8s.io/v1 74 kind: ClusterRole 75 metadata: 76 name: external-dns 77 rules: 78 - apiGroups: [""] 79 resources: ["services","endpoints","pods"] 80 verbs: ["get","watch","list"] 81 - apiGroups: ["extensions","networking.k8s.io"] 82 resources: ["ingresses"] 83 verbs: ["get","watch","list"] 84 - apiGroups: [""] 85 resources: ["nodes"] 86 verbs: ["list"] 87 --- 88 apiVersion: rbac.authorization.k8s.io/v1 89 kind: ClusterRoleBinding 90 metadata: 91 name: external-dns-viewer 92 roleRef: 93 apiGroup: rbac.authorization.k8s.io 94 kind: ClusterRole 95 name: external-dns 96 subjects: 97 - kind: ServiceAccount 98 name: external-dns 99 namespace: kube-system 100 --- 101 apiVersion: v1 102 kind: ServiceAccount 103 metadata: 104 name: external-dns 105 namespace: kube-system 106 --- 107 apiVersion: apps/v1 108 kind: Deployment 109 metadata: 110 name: external-dns 111 namespace: kube-system 112 spec: 113 strategy: 114 type: Recreate 115 selector: 116 matchLabels: 117 app: external-dns 118 template: 119 metadata: 120 labels: 121 app: external-dns 122 spec: 123 serviceAccountName: external-dns 124 containers: 125 - name: external-dns 126 image: registry.k8s.io/external-dns/external-dns:v0.14.0 127 args: 128 - --source=ingress 129 - --provider=rdns 130 - --log-level=debug # debug only 131 env: 132 - name: ETCD_URLS 133 value: http://172.31.35.77:2379 134 - name: RDNS_ROOT_DOMAIN 135 value: lb.rancher.cloud 136 ``` 137 138 ## Testing ingress example 139 ``` 140 $ cat ingress.yaml 141 apiVersion: networking.k8s.io/v1 142 kind: Ingress 143 metadata: 144 name: nginx 145 spec: 146 ingressClassName: nginx 147 rules: 148 - host: nginx.lb.rancher.cloud 149 http: 150 paths: 151 - backend: 152 serviceName: nginx 153 servicePort: 80 154 155 $ kubectl apply -f ingress.yaml 156 ingress.extensions "nginx" created 157 ``` 158 159 Wait a moment until DNS has the ingress IP. The RDNS IP in this example is "172.31.35.77". 160 ``` 161 $ kubectl get ingress 162 NAME HOSTS ADDRESS PORTS AGE 163 nginx nginx.lb.rancher.cloud 172.31.42.211 80 2m 164 165 $ kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools 166 If you don't see a command prompt, try pressing enter. 167 dnstools# dig @172.31.35.77 nginx.lb.rancher.cloud +short 168 172.31.42.211 169 dnstools# 170 ```