<p>I'm trying to figure out how to get this setup to work:</p>

<ul>
<li>I am using Kube 1.7 (no RBAC) spun up from kops in AWS</li>
<li>I have a single nginx ingress controller for my entire cluster that is using a <code>LoadBalancer</code> service in the <code>kube-system</code>, namespace installed via Helm</li>
<li>I have <code>cert-manager</code> setup in <code>kube-system</code>, installed via Helm and
using <code>ClusterIssuers</code></li>
<li>I have <code>external-dns</code> setup in <code>kube-system</code> installed via Helm</li>
<li>I have multiple applications, one per namespace, with associated <code>Ingress</code> objects in each namespace.</li>
<li>I am annotating the Ingresses with the appropriate annotations for both <code>cert-manager</code> (<code>certmanager.k8s.io/cluster-issuer: letsencrypt-prod</code>) and <code>external-dns</code> (<code>dns.alpha.kubernetes.io/external: app.contoso.com</code>)</li>
</ul>

<p>In this scenario, <code>cert-manager</code> is reacting appropriately to the <code>Ingress</code> object (modifying it to complete the ACME challenge), but <code>external-dns</code> is not doing anything (logs are saying all hostnames are up to date). If I manually add a Route53 record for the ELB associated with the LB service, everything works as expected. Inspecting the Ingress object, I see that the status block looks like so:</p>

<pre><code>status:
  loadBalancer:
    ingress:
    - {}
</code></pre>

<p>which I suppose is why <code>external-dns</code> isn't reacting? How do I get this to work? Per the documentation</p>

<p>More troubleshooting information (pod definitions, ingress definitions, controller logs, etc.) can be found here: <a href="https://gist.github.com/DWSR/f6d596850346223393bec23b289c9731" rel="nofollow noreferrer">https://gist.github.com/DWSR/f6d596850346223393bec23b289c9731</a></p>

<p>I solved this myself. The nginx ingress controller has a <code>--publish-service</code> command line argument which will cause it to update the status fields on the ingress objects which, in turn, will cause <code>external-dns</code> to create the appropriate DNS records. When installing via Helm, simply set <code>.Values.controller.publishService.enabled</code> to <code>true</code> and this will take effect.</p>

<p>Sources: </p>

<ul>
<li><a href="https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/cli-arguments.md" rel="nofollow noreferrer">https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/cli-arguments.md</a></li>
<li><a href="https://github.com/kubernetes/charts/tree/master/stable/nginx-ingress#configuration" rel="nofollow noreferrer">https://github.com/kubernetes/charts/tree/master/stable/nginx-ingress#configuration</a></li>
</ul>
