diff --git a/core/api/src/main/java/org/onosproject/cluster/ClusterMetadata.java b/core/api/src/main/java/org/onosproject/cluster/ClusterMetadata.java
index bf3e4a0..521e20a 100644
--- a/core/api/src/main/java/org/onosproject/cluster/ClusterMetadata.java
+++ b/core/api/src/main/java/org/onosproject/cluster/ClusterMetadata.java
@@ -41,10 +41,14 @@
  */
 public final class ClusterMetadata implements Provided {
 
+    private static final ProviderId NONE_PROVIDER_ID = new ProviderId("none", "none");
+    private static final String DEFAULT_CLUSTER_SECRET = "INSECURE!";
+
     private final ProviderId providerId;
     private final String name;
     private final ControllerNode localNode;
     private final Set<ControllerNode> controllerNodes;
+    private final String storageDnsService;
     private final Set<Node> storageNodes;
     private final String clusterSecret;
 
@@ -62,6 +66,7 @@
         name = null;
         localNode = null;
         controllerNodes = null;
+        storageDnsService = null;
         storageNodes = null;
         clusterSecret = null;
     }
@@ -72,6 +77,7 @@
      * @param name The cluster Name
      * @param localNode The local node
      * @param controllerNodes Set of nodes in cluster
+     * @param storageDnsService The storage DNS service name
      * @param storageNodes Set of storage nodes
      */
     @Deprecated
@@ -80,13 +86,19 @@
             String name,
             ControllerNode localNode,
             Set<ControllerNode> controllerNodes,
+            String storageDnsService,
             Set<Node> storageNodes) {
-        this.providerId = checkNotNull(providerId);
-        this.name = checkNotNull(name);
-        this.localNode = localNode;
-        this.controllerNodes = ImmutableSet.copyOf(checkNotNull(controllerNodes));
-        this.storageNodes = ImmutableSet.copyOf(checkNotNull(storageNodes));
-        this.clusterSecret = "INSECURE!";
+        this(providerId, name, localNode, controllerNodes, storageDnsService, storageNodes, DEFAULT_CLUSTER_SECRET);
+    }
+
+    public ClusterMetadata(
+            ProviderId providerId,
+            String name,
+            ControllerNode localNode,
+            Set<ControllerNode> controllerNodes,
+            Set<Node> storageNodes,
+            String clusterSecret) {
+        this(providerId, name, localNode, controllerNodes, null, storageNodes, clusterSecret);
     }
 
     public ClusterMetadata(
@@ -94,12 +106,14 @@
         String name,
         ControllerNode localNode,
         Set<ControllerNode> controllerNodes,
+        String storageDnsService,
         Set<Node> storageNodes,
         String clusterSecret) {
         this.providerId = checkNotNull(providerId);
         this.name = checkNotNull(name);
         this.localNode = localNode;
         this.controllerNodes = ImmutableSet.copyOf(checkNotNull(controllerNodes));
+        this.storageDnsService = storageDnsService;
         this.storageNodes = ImmutableSet.copyOf(checkNotNull(storageNodes));
         this.clusterSecret = clusterSecret;
     }
@@ -113,14 +127,20 @@
      */
     @Deprecated
     public ClusterMetadata(
-            String name, ControllerNode localNode, Set<ControllerNode> controllerNodes, Set<Node> storageNodes) {
-        this(new ProviderId("none", "none"), name, localNode, controllerNodes, storageNodes, "INSECURE!");
+            String name,
+            ControllerNode localNode,
+            Set<ControllerNode> controllerNodes,
+            Set<Node> storageNodes) {
+        this(NONE_PROVIDER_ID, name, localNode, controllerNodes, null, storageNodes, DEFAULT_CLUSTER_SECRET);
     }
 
     public ClusterMetadata(
-            String name, ControllerNode localNode, Set<ControllerNode> controllerNodes, Set<Node> storageNodes,
+            String name,
+            ControllerNode localNode,
+            Set<ControllerNode> controllerNodes,
+            Set<Node> storageNodes,
             String clusterSecret) {
-        this(new ProviderId("none", "none"), name, localNode, controllerNodes, storageNodes, clusterSecret);
+        this(NONE_PROVIDER_ID, name, localNode, controllerNodes, null, storageNodes, clusterSecret);
     }
 
     @Override
@@ -138,6 +158,15 @@
     }
 
     /**
+     * Returns the DNS service through which to locate storage nodes.
+     *
+     * @return the DNS service through which to locate storage nodes
+     */
+    public String getStorageDnsService() {
+        return storageDnsService;
+    }
+
+    /**
      * Returns the local controller node.
      * @return the local controller node
      */
diff --git a/core/net/src/main/java/org/onosproject/cluster/impl/ConfigFileBasedClusterMetadataProvider.java b/core/net/src/main/java/org/onosproject/cluster/impl/ConfigFileBasedClusterMetadataProvider.java
index 807a143..f3711e2 100644
--- a/core/net/src/main/java/org/onosproject/cluster/impl/ConfigFileBasedClusterMetadataProvider.java
+++ b/core/net/src/main/java/org/onosproject/cluster/impl/ConfigFileBasedClusterMetadataProvider.java
@@ -117,6 +117,7 @@
                 .stream()
                 .map(this::toPrototype)
                 .collect(Collectors.toSet()));
+        prototype.setStorageDnsService(metadata.getStorageDnsService());
         prototype.setStorage(metadata.getStorageNodes()
                 .stream()
                 .map(this::toPrototype)
@@ -274,6 +275,7 @@
                         .stream()
                         .map(node -> new DefaultControllerNode(getNodeId(node), getNodeHost(node), getNodePort(node)))
                         .collect(Collectors.toSet()),
+                    metadata.getStorageDnsService(),
                     metadata.getStorage()
                         .stream()
                         .map(node -> new DefaultControllerNode(getNodeId(node), getNodeHost(node), getNodePort(node)))
@@ -310,6 +312,7 @@
         private String name;
         private NodePrototype node;
         private Set<NodePrototype> controller = Sets.newHashSet();
+        private String storageDnsService;
         private Set<NodePrototype> storage = Sets.newHashSet();
         private String clusterSecret;
 
@@ -337,6 +340,14 @@
             this.controller = controller;
         }
 
+        public String getStorageDnsService() {
+            return storageDnsService;
+        }
+
+        public void setStorageDnsService(String storageDnsService) {
+            this.storageDnsService = storageDnsService;
+        }
+
         public Set<NodePrototype> getStorage() {
             return storage;
         }
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/atomix/impl/AtomixManager.java b/core/store/primitives/src/main/java/org/onosproject/store/atomix/impl/AtomixManager.java
index c46ce87..3f2edf5 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/atomix/impl/AtomixManager.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/atomix/impl/AtomixManager.java
@@ -17,6 +17,8 @@
 
 import io.atomix.cluster.Node;
 import io.atomix.cluster.discovery.BootstrapDiscoveryProvider;
+import io.atomix.cluster.discovery.DnsDiscoveryProvider;
+import io.atomix.cluster.discovery.NodeDiscoveryProvider;
 import io.atomix.core.Atomix;
 import io.atomix.protocols.raft.partition.RaftPartitionGroup;
 import org.onosproject.cluster.ClusterMetadata;
@@ -72,6 +74,26 @@
 
     private Atomix createAtomix() {
         ClusterMetadata metadata = metadataService.getClusterMetadata();
+
+        // If a storage DNS service was provided, use the DNS service for service discovery.
+        // Otherwise, use a static list of storage nodes.
+        NodeDiscoveryProvider discovery;
+        if (metadata.getStorageDnsService() != null) {
+            discovery = DnsDiscoveryProvider.builder()
+                .withService(metadata.getStorageDnsService())
+                .build();
+        } else {
+            discovery = BootstrapDiscoveryProvider.builder()
+                .withNodes(metadata.getStorageNodes().stream()
+                    .map(node -> Node.builder()
+                        .withId(node.id().id())
+                        .withHost(node.host())
+                        .withPort(node.tcpPort())
+                        .build())
+                    .collect(Collectors.toList()))
+                .build();
+        }
+
         if (!metadata.getStorageNodes().isEmpty()) {
             // If storage nodes are defined, construct an instance that connects to them for service discovery.
             return Atomix.builder(getClass().getClassLoader())
@@ -80,15 +102,7 @@
                 .withHost(metadata.getLocalNode().host())
                 .withPort(metadata.getLocalNode().tcpPort())
                 .withProperty("type", "onos")
-                .withMembershipProvider(BootstrapDiscoveryProvider.builder()
-                    .withNodes(metadata.getStorageNodes().stream()
-                        .map(node -> Node.builder()
-                            .withId(node.id().id())
-                            .withHost(node.host())
-                            .withPort(node.tcpPort())
-                            .build())
-                        .collect(Collectors.toList()))
-                    .build())
+                .withMembershipProvider(discovery)
                 .build();
         } else {
             log.warn("No storage nodes found in cluster metadata!");
@@ -107,15 +121,7 @@
                 .withHost(metadata.getLocalNode().host())
                 .withPort(metadata.getLocalNode().tcpPort())
                 .withProperty("type", "onos")
-                .withMembershipProvider(BootstrapDiscoveryProvider.builder()
-                    .withNodes(metadata.getControllerNodes().stream()
-                        .map(node -> io.atomix.cluster.Node.builder()
-                            .withId(node.id().id())
-                            .withHost(node.host())
-                            .withPort(node.tcpPort())
-                            .build())
-                        .collect(Collectors.toList()))
-                    .build())
+                .withMembershipProvider(discovery)
                 .withManagementGroup(RaftPartitionGroup.builder("system")
                     .withNumPartitions(1)
                     .withDataDirectory(new File(LOCAL_DATA_DIR, "system"))
