Skip to content

Part 3: Workload

What Will You Do

  • Create a K8s YAML workload that will deploy sample application with a hostname in our hosted zone and a service of Type LoadBalancer
  • Verify we can access the application via the LoadBalancer using the hostname

Step 1: Create Workload YAML

We are using a nginx deployment in this example to create a service of type LoadBalancer.

  • Copy the K8s YAML manifest below to a file called "nginx-lb.yaml"
  • Edit line 9 to a hostname for which an A record will be created in our hosted zone
apiVersion: v1
kind: Service
metadata:
  name: nginx
  annotations:
    external-dns.alpha.kubernetes.io/hostname: nginx-lb.dev.rafay-edge.net
spec:
  type: LoadBalancer
  ports:
  - port: 80
    name: http
    targetPort: 80
  selector:
    app: nginx
---
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
          name: http

Step 2: Create Workload

In this step, we will create a workload based on the YAML from the previous step and publish it to our cluster.

  • Click on Application -> Workloads
  • Click on "Create New Workload" with the name "nginx-lb"
  • Select "K8s YAML" for the Package Type
  • Select "Upload files manually" for Artifact Sync
  • Select the "external-dns" namespace from the dropdown
  • Click on "CONTINUE"

Create Workload

  • Select the file created in the previous step
  • Click on "SAVE AND GO TO PLACEMENT"

Create Workload

  • Set the Drift Action to "NotSet"
  • Select a cluster for the placement policy
  • Click on "SAVE AND GO TO PUBLISH"

Create Workload

  • Publish the workload

Create Workload


Step 3: Verify Workload

  • Click on the Kubectl button on the cluster to open a virtual terminal and run the following kubectl command
kubectl get services -n external-dns

NAME           TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)        AGE
external-dns   ClusterIP      10.100.217.116   <none>                                                                    7979/TCP       26m
nginx          LoadBalancer   10.100.42.70     a2dbcc64608e54a0d93f31b2cd3bfdee-1212175333.us-west-2.elb.amazonaws.com   80:31377/TCP   116s
  • Verify in Route 53 that the records have been properly created

Create Workload

  • Verify you can securely access the nginx app using your web browser and the newly created FQDN

Create Workload


Step 4: Unpublish Workload

In this step we will unpublish the workload and verify the Route 53 records are properly deleted

  • Click on Application -> Workloads
  • Click on the 3 dots of the nginx-lb workload
  • Select "Unpublish"

Unpublish Workload

  • You should see similar entries in the external-dns pod log showing that the records have been deleted
time="2023-06-06T05:27:49Z" level=info msg="Desired change: DELETE cname-nginx-lb.dev.rafay-edge.net TXT [Id: /hostedzone/Z1OM749F0P8E4R]"
time="2023-06-06T05:27:49Z" level=info msg="Desired change: DELETE nginx-lb.dev.rafay-edge.net A [Id: /hostedzone/Z1OM749F0P8E4R]"
time="2023-06-06T05:27:49Z" level=info msg="Desired change: DELETE nginx-lb.dev.rafay-edge.net TXT [Id: /hostedzone/Z1OM749F0P8E4R]"
time="2023-06-06T05:27:49Z" level=info msg="3 record(s) in zone dev.rafay-edge.net. [Id: /hostedzone/Z1OM749F0P8E4R] were successfully updated"
  • Verify in Route 53 that the records have been properly deleted

Create Workload


Recap

Congratulations!

You have successfully created a custom cluster blueprint with the "external-dns" add-on and applied it to a cluster. You have created a service of type LoadBalancer and properly created the corresponding Route 53 A record. You can now use this blueprint on as many clusters as you require.