Skip to main content
  1. Posts/

Kubernetes External DNS with PowerDNS

·2 mins·
kubernetes pdns kubernetes
Table of Contents

Pada panduan ini akan membahas cara mengonfigurasi external DNS di kluster Kubernetes. Dengan men-deploy external DNS di kluster, proses pengelolaan data DNS pada aplikasi, service, atau ingress dapat lebih efisien waktu.

Preparation:

  • Server DNS dengan PowerDNS dan PowerDNS-Admin.
  • MetalLB

Create the namespace
#

Buat namespace dengan nama external-dns-pdns

kubectl create namespace external-dns-pdns

Set Up ExternalDNS
#

Buat manifest RBAC yang terdiri dari beberapa resource seperti ServiceAccount, ClusterRole, dan ClusterRoleBinding.

apiVersion: v1
kind: ServiceAccount
metadata:
  name: external-dns
  namespace: external-dns-pdns
---
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: ["pods"]
  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: external-dns-pdns

Selanjutnya buat resource deployment untuk men-deploy external DNS dengan PowerDNS.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: external-dns
  namespace: external-dns-pdns
spec:
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: external-dns
  template:
    metadata:
      labels:
        app: external-dns
    spec:
      # Only use if you're also using RBAC
      serviceAccountName: external-dns
      containers:
      - name: external-dns
        image: registry.k8s.io/external-dns/external-dns:v0.13.5
        args:
        - --source=service # or ingress or both
        - --provider=pdns
        - --pdns-server=http://192.168.100.31:8081 # Your PowerDNS API URL (eg. http://127.0.0.1:8081)
        - --pdns-api-key=7c354e13f2482cd821c715b563d5f90ea4a57a
        - --txt-owner-id=2023081202
        - --domain-filter=muterin.local 
        - --log-level=debug
        - --interval=30s

Ganti domain pada --domain-filter dengan domain yang ada di server DNS, sedangkan --txt-owner-id dapat dengan bebas Anda tentukan. Namun Saya sarankan untuk diisi dengan serial domain.

Pastikan status pod external-dns running. Jika status pod error, cek logs atau events kemungkinan ada kesalahan konfigurasi server.

kubectl logs -n external-dns-pdns pod/external-dns-xxx-xx
kubectl events -n external-dns-pdns pod/external-dns-xxx-xx

Testing and Verification
#

Test dengan cara membuat deployment menggunakan image nginxdemos/hello lalu buat service dengan menambahkan external-dns.alpha.kubernetes.io/hostname: pada bagian annotations.

apiVersion: v1
kind: Namespace
metadata:
  name: site
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
  namespace: site
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
      - image: nginxdemos/hello
        name: hello
        ports:
        - containerPort: 80
          protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  annotations:
    external-dns.alpha.kubernetes.io/hostname: demo.muterin.local
  name: demo
  namespace: site
spec:
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: demo
  type: LoadBalancer

Tunggu sekitar 30 detik sampai 1 menit, lalu cek pada dashboard PowerDNS-Admin untuk memastikan record sudah berhasil dibuat.

Atau dapat dicek menggunakan perintah dig.

dig demo.muterin.local @IP-DNS

Related

Convert Docker Compose to Kubernetes Resources
·1 min
kubernetes kubernetes
Backup dan Restore Etcd pada Kubernetes Cluster
·2 mins
kubernetes kubernetes
Deploy Kubernetes Dashboard
·1 min
kubernetes kubernetes
Deploy Pod ke Node Tertentu
·2 mins
kubernetes kubernetes
Kubectl Cheat Sheet
·14 mins
kubernetes kubernetes
Kubernetes Internal Errors: Failed Calling Webhook
·1 min
kubernetes kubernetes