diff --git a/clusters/cl01tl/services/external-dns/Chart.yaml b/clusters/cl01tl/services/external-dns/Chart.yaml new file mode 100644 index 000000000..b6c7eafae --- /dev/null +++ b/clusters/cl01tl/services/external-dns/Chart.yaml @@ -0,0 +1,22 @@ +apiVersion: v2 +name: external-dns +version: 1.0.0 +description: External DNS +keywords: + - external-dns + - dns + - unifi + - kubernetes +home: https://wiki.alexlebens.dev/doc/external-dns-Zdhuh9NAT1 +sources: + - https://github.com/kubernetes-sigs/external-dns + - https://github.com/kubernetes-sigs/external-dns/tree/master/charts/external-dns +maintainers: + - name: alexlebens +dependencies: + - name: external-dns + alias: external-dns-unifi + version: 1.15.1 + repository: https://kubernetes-sigs.github.io/external-dns/ +icon: https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/kubernetes.png +appVersion: 1.15.0 diff --git a/clusters/cl01tl/services/external-dns/templates/dns-endpoint.yaml b/clusters/cl01tl/services/external-dns/templates/dns-endpoint.yaml new file mode 100644 index 000000000..d5ae0e33c --- /dev/null +++ b/clusters/cl01tl/services/external-dns/templates/dns-endpoint.yaml @@ -0,0 +1,109 @@ +apiVersion: externaldns.k8s.io/v1alpha1 +kind: DNSEndpoint +metadata: + name: external-device-names + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: external-device-names + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} + app.kubernetes.io/component: networking + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + endpoints: + # Unifi UDM + - dnsName: unifi.alexlebens.net + recordTTL: 180 + recordType: A + targets: + - 192.168.1.1 + # Synology Web + - dnsName: synology.alexlebens.net + recordTTL: 180 + recordType: A + targets: + - 10.232.1.61 + # Synology Storage + - dnsName: synologybond.alexlebens.net + recordTTL: 180 + recordType: A + targets: + - 10.232.1.64 + # HD Homerun + - dnsName: hdhr.alexlebens.net + recordTTL: 180 + recordType: A + targets: + - 10.232.1.72 + # Pi KVM + - dnsName: pikvm.alexlebens.net + recordTTL: 180 + recordType: A + targets: + - 10.232.1.71 + +--- +apiVersion: externaldns.k8s.io/v1alpha1 +kind: DNSEndpoint +metadata: + name: iot-device-names + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: iot-device-names + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} + app.kubernetes.io/component: networking + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + endpoints: + # Airgradient + - dnsName: it01ag.alexlebens.net + recordTTL: 180 + recordType: A + targets: + - 10.232.1.83 + # Phillips Hue + - dnsName: it02ph.alexlebens.net + recordTTL: 180 + recordType: A + targets: + - 10.232.1.85 + # TubesZB ZigBee + - dnsName: it03tb.alexlebens.net + recordTTL: 180 + recordType: A + targets: + - 10.232.1.81 + # TubesZB Z-Wave + - dnsName: it04tb.alexlebens.net + recordTTL: 180 + recordType: A + targets: + - 10.232.1.82 + +--- +apiVersion: externaldns.k8s.io/v1alpha1 +kind: DNSEndpoint +metadata: + name: server-host-names + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: server-host-names + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} + app.kubernetes.io/component: networking + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + endpoints: + # Synology + - dnsName: ps02sn.alexlebens.net + recordTTL: 180 + recordType: A + targets: + - 10.232.1.61 + # Synology Storage + - dnsName: ps02sn-bond.alexlebens.net + recordTTL: 180 + recordType: A + targets: + - 10.232.1.64 diff --git a/clusters/cl01tl/services/external-dns/templates/external-secret.yaml b/clusters/cl01tl/services/external-dns/templates/external-secret.yaml new file mode 100644 index 000000000..3326e79d4 --- /dev/null +++ b/clusters/cl01tl/services/external-dns/templates/external-secret.yaml @@ -0,0 +1,30 @@ +apiVersion: external-secrets.io/v1beta1 +kind: ExternalSecret +metadata: + name: external-dns-unifi-secret + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: external-dns-unifi-secret + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/version: {{ .Chart.AppVersion }} + app.kubernetes.io/component: web + app.kubernetes.io/part-of: {{ .Release.Name }} +spec: + secretStoreRef: + kind: ClusterSecretStore + name: vault + data: + - secretKey: username + remoteRef: + conversionStrategy: Default + decodingStrategy: None + key: /unifi/auth + metadataPolicy: None + property: user + - secretKey: password + remoteRef: + conversionStrategy: Default + decodingStrategy: None + key: /unifi/auth + metadataPolicy: None + property: password diff --git a/clusters/cl01tl/services/external-dns/values.yaml b/clusters/cl01tl/services/external-dns/values.yaml new file mode 100644 index 000000000..2716c9eee --- /dev/null +++ b/clusters/cl01tl/services/external-dns/values.yaml @@ -0,0 +1,51 @@ +external-dns-unifi: + fullnameOverride: external-dns-unifi + serviceMonitor: + enabled: true + interval: 1m + sources: + - ingress + - crd + - gateway-httproute + - gateway-tlsroute + policy: sync + registry: txt + txtOwnerId: default + txtPrefix: k8s. + domainFilters: ["alexlebens.net"] + excludeDomains: [] + provider: + name: webhook + webhook: + image: + repository: ghcr.io/kashalls/external-dns-unifi-webhook + tag: v0.4.1 + env: + - name: UNIFI_HOST + value: https://192.168.1.1 + - name: UNIFI_USER + valueFrom: + secretKeyRef: + name: external-dns-unifi-secret + key: username + - name: UNIFI_PASS + valueFrom: + secretKeyRef: + name: external-dns-unifi-secret + key: password + - name: LOG_LEVEL + value: debug + livenessProbe: + httpGet: + path: /healthz + port: http-webhook + initialDelaySeconds: 10 + timeoutSeconds: 5 + readinessProbe: + httpGet: + path: /readyz + port: http-webhook + initialDelaySeconds: 10 + timeoutSeconds: 5 + extraArgs: + - --ignore-ingress-tls-spec