diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java
index 0f1c803..f4bbc6e 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/common/util/Constants.java
@@ -28,6 +28,7 @@
     public static final String DEFAULT_ROOT = "dubbo";
     public static final String PATH_SEPARATOR = "/";
     public static final String GROUP_KEY = "group";
+    public static final String NAMESPACE_KEY = "namespace";
     public static final String CONFIG_KEY = "config" + PATH_SEPARATOR + "dubbo";
     public static final String DUBBO_PROPERTY = "dubbo.properties";
     public static final String PROVIDER_SIDE = "provider";
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
index b0d3379..2bc6fee 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/config/ConfigCenter.java
@@ -65,6 +65,15 @@
     @Value("${admin.metadata-report.group:dubbo}")
     private String metadataGroup;
 
+    @Value("${admin.registry.namespace:dubbo}")
+    private String registryNameSpace;
+
+    @Value("${admin.config-center.namespace:dubbo}")
+    private String configCenterGroupNameSpace;
+
+    @Value("${admin.metadata-report.namespace:dubbo}")
+    private String metadataGroupNameSpace;
+
     @Value("${admin.config-center.username:}")
     private String username;
     @Value("${admin.config-center.password:}")
@@ -86,7 +95,7 @@
         GovernanceConfiguration dynamicConfiguration = null;
 
         if (StringUtils.isNotEmpty(configCenter)) {
-            configCenterUrl = formUrl(configCenter, configCenterGroup, username, password);
+            configCenterUrl = formUrl(configCenter, configCenterGroup, configCenterGroupNameSpace, username, password);
             dynamicConfiguration = ExtensionLoader.getExtensionLoader(GovernanceConfiguration.class).getExtension(configCenterUrl.getProtocol());
             dynamicConfiguration.setUrl(configCenterUrl);
             dynamicConfiguration.init();
@@ -96,16 +105,16 @@
                 Arrays.stream(config.split("\n")).forEach( s -> {
                     if(s.startsWith(Constants.REGISTRY_ADDRESS)) {
                         String registryAddress = s.split("=")[1].trim();
-                        registryUrl = formUrl(registryAddress, configCenterGroup, username, password);
+                        registryUrl = formUrl(registryAddress, configCenterGroup, registryNameSpace, username, password);
                     } else if (s.startsWith(Constants.METADATA_ADDRESS)) {
-                        metadataUrl = formUrl(s.split("=")[1].trim(), configCenterGroup, username, password);
+                        metadataUrl = formUrl(s.split("=")[1].trim(), configCenterGroup, metadataGroupNameSpace, username, password);
                     }
                 });
             }
         }
         if (dynamicConfiguration == null) {
             if (StringUtils.isNotEmpty(registryAddress)) {
-                registryUrl = formUrl(registryAddress, registryGroup, username, password);
+                registryUrl = formUrl(registryAddress, registryGroup, registryNameSpace, username, password);
                 dynamicConfiguration = ExtensionLoader.getExtensionLoader(GovernanceConfiguration.class).getExtension(registryUrl.getProtocol());
                 dynamicConfiguration.setUrl(registryUrl);
                 dynamicConfiguration.init();
@@ -129,7 +138,7 @@
             if (StringUtils.isBlank(registryAddress)) {
                 throw new ConfigurationException("Either config center or registry address is needed, please refer to https://github.com/apache/incubator-dubbo-admin/wiki/Dubbo-Admin-configuration");
             }
-            registryUrl = formUrl(registryAddress, registryGroup, username, password);
+            registryUrl = formUrl(registryAddress, registryGroup, registryNameSpace, username, password);
         }
         RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
         registry = registryFactory.getRegistry(registryUrl);
@@ -145,7 +154,7 @@
         MetaDataCollector metaDataCollector = new NoOpMetadataCollector();
         if (metadataUrl == null) {
             if (StringUtils.isNotEmpty(metadataAddress)) {
-                metadataUrl = formUrl(metadataAddress, metadataGroup, username, password);
+                metadataUrl = formUrl(metadataAddress, metadataGroup, metadataGroupNameSpace, username, password);
                 metadataUrl = metadataUrl.addParameter(CLUSTER_KEY, cluster);
             }
         }
@@ -159,11 +168,14 @@
         return metaDataCollector;
     }
 
-    private URL formUrl(String config, String group, String username, String password) {
+    private URL formUrl(String config, String group, String nameSpace, String username, String password) {
         URL url = URL.valueOf(config);
         if (StringUtils.isNotEmpty(group)) {
             url = url.addParameter(Constants.GROUP_KEY, group);
         }
+        if (StringUtils.isNotEmpty(nameSpace)){
+            url = url.addParameter(Constants.NAMESPACE_KEY, nameSpace);
+        }
         if (StringUtils.isNotEmpty(username)) {
             url = url.setUsername(username);
         }
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/config/impl/NacosConfiguration.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/config/impl/NacosConfiguration.java
index 1a8d71b..1a36c36 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/config/impl/NacosConfiguration.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/config/impl/NacosConfiguration.java
@@ -31,18 +31,20 @@
 import java.util.Properties;
 
 import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR;
+import static com.alibaba.nacos.api.PropertyKeyConst.NAMESPACE;
 
 public class NacosConfiguration implements GovernanceConfiguration {
     private static final Logger logger = LoggerFactory.getLogger(NacosConfiguration.class);
 
     private ConfigService configService;
+    private String nameSpace;
     private String group;
     private URL url;
 
     @Override
     public void init() {
         group = url.getParameter(Constants.GROUP_KEY, "DEFAULT_GROUP");
-
+        nameSpace = url.getParameter(Constants.NAMESPACE_KEY, "public");
         configService = buildConfigService(url);
     }
 
@@ -72,6 +74,7 @@
                 url.getPort() // Port
                 ;
         properties.put(SERVER_ADDR, serverAddr);
+        properties.put(NAMESPACE, nameSpace);
     }
 
 
diff --git a/dubbo-admin-server/src/main/resources/application.properties b/dubbo-admin-server/src/main/resources/application.properties
index d8fc958..a34f434 100644
--- a/dubbo-admin-server/src/main/resources/application.properties
+++ b/dubbo-admin-server/src/main/resources/application.properties
@@ -20,6 +20,10 @@
 admin.config-center=zookeeper://127.0.0.1:2183
 admin.metadata-report.address=zookeeper://127.0.0.1:2183
 
+#admin.registry.address=nacos://127.0.0.1:8848
+#admin.config-center=nacos://127.0.0.1:8848
+#admin.metadata-report.address=nacos://127.0.0.1:8848
+
 admin.root.user.name=root
 admin.root.user.password=root
 #group
@@ -27,6 +31,11 @@
 admin.config-center.group=dubbo
 admin.metadata-report.group=dubbo
 
+#namespace used by nacos
+admin.registry.namespace=public
+admin.config-center.namespace=public
+admin.metadata-report.namespace=public
+
 admin.apollo.token=e16e5cd903fd0c97a116c873b448544b9d086de9
 admin.apollo.appId=test
 admin.apollo.env=dev
