From 9ceca8fa811e66a37dd65920e9c71f21f0091cd6 Mon Sep 17 00:00:00 2001 From: Michel Loiseleur Date: Wed, 4 Sep 2024 13:51:29 +0200 Subject: [PATCH] review with Raffo --- README.md | 6 - charts/external-dns/README.md | 1 - charts/external-dns/README.md.gotmpl | 1 - docs/ttl.md | 4 - docs/tutorials/vinyldns.md | 190 --------------- docs/tutorials/vultr.md | 225 ------------------ pkg/apis/externaldns/types.go | 2 +- .../externaldns/validation/validation_test.go | 6 - 8 files changed, 1 insertion(+), 434 deletions(-) delete mode 100644 docs/tutorials/vinyldns.md delete mode 100644 docs/tutorials/vultr.md diff --git a/README.md b/README.md index 31ca79865f..c13327094f 100644 --- a/README.md +++ b/README.md @@ -49,8 +49,6 @@ ExternalDNS allows you to keep selected zones (via `--domain-filter`) synchroniz * [RFC2136](https://tools.ietf.org/html/rfc2136) * [NS1](https://ns1.com/) * [TransIP](https://www.transip.eu/domain-name/) -* [VinylDNS](https://www.vinyldns.io) -* [Vultr](https://www.vultr.com) * [OVH](https://www.ovh.com) * [Scaleway](https://www.scaleway.com) * [Akamai Edge DNS](https://learn.akamai.com/en-us/products/cloud_security/edge_dns.html) @@ -125,11 +123,9 @@ The following table clarifies the current status of the providers according to t | RFC2136 | Alpha | | | NS1 | Alpha | | | TransIP | Alpha | | -| VinylDNS | Alpha | | | RancherDNS | Alpha | | | OVH | Alpha | | | Scaleway DNS | Alpha | @Sh4d1 | -| Vultr | Alpha | | | UltraDNS | Alpha | | | GoDaddy | Alpha | | | Gandi | Alpha | @packi | @@ -193,10 +189,8 @@ The following tutorials are provided: * [RancherDNS (RDNS)](docs/tutorials/rdns.md) * [RFC2136](docs/tutorials/rfc2136.md) * [TransIP](docs/tutorials/transip.md) -* [VinylDNS](docs/tutorials/vinyldns.md) * [OVH](docs/tutorials/ovh.md) * [Scaleway](docs/tutorials/scaleway.md) -* [Vultr](docs/tutorials/vultr.md) * [UltraDNS](docs/tutorials/ultradns.md) * [GoDaddy](docs/tutorials/godaddy.md) * [Gandi](docs/tutorials/gandi.md) diff --git a/charts/external-dns/README.md b/charts/external-dns/README.md index 6af6463ade..2c05f478bb 100644 --- a/charts/external-dns/README.md +++ b/charts/external-dns/README.md @@ -52,7 +52,6 @@ For set up for a specific provider using the Helm chart, see the following links - [godaddy](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/godaddy.md#using-helm) - [ns1](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/ns1.md#using-helm) - [plural](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/plural.md#using-helm) -- [vultr](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/vultr.md#using-helm) ## Namespaced Scoped Installation diff --git a/charts/external-dns/README.md.gotmpl b/charts/external-dns/README.md.gotmpl index dc61031448..e313a2ba2b 100644 --- a/charts/external-dns/README.md.gotmpl +++ b/charts/external-dns/README.md.gotmpl @@ -47,7 +47,6 @@ For set up for a specific provider using the Helm chart, see the following links - [godaddy](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/godaddy.md#using-helm) - [ns1](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/ns1.md#using-helm) - [plural](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/plural.md#using-helm) -- [vultr](https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/vultr.md#using-helm) ## Namespaced Scoped Installation diff --git a/docs/ttl.md b/docs/ttl.md index 8a03f424f5..7dc52c50bc 100644 --- a/docs/ttl.md +++ b/docs/ttl.md @@ -45,7 +45,6 @@ Providers - [x] Linode - [x] TransIP - [x] RFC2136 -- [x] Vultr - [x] UltraDNS PRs welcome! @@ -86,8 +85,5 @@ The Linode Provider default TTL is used when the TTL is 0. The default is 24 hou ### TransIP Provider The TransIP Provider minimal TTL is used when the TTL is 0. The minimal TTL is 60s. -### Vultr Provider -The Vultr provider minimal TTL is used when the TTL is 0. The default is 1 hour. - ### UltraDNS The UltraDNS provider minimal TTL is used when the TTL is not provided. The default TTL is account level default TTL, if defined, otherwise 24 hours. diff --git a/docs/tutorials/vinyldns.md b/docs/tutorials/vinyldns.md deleted file mode 100644 index da191eaafd..0000000000 --- a/docs/tutorials/vinyldns.md +++ /dev/null @@ -1,190 +0,0 @@ -# Setting up ExternalDNS for VinylDNS - -This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using VinylDNS. - -The environment vars `VINYLDNS_ACCESS_KEY`, `VINYLDNS_SECRET_KEY`, and `VINYLDNS_HOST` will be needed to run ExternalDNS with VinylDNS. - -## Create a sample deployment and service for external-dns to use - -Run an application and expose it via a Kubernetes Service: - -```console -$ kubectl run nginx --image=nginx --replicas=1 --port=80 -$ kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancer -``` - -Annotate the Service with your desired external DNS name. Make sure to change `example.org` to your domain. - -```console -$ kubectl annotate service nginx "external-dns.alpha.kubernetes.io/hostname=nginx.example.org." -``` - -After the service is up and running, it should get an EXTERNAL-IP. At first this may showing as `` - -```console -$ kubectl get svc -NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE -kubernetes 10.0.0.1 443/TCP 1h -nginx 10.0.0.115 80:30543/TCP 10s -``` - -Once it's available - -```console -% kubectl get svc -NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE -kubernetes 10.0.0.1 443/TCP 1h -nginx 10.0.0.115 34.x.x.x 80:30543/TCP 2m -``` - -## Deploy ExternalDNS to Kubernetes - -Connect your `kubectl` client to the cluster you want to test ExternalDNS with. -Then apply one of the following manifests file to deploy ExternalDNS. - -**Note for examples below** - -When using `registry=txt` option, make sure to also use the `txt-prefix` and `txt-owner-id` options as well. If you try to create a `TXT` record in VinylDNS without a prefix, it will try to create a `TXT` record with the same name as your actual DNS record and fail (creating a stranded record `external-dns` cannot manage). - -### Manifest (for clusters without RBAC enabled) - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --provider=vinyldns - - --source=service - - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. - - --registry=txt - - --txt-owner-id=grizz - - --txt-prefix=txt- - env: - - name: VINYLDNS_HOST - value: "YOUR_VINYLDNS_HOST" - - name: VINYLDNS_ACCESS_KEY - value: "YOUR_VINYLDNS_ACCESS_KEY" - - name: VINYLDNS_SECRET_KEY - value: "YOUR_VINYLDNS_SECRET_KEY" -``` - -### Manifest (for clusters with RBAC enabled) - -```yaml -apiVersion: v1 -kind: ServiceAccount -metadata: - name: external-dns ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: external-dns -rules: -- apiGroups: [""] - resources: ["services","endpoints","pods"] - verbs: ["get","watch","list"] -- apiGroups: ["extensions","networking.k8s.io"] - resources: ["ingresses"] - verbs: ["get","watch","list"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: external-dns-viewer -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: external-dns -subjects: -- kind: ServiceAccount - name: external-dns - namespace: default ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - serviceAccountName: external-dns - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --provider=vinyldns - - --source=service - - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. - - --registry=txt - - --txt-owner-id=grizz - - --txt-prefix=txt- - env: - env: - - name: VINYLDNS_HOST - value: "YOUR_VINYLDNS_HOST" - - name: VINYLDNS_ACCESS_KEY - value: "YOUR_VINYLDNS_ACCESS_KEY" - - name: VINYLDNS_SECRET_KEY - value: "YOUR_VINYLDNS_SECRET_KEYY -``` - -## Running a locally built version pointed to the above nginx service -Make sure your kubectl is configured correctly. Assuming you have the sources, build and run it like below. - -The vinyl access details needs to exported to the environment before running. - -```bash -make -# output skipped - -export VINYLDNS_HOST= -export VINYLDNS_ACCESS_KEY= -export VINYLDNS_SECRET_KEY= - -./build/external-dns \ - --provider=vinyldns \ - --source=service \ - --domain-filter=elements.capsps.comcast.net. \ - --zone-id-filter=20e8bfd2-3a70-4e1b-8e11-c9c1948528d3 \ - --registry=txt \ - --txt-owner-id=grizz \ - --txt-prefix=txt- \ - --namespace=default \ - --once \ - --dry-run \ - --log-level debug - -INFO[0000] running in dry-run mode. No changes to DNS records will be made. -INFO[0000] Created Kubernetes client https://some-k8s-cluster.example.com -INFO[0001] Zone: [nginx.example.org.] -# output skipped -``` - -Having `--dry-run=true` and `--log-level=debug` is a great way to see _exactly_ what VinylDNS is doing or is about to do. diff --git a/docs/tutorials/vultr.md b/docs/tutorials/vultr.md deleted file mode 100644 index 546619d30e..0000000000 --- a/docs/tutorials/vultr.md +++ /dev/null @@ -1,225 +0,0 @@ -# Setting up ExternalDNS for Services on Vultr - -This tutorial describes how to setup ExternalDNS for usage within a Kubernetes cluster using Vultr DNS. - -Make sure to use **>=0.6** version of ExternalDNS for this tutorial. - -## Managing DNS with Vultr - -If you want to read up on vultr DNS service you can read the following tutorial: -[Introduction to Vultr DNS](https://www.vultr.com/docs/introduction-to-vultr-dns) - -Create a new DNS Zone where you want to create your records in. For the examples we will be using `example.com` - -## Creating Vultr Credentials - -You will need to create a new API Key which can be found on the [Vultr Dashboard](https://my.vultr.com/settings/#settingsapi). - -The environment variable `VULTR_API_KEY` will be needed to run ExternalDNS with Vultr. - -## Deploy ExternalDNS - -Connect your `kubectl` client to the cluster you want to test ExternalDNS with. - -Begin by creating a Kubernetes secret to securely store your Akamai Edge DNS Access Tokens. This key will enable ExternalDNS to authenticate with Akamai Edge DNS: - -```shell -kubectl create secret generic VULTR_API_KEY --from-literal=VULTR_API_KEY=YOUR_VULTR_API_KEY -``` - -Ensure to replace YOUR_VULTR_API_KEY, with your actual Vultr API key. - - -Then apply one of the following manifests file to deploy ExternalDNS. - -### Using Helm - -reate a values.yaml file to configure ExternalDNS to use Akamai Edge DNS as the DNS provider. This file should include the necessary environment variables: - -```shell -provider: - name: akamai -env: - - name: VULTR_API_KEY - valueFrom: - secretKeyRef: - name: VULTR_API_KEY - key: VULTR_API_KEY -``` - -Finally, install the ExternalDNS chart with Helm using the configuration specified in your values.yaml file: - -```shell -helm upgrade --install external-dns external-dns/external-dns --values values.yaml -``` - -### Manifest (for clusters without RBAC enabled) - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --source=service # ingress is also possible - - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. - - --provider=vultr - env: - - name: VULTR_API_KEY - valueFrom: - secretKeyRef: - name: VULTR_API_KEY - key: VULTR_API_KEY -``` - -### Manifest (for clusters with RBAC enabled) - -```yaml -apiVersion: v1 -kind: ServiceAccount -metadata: - name: external-dns ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: external-dns -rules: -- apiGroups: [""] - resources: ["services","endpoints","pods"] - verbs: ["get","watch","list"] -- apiGroups: ["extensions","networking.k8s.io"] - resources: ["ingresses"] - verbs: ["get","watch","list"] -- apiGroups: [""] - resources: ["nodes"] - verbs: ["list"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: external-dns-viewer -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: external-dns -subjects: -- kind: ServiceAccount - name: external-dns - namespace: default ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: external-dns -spec: - strategy: - type: Recreate - selector: - matchLabels: - app: external-dns - template: - metadata: - labels: - app: external-dns - spec: - serviceAccountName: external-dns - containers: - - name: external-dns - image: registry.k8s.io/external-dns/external-dns:v0.14.2 - args: - - --source=service # ingress is also possible - - --domain-filter=example.com # (optional) limit to only example.com domains; change to match the zone created above. - - --provider=vultr - env: - - name: VULTR_API_KEY - valueFrom: - secretKeyRef: - name: VULTR_API_KEY - key: VULTR_API_KEY -``` - -## Deploying a Nginx Service - -Create a service file called 'nginx.yaml' with the following contents: - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - name: nginx -spec: - selector: - matchLabels: - app: nginx - template: - metadata: - labels: - app: nginx - spec: - containers: - - image: nginx - name: nginx - ports: - - containerPort: 80 ---- -apiVersion: v1 -kind: Service -metadata: - name: nginx - annotations: - external-dns.alpha.kubernetes.io/hostname: my-app.example.com -spec: - selector: - app: nginx - type: LoadBalancer - ports: - - protocol: TCP - port: 80 - targetPort: 80 -``` - -Note the annotation on the service; use the same hostname as the Vultr DNS zone created above. - -ExternalDNS uses this annotation to determine what services should be registered with DNS. Removing the annotation will cause ExternalDNS to remove the corresponding DNS records. - -Create the deployment and service: - -```console -$ kubectl create -f nginx.yaml -``` - -Depending where you run your service it can take a little while for your cloud provider to create an external IP for the service. - -Once the service has an external IP assigned, ExternalDNS will notice the new service IP address and synchronize the Vultr DNS records. - -## Verifying Vultr DNS records - -Check your [Vultr UI](https://my.vultr.com/dns/) to view the records for your Vultr DNS zone. - -Click on the zone for the one created above if a different domain was used. - -This should show the external IP address of the service as the A record for your domain. - -## Cleanup - -Now that we have verified that ExternalDNS will automatically manage Vultr DNS records, we can delete the tutorial's example: - -``` -$ kubectl delete service -f nginx.yaml -$ kubectl delete service -f externaldns.yaml -``` diff --git a/pkg/apis/externaldns/types.go b/pkg/apis/externaldns/types.go index 97a939a888..edc34f06be 100644 --- a/pkg/apis/externaldns/types.go +++ b/pkg/apis/externaldns/types.go @@ -440,7 +440,7 @@ func (cfg *Config) ParseFlags(args []string) error { app.Flag("traefik-disable-new", "Disable listeners on Resources under the traefik.io API Group").Default(strconv.FormatBool(defaultConfig.TraefikDisableNew)).BoolVar(&cfg.TraefikDisableNew) // Flags related to providers - providers := []string{"akamai", "alibabacloud", "aws", "aws-sd", "azure", "azure-dns", "azure-private-dns", "civo", "cloudflare", "coredns", "designate", "digitalocean", "dnsimple", "exoscale", "gandi", "godaddy", "google", "ibmcloud", "inmemory", "linode", "ns1", "oci", "ovh", "pdns", "pihole", "plural", "rdns", "rfc2136", "scaleway", "skydns", "tencentcloud", "transip", "ultradns", "vinyldns", "vultr", "webhook"} + providers := []string{"akamai", "alibabacloud", "aws", "aws-sd", "azure", "azure-dns", "azure-private-dns", "civo", "cloudflare", "coredns", "designate", "digitalocean", "dnsimple", "exoscale", "gandi", "godaddy", "google", "ibmcloud", "inmemory", "linode", "ns1", "oci", "ovh", "pdns", "pihole", "plural", "rdns", "rfc2136", "scaleway", "skydns", "tencentcloud", "transip", "ultradns", "webhook"} app.Flag("provider", "The DNS provider where the DNS records will be created (required, options: "+strings.Join(providers, ", ")+")").Required().PlaceHolder("provider").EnumVar(&cfg.Provider, providers...) app.Flag("provider-cache-time", "The time to cache the DNS provider record list requests.").Default(defaultConfig.ProviderCacheTime.String()).DurationVar(&cfg.ProviderCacheTime) app.Flag("domain-filter", "Limit possible target zones by a domain suffix; specify multiple times for multiple domains (optional)").Default("").StringsVar(&cfg.DomainFilter) diff --git a/pkg/apis/externaldns/validation/validation_test.go b/pkg/apis/externaldns/validation/validation_test.go index 03ae42df71..7f4f33c73d 100644 --- a/pkg/apis/externaldns/validation/validation_test.go +++ b/pkg/apis/externaldns/validation/validation_test.go @@ -64,12 +64,6 @@ func newValidConfig(t *testing.T) *externaldns.Config { return cfg } -func addRequiredFieldsForDyn(cfg *externaldns.Config) { - cfg.LogFormat = "json" - cfg.Sources = []string{"ingress"} - cfg.Provider = "dyn" -} - func TestValidateBadIgnoreHostnameAnnotationsConfig(t *testing.T) { cfg := externaldns.NewConfig() cfg.IgnoreHostnameAnnotation = true