diff --git a/.github/ISSUE_TEMPLATE/dubbo-admin-issue-report-template.md b/.github/ISSUE_TEMPLATE/dubbo-admin-issue-report-template.md
index 7f5fd1e..8eec018 100644
--- a/.github/ISSUE_TEMPLATE/dubbo-admin-issue-report-template.md
+++ b/.github/ISSUE_TEMPLATE/dubbo-admin-issue-report-template.md
@@ -9,7 +9,7 @@
 
 ### Environment
 
-* Dubbo version: xxx
+* Dubbo Admin version: xxx
 * Registry center detail (type and version): xxx
 * Operating System version: xxx
 * Java version: xxx
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 2bc6fee..994bb8c 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
@@ -105,9 +105,9 @@
                 Arrays.stream(config.split("\n")).forEach( s -> {
                     if(s.startsWith(Constants.REGISTRY_ADDRESS)) {
                         String registryAddress = s.split("=")[1].trim();
-                        registryUrl = formUrl(registryAddress, configCenterGroup, registryNameSpace, username, password);
+                        registryUrl = formUrl(registryAddress, registryGroup, registryNameSpace, username, password);
                     } else if (s.startsWith(Constants.METADATA_ADDRESS)) {
-                        metadataUrl = formUrl(s.split("=")[1].trim(), configCenterGroup, metadataGroupNameSpace, username, password);
+                        metadataUrl = formUrl(s.split("=")[1].trim(), metadataGroup, metadataGroupNameSpace, username, password);
                     }
                 });
             }
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 1a36c36..7c43055 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
@@ -37,14 +37,12 @@
     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);
     }
 
@@ -64,6 +62,7 @@
     private Properties buildNacosProperties(URL url) {
         Properties properties = new Properties();
         setServerAddr(url, properties);
+        setNamespace(url, properties);
         return properties;
     }
 
@@ -74,7 +73,13 @@
                 url.getPort() // Port
                 ;
         properties.put(SERVER_ADDR, serverAddr);
-        properties.put(NAMESPACE, nameSpace);
+    }
+
+    private void setNamespace(URL url, Properties properties) {
+        String namespace = url.getParameter(NAMESPACE);
+        if (StringUtils.isNotBlank(namespace)) {
+            properties.put(NAMESPACE, namespace);
+        }
     }
 
 
diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/NacosMetaDataCollector.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/NacosMetaDataCollector.java
index ac2752a..96b98b0 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/NacosMetaDataCollector.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/registry/metadata/impl/NacosMetaDataCollector.java
@@ -28,10 +28,12 @@
 import com.alibaba.nacos.api.NacosFactory;
 import com.alibaba.nacos.api.config.ConfigService;
 import com.alibaba.nacos.api.exception.NacosException;
+import org.apache.commons.lang3.StringUtils;
 
 import java.util.Properties;
 
 import static com.alibaba.nacos.api.PropertyKeyConst.SERVER_ADDR;
+import static com.alibaba.nacos.api.PropertyKeyConst.NAMESPACE;
 
 public class NacosMetaDataCollector implements MetaDataCollector {
     private static final Logger logger = LoggerFactory.getLogger(NacosMetaDataCollector.class);
@@ -51,7 +53,6 @@
     @Override
     public void init() {
         group = url.getParameter(Constants.GROUP_KEY, "DEFAULT_GROUP");
-
         configService = buildConfigService(url);
     }
 
@@ -71,6 +72,7 @@
     private Properties buildNacosProperties(URL url) {
         Properties properties = new Properties();
         setServerAddr(url, properties);
+        setNamespace(url, properties);
         return properties;
     }
 
@@ -83,6 +85,13 @@
         properties.put(SERVER_ADDR, serverAddr);
     }
 
+    private void setNamespace(URL url, Properties properties) {
+        String namespace = url.getParameter(NAMESPACE);
+        if (StringUtils.isNotBlank(namespace)) {
+            properties.put(NAMESPACE, namespace);
+        }
+    }
+
     @Override
     public String getProviderMetaData(MetadataIdentifier key) {
         return getMetaData(key);
diff --git a/dubbo-admin-test/pom.xml b/dubbo-admin-test/pom.xml
index ab76dae..5bb8746 100644
--- a/dubbo-admin-test/pom.xml
+++ b/dubbo-admin-test/pom.xml
@@ -31,7 +31,6 @@
     <properties>
         <source.level>1.8</source.level>
         <target.level>1.8</target.level>
-        <dubbo.version>2.7.7</dubbo.version>
         <spring.version>4.3.16.RELEASE</spring.version>
         <junit.version>4.12</junit.version>
         <jib-maven-plugin.version>2.4.0</jib-maven-plugin.version>
@@ -50,7 +49,7 @@
             <dependency>
                 <groupId>org.apache.dubbo</groupId>
                 <artifactId>dubbo-dependencies-bom</artifactId>
-                <version>${dubbo.version}</version>
+                <version>${dubbo-version}</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
@@ -61,13 +60,13 @@
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo</artifactId>
-            <version>${dubbo.version}</version>
+            <version>${dubbo-version}</version>
         </dependency>
 
         <dependency>
             <groupId>org.apache.dubbo</groupId>
             <artifactId>dubbo-dependencies-zookeeper</artifactId>
-            <version>${dubbo.version}</version>
+            <version>${dubbo-version}</version>
             <type>pom</type>
         </dependency>
 
