diff --git a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpConfiguration.java b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpConfiguration.java
index 59b6b4c..b233488 100644
--- a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpConfiguration.java
+++ b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpConfiguration.java
@@ -52,4 +52,63 @@
       this.sslCustom = sslCustom;
     }
   }
+
+  class AKSKProperties {
+    private boolean enabled;
+
+    private String accessKey;
+
+    private String secretKey;
+
+    private String cipher;
+
+    private String project;
+
+    public boolean isEnabled() {
+      return enabled;
+    }
+
+    public void setEnabled(boolean enabled) {
+      this.enabled = enabled;
+    }
+
+    public String getAccessKey() {
+      return accessKey;
+    }
+
+    public void setAccessKey(String accessKey) {
+      this.accessKey = accessKey;
+    }
+
+    public String getSecretKey() {
+      if ("ShaAKSKCipher".equalsIgnoreCase(this.cipher)) {
+        return this.secretKey;
+      }
+      try {
+        return HttpUtils.sha256Encode(this.secretKey, this.accessKey);
+      } catch (Exception e) {
+        throw new IllegalArgumentException("not able to encode ak sk.", e);
+      }
+    }
+
+    public void setSecretKey(String secretKey) {
+      this.secretKey = secretKey;
+    }
+
+    public String getCipher() {
+      return cipher;
+    }
+
+    public void setCipher(String cipher) {
+      this.cipher = cipher;
+    }
+
+    public String getProject() {
+      return project;
+    }
+
+    public void setProject(String project) {
+      this.project = project;
+    }
+  }
 }
diff --git a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpTransportFactory.java b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpTransportFactory.java
index 3fa5f73..f9c7b6c 100644
--- a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpTransportFactory.java
+++ b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpTransportFactory.java
@@ -43,7 +43,8 @@
   private HttpTransportFactory() {
   }
 
-  public static HttpTransport createHttpTransport(HttpConfiguration.SSLProperties sslProperties) {
+  public static HttpTransport createHttpTransport(HttpConfiguration.SSLProperties sslProperties,
+      HttpConfiguration.AKSKProperties akskProperties) {
     RequestConfig config = RequestConfig.custom()
         .setConnectTimeout(CONNECT_TIMEOUT)
         .setConnectionRequestTimeout(
@@ -72,6 +73,6 @@
         setConnectionManager(connectionManager).
         disableCookieManagement();
 
-    return new HttpTransportImpl(httpClientBuilder.build());
+    return new HttpTransportImpl(httpClientBuilder.build(), akskProperties);
   }
 }
diff --git a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpTransportImpl.java b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpTransportImpl.java
index 06f714d..7019d87 100644
--- a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpTransportImpl.java
+++ b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpTransportImpl.java
@@ -22,6 +22,8 @@
 
 import org.apache.http.client.HttpClient;
 import org.apache.http.util.EntityUtils;
+import org.apache.servicecomb.http.client.common.HttpConfiguration.AKSKProperties;
+import org.apache.servicecomb.http.client.common.auth.AKSKHeaderUtil;
 
 /**
  * Created by   on 2019/10/16.
@@ -36,8 +38,11 @@
 
   private Map<String, String> globalHeaders;
 
-  public HttpTransportImpl(HttpClient httpClient) {
+  private AKSKProperties akskProperties;
+
+  public HttpTransportImpl(HttpClient httpClient, AKSKProperties akskProperties) {
     this.httpClient = httpClient;
+    this.akskProperties = akskProperties;
   }
 
   public HttpClient getHttpClient() {
@@ -82,6 +87,8 @@
       globalHeaders.forEach(httpRequest::addHeader);
     }
 
+    AKSKHeaderUtil.addAKSKHeader(httpRequest, akskProperties);
+
     //get Http response
     org.apache.http.HttpResponse response = httpClient.execute(httpRequest.getRealRequest());
 
diff --git a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpUtils.java b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpUtils.java
index 0ce07e6..e9c4e1f 100644
--- a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpUtils.java
+++ b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpUtils.java
@@ -19,29 +19,45 @@
 
 import java.io.IOException;
 import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 
-import com.fasterxml.jackson.core.type.TypeReference;
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+
+import org.apache.commons.codec.binary.Hex;
+
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 public final class HttpUtils {
+  private static final String ALGORITHM_HMACSHA256 = "HmacSHA256";
+
   private static final ObjectMapper MAPPER = new MessageObjectMapper();
 
   public static <T> T deserialize(String content, Class<T> clazz) throws IOException {
     return MAPPER.readValue(content, clazz);
   }
 
-  public static <T> T deserialize(String content, TypeReference<T> clazz) throws IOException {
-    return MAPPER.readValue(content, clazz);
-  }
-
   public static String serialize(Object value) throws IOException {
     return MAPPER.writeValueAsString(value);
   }
 
+  public static JsonNode readTree(String content) throws IOException {
+    return MAPPER.readTree(content);
+  }
+
   public static String encodeURLParam(String value) throws IOException {
     if (value == null) {
       return "";
     }
     return URLEncoder.encode(value, "UTF-8");
   }
+
+  public static String sha256Encode(String key, String data) throws Exception {
+    Mac mac = Mac.getInstance(ALGORITHM_HMACSHA256);
+    SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(StandardCharsets.UTF_8),
+        ALGORITHM_HMACSHA256);
+    mac.init(secretKey);
+    return Hex.encodeHexString(mac.doFinal(data.getBytes(StandardCharsets.UTF_8)));
+  }
 }
diff --git a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/auth/AKSKHeaderExtension.java b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/auth/AKSKHeaderExtension.java
new file mode 100644
index 0000000..85afa7b
--- /dev/null
+++ b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/auth/AKSKHeaderExtension.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.http.client.common.auth;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+public abstract class AKSKHeaderExtension {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(AKSKHeaderExtension.class);
+
+  protected static final String DEFAULT_SECRET_AUTH_PATH = "/opt/CSE/etc/auth";
+
+  protected static final String DEFAULT_SECRET_AUTH_NAME = ".dockerconfigjson";
+
+  private static final int EXPECTED_ARR_LENGTH = 2;
+
+  private boolean runOverHWC = !StringUtils.isEmpty(System.getenv("KUBERNETES_SERVICE_HOST"));
+
+  private Map<String, String> defaultAuthHeaders = Collections.emptyMap();
+
+  private boolean loaded = false;
+
+  protected Map<String, String> getHeaders() {
+    if (!runOverHWC) {
+      return defaultAuthHeaders;
+    }
+    if (!loaded) {
+      synchronized (this) {
+        if (!loaded) {
+          createAuthHeaders();
+        }
+      }
+    }
+    return defaultAuthHeaders;
+  }
+
+  public abstract void createAuthHeaders();
+
+  protected void decode(JsonNode authNode) throws IOException {
+    if (authNode == null) {
+      return;
+    }
+    Map<String, String> authHeaders = new HashMap<String, String>();
+    String authStr = authNode.asText();
+    String authBase64Decode = new String(Base64.decodeBase64(authStr), "UTF-8");
+    String[] auths = authBase64Decode.split("@");
+    String[] akAndShaAkSk = auths[1].split(":");
+    if (auths.length != EXPECTED_ARR_LENGTH || akAndShaAkSk.length != EXPECTED_ARR_LENGTH) {
+      LOGGER.error("get docker config failed. The data is not valid cause of unexpected format");
+      return;
+    }
+    String project = auths[0];
+    String ak = akAndShaAkSk[0];
+    String shaAkSk = akAndShaAkSk[1];
+    authHeaders.put("X-Service-AK", ak);
+    authHeaders.put("X-Service-ShaAKSK", shaAkSk);
+    authHeaders.put("X-Service-Project", project);
+    defaultAuthHeaders = authHeaders;
+    loaded = true;
+  }
+}
diff --git a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/auth/AKSKHeaderExtensionUtil.java b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/auth/AKSKHeaderExtensionUtil.java
new file mode 100644
index 0000000..7b97ed5
--- /dev/null
+++ b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/auth/AKSKHeaderExtensionUtil.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.http.client.common.auth;
+
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Collections;
+import java.util.Map;
+
+public class AKSKHeaderExtensionUtil {
+
+  private static AKSKHeaderExtension headerExtension = new FileSystemMountAKSKHeaderExtension();
+
+  public static Map<String, String> genAuthHeaders() {
+    if (Files.exists(Paths.get(AKSKHeaderExtension.DEFAULT_SECRET_AUTH_PATH,
+        AKSKHeaderExtension.DEFAULT_SECRET_AUTH_NAME))) {
+      return headerExtension.getHeaders();
+    }
+    return Collections.emptyMap();
+  }
+}
diff --git a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/auth/AKSKHeaderUtil.java b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/auth/AKSKHeaderUtil.java
new file mode 100644
index 0000000..da4d564
--- /dev/null
+++ b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/auth/AKSKHeaderUtil.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.http.client.common.auth;
+
+import java.util.Map;
+
+import org.apache.servicecomb.http.client.common.HttpConfiguration.AKSKProperties;
+import org.apache.servicecomb.http.client.common.HttpRequest;
+
+public class AKSKHeaderUtil {
+  public static final String X_SERVICE_AK = "X-Service-AK";
+
+  public static final String X_SERVICE_SHAAKSK = "X-Service-ShaAKSK";
+
+  public static final String X_SERVICE_PROJECT = "X-Service-Project";
+
+  public static void addAKSKHeader(HttpRequest httpRequest,
+      AKSKProperties serviceCombAkSkProperties) {
+    if (serviceCombAkSkProperties.isEnabled()) {
+      httpRequest.addHeader(X_SERVICE_AK, serviceCombAkSkProperties.getAccessKey());
+      httpRequest.addHeader(X_SERVICE_SHAAKSK, serviceCombAkSkProperties.getSecretKey());
+      httpRequest.addHeader(X_SERVICE_PROJECT, serviceCombAkSkProperties.getProject());
+      return;
+    }
+
+    Map<String, String> headerMap = AKSKHeaderExtensionUtil.genAuthHeaders();
+    if (!headerMap.isEmpty()) {
+      httpRequest.addHeader(X_SERVICE_AK, headerMap.get(X_SERVICE_AK));
+      httpRequest.addHeader(X_SERVICE_SHAAKSK, headerMap.get(X_SERVICE_SHAAKSK));
+      httpRequest.addHeader(X_SERVICE_PROJECT, headerMap.get(X_SERVICE_PROJECT));
+    }
+  }
+}
diff --git a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/auth/FileSystemMountAKSKHeaderExtension.java b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/auth/FileSystemMountAKSKHeaderExtension.java
new file mode 100644
index 0000000..0a4256b
--- /dev/null
+++ b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/auth/FileSystemMountAKSKHeaderExtension.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.http.client.common.auth;
+
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardWatchEventKinds;
+import java.nio.file.WatchKey;
+import java.nio.file.WatchService;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import org.apache.servicecomb.http.client.common.HttpUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.databind.JsonNode;
+
+public class FileSystemMountAKSKHeaderExtension extends AKSKHeaderExtension {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(FileSystemMountAKSKHeaderExtension.class);
+
+  private ExecutorService executor = Executors.newFixedThreadPool(1);
+
+  public FileSystemMountAKSKHeaderExtension() {
+    try {
+      Path p = Paths.get(DEFAULT_SECRET_AUTH_PATH);
+      if (!p.toFile().exists()) {
+        return;
+      }
+      WatchService watchService = FileSystems.getDefault().newWatchService();
+      p.register(watchService,
+          StandardWatchEventKinds.ENTRY_MODIFY,
+          StandardWatchEventKinds.ENTRY_CREATE);
+      executor.execute(new FileUpdateCheckThread(watchService));
+    } catch (Exception e) {
+      LOGGER.warn("get watch service failed.", e);
+    }
+  }
+
+  @Override
+  public void createAuthHeaders() {
+    try {
+      String content = new String(
+          Files.readAllBytes(Paths.get(DEFAULT_SECRET_AUTH_PATH, DEFAULT_SECRET_AUTH_NAME)),
+          "UTF-8");
+      JsonNode data = HttpUtils.readTree(content);
+      JsonNode authNode = data.findValue("auth");
+      decode(authNode);
+    } catch (Exception e) {
+      LOGGER.warn("read auth info from dockerconfigjson failed.", e);
+    }
+  }
+
+
+  final class FileUpdateCheckThread implements Runnable {
+
+    private WatchService service;
+
+    private FileUpdateCheckThread(WatchService service) {
+      this.service = service;
+    }
+
+    public void run() {
+      while (true) {
+        try {
+          WatchKey watchKey = service.take();
+          // 清理掉已发生的事件，否则会导致事件遗留，进入死循环
+          watchKey.pollEvents();
+          synchronized (this) {
+            createAuthHeaders();
+          }
+          watchKey.reset();
+        } catch (InterruptedException e) {
+          LOGGER.error("error occured. detail : {}", e.getMessage());
+        }
+      }
+    }
+  }
+}
diff --git a/clients/http-client-common/src/test/java/org/apache/servicecomb/http/client/common/HttpTransportImplTest.java b/clients/http-client-common/src/test/java/org/apache/servicecomb/http/client/common/HttpTransportImplTest.java
index b71aae8..10dd094 100644
--- a/clients/http-client-common/src/test/java/org/apache/servicecomb/http/client/common/HttpTransportImplTest.java
+++ b/clients/http-client-common/src/test/java/org/apache/servicecomb/http/client/common/HttpTransportImplTest.java
@@ -29,6 +29,7 @@
 import org.apache.http.client.HttpClient;
 import org.apache.http.entity.ContentType;
 import org.apache.http.entity.StringEntity;
+import org.apache.servicecomb.http.client.common.HttpConfiguration.AKSKProperties;
 import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -38,6 +39,8 @@
   @Test
   public void TestHttpTransport() throws IOException {
     HttpClient httpClient = mock(HttpClient.class);
+    AKSKProperties akskProperties = new AKSKProperties();
+    akskProperties.setEnabled(false);
 
     org.apache.http.HttpResponse httpResponse = mock(org.apache.http.HttpResponse.class);
     StatusLine statusLine = mock(StatusLine.class);
@@ -50,7 +53,7 @@
 
     when(httpClient.execute(Mockito.any())).thenReturn(httpResponse);
 
-    HttpTransportImpl httpTransport = new HttpTransportImpl(httpClient);
+    HttpTransportImpl httpTransport = new HttpTransportImpl(httpClient, akskProperties);
     Map<String, String> extraHeaders = new HashMap<>();
     extraHeaders.put("test", "testContext");
     httpTransport.addHeaders(extraHeaders);
diff --git a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterClient.java b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterClient.java
index 5fe6a4f..fdbd64a 100755
--- a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterClient.java
+++ b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterClient.java
@@ -26,6 +26,7 @@
 
 import org.apache.http.HttpStatus;
 import org.apache.http.client.utils.URIBuilder;
+import org.apache.servicecomb.http.client.common.HttpConfiguration.AKSKProperties;
 import org.apache.servicecomb.http.client.common.HttpConfiguration.SSLProperties;
 import org.apache.servicecomb.http.client.common.HttpResponse;
 import org.apache.servicecomb.http.client.common.HttpTransport;
@@ -63,9 +64,11 @@
     this.httpClient = httpClient;
   }
 
-  public ServiceCenterClient(AddressManager addressManager, SSLProperties sslProperties, String tenantName,
+  public ServiceCenterClient(AddressManager addressManager, SSLProperties sslProperties,
+      AKSKProperties akskProperties,
+      String tenantName,
       Map<String, String> extraGlobalHeaders) {
-    HttpTransport httpTransport = HttpTransportFactory.createHttpTransport(sslProperties);
+    HttpTransport httpTransport = HttpTransportFactory.createHttpTransport(sslProperties, akskProperties);
     httpTransport.addHeaders(extraGlobalHeaders);
 
     this.httpClient = new ServiceCenterRawClient.Builder()
diff --git a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterConfiguration.java b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterConfiguration.java
index ae420e2..794b976 100644
--- a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterConfiguration.java
+++ b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterConfiguration.java
@@ -29,56 +29,4 @@
       this.address = address;
     }
   }
-
-  class AKSKProperties {
-    private boolean enabled;
-
-    private String accessKey;
-
-    private String secretKey;
-
-    private String cipher;
-
-    private String project;
-
-    public boolean isEnabled() {
-      return enabled;
-    }
-
-    public void setEnabled(boolean enabled) {
-      this.enabled = enabled;
-    }
-
-    public String getAccessKey() {
-      return accessKey;
-    }
-
-    public void setAccessKey(String accessKey) {
-      this.accessKey = accessKey;
-    }
-
-    public String getSecretKey() {
-      return secretKey;
-    }
-
-    public void setSecretKey(String secretKey) {
-      this.secretKey = secretKey;
-    }
-
-    public String getCipher() {
-      return cipher;
-    }
-
-    public void setCipher(String cipher) {
-      this.cipher = cipher;
-    }
-
-    public String getProject() {
-      return project;
-    }
-
-    public void setProject(String project) {
-      this.project = project;
-    }
-  }
 }
diff --git a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterDiscovery.java b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterDiscovery.java
index 60c45d1..c6be065 100644
--- a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterDiscovery.java
+++ b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterDiscovery.java
@@ -146,7 +146,7 @@
       StringBuilder sb = new StringBuilder();
       for (MicroserviceInstance instance : instances) {
         for (String endpoint : instance.getEndpoints()) {
-          sb.append(endpoint.length() > 20 ? endpoint.substring(0, 20) : endpoint);
+          sb.append(endpoint.length() > 64 ? endpoint.substring(0, 64) : endpoint);
           sb.append("|");
         }
       }
diff --git a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/model/Microservice.java b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/model/Microservice.java
index 9d69bfd..54a183c 100755
--- a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/model/Microservice.java
+++ b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/model/Microservice.java
@@ -22,6 +22,9 @@
 import java.util.List;
 import java.util.Map;
 
+import com.fasterxml.jackson.annotation.JsonRootName;
+
+@JsonRootName("service")
 public class Microservice {
 
   private String serviceId;
diff --git a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/model/MicroserviceInstance.java b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/model/MicroserviceInstance.java
index f2f7ab0..3fd4c29 100755
--- a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/model/MicroserviceInstance.java
+++ b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/model/MicroserviceInstance.java
@@ -22,6 +22,9 @@
 import java.util.List;
 import java.util.Map;
 
+import com.fasterxml.jackson.annotation.JsonRootName;
+
+@JsonRootName("instance")
 public class MicroserviceInstance {
   // even disconnected from service center
   // instanceId will not be changed
diff --git a/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/RegistryClientTest.java b/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/RegistryClientTest.java
index cbcb675..f8f24a1 100644
--- a/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/RegistryClientTest.java
+++ b/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/RegistryClientTest.java
@@ -26,6 +26,7 @@
 import org.apache.servicecomb.demo.CategorizedTestCase;
 import org.apache.servicecomb.demo.TestMgr;
 import org.apache.servicecomb.foundation.common.event.SimpleEventBus;
+import org.apache.servicecomb.http.client.common.HttpConfiguration.AKSKProperties;
 import org.apache.servicecomb.http.client.common.HttpConfiguration.SSLProperties;
 import org.apache.servicecomb.service.center.client.AddressManager;
 import org.apache.servicecomb.service.center.client.DiscoveryEvents.InstanceChangedEvent;
@@ -65,7 +66,10 @@
     AddressManager addressManager = new AddressManager("default", Arrays.asList("http://127.0.0.1:30100"));
     SSLProperties sslProperties = new SSLProperties();
     sslProperties.setEnabled(false);
-    ServiceCenterClient serviceCenterClient = new ServiceCenterClient(addressManager, sslProperties, "default", null);
+    AKSKProperties akskProperties = new AKSKProperties();
+    akskProperties.setEnabled(false);
+    ServiceCenterClient serviceCenterClient = new ServiceCenterClient(addressManager, sslProperties, akskProperties,
+        "default", null);
     EventBus eventBus = new SimpleEventBus();
     ServiceCenterRegistration serviceCenterRegistration = new ServiceCenterRegistration(serviceCenterClient, eventBus);
     Microservice microservice = new Microservice();
