Provider DNS
provider-dns
is a Crossplane provider that
is built using Upjet code
generation tools and exposes XRM-conformant managed resources for the
DNS API.
Getting Started
Install with Helm
Helm chart docs are available on charts/provider-dns
.
$ helm upgrade --install provider-dns --namespace crossplane-system --create-namespace oci://ghcr.io/dana-team/helm-charts/provider-dns --version <release>
Install Manually
Set Up
First, create a ConfigMap
which includes the content of the relevant krb5.conf
file. This ConfigMap
then needs to be mounted to the provider pod.
$ kubectl create configmap krb5-config --from-file=krb5.conf=/etc/krb5.conf -n crossplane-system
The krb5.conf
file should look something like this:
[libdefaults]
default_realm = DANA-DEV.COM
[realms]
DANA-DEV.COM = {
kdc = dana-wdc-1.dana-dev.com
admin_server = dana-wdc-1.dana-dev.com
}
[domain_realm]
.dana-dev.com = DANA-DEV.COM
dana-dev.com = DANA-DEV.COM
Install the provider
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: provider-dns
spec:
package: ghcr.io/dana-team/provider-dns:<release>
runtimeConfigRef:
apiVersion: pkg.crossplane.io/v1beta1
kind: DeploymentRuntimeConfig
name: config
apiVersion: pkg.crossplane.io/v1beta1
kind: DeploymentRuntimeConfig
metadata:
name: config
spec:
deploymentTemplate:
spec:
selector:
matchLabels:
pkg.crossplane.io/provider: provider-dns
template:
spec:
containers:
- args:
- --debug
name: package-runtime
volumeMounts:
- mountPath: /etc/krb5.conf
name: krb5-config
readOnly: true
subPath: krb5.conf
volumes:
- configMap:
name: krb5-config
name: krb5-config
Configuration
The provider supports both RFC 2845
and RFC 3645
authentication models, but was only tested with RFC 3645
. Each authentication model has different required parameters, refer to the Terraform provider-dns for more details.
To connect to the provider, create the following secret
:
apiVersion: v1
kind: Secret
metadata:
name: example-creds
namespace: crossplane-system
type: Opaque
stringData:
credentials: |
{
"rfc": "3645",
"server": "<DNS-SERVER-FQDN>",
"realm": "<DOMAIN-NAME-IN-CAPS>,
"username": "<DOMAIN-USER>",
"password": "<DOMAIN-USER-PASSWORD>"
}
For example:
apiVersion: v1
kind: Secret
metadata:
name: example-creds
namespace: crossplane-system
type: Opaque
stringData:
credentials: |
{
"rfc": "3645",
"server": "dana-wdc-1.dana-dev.com",
"realm": "DANA-DEV.COM",
"username": "dana",
"password": "KLm&x7Cv%GT@k!"
}
Then create the ProviderConfig
:
apiVersion: dns.dns.crossplane.io/v1beta1
kind: ProviderConfig
metadata:
name: default
spec:
credentials:
source: Secret
secretRef:
name: example-creds
namespace: crossplane-system
key: credentials
Resources
To Install the CRDs manually, run:
$ make generate
$ kubectl apply -f package/crds
The following table summarizes the available resources:
Name |
apiVersion |
Namespaced |
Kind |
ptrs |
record.dns.crossplane.io/v1alpha1 |
false |
PTRRecord |
cnamerecords |
record.dns.crossplane.io/v1alpha1 |
false |
CNAMERecord |
aaaarecordsets |
recordset.dns.crossplane.io/v1alpha1 |
false |
AAAARecordSet |
arecordsets |
recordset.dns.crossplane.io/v1alpha1 |
false |
ARecordSet |
mxrecordsets |
recordset.dns.crossplane.io/v1alpha1 |
false |
MXRecordSet |
nsrecordsets |
recordset.dns.crossplane.io/v1alpha1 |
false |
NSRecordSet |
srvrecordsets |
recordset.dns.crossplane.io/v1alpha1 |
false |
SRVRecordSet |
txtrecordsets |
recordset.dns.crossplane.io/v1alpha1 |
false |
TXTRecordSet |
Examples
ARecordSet
apiVersion: recordset.dns.crossplane.io/v1alpha1
kind: ARecordSet
metadata:
name: crossplane-test
spec:
forProvider:
addresses:
- 10.1.30.1
- 10.1.30.2
- 10.1.30.3
ttl: 3600
zone: crossplane.dana-dev.com.
name: testy-test # actual name of the record
providerConfigRef:
name: default
In order to create a record in a subdomain, include the subdomain in the name:
apiVersion: recordset.dns.crossplane.io/v1alpha1
kind: ARecordSet
metadata:
name: crossplane-test-sub
spec:
forProvider:
addresses:
- 10.1.30.1
- 10.1.30.2
- 10.1.30.3
ttl: 3600
zone: crossplane.dana-dev.com.
name: testy-test.example-sub # record will be called testy-test in subdomain example-sub
providerConfigRef:
name: default
CNAMERecord
apiVersion: record.dns.crossplane.io/v1alpha1
kind: CNAMERecord
metadata:
name: crossplane-test-caname
spec:
forProvider:
cname: testy-test.crossplane.dana-dev.com.
ttl: 3600
zone: crossplane.dana-dev.com.
name: cname-testy-test
providerConfigRef:
name: default
For details on how to configure the rest of the resources, use kubectl explain
to see the available spec
options, and advise with the Terraform provider-dns docs.