cloudflare-dns-operator 0.1.8

Kubernetes operator to manage Cloudflare DNS records
Documentation
# cloudflare-dns-operator

[![Crates.io](https://img.shields.io/crates/v/cloudflare-dns-operator)](https://crates.io/crates/cloudflare-dns-operator)
[![](https://docs.rs/cloudflare-dns-operator/badge.svg)](https://docs.rs/cloudflare-dns-operator)
[![License](https://img.shields.io/crates/l/cloudflare-dns-operator?color=informational&logo=mpl-2)](/LICENSE)

[This is a kubernetes operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) (custom resource definition + kubernetes controller) to manage cloudflare DNS entries from within kubernetes using the cloudflare API.

__Note:__ This is an unofficial project and not affiliated in any way with cloudflare.

### Installation

In your kubernetes cluster install the [`crds.yaml`](./crds.yaml) file and a deployment matching
[examples/deployment.yaml](./examples/deployment.yaml). Note that you'll need to set the env var
`CLOUDFLARE_API_TOKEN` to a valid cloudflare API token.

This sets up the controller as a deployment. It'll watch for `CloudflareDNSRecord` resources and
create/update/delete DNS records in cloudflare.

You can optionally have the controller check the records by doing DNS lookups from 1.1.1.1. The resolution result
will be reflected in the `status.pending` field of the `CloudflareDNSRecord` resource. For this to be enabled, set
the env var `CHECK_DNS_RESOLUTION` to a human readable duration like `5m` or `1h` or `60s`.

You can then create a new DNS record like this:

```yaml
apiVersion: dns.cloudflare.com/v1alpha1
kind: CloudflareDNSRecord
metadata:
  name: my-cloudflare-dns-record
spec:
  name: foo.example.com
  type: A
  ttl: 3600
  content: "1.2.3.4"
  zone:
    name:
      value: example.com
  comment: "Managed by the Cloudflare DNS Operator"
  tags:
    - k8s
```

You can also automatically expose IPs from LoadBalancer services or external IP services by referencing a service in
the `content` instead of a static IP:

```yaml
# ...
  content:
    service:
      name: traefik
      namespace: traefik
# ...
```

The zone can also be set with a `secret` or `configMap` reference like this:

```yaml
# ...
  zone:
    name:
      from:
        secret:
          name: cloudflare-dns-secret
          key: zone-name
# ...
```

See [CloudflareDNSRecordSpec](https://docs.rs/cloudflare-dns-operator/latest/cloudflare_dns_operator/resources/struct.CloudflareDNSRecordSpec.html) for more details.

License: MPL-2.0