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  ```