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

External-DNS delete and recreate constantly all DNS records #992

Closed
jerome-lecorvaisier opened this issue Apr 22, 2019 · 51 comments
Closed
Assignees

Comments

@jerome-lecorvaisier
Copy link
Contributor

Context

  • EKS 1.12
  • External-DNS v0.5.13
  • Cloudflare provider.

External-DNS constantly delete and re-create DNS records, every 1 minute, according to the interval value.

I expected External-DNS would create, update and or delete DNS records only if there is a change on the Ingress.

This is blocking because it causes a downtime between deletion and creation that can take up to 30 seconds, every minute.

Note: Same behavior with External-dns v0.5.12 and v0.5.9.

External-DNS logs

$ k -n kube-system logs -f external-dns-f7cf56688-zbwsk
time="2019-04-22T14:37:30Z" level=info msg="config: {Master: KubeConfig: RequestTimeout:30s IstioIngressGatewayServices:[istio-system/istio-ingressgateway] Sources:[ingress] Namespace: AnnotationFilter: FQDNTemplate: CombineFQDNAndAnnotation:false IgnoreHostnameAnnotation:false Compatibility: PublishInternal:false PublishHostIP:false ConnectorSourceServer:localhost:8080 Provider:cloudflare GoogleProject: DomainFilter:[my-domain.com] ZoneIDFilter:[] AlibabaCloudConfigFile:/etc/kubernetes/alibaba-cloud.json AlibabaCloudZoneType: AWSZoneType: AWSZoneTagFilter:[] AWSAssumeRole: AWSBatchChangeSize:1000 AWSBatchChangeInterval:1s AWSEvaluateTargetHealth:true AWSAPIRetries:3 AzureConfigFile:/etc/kubernetes/azure.json AzureResourceGroup: CloudflareProxied:true CloudflareZonesPerPage:50 RcodezeroTXTEncrypt:false InfobloxGridHost: InfobloxWapiPort:443 InfobloxWapiUsername:admin InfobloxWapiPassword: InfobloxWapiVersion:2.3.1 InfobloxSSLVerify:true InfobloxView: DynCustomerName: DynUsername: DynPassword: DynMinTTLSeconds:0 OCIConfigFile:/etc/kubernetes/oci.yaml InMemoryZones:[] PDNSServer:http://localhost:8081 PDNSAPIKey: PDNSTLSEnabled:false TLSCA: TLSClientCert: TLSClientCertKey: Policy:sync Registry:txt TXTOwnerID:eks-cluster-name TXTPrefix: Interval:1m0s Once:false DryRun:false LogFormat:text MetricsAddress::7979 LogLevel:info TXTCacheInterval:0s ExoscaleEndpoint:https://api.exoscale.ch/dns ExoscaleAPIKey: ExoscaleAPISecret: CRDSourceAPIVersion:externaldns.k8s.io/v1alpha1 CRDSourceKind:DNSEndpoint ServiceTypeFilter:[] RFC2136Host: RFC2136Port:0 RFC2136Zone: RFC2136Insecure:false RFC2136TSIGKeyName: RFC2136TSIGSecret: RFC2136TSIGSecretAlg: RFC2136TAXFR:false}"
ERROR: logging before flag.Parse: W0422 14:37:30.325291       1 client_config.go:552] Neither --kubeconfig nor --master was specified.  Using the inClusterConfig.  This might not work.
time="2019-04-22T14:37:30Z" level=info msg="Created Kubernetes client https://172.20.0.1:443"
time="2019-04-22T14:37:32Z" level=info msg="Changing record." action=UPDATE record=app-02.my-domain.com targets=1 ttl=120 type=CNAME zone=5319961a2d8a247146e8e12f75c5329b
time="2019-04-22T14:37:35Z" level=info msg="Changing record." action=UPDATE record=app-01.my-domain.com targets=1 ttl=120 type=CNAME zone=5319961a2d8a247146e8e12f75c5329b
time="2019-04-22T14:37:36Z" level=info msg="Changing record." action=UPDATE record=app-02.my-domain.com targets=1 ttl=1 type=TXT zone=5319961a2d8a247146e8e12f75c5329b
time="2019-04-22T14:37:37Z" level=info msg="Changing record." action=UPDATE record=app-01.my-domain.com targets=1 ttl=1 type=TXT zone=5319961a2d8a247146e8e12f75c5329b
ERROR: logging before flag.Parse: E0422 14:38:00.342460       1 round_trippers.go:291] CancelRequest not implemented
ERROR: logging before flag.Parse: E0422 14:38:00.342580       1 streamwatcher.go:109] Unable to decode an event from the watch stream: net/http: request canceled (Client.Timeout exceeded while reading body)
ERROR: logging before flag.Parse: E0422 14:38:30.342833       1 round_trippers.go:291] CancelRequest not implemented
ERROR: logging before flag.Parse: E0422 14:38:30.342945       1 streamwatcher.go:109] Unable to decode an event from the watch stream: net/http: request canceled (Client.Timeout exceeded while reading body)
time="2019-04-22T14:38:32Z" level=info msg="Changing record." action=UPDATE record=app-02.my-domain.com targets=1 ttl=120 type=CNAME zone=5319961a2d8a247146e8e12f75c5329b
time="2019-04-22T14:38:33Z" level=info msg="Changing record." action=UPDATE record=app-01.my-domain.com targets=1 ttl=120 type=CNAME zone=5319961a2d8a247146e8e12f75c5329b
time="2019-04-22T14:38:34Z" level=info msg="Changing record." action=UPDATE record=app-02.my-domain.com targets=1 ttl=1 type=TXT zone=5319961a2d8a247146e8e12f75c5329b
time="2019-04-22T14:38:34Z" level=info msg="Changing record." action=UPDATE record=app-01.my-domain.com targets=1 ttl=1 type=TXT zone=5319961a2d8a247146e8e12f75c5329b
ERROR: logging before flag.Parse: E0422 14:39:00.343173       1 round_trippers.go:291] CancelRequest not implemented
ERROR: logging before flag.Parse: E0422 14:39:00.343295       1 streamwatcher.go:109] Unable to decode an event from the watch stream: net/http: request canceled (Client.Timeout exceeded while reading body)
ERROR: logging before flag.Parse: E0422 14:39:30.343538       1 round_trippers.go:291] CancelRequest not implemented
ERROR: logging before flag.Parse: E0422 14:39:30.343661       1 streamwatcher.go:109] Unable to decode an event from the watch stream: net/http: request canceled (Client.Timeout exceeded while reading body)
time="2019-04-22T14:39:32Z" level=info msg="Changing record." action=UPDATE record=app-02.my-domain.com targets=1 ttl=120 type=CNAME zone=5319961a2d8a247146e8e12f75c5329b
time="2019-04-22T14:39:33Z" level=info msg="Changing record." action=UPDATE record=app-01.my-domain.com targets=1 ttl=120 type=CNAME zone=5319961a2d8a247146e8e12f75c5329b
time="2019-04-22T14:39:34Z" level=info msg="Changing record." action=UPDATE record=app-02.my-domain.com targets=1 ttl=1 type=TXT zone=5319961a2d8a247146e8e12f75c5329b
time="2019-04-22T14:39:35Z" level=info msg="Changing record." action=UPDATE record=app-01.my-domain.com targets=1 ttl=1 type=TXT zone=5319961a2d8a247146e8e12f75c5329b
ERROR: logging before flag.Parse: E0422 14:40:00.343901       1 round_trippers.go:291] CancelRequest not implemented
ERROR: logging before flag.Parse: E0422 14:40:00.344012       1 streamwatcher.go:109] Unable to decode an event from the watch stream: net/http: request canceled (Client.Timeout exceeded while reading body)
ERROR: logging before flag.Parse: E0422 14:40:30.344251       1 round_trippers.go:291] CancelRequest not implemented
ERROR: logging before flag.Parse: E0422 14:40:30.344371       1 streamwatcher.go:109] Unable to decode an event from the watch stream: net/http: request canceled (Client.Timeout exceeded while reading body)
time="2019-04-22T14:40:32Z" level=info msg="Changing record." action=UPDATE record=app-02.my-domain.com targets=1 ttl=120 type=CNAME zone=5319961a2d8a247146e8e12f75c5329b
time="2019-04-22T14:40:35Z" level=info msg="Changing record." action=UPDATE record=app-01.my-domain.com targets=1 ttl=120 type=CNAME zone=5319961a2d8a247146e8e12f75c5329b
time="2019-04-22T14:40:36Z" level=info msg="Changing record." action=UPDATE record=app-02.my-domain.com targets=1 ttl=1 type=TXT zone=5319961a2d8a247146e8e12f75c5329b
time="2019-04-22T14:40:37Z" level=info msg="Changing record." action=UPDATE record=app-01.my-domain.com targets=1 ttl=1 type=TXT zone=5319961a2d8a247146e8e12f75c5329b

External-DNS Deployment

$ k -n kube-system get deployment/external-dns -o yaml --export
...
      namespace: kube-system
    spec:
      containers:
      - args:
        - --source=ingress
        - --domain-filter=<my-domain>
        - --provider=cloudflare
        - --cloudflare-proxied
        - --txt-owner-id=<eks-cluster-name>
        - --registry=txt
        - --interval=1m
        env:
        - name: CF_API_KEY
          value: <MY-API-KEY>
        - name: CF_API_EMAIL
          value: <MY-EMAIL>
        image: registry.opensource.zalan.do/teapot/external-dns:v0.5.13
        imagePullPolicy: Always
        name: external-dns
        resources:
          limits:
            cpu: 500m
            memory: 256Mi
          requests:
            cpu: 250m
            memory: 50Mi
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop:
            - ALL
          privileged: false
          procMount: Default
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          runAsUser: 999
...

Cloudflare Logs

image

Similar issue

#883

@jerome-lecorvaisier
Copy link
Contributor Author

@jhohertz I've seen your PR merged to fix this issue and some people reported the issue have been fixed. Although, this still happening with the Cloudflare provider.

Do you have any idea ?

Thanks!

@eduardolundgren
Copy link

This issue is happening to me as well on both v0.5.12 and v0.5.13 with Cloudflare.

@jerome-lecorvaisier
Copy link
Contributor Author

jerome-lecorvaisier commented Apr 30, 2019

@eduardolundgren I think v0.5.3 does not have this bug and it was introduced in v0.5.4. If you were able to confirm this that would be great.

@eduardolundgren
Copy link

Just realized that the issue on my case was due to two clusters with the same owner id value, one external dns instance was removing the entries being added by the other. I can confirm it's working on both v0.5.3 and v0.5.13 versions. Thank you.

@jerome-lecorvaisier
Copy link
Contributor Author

@eduardolundgren do you use proxied entries with v0.5.13 ? Thanks!

@shasderias
Copy link
Contributor

This appears to be caused by #970 which added support for multiple target addresses for the CloudFlare provider.

As nta mentions in #970, CloudFlare does not support "sets" of targets in basic DNS, but rather a single record for each target.

For example, for a 2 node cluster, the CloudFlare provider's Records() returns:

([]*endpoint.Endpoint) (len=39 cap=64) {
[snip]
 (*endpoint.Endpoint)(0xc00013f860)(subdomaina.shasderias.com 1 IN A [IP 1] [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00013f8c0)(subdomaina.shasderias.com 1 IN A [IP 2] [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00013f920)(subdomainb.shasderias.com 1 IN A [IP 1] [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00013f980)(subdomainb.shasderias.com 1 IN A [IP 2] [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
[snip]
}

However, the desired endpoints generated by Endpoints() has a set of targets for each name.

Desired: ([]*endpoint.Endpoint) (len=8 cap=8) {
[snip]
  (*endpoint.Endpoint)(0xc000081440)(subdomaina.shasderias.com 0 IN A [IP 1];[IP 2] []),
  (*endpoint.Endpoint)(0xc000080fc0)(subdomainb.shasderias.com 0 IN A [IP 1];[IP 2] []),
[snip]
}

This confuses the planner, resulting in the calculation of a plan that updates records even when no changes are necessary:

Changes: (*plan.Changes)(0xc000081980)({
 Create: ([]*endpoint.Endpoint) <nil>,
 UpdateOld: ([]*endpoint.Endpoint) (len=8 cap=8) {
[snip]
  (*endpoint.Endpoint)(0xc00013f8c0)(subdomaina.shasderias.com 1 IN A [IP 2] [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}])
  (*endpoint.Endpoint)(0xc00013f980)(subdomainb.shasderias.com 1 IN A [IP 2] [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
[snip]
 },
 UpdateNew: ([]*endpoint.Endpoint) (len=8 cap=8) {
[snip]
  (*endpoint.Endpoint)(0xc000081440)(subdomaina.shasderias.com 0 IN A [IP 1];[IP 2] [])
  (*endpoint.Endpoint)(0xc000080fc0)(subdomainb.shasderias.com 0 IN A [IP 1];[IP 2] []),
[snip]
 },
 Delete: ([]*endpoint.Endpoint) (len=19 cap=32) {
[snip]
 }
})

The fix appears to be to group records by name and type. See pull request #1034.

Post pull request, given the following Records() and the desired Endpoints() above:

([]*endpoint.Endpoint) (len=30 cap=32) {
 (*endpoint.Endpoint)(0xc00038f380)(subdomaina.shasderias.com 1 IN A [IP 1];[IP 2] [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00038efc0)(subdomainb.shasderias.com 1 IN A [IP 1];[IP 2] [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
}

The following plan is returned:

 Changes: (*plan.Changes)(0xc0000803c0)({
  Create: ([]*endpoint.Endpoint) <nil>,
  UpdateOld: ([]*endpoint.Endpoint) <nil>,
  UpdateNew: ([]*endpoint.Endpoint) <nil>,
  Delete: ([]*endpoint.Endpoint) (len=19 cap=32) {
[snip]
  }
 })

@jerome-lecorvaisier
Copy link
Contributor Author

jerome-lecorvaisier commented May 19, 2019

@shasderias I built and tested your branch. I thought it would fix the update loop for Cloudflare. It appears the issue is still there.

From my own experience, the issue have been introduced in v0.5.4

Note: I only tested proxied entries.

Here's how I tested your branch:

git clone [email protected]:shasderias/external-dns.git
(master) git checkout patch/cloudflare-group-records
(patch/cloudflare-group-records) make
(patch/cloudflare-group-records) make build.docker
(patch/cloudflare-group-records) docker tag registry.opensource.zalan.do/teapot/external-dns:v0.5.13-52-g095c0dd6 gcr.io/my-registry/external-dns:v0.5.13-52-g095c0dd6
(patch/cloudflare-group-records) docker push gcr.io/my-registry/external-dns:v0.5.13-52-g095c0dd6
kubectl describe pod external-dns-fd8bfb8d5-x269d
...
Containers:
  external-dns:
    Image:         gcr.io/my-registry/external-dns:v0.5.13-52-g095c0dd6
...

Here's the logs:

$ kail -n kube-system -d external-dns
kube-system/external-dns-79d65b7cdb-cc9g9[external-dns]: time="2019-05-19T16:14:37Z" level=info msg="Received SIGTERM. Terminating..."
kube-system/external-dns-79d65b7cdb-cc9g9[external-dns]: time="2019-05-19T16:14:37Z" level=info msg="Terminating main controller loop"


kube-system/external-dns-fd8bfb8d5-x269d[external-dns]: time="2019-05-19T16:18:30Z" level=info msg="config: {Master: KubeConfig: RequestTimeout:30s IstioIngressGatewayServices:[istio-system/istio-ingressgateway] Sources:[ingress] Namespace: AnnotationFilter: FQDNTemplate: CombineFQDNAndAnnotation:false IgnoreHostnameAnnotation:false Compatibility: PublishInternal:false PublishHostIP:false ConnectorSourceServer:localhost:8080 Provider:cloudflare GoogleProject: DomainFilter:[mydomain.com] ZoneIDFilter:[] AlibabaCloudConfigFile:/etc/kubernetes/alibaba-cloud.json AlibabaCloudZoneType: AWSZoneType: AWSZoneTagFilter:[] AWSAssumeRole: AWSBatchChangeSize:1000 AWSBatchChangeInterval:1s AWSEvaluateTargetHealth:true AWSAPIRetries:3 AzureConfigFile:/etc/kubernetes/azure.json AzureResourceGroup: CloudflareProxied:true CloudflareZonesPerPage:50 RcodezeroTXTEncrypt:false InfobloxGridHost: InfobloxWapiPort:443 InfobloxWapiUsername:admin InfobloxWapiPassword: InfobloxWapiVersion:2.3.1 InfobloxSSLVerifykube-system/external-dns-fd8bfb8d5-x269d[external-dns]: time="2019-05-19T16:18:32Z" level=info msg="Changing record." action=UPDATE record=test-2.mydomain.com targets=1 ttl=120 type=CNAME zone=1a2d8a247146e8e12f75c5329b
kube-system/external-dns-fd8bfb8d5-x269d[external-dns]: time="2019-05-19T16:18:33Z" level=info msg="Changing record." action=UPDATE record=test.mydomain.com targets=1 ttl=120 type=CNAME zone=1a2d8a247146e8e12f75c5329b
kube-system/external-dns-fd8bfb8d5-x269d[external-dns]: time="2019-05-19T16:18:34Z" level=info msg="Changing record." action=UPDATE record=test-2.mydomain.com targets=1 ttl=1 type=TXT zone=1a2d8a247146e8e12f75c5329b
kube-system/external-dns-fd8bfb8d5-x269d[external-dns]: time="2019-05-19T16:18:35Z" level=info msg="Changing record." action=UPDATE record=test.mydomain.com targets=1 ttl=1 type=TXT zone=1a2d8a247146e8e12f75c5329b



kube-system/external-dns-fd8bfb8d5-x269d[external-dns]: time="2019-05-19T16:19:32Z" level=info msg="Changing record." action=UPDATE record=test.mydomain.com targets=1 ttl=120 type=CNAME zone=1a2d8a247146e8e12f75c5329b
kube-system/external-dns-fd8bfb8d5-x269d[external-dns]: time="2019-05-19T16:19:32Z" level=info msg="Changing record." action=UPDATE record=test-2.mydomain.com targets=1 ttl=120 type=CNAME zone=1a2d8a247146e8e12f75c5329b
kube-system/external-dns-fd8bfb8d5-x269d[external-dns]: time="2019-05-19T16:19:33Z" level=info msg="Changing record." action=UPDATE record=test.mydomain.com targets=1 ttl=1 type=TXT zone=1a2d8a247146e8e12f75c5329b
kube-system/external-dns-fd8bfb8d5-x269d[external-dns]: time="2019-05-19T16:19:34Z" level=info msg="Changing record." action=UPDATE record=test-2.mydomain.com targets=1 ttl=1 type=TXT zone=1a2d8a247146e8e12f75c5329b



kube-system/external-dns-fd8bfb8d5-x269d[external-dns]: time="2019-05-19T16:20:32Z" level=info msg="Changing record." action=UPDATE record=test.mydomain.com targets=1 ttl=120 type=CNAME zone=1a2d8a247146e8e12f75c5329b
kube-system/external-dns-fd8bfb8d5-x269d[external-dns]: time="2019-05-19T16:20:32Z" level=info msg="Changing record." action=UPDATE record=test-2.mydomain.com targets=1 ttl=120 type=CNAME zone=1a2d8a247146e8e12f75c5329b
kube-system/external-dns-fd8bfb8d5-x269d[external-dns]: time="2019-05-19T16:20:33Z" level=info msg="Changing record." action=UPDATE record=test.mydomain.com targets=1 ttl=1 type=TXT zone=1a2d8a247146e8e12f75c5329b
kube-system/external-dns-fd8bfb8d5-x269d[external-dns]: time="2019-05-19T16:20:33Z" level=info msg="Changing record." action=UPDATE record=test-2.mydomain.com targets=1 ttl=1 type=TXT zone=1a2d8a247146e8e12f75c5329b

Any thoughts?

@shasderias
Copy link
Contributor

shasderias commented May 19, 2019

There might be more than one issue here then.

Can you set up a go dev environment? If so, edit controller/controller.go as per this gist (adds 3 pretty print statements and imports the pretty print package).

Then set your environment variables (CF_API_EMAIL, CF_API_PASSWORD, etc.) and run:

go build && external-dns [REPLACE WITH YOUR SETTINGS] --provider=cloudflare --once --dry-run --log-level=debug

Remove any sensitive information and paste the output.

Not sure I can help as I'm no expert, but should help narrow down the issue.

@jerome-lecorvaisier
Copy link
Contributor Author

@shasderias here the logs

kubectl logs external-dns-fd699bbd5-ddqlv
time="2019-05-20T21:12:06Z" level=info msg="config: {Master: KubeConfig: RequestTimeout:30s IstioIngressGatewayServices:[istio-system/istio-ingressgateway] Sources:[ingress] Namespace: AnnotationFilter: FQDNTemplate: CombineFQDNAndAnnotation:false IgnoreHostnameAnnotation:false Compatibility: PublishInternal:false PublishHostIP:false ConnectorSourceServer:localhost:8080 Provider:cloudflare GoogleProject: DomainFilter:[my-domain.com] ZoneIDFilter:[] AlibabaCloudConfigFile:/etc/kubernetes/alibaba-cloud.json AlibabaCloudZoneType: AWSZoneType: AWSZoneTagFilter:[] AWSAssumeRole: AWSBatchChangeSize:1000 AWSBatchChangeInterval:1s AWSEvaluateTargetHealth:true AWSAPIRetries:3 AzureConfigFile:/etc/kubernetes/azure.json AzureResourceGroup: CloudflareProxied:true CloudflareZonesPerPage:50 RcodezeroTXTEncrypt:false InfobloxGridHost: InfobloxWapiPort:443 InfobloxWapiUsername:admin InfobloxWapiPassword: InfobloxWapiVersion:2.3.1 InfobloxSSLVerify:true InfobloxView: DynCustomerName: DynUsername: DynPassword: DynMinTTLSeconds:0 OCIConfigFile:/etc/kubernetes/oci.yaml InMemoryZones:[] PDNSServer:http://localhost:8081 PDNSAPIKey: PDNSTLSEnabled:false TLSCA: TLSClientCert: TLSClientCertKey: Policy:sync Registry:txt TXTOwnerID:hospitality-euc1-dev TXTPrefix: Interval:1m0s Once:false DryRun:true LogFormat:text MetricsAddress::7979 LogLevel:info TXTCacheInterval:0s ExoscaleEndpoint:https://api.exoscale.ch/dns ExoscaleAPIKey: ExoscaleAPISecret: CRDSourceAPIVersion:externaldns.k8s.io/v1alpha1 CRDSourceKind:DNSEndpoint ServiceTypeFilter:[] CFAPIEndpoint: CFUsername: CFPassword: RFC2136Host: RFC2136Port:0 RFC2136Zone: RFC2136Insecure:false RFC2136TSIGKeyName: RFC2136TSIGSecret: RFC2136TSIGSecretAlg: RFC2136TAXFR:false NS1Endpoint: NS1IgnoreSSL:false TransIPAccountName: TransIPPrivateKeyFile:}"
time="2019-05-20T21:12:06Z" level=info msg="running in dry-run mode. No changes to DNS records will be made."
time="2019-05-20T21:12:06Z" level=info msg="Created Kubernetes client https://172.20.0.1:443"
([]*endpoint.Endpoint) (len=41 cap=64) {
 (*endpoint.Endpoint)(0xc00056c180)(dev-qa1-report.my-domain.com 1 IN CNAME dev-qa1-report-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056c1e0)(dev-frontend-02.my-domain.com 1 IN CNAME dev-frontend-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056c240)(dev-01-report.my-domain.com 1 IN CNAME dev-01-report-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056c2a0)(dev-02.my-domain.com 1 IN CNAME dev-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056c360)(dev-ios-02-cron.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056c420)(dev-qa-02-jump.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056c4e0)(dev-frontend-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056c5a0)(dev-ios-01-cron01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056c660)(dev-ios-01-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056c720)(dev-ios-02-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056c7e0)(dev-backend-02.my-domain.com 1 IN CNAME dev-backend-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056c8a0)(dev-backend-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056c960)(dev-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056ca20)(dev-qa-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056cae0)(dev-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056cba0)(dev-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056cc60)(dev-ios-01.my-domain.com 1 IN CNAME dev-ios-01-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056cd20)(dev-ios-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056cde0)(ios-test-01.my-domain.com 1 IN A 107.178.251.223 [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056ce40)(dev-backend-02-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056cea0)(dev-frontend-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056cf00)(dev-01.my-domain.com 1 IN CNAME dev-01-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056cf60)(dev-ios-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056d140)(dev-qa2.my-domain.com 1 IN CNAME dev-qa2-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056d440)(dev-qa1.my-domain.com 1 IN CNAME dev-qa1-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056d4a0)(dev-experimental-cron01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056d500)(dev-experimental-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056d860)(dev-01-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056d8c0)(dev-01-report-docker.my-domain.com 1 IN CNAME dev-01-report-docker-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056d920)(dev-ios-02.my-domain.com 1 IN CNAME dev-ios-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056d980)(reporting-dev-qa1-eks.my-domain.com 1 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056d9e0)(dev-qa2-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056da40)(dev-experimental-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056daa0)(dev-experimental-w01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056db00)(dev-ios-01-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056db60)(dev-qa1-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056dbc0)(test-sre-01.my-domain.com 1 IN CNAME test-sre-01.alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056dc20)(dev-backend-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056dc80)(dev-experimental.my-domain.com 1 IN CNAME dev-experimental-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056dce0)(dev-ios-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056dd40)(reporting-dev-01-eks.my-domain.com 1 IN CNAME eks-alb-01.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}])
}
([]*endpoint.Endpoint) (len=2 cap=2) {
 (*endpoint.Endpoint)(0xc00056de60)(reporting-dev-01-eks.my-domain.com 120 IN CNAME eks-alb-01.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056dec0)(reporting-dev-qa1-eks.my-domain.com 120 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}])
}
(*plan.Plan)(0xc000316050)({
 Current: ([]*endpoint.Endpoint) (len=41 cap=64) {
  (*endpoint.Endpoint)(0xc00056c180)(dev-qa1-report.my-domain.com 1 IN CNAME dev-qa1-report-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056c1e0)(dev-frontend-02.my-domain.com 1 IN CNAME dev-frontend-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056c240)(dev-01-report.my-domain.com 1 IN CNAME dev-01-report-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056c2a0)(dev-02.my-domain.com 1 IN CNAME dev-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056c360)(dev-ios-02-cron.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056c420)(dev-qa-02-jump.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056c4e0)(dev-frontend-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056c5a0)(dev-ios-01-cron01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056c660)(dev-ios-01-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056c720)(dev-ios-02-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056c7e0)(dev-backend-02.my-domain.com 1 IN CNAME dev-backend-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056c8a0)(dev-backend-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056c960)(dev-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056ca20)(dev-qa-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056cae0)(dev-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056cba0)(dev-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056cc60)(dev-ios-01.my-domain.com 1 IN CNAME dev-ios-01-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056cd20)(dev-ios-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056cde0)(ios-test-01.my-domain.com 1 IN A 107.178.251.223 [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056ce40)(dev-backend-02-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056cea0)(dev-frontend-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056cf00)(dev-01.my-domain.com 1 IN CNAME dev-01-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056cf60)(dev-ios-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056d140)(dev-qa2.my-domain.com 1 IN CNAME dev-qa2-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056d440)(dev-qa1.my-domain.com 1 IN CNAME dev-qa1-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056d4a0)(dev-experimental-cron01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056d500)(dev-experimental-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056d860)(dev-01-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056d8c0)(dev-01-report-docker.my-domain.com 1 IN CNAME dev-01-report-docker-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056d920)(dev-ios-02.my-domain.com 1 IN CNAME dev-ios-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056d980)(reporting-dev-qa1-eks.my-domain.com 1 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056d9e0)(dev-qa2-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056da40)(dev-experimental-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056daa0)(dev-experimental-w01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056db00)(dev-ios-01-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056db60)(dev-qa1-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056dbc0)(test-sre-01.my-domain.com 1 IN CNAME test-sre-01.alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056dc20)(dev-backend-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056dc80)(dev-experimental.my-domain.com 1 IN CNAME dev-experimental-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056dce0)(dev-ios-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056dd40)(reporting-dev-01-eks.my-domain.com 1 IN CNAME eks-alb-01.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}])
 },
 Desired: ([]*endpoint.Endpoint) (len=2 cap=2) {
  (*endpoint.Endpoint)(0xc00056de60)(reporting-dev-01-eks.my-domain.com 120 IN CNAME eks-alb-01.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056dec0)(reporting-dev-qa1-eks.my-domain.com 120 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}])
 },
 Policies: ([]plan.Policy) <nil>,
 Changes: (*plan.Changes)(0xc00056df20)({
  Create: ([]*endpoint.Endpoint) <nil>,
  UpdateOld: ([]*endpoint.Endpoint) (len=2 cap=2) {
   (*endpoint.Endpoint)(0xc00056d980)(reporting-dev-qa1-eks.my-domain.com 1 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056dd40)(reporting-dev-01-eks.my-domain.com 1 IN CNAME eks-alb-01.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}])
  },
  UpdateNew: ([]*endpoint.Endpoint) (len=2 cap=2) {
   (*endpoint.Endpoint)(0xc00056dec0)(reporting-dev-qa1-eks.my-domain.com 120 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056de60)(reporting-dev-01-eks.my-domain.com 120 IN CNAME eks-alb-01.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}])
  },
  Delete: ([]*endpoint.Endpoint) (len=39 cap=64) {
   (*endpoint.Endpoint)(0xc00056c4e0)(dev-frontend-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056c7e0)(dev-backend-02.my-domain.com 1 IN CNAME dev-backend-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056ce40)(dev-backend-02-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056d140)(dev-qa2.my-domain.com 1 IN CNAME dev-qa2-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056d8c0)(dev-01-report-docker.my-domain.com 1 IN CNAME dev-01-report-docker-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056d9e0)(dev-qa2-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056c180)(dev-qa1-report.my-domain.com 1 IN CNAME dev-qa1-report-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056c660)(dev-ios-01-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056cae0)(dev-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056cf00)(dev-01.my-domain.com 1 IN CNAME dev-01-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056db00)(dev-ios-01-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056c720)(dev-ios-02-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056c8a0)(dev-backend-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056cf60)(dev-ios-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056da40)(dev-experimental-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056cba0)(dev-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056cd20)(dev-ios-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056cde0)(ios-test-01.my-domain.com 1 IN A 107.178.251.223 [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056dce0)(dev-ios-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056dc80)(dev-experimental.my-domain.com 1 IN CNAME dev-experimental-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056c1e0)(dev-frontend-02.my-domain.com 1 IN CNAME dev-frontend-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056c5a0)(dev-ios-01-cron01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056c960)(dev-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056db60)(dev-qa1-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056d920)(dev-ios-02.my-domain.com 1 IN CNAME dev-ios-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056dbc0)(test-sre-01.my-domain.com 1 IN CNAME test-sre-01.alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056cc60)(dev-ios-01.my-domain.com 1 IN CNAME dev-ios-01-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056d4a0)(dev-experimental-cron01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056d500)(dev-experimental-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056d860)(dev-01-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056c240)(dev-01-report.my-domain.com 1 IN CNAME dev-01-report-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056c2a0)(dev-02.my-domain.com 1 IN CNAME dev-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056c360)(dev-ios-02-cron.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056ca20)(dev-qa-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056dc20)(dev-backend-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056c420)(dev-qa-02-jump.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056cea0)(dev-frontend-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056d440)(dev-qa1.my-domain.com 1 IN CNAME dev-qa1-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056daa0)(dev-experimental-w01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}])
  }
 })
})
time="2019-05-20T21:12:09Z" level=info msg="Changing record." action=UPDATE record=reporting-dev-qa1-eks.my-domain.com targets=1 ttl=120 type=CNAME zone=1a2d8a247146e8e12f75c5329b
time="2019-05-20T21:12:09Z" level=info msg="Changing record." action=UPDATE record=reporting-dev-01-eks.my-domain.com targets=1 ttl=120 type=CNAME zone=1a2d8a247146e8e12f75c5329b
time="2019-05-20T21:12:09Z" level=info msg="Changing record." action=UPDATE record=reporting-dev-qa1-eks.my-domain.com targets=1 ttl=1 type=TXT zone=1a2d8a247146e8e12f75c5329b
time="2019-05-20T21:12:09Z" level=info msg="Changing record." action=UPDATE record=reporting-dev-01-eks.my-domain.com targets=1 ttl=1 type=TXT zone=1a2d8a247146e8e12f75c5329b
([]*endpoint.Endpoint) (len=41 cap=64) {
 (*endpoint.Endpoint)(0xc00056db00)(dev-backend-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056db60)(dev-experimental.my-domain.com 1 IN CNAME dev-experimental-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056dbc0)(dev-ios-02.my-domain.com 1 IN CNAME dev-ios-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056dc20)(reporting-dev-qa1-eks.my-domain.com 1 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056dc80)(dev-backend-02.my-domain.com 1 IN CNAME dev-backend-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056dce0)(dev-frontend-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc00056dd40)(dev-01.my-domain.com 1 IN CNAME dev-01-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056de60)(dev-01-report.my-domain.com 1 IN CNAME dev-01-report-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056dec0)(test-sre-01.my-domain.com 1 IN CNAME test-sre-01.alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc00056df80)(dev-backend-02-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000090240)(dev-ios-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc0000902a0)(dev-qa1-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000090300)(dev-qa2.my-domain.com 1 IN CNAME dev-qa2-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc000090360)(dev-ios-02-cron.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000090480)(dev-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc0000904e0)(dev-ios-01-cron01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000090540)(dev-ios-01.my-domain.com 1 IN CNAME dev-ios-01-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc000090660)(dev-ios-02-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000090900)(dev-frontend-02.my-domain.com 1 IN CNAME dev-frontend-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc0000909c0)(dev-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000090a20)(dev-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000090a80)(dev-02.my-domain.com 1 IN CNAME dev-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc000090ae0)(dev-qa1.my-domain.com 1 IN CNAME dev-qa1-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc000090b40)(ios-test-01.my-domain.com 1 IN A 107.178.251.223 [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc000090c60)(dev-qa1-report.my-domain.com 1 IN CNAME dev-qa1-report-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc000090cc0)(dev-qa-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000090d80)(reporting-dev-01-eks.my-domain.com 1 IN CNAME eks-alb-01.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc000091020)(dev-ios-01-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc0000910e0)(dev-ios-01-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000091200)(dev-ios-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000091260)(dev-ios-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc0000912c0)(dev-backend-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000091320)(dev-experimental-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000091380)(dev-experimental-w01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc0000913e0)(dev-01-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc0000914a0)(dev-qa2-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000091620)(dev-qa-02-jump.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc0000916e0)(dev-experimental-cron01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc0000917a0)(dev-experimental-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000091860)(dev-frontend-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
 (*endpoint.Endpoint)(0xc000091920)(dev-01-report-docker.my-domain.com 1 IN CNAME dev-01-report-docker-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}])
}
([]*endpoint.Endpoint) (len=2 cap=2) {
 (*endpoint.Endpoint)(0xc0000919e0)(reporting-dev-01-eks.my-domain.com 120 IN CNAME eks-alb-01.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
 (*endpoint.Endpoint)(0xc000091aa0)(reporting-dev-qa1-eks.my-domain.com 120 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}])
}
(*plan.Plan)(0xc0001f0320)({
 Current: ([]*endpoint.Endpoint) (len=41 cap=64) {
  (*endpoint.Endpoint)(0xc00056db00)(dev-backend-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056db60)(dev-experimental.my-domain.com 1 IN CNAME dev-experimental-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056dbc0)(dev-ios-02.my-domain.com 1 IN CNAME dev-ios-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056dc20)(reporting-dev-qa1-eks.my-domain.com 1 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056dc80)(dev-backend-02.my-domain.com 1 IN CNAME dev-backend-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056dce0)(dev-frontend-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc00056dd40)(dev-01.my-domain.com 1 IN CNAME dev-01-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056de60)(dev-01-report.my-domain.com 1 IN CNAME dev-01-report-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056dec0)(test-sre-01.my-domain.com 1 IN CNAME test-sre-01.alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056df80)(dev-backend-02-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000090240)(dev-ios-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc0000902a0)(dev-qa1-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000090300)(dev-qa2.my-domain.com 1 IN CNAME dev-qa2-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc000090360)(dev-ios-02-cron.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000090480)(dev-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc0000904e0)(dev-ios-01-cron01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000090540)(dev-ios-01.my-domain.com 1 IN CNAME dev-ios-01-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc000090660)(dev-ios-02-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000090900)(dev-frontend-02.my-domain.com 1 IN CNAME dev-frontend-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc0000909c0)(dev-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000090a20)(dev-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000090a80)(dev-02.my-domain.com 1 IN CNAME dev-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc000090ae0)(dev-qa1.my-domain.com 1 IN CNAME dev-qa1-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc000090b40)(ios-test-01.my-domain.com 1 IN A 107.178.251.223 [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc000090c60)(dev-qa1-report.my-domain.com 1 IN CNAME dev-qa1-report-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc000090cc0)(dev-qa-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000090d80)(reporting-dev-01-eks.my-domain.com 1 IN CNAME eks-alb-01.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc000091020)(dev-ios-01-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc0000910e0)(dev-ios-01-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000091200)(dev-ios-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000091260)(dev-ios-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc0000912c0)(dev-backend-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000091320)(dev-experimental-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000091380)(dev-experimental-w01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc0000913e0)(dev-01-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc0000914a0)(dev-qa2-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000091620)(dev-qa-02-jump.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc0000916e0)(dev-experimental-cron01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc0000917a0)(dev-experimental-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000091860)(dev-frontend-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
  (*endpoint.Endpoint)(0xc000091920)(dev-01-report-docker.my-domain.com 1 IN CNAME dev-01-report-docker-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}])
 },
 Desired: ([]*endpoint.Endpoint) (len=2 cap=2) {
  (*endpoint.Endpoint)(0xc0000919e0)(reporting-dev-01-eks.my-domain.com 120 IN CNAME eks-alb-01.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc000091aa0)(reporting-dev-qa1-eks.my-domain.com 120 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}])
 },
 Policies: ([]plan.Policy) <nil>,
 Changes: (*plan.Changes)(0xc000091b60)({
  Create: ([]*endpoint.Endpoint) <nil>,
  UpdateOld: ([]*endpoint.Endpoint) (len=2 cap=2) {
   (*endpoint.Endpoint)(0xc00056dc20)(reporting-dev-qa1-eks.my-domain.com 1 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc000090d80)(reporting-dev-01-eks.my-domain.com 1 IN CNAME eks-alb-01.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}])
  },
  UpdateNew: ([]*endpoint.Endpoint) (len=2 cap=2) {
   (*endpoint.Endpoint)(0xc000091aa0)(reporting-dev-qa1-eks.my-domain.com 120 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc0000919e0)(reporting-dev-01-eks.my-domain.com 120 IN CNAME eks-alb-01.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}])
  },
  Delete: ([]*endpoint.Endpoint) (len=39 cap=64) {
   (*endpoint.Endpoint)(0xc0000904e0)(dev-ios-01-cron01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc000090b40)(ios-test-01.my-domain.com 1 IN A 107.178.251.223 [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc0000916e0)(dev-experimental-cron01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc000091920)(dev-01-report-docker.my-domain.com 1 IN CNAME dev-01-report-docker-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056dc80)(dev-backend-02.my-domain.com 1 IN CNAME dev-backend-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056dce0)(dev-frontend-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056df80)(dev-backend-02-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc000091320)(dev-experimental-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056dbc0)(dev-ios-02.my-domain.com 1 IN CNAME dev-ios-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc000090480)(dev-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc000090900)(dev-frontend-02.my-domain.com 1 IN CNAME dev-frontend-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc000090a20)(dev-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc000090c60)(dev-qa1-report.my-domain.com 1 IN CNAME dev-qa1-report-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc000091620)(dev-qa-02-jump.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056dec0)(test-sre-01.my-domain.com 1 IN CNAME test-sre-01.alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc000091200)(dev-ios-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc000091260)(dev-ios-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc000091860)(dev-frontend-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056de60)(dev-01-report.my-domain.com 1 IN CNAME dev-01-report-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc000090a80)(dev-02.my-domain.com 1 IN CNAME dev-02-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc000091020)(dev-ios-01-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056db00)(dev-backend-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc000090240)(dev-ios-02-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc000090360)(dev-ios-02-cron.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc000090660)(dev-ios-02-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc0000909c0)(dev-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc000090ae0)(dev-qa1.my-domain.com 1 IN CNAME dev-qa1-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc000090cc0)(dev-qa-01-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc0000910e0)(dev-ios-01-mon01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc0000914a0)(dev-qa2-web.my-domain.com 1 IN CNAME my.cdn.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc00056db60)(dev-experimental.my-domain.com 1 IN CNAME dev-experimental-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc00056dd40)(dev-01.my-domain.com 1 IN CNAME dev-01-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc000090300)(dev-qa2.my-domain.com 1 IN CNAME dev-qa2-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc000091380)(dev-experimental-w01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc0000902a0)(dev-qa1-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc000090540)(dev-ios-01.my-domain.com 1 IN CNAME dev-ios-01-my-alb.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
   (*endpoint.Endpoint)(0xc0000912c0)(dev-backend-02-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc0000913e0)(dev-01-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}]),
   (*endpoint.Endpoint)(0xc0000917a0)(dev-experimental-jump01.my-domain.com 1 IN CNAME my-ec2.com{external-dns.alpha.kubernetes.io/cloudflare-proxied false}])
  }
 })
})
time="2019-05-20T21:13:09Z" level=info msg="Changing record." action=UPDATE record=reporting-dev-qa1-eks.my-domain.com targets=1 ttl=120 type=CNAME zone=1a2d8a247146e8e12f75c5329b
time="2019-05-20T21:13:09Z" level=info msg="Changing record." action=UPDATE record=reporting-dev-01-eks.my-domain.com targets=1 ttl=120 type=CNAME zone=1a2d8a247146e8e12f75c5329b
time="2019-05-20T21:13:09Z" level=info msg="Changing record." action=UPDATE record=reporting-dev-qa1-eks.my-domain.com targets=1 ttl=1 type=TXT zone=1a2d8a247146e8e12f75c5329b
time="2019-05-20T21:13:09Z" level=info msg="Changing record." action=UPDATE record=reporting-dev-01-eks.my-domain.com targets=1 ttl=1 type=TXT zone=1a2d8a247146e8e12f75c5329b

@shasderias
Copy link
Contributor

@MiniJerome Ah. Mystery solved. I hope.

Relevant lines from log:

Current:

(*endpoint.Endpoint)(0xc00056d980)(reporting-dev-qa1-eks.my-domain.com 1 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
(*endpoint.Endpoint)(0xc00056dc20)(reporting-dev-qa1-eks.my-domain.com 1 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),

Desired:

 Desired: ([]*endpoint.Endpoint) (len=2 cap=2) {
  (*endpoint.Endpoint)(0xc00056de60)(reporting-dev-01-eks.my-domain.com 120 IN CNAME eks-alb-01.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}]),
  (*endpoint.Endpoint)(0xc00056dec0)(reporting-dev-qa1-eks.my-domain.com 120 IN CNAME eks-alb-02.com [{external-dns.alpha.kubernetes.io/cloudflare-proxied true}])
 },

When a record is proxied, the TTL is automatically managed by CloudFlare - the TTL cannot be changed from the control panel.

However, I believe you have the following annotation in your ingress, and this causes external-dns to repeatedly attempt to try and fail to set the TTL for the proxied record to 120, causing the constant updating of records you are experiencing:

external-dns.alpha.kubernetes.io/ttl: "120"

Could you check if you have said annotation, and if so, try removing it and see if that solves your problem.

Fix on external-dns's end would be one or more of the following:

  1. document this behavior;
  2. automatically set TTL to 1 (automatic) if cloudflare-proxied is true; and
  3. warn/error if an ingress has such a conflict.

@jerome-lecorvaisier
Copy link
Contributor Author

jerome-lecorvaisier commented May 20, 2019

@shasderias I confirm. Good job!

I updated 1/2 of my apps, removing the annotation.

We can see that only the ingress with the TTL annotation is still in the update loop.

kail -n kube-system -d external-dns
kube-system/external-dns-79d65b7cdb-wspcg[external-dns]: time="2019-05-20T23:06:16Z" level=info msg="Received SIGTERM. Terminating..."
kube-system/external-dns-79d65b7cdb-wspcg[external-dns]: time="2019-05-20T23:06:16Z" level=info msg="Terminating main controller loop"
kube-system/external-dns-788944f84d-2wxdg[external-dns]: time="2019-05-20T23:06:19Z" level=info msg="config: {Master: KubeConfig: RequestTimeout:30s IstioIngressGatewayServices:[istio-system/istio-ingressgateway] Sources:[ingress] Namespace: AnnotationFilter: FQDNTemplate: CombineFQDNAndAnnotation:false IgnoreHostnameAnnotation:false Compatibility: PublishInternal:false PublishHostIP:false ConnectorSourceServer:localhost:8080 Provider:cloudflare GoogleProject: DomainFilter:[my-domain.com] ZoneIDFilter:[] AlibabaCloudConfigFile:/etc/kubernetes/alibaba-cloud.json AlibabaCloudZoneType: AWSZoneType: AWSZoneTagFilter:[] AWSAssumeRole: AWSBatchChangeSize:1000 AWSBatchChangeInterval:1s AWSEvaluateTargetHealth:true AWSAPIRetries:3 AzureConfigFile:/etc/kubernetes/azure.json AzureResourceGroup: CloudflareProxied:true CloudflareZonesPerPage:50 RcodezeroTXTEncrypt:false InfobloxGridHost: InfobloxWapiPort:443 InfobloxWapiUsername:admin InfobloxWapiPassword: InfobloxWapiVersion:2.3.1 InfobloxSSLVerifkube-system/external-dns-788944f84d-2wxdg[external-dns]: time="2019-05-20T23:06:22Z" level=info msg="Changing record." action=UPDATE record=reporting-dev-qa1-eks.my-domain.com targets=1 ttl=120 type=CNAME zone=1a2d8a247146e8e12f75c5329b
kube-system/external-dns-788944f84d-2wxdg[external-dns]: time="2019-05-20T23:06:22Z" level=info msg="Changing record." action=UPDATE record=reporting-dev-qa1-eks.my-domain.com targets=1 ttl=1 type=TXT zone=1a2d8a247146e8e12f75c5329b


kube-system/external-dns-788944f84d-2wxdg[external-dns]: time="2019-05-20T23:07:21Z" level=info msg="Changing record." action=UPDATE record=reporting-dev-qa1-eks.my-domain.com targets=1 ttl=120 type=CNAME zone=1a2d8a247146e8e12f75c5329b
kube-system/external-dns-788944f84d-2wxdg[external-dns]: time="2019-05-20T23:07:22Z" level=info msg="Changing record." action=UPDATE record=reporting-dev-qa1-eks.my-domain.com targets=1 ttl=1 type=TXT zone=1a2d8a247146e8e12f75c5329b


kube-system/external-dns-788944f84d-2wxdg[external-dns]: time="2019-05-20T23:08:22Z" level=info msg="Changing record." action=UPDATE record=reporting-dev-qa1-eks.my-domain.com targets=1 ttl=120 type=CNAME zone=1a2d8a247146e8e12f75c5329b
kube-system/external-dns-788944f84d-2wxdg[external-dns]: time="2019-05-20T23:08:23Z" level=info msg="Changing record." action=UPDATE record=reporting-dev-qa1-eks.my-domain.com targets=1 ttl=1 type=TXT zone=1a2d8a247146e8e12f75c5329b

Thank you for your help. Much appreciated.

@Raffo
Copy link
Contributor

Raffo commented Jun 27, 2019

I can confirm that the behaviour is related to the TTL, I was able to reproduce it on AWS with Route53. I'm gonna go try dive a bit deeper into that and update as soon as I have a full idea on how to solve the problem.

/assign @Raffo

@Raffo
Copy link
Contributor

Raffo commented Jun 27, 2019

So I managed to replicate this in AWS Route53.

ExternalDNS creates behind the scenes an ALIAS record that does not allow setting a TTL:

If an alias record points to an AWS resource, you can't set the time to live (TTL); Route 53 uses the default TTL for the resource. If an alias record points to another record in the same hosted zone, Route 53 uses the TTL of the record that the alias record points to.

I suspect that when we read the TTL we don't find it and try to set it again. I think this is not a bug as the user is trying to do something that literally cannot be done and I'm pretty confident that it is the same behaviour that is happening in cloudflare.
We should probably both document this behaviour and be more chatty in the logs such that the users of ExternalDNS can figure out this and avoid those continuous UPSERTs.

@fejta-bot
Copy link

Issues go stale after 90d of inactivity.
Mark the issue as fresh with /remove-lifecycle stale.
Stale issues rot after an additional 30d of inactivity and eventually close.

If this issue is safe to close now please do so with /close.

Send feedback to sig-testing, kubernetes/test-infra and/or fejta.
/lifecycle stale

@k8s-ci-robot k8s-ci-robot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Sep 25, 2019
@Raffo
Copy link
Contributor

Raffo commented Sep 25, 2019

/remove-lifecycle stale

@k8s-ci-robot k8s-ci-robot removed the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Sep 25, 2019
@jasper-d
Copy link
Contributor

jasper-d commented Nov 4, 2019

I had the same problem with Azure DNS using an up to date release (sha256:27c516624d71636b6642f8d4089df728ae4667d866c39ec1bcd8c03cbed732dd) following the basic installation described in azure.md. Records were deleted and recreated every minute.

I noticed that one of the two external-dns pods tried to mount a non-existing external-dns-token secret for whatever reason. The other pod that had mounted the correct secret was constantly delete/creating records.

Weirdly, after deleting the pod with the wrong secret and having it recreated, the endless delete/create cycle ended.

@etiennetremel
Copy link

We experienced the same issue after upgrading external-dns from v0.5.17 to v0.5.18.

Because of this bug, we reached some Cloudflare API throttling causing major downtime on our side.

After looking into the Cloudflare provider submitChanges logic, we noticed that all records are being deleted and re-created instead of executing a record update via the UpdateDNSRecord provided by the cloudflare-go library.

@davidkarlsen
Copy link

davidkarlsen commented Jan 16, 2020

@etiennetremel seeing the same - latest good chart at https://github.com/helm/charts/tree/master/stable/external-dns is 2.14.1.
Although it would make sense to call update instead of recreating, that part of the code did not change between v0.5.17 and v0.5.18.

@kevinchevalier
Copy link

We saw the same on v0.5.18 r4 with Cloudflare. Reverting to v0.5.17 fixed the issue.

@jeanlucmongrain
Copy link

We saw the same on v0.5.18 r4 with Cloudflare. Reverting to v0.5.17 fixed the issue.

I confirm, revert to docker.io/bitnami/external-dns:0.5.17-debian-9-r91 fixed it

@iameli
Copy link

iameli commented Feb 13, 2020

Also encountering this on the latest tag (presently registry.opensource.zalan.do/teapot/external-dns@sha256:403b9b0a8a7428c0d3fe57fe0aebf7ac8a69467d2660c2384a7463c574f3dbb2), fixed by a downgrade to registry.opensource.zalan.do/teapot/external-dns:v0.5.17

@sheerun
Copy link
Contributor

sheerun commented Apr 18, 2020

Grouping doesn't work well and is causing issues because ProviderSpecificProperty can be per-target.. e.g. proxied field for Cloudflare

@AaronFriel
Copy link

AaronFriel commented Apr 25, 2020

@MiniJerome please re-open, this bug is still present.

@vroyer
Copy link

vroyer commented May 3, 2020

Same issue on Azure, external-dns update A + TXT records every minutes, because ApplyChanges() is called every minutes....

time="2020-05-03T07:36:36Z" level=info msg="Updating A record named 'cassandra-smtxev2sbp-vbfsgksp-0-0' to '52.155.216.80' for Azure DNS zone 'test.strapkube.com'." time="2020-05-03T07:36:38Z" level=info msg="Updating TXT record named 'cassandra-smtxev2sbp-vbfsgksp-0-0' to '\"heritage=external-dns,external-dns/owner=strapkube,external-dns/resource=crd/smtxev2sbp/cassandra-smtxev2sbp-vbfsgksp-0\"' for Azure DNS zone 'test.strapkube.com'." time="2020-05-03T07:37:06Z" level=info msg="Updating A record named 'cassandra-smtxev2sbp-vbfsgksp-0-0' to '52.155.216.80' for Azure DNS zone 'test.strapkube.com'." time="2020-05-03T07:37:08Z" level=info msg="Updating TXT record named 'cassandra-smtxev2sbp-vbfsgksp-0-0' to '\"heritage=external-dns,external-dns/owner=strapkube,external-dns/resource=crd/smtxev2sbp/cassandra-smtxev2sbp-vbfsgksp-0\"' for Azure DNS zone 'test.strapkube.com'." time="2020-05-03T07:37:35Z" level=info msg="Updating A record named 'cassandra-smtxev2sbp-vbfsgksp-0-0' to '52.155.216.80' for Azure DNS zone 'test.strapkube.com'." time="2020-05-03T07:37:37Z" level=info msg="Updating TXT record named 'cassandra-smtxev2sbp-vbfsgksp-0-0' to '\"heritage=external-dns,external-dns/owner=strapkube,external-dns/resource=crd/smtxev2sbp/cassandra-smtxev2sbp-vbfsgksp-0\"' for Azure DNS zone 'test.strapkube.com'." time="2020-05-03T07:38:06Z" level=info msg="Updating A record named 'cassandra-smtxev2sbp-vbfsgksp-0-0' to '52.155.216.80' for Azure DNS zone 'test.strapkube.com'." time="2020-05-03T07:38:07Z" level=info msg="Updating TXT record named 'cassandra-smtxev2sbp-vbfsgksp-0-0' to '\"heritage=external-dns,external-dns/owner=strapkube,external-dns/resource=crd/smtxev2sbp/cassandra-smtxev2sbp-vbfsgksp-0\"' for Azure DNS zone 'test.strapkube.com'." time="2020-05-03T07:38:36Z" level=info msg="Updating A record named 'cassandra-smtxev2sbp-vbfsgksp-0-0' to '52.155.216.80' for Azure DNS zone 'test.strapkube.com'." time="2020-05-03T07:38:37Z" level=info msg="Updating TXT record named 'cassandra-smtxev2sbp-vbfsgksp-0-0' to '\"heritage=external-dns,external-dns/owner=strapkube,external-dns/resource=crd/smtxev2sbp/cassandra-smtxev2sbp-vbfsgksp-0\"' for Azure DNS zone 'test.strapkube.com'." time="2020-05-03T07:39:06Z" level=info msg="Updating A record named 'cassandra-smtxev2sbp-vbfsgksp-0-0' to '52.155.216.80' for Azure DNS zone 'test.strapkube.com'." time="2020-05-03T07:39:07Z" level=info msg="Updating TXT record named 'cassandra-smtxev2sbp-vbfsgksp-0-0' to '\"heritage=external-dns,external-dns/owner=strapkube,external-dns/resource=crd/smtxev2sbp/cassandra-smtxev2sbp-vbfsgksp-0\"' for Azure DNS zone 'test.strapkube.com'."

@brpaz
Copy link

brpaz commented May 7, 2020

@MiniJerome Just updated to the last version and it´s definitely not fixed.

time="2020-05-07T18:35:52Z" level=info msg="Changing record." action=UPDATE record=labs.brunopaz.dev targets=1 ttl=1 type=A zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:35:52Z" level=info msg="Changing record." action=UPDATE record=directus.brunopaz.dev targets=1 ttl=1 type=A zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:35:53Z" level=info msg="Changing record." action=UPDATE record=golang-api.brunopaz.dev targets=1 ttl=1 type=A zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:35:53Z" level=info msg="Changing record." action=UPDATE record=labs.brunopaz.dev targets=1 ttl=1 type=TXT zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:35:54Z" level=info msg="Changing record." action=UPDATE record=directus.brunopaz.dev targets=1 ttl=1 type=TXT zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:35:54Z" level=info msg="Changing record." action=UPDATE record=golang-api.brunopaz.dev targets=1 ttl=1 type=TXT zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:36:51Z" level=info msg="Changing record." action=UPDATE record=directus.brunopaz.dev targets=1 ttl=1 type=A zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:36:52Z" level=info msg="Changing record." action=UPDATE record=labs.brunopaz.dev targets=1 ttl=1 type=A zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:36:52Z" level=info msg="Changing record." action=UPDATE record=golang-api.brunopaz.dev targets=1 ttl=1 type=A zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:36:53Z" level=info msg="Changing record." action=UPDATE record=directus.brunopaz.dev targets=1 ttl=1 type=TXT zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:36:53Z" level=info msg="Changing record." action=UPDATE record=labs.brunopaz.dev targets=1 ttl=1 type=TXT zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:36:54Z" level=info msg="Changing record." action=UPDATE record=golang-api.brunopaz.dev targets=1 ttl=1 type=TXT zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:37:51Z" level=info msg="Changing record." action=UPDATE record=directus.brunopaz.dev targets=1 ttl=1 type=A zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:37:52Z" level=info msg="Changing record." action=UPDATE record=golang-api.brunopaz.dev targets=1 ttl=1 type=A zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:37:52Z" level=info msg="Changing record." action=UPDATE record=labs.brunopaz.dev targets=1 ttl=1 type=A zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:37:53Z" level=info msg="Changing record." action=UPDATE record=directus.brunopaz.dev targets=1 ttl=1 type=TXT zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:37:53Z" level=info msg="Changing record." action=UPDATE record=golang-api.brunopaz.dev targets=1 ttl=1 type=TXT zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:37:54Z" level=info msg="Changing record." action=UPDATE record=labs.brunopaz.dev targets=1 ttl=1 type=TXT zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:38:51Z" level=info msg="Changing record." action=UPDATE record=golang-api.brunopaz.dev targets=1 ttl=1 type=A zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:38:52Z" level=info msg="Changing record." action=UPDATE record=directus.brunopaz.dev targets=1 ttl=1 type=A zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:38:52Z" level=info msg="Changing record." action=UPDATE record=labs.brunopaz.dev targets=1 ttl=1 type=A zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:38:53Z" level=info msg="Changing record." action=UPDATE record=golang-api.brunopaz.dev targets=1 ttl=1 type=TXT zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:38:53Z" level=info msg="Changing record." action=UPDATE record=directus.brunopaz.dev targets=1 ttl=1 type=TXT zone=1bb86879fb7ea053bd1352c7a9b60ca2
time="2020-05-07T18:38:54Z" level=info msg="Changing record." action=UPDATE record=labs.brunopaz.dev targets=1 ttl=1 type=TXT zone=1bb86879fb7ea053bd1352c7a9b60ca2

Using cloudflare without the "proxied" option and no custom ttl annotations defined.

@brpaz
Copy link

brpaz commented May 7, 2020

Does anybody has seen major random downtimes with DNS not being resolved at all?

I have problems regarding that. Not sure if this can be the cause of problem. I have also opened issue on Cloudflare support

@jaygorrell
Copy link

@brpaz that's exactly the issue I had. The rollback to v0.5.17 mentioned above fixed it.

@yuregir
Copy link

yuregir commented May 10, 2020

@brpaz I am also having the same issue with the latest version. Check the external-dns logs to be sure

@stefanlasiewski
Copy link
Contributor

Hi @brpaz,

Yes, I'm having that issue with the RFC2136 provider. I suspect our DNS team doesn't like it when records are deleted then updated every minute.

@stefanlasiewski
Copy link
Contributor

stefanlasiewski commented May 24, 2020

Is the TTL annotation actually required for this problem to happen?

In my case with the RFC2136 (issue #1596), we're seeing issues with no TTL annotation present at all, similar to what @jaygorrell is seeing. The RFC2136 provider sets a global minimum TTL using the MinTTL parameter when external-dns starts.

@brpaz
Copy link

brpaz commented May 24, 2020

In my case I am not using the TTL annotation.

@stefanlasiewski
Copy link
Contributor

stefanlasiewski commented May 25, 2020

In #1596, I believe the issue might be that external-dns sees a mismatch between what it's trying to delete and what is actually present.

I believe external-dns is looking for a record that looks like this:

lb.app.example.org 0 A 10.11.12.101

But in actuality, the TTL is '60' not '0':

lb.app.example.org 60 A 10.11.12.101

I noticed this because the constant removal/additions only happen for old records that have an older TTL and thus don't match the expected pattern. The new records seem to have a TTL that matches what's expected.

So, this means I have a path forward to manually clean this up the stale records. However, the underlying behavior is still there and will require occasional cleanup in the future.

@Raffo Raffo reopened this May 25, 2020
@Raffo
Copy link
Contributor

Raffo commented May 25, 2020

Reopening.

@Nilegfx
Copy link

Nilegfx commented May 31, 2020

like what @jaygorrell said, I temporarily downgraded from v0.7.1 to v0.5.17 and it fixed it. I'll keep it with v0.5.17 until another the upcoming fix.

@sheerun
Copy link
Contributor

sheerun commented Jun 4, 2020

This should be fixed in 0.7.2, could you confirm?

@sham1316
Copy link

sham1316 commented Jun 5, 2020

This should be fixed in 0.7.2, could you confirm?

In my case - fixed.

@davidkarlsen
Copy link

It seems to work well with 0.7.2 - thanks 🎉 I tested using the cloudflare provider.

@Nilegfx
Copy link

Nilegfx commented Jun 8, 2020

works for me.

@brpaz
Copy link

brpaz commented Jun 9, 2020

Seems fixed for me as well

@sheerun
Copy link
Contributor

sheerun commented Jun 27, 2020

OK, I'll consider this fixed. If not, please create another issue with steps to reproduce, or ideally a test in cloudflare_test.go or other affected. The tests for cloudflare provider are really easy to write :)

/close

@k8s-ci-robot
Copy link
Contributor

@sheerun: Closing this issue.

In response to this:

OK, I'll consider this fixed. If not, please create another issue with steps to reproduce, or ideally a test in cloudflare_test.go or other affected. The tests for cloudflare provider are really easy to write :)

/close

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@tobernguyen
Copy link

I'm experiencing this with the latest image: v0.7.4

@tobernguyen
Copy link

I'm experiencing this with the latest image: v0.7.4

Nevermind. I added these two options and the problem went away

- "--registry=txt"
- "--txt-owner-id=MY-CLUSTER-NAME"

@Vadim-Zenin
Copy link

Vadim-Zenin commented May 14, 2021

We have the same behaviour with 0.7.6 and 0.8.0 versions on AWS Route53
Config:
external-dns.alpha.kubernetes.io/ttl: '900'
The issue fixed by comment of external-dns.alpha.kubernetes.io/ttl: '900' line.

@chicofranchico
Copy link

Nevermind. I added these two options and the problem went away

  • "--registry=txt"
  • "--txt-owner-id=MY-CLUSTER-NAME"

This is required specially if you have multiple clusters on the same account managing the same zone (pay also attention to the different regions!).

@chukynax
Copy link

It still doesn't work, Changing records all the time

@dnnnvx
Copy link

dnnnvx commented Jan 18, 2024

I noticed it happens to me on records without subdomains on Cloudflare. Example: I have example.com domain, the ingress resource has:

ingress:
  hosts:
    - host: example.com

And on Cloudflare there's:

TXT   example.com

But not:

TXT   cname-example.com

I tried to create it manually but Cloudflare automatically convert it to:

TXT   cname

Because it removes the plain domain. Can be this the cause? That's the only difference between the ones working and the ones causing the infinte update

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests