Merge pull request #232 from SDUWYS/wys-1.0

feat: Condition Rule
diff --git a/api/mesh/v1alpha1/mapping.pb.go b/api/mesh/v1alpha1/mapping.pb.go
index 0dbf06a..8c24968 100644
--- a/api/mesh/v1alpha1/mapping.pb.go
+++ b/api/mesh/v1alpha1/mapping.pb.go
@@ -33,8 +33,9 @@
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	ApplicationName string   `protobuf:"bytes,1,opt,name=applicationName,proto3" json:"applicationName,omitempty"`
-	InterfaceNames  []string `protobuf:"bytes,2,rep,name=interfaceNames,proto3" json:"interfaceNames,omitempty"`
+	Namespace       string   `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
+	ApplicationName string   `protobuf:"bytes,2,opt,name=applicationName,proto3" json:"applicationName,omitempty"`
+	InterfaceNames  []string `protobuf:"bytes,3,rep,name=interfaceNames,proto3" json:"interfaceNames,omitempty"`
 }
 
 func (x *MappingRegisterRequest) Reset() {
@@ -69,6 +70,13 @@
 	return file_api_mesh_v1alpha1_mapping_proto_rawDescGZIP(), []int{0}
 }
 
+func (x *MappingRegisterRequest) GetNamespace() string {
+	if x != nil {
+		return x.Namespace
+	}
+	return ""
+}
+
 func (x *MappingRegisterRequest) GetApplicationName() string {
 	if x != nil {
 		return x.ApplicationName
@@ -143,8 +151,9 @@
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Nonce         string `protobuf:"bytes,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
-	InterfaceName string `protobuf:"bytes,2,opt,name=interfaceName,proto3" json:"interfaceName,omitempty"`
+	Namespace     string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
+	Nonce         string `protobuf:"bytes,2,opt,name=nonce,proto3" json:"nonce,omitempty"`
+	InterfaceName string `protobuf:"bytes,3,opt,name=interfaceName,proto3" json:"interfaceName,omitempty"`
 }
 
 func (x *MappingSyncRequest) Reset() {
@@ -179,6 +188,13 @@
 	return file_api_mesh_v1alpha1_mapping_proto_rawDescGZIP(), []int{2}
 }
 
+func (x *MappingSyncRequest) GetNamespace() string {
+	if x != nil {
+		return x.Namespace
+	}
+	return ""
+}
+
 func (x *MappingSyncRequest) GetNonce() string {
 	if x != nil {
 		return x.Nonce
@@ -326,65 +342,69 @@
 	0x68, 0x61, 0x31, 0x2f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74,
 	0x6f, 0x12, 0x13, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
 	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x16, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68,
-	0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6a,
-	0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65,
-	0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x70, 0x70, 0x6c,
-	0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x09, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61,
-	0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4e,
-	0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65,
-	0x72, 0x66, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x4d, 0x0a, 0x17, 0x4d, 0x61,
-	0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73,
-	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12,
-	0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x50, 0x0a, 0x12, 0x4d, 0x61, 0x70,
-	0x70, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
-	0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05,
-	0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61,
-	0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e,
-	0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x13,
-	0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f,
-	0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76,
-	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x76,
-	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
-	0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e,
-	0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x61,
-	0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x22,
-	0xd8, 0x01, 0x0a, 0x07, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x7a,
-	0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12,
-	0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63,
-	0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61,
-	0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52,
-	0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65,
-	0x73, 0x3a, 0x67, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x11, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x70, 0x69,
-	0x6e, 0x67, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x09,
-	0x12, 0x07, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x06, 0x22,
-	0x04, 0x6d, 0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x10, 0x01, 0xaa,
-	0x8c, 0x89, 0xa6, 0x01, 0x0b, 0x3a, 0x09, 0x0a, 0x07, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
-	0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0c, 0x3a, 0x0a, 0x12, 0x08, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e,
-	0x67, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x68, 0x01, 0x32, 0xef, 0x01, 0x0a, 0x19, 0x53,
-	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e,
-	0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x70,
-	0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x64, 0x75,
-	0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
-	0x31, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65,
-	0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f,
+	0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x88,
+	0x01, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+	0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d,
+	0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61,
+	0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69,
+	0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d,
+	0x65, 0x12, 0x26, 0x0a, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4e, 0x61,
+	0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x74, 0x65, 0x72,
+	0x66, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x4d, 0x0a, 0x17, 0x4d, 0x61, 0x70,
+	0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70,
+	0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18,
+	0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x6e, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x70,
+	0x69, 0x6e, 0x67, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c,
+	0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05,
+	0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x6e,
+	0x63, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4e,
+	0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72,
+	0x66, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x81, 0x01, 0x0a, 0x13, 0x4d, 0x61, 0x70,
+	0x70, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+	0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
+	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
+	0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x08, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03,
+	0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73,
+	0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x69,
+	0x6e, 0x67, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xd8, 0x01, 0x0a,
+	0x07, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x24, 0x0a, 0x0d,
+	0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4e, 0x61,
+	0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x61, 0x70,
+	0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x3a, 0x67,
+	0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x11, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52,
+	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x09, 0x12, 0x07, 0x4d,
+	0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x06, 0x22, 0x04, 0x6d, 0x65,
+	0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x10, 0x01, 0xaa, 0x8c, 0x89, 0xa6,
+	0x01, 0x0b, 0x3a, 0x09, 0x0a, 0x07, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0xaa, 0x8c, 0x89,
+	0xa6, 0x01, 0x0c, 0x3a, 0x0a, 0x12, 0x08, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0xaa,
+	0x8c, 0x89, 0xa6, 0x01, 0x02, 0x68, 0x01, 0x32, 0xef, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x72, 0x76,
+	0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
+	0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2b, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f,
 	0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d,
 	0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65,
-	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x0b, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e,
-	0x67, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x27, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65,
+	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65,
 	0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x70,
-	0x69, 0x6e, 0x67, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28,
-	0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c,
-	0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x6e, 0x63,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x36, 0x5a, 0x34,
-	0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68,
-	0x65, 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74,
-	0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c,
-	0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x69, 0x6e, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f,
+	0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x0b, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x79,
+	0x6e, 0x63, 0x12, 0x27, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
+	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
+	0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x64, 0x75,
+	0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
+	0x31, 0x2e, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73,
+	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74,
+	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64,
+	0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f,
+	0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
+	0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/api/mesh/v1alpha1/mapping.proto b/api/mesh/v1alpha1/mapping.proto
index 1c25e42..9e0dd4e 100644
--- a/api/mesh/v1alpha1/mapping.proto
+++ b/api/mesh/v1alpha1/mapping.proto
@@ -24,8 +24,9 @@
 }
 
 message MappingRegisterRequest {
-  string applicationName = 1;
-  repeated string interfaceNames = 2;
+  string namespace = 1;
+  string applicationName = 2;
+  repeated string interfaceNames = 3;
 }
 
 message MappingRegisterResponse {
@@ -34,8 +35,9 @@
 }
 
 message MappingSyncRequest {
-  string nonce = 1;
-  string interfaceName = 2;
+  string namespace = 1;
+  string nonce = 2;
+  string interfaceName = 3;
 }
 
 message MappingSyncResponse {
diff --git a/api/mesh/v1alpha1/metadata.pb.go b/api/mesh/v1alpha1/metadata.pb.go
index 6a074f7..3cf1a15 100644
--- a/api/mesh/v1alpha1/metadata.pb.go
+++ b/api/mesh/v1alpha1/metadata.pb.go
@@ -1,19 +1,26 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
 // versions:
 // 	protoc-gen-go v1.28.1
-// 	protoc        v4.22.2
+// 	protoc        v3.20.0
 // source: api/mesh/v1alpha1/metadata.proto
 
 package v1alpha1
 
 import (
-	_ "github.com/apache/dubbo-kubernetes/api/mesh"
-	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
-	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
 	reflect "reflect"
 	sync "sync"
 )
 
+import (
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+)
+
+import (
+	_ "github.com/apache/dubbo-kubernetes/api/mesh"
+)
+
 const (
 	// Verify that this generated code is sufficiently up-to-date.
 	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
@@ -26,8 +33,9 @@
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	PodName  string    `protobuf:"bytes,1,opt,name=podName,proto3" json:"podName,omitempty"`   // dubbo的应用实例名, 由sdk通过环境变量获取
-	Metadata *MetaData `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` // 上报的元数据
+	Namespace string    `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
+	PodName   string    `protobuf:"bytes,2,opt,name=podName,proto3" json:"podName,omitempty"`   // dubbo的应用实例名, 由sdk通过环境变量获取
+	Metadata  *MetaData `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` // 上报的元数据
 }
 
 func (x *MetaDataRegisterRequest) Reset() {
@@ -62,6 +70,13 @@
 	return file_api_mesh_v1alpha1_metadata_proto_rawDescGZIP(), []int{0}
 }
 
+func (x *MetaDataRegisterRequest) GetNamespace() string {
+	if x != nil {
+		return x.Namespace
+	}
+	return ""
+}
+
 func (x *MetaDataRegisterRequest) GetPodName() string {
 	if x != nil {
 		return x.PodName
@@ -137,9 +152,10 @@
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Nonce           string `protobuf:"bytes,1,opt,name=nonce,proto3" json:"nonce,omitempty"`
-	ApplicationName string `protobuf:"bytes,2,opt,name=applicationName,proto3" json:"applicationName,omitempty"`
-	Revision        string `protobuf:"bytes,3,opt,name=revision,proto3" json:"revision,omitempty"`
+	Namespace       string `protobuf:"bytes,1,opt,name=namespace,proto3" json:"namespace,omitempty"`
+	Nonce           string `protobuf:"bytes,2,opt,name=nonce,proto3" json:"nonce,omitempty"`
+	ApplicationName string `protobuf:"bytes,3,opt,name=applicationName,proto3" json:"applicationName,omitempty"`
+	Revision        string `protobuf:"bytes,4,opt,name=revision,proto3" json:"revision,omitempty"`
 }
 
 func (x *MetadataSyncRequest) Reset() {
@@ -174,6 +190,13 @@
 	return file_api_mesh_v1alpha1_metadata_proto_rawDescGZIP(), []int{2}
 }
 
+func (x *MetadataSyncRequest) GetNamespace() string {
+	if x != nil {
+		return x.Namespace
+	}
+	return ""
+}
+
 func (x *MetadataSyncRequest) GetNonce() string {
 	if x != nil {
 		return x.Nonce
@@ -425,92 +448,95 @@
 	0x74, 0x6f, 0x12, 0x13, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76,
 	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x16, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73,
 	0x68, 0x2f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22,
-	0x6e, 0x0a, 0x17, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73,
-	0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f,
-	0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64,
-	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d,
-	0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74,
-	0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22,
-	0x4e, 0x0a, 0x18, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73,
-	0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73,
-	0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75,
-	0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22,
-	0x71, 0x0a, 0x13, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x52,
-	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18,
-	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f,
-	0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18,
-	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69,
-	0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
-	0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69,
-	0x6f, 0x6e, 0x22, 0x85, 0x01, 0x0a, 0x14, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53,
-	0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e,
-	0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63,
-	0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a,
-	0x09, 0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x1d, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
-	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52,
-	0x09, 0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x75, 0x6d, 0x22, 0xcd, 0x02, 0x0a, 0x08, 0x4d,
-	0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x70, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76,
-	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76,
-	0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
-	0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e,
-	0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65,
-	0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45,
-	0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x5d,
-	0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
-	0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
-	0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
-	0x32, 0x20, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
+	0x8c, 0x01, 0x0a, 0x17, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69,
+	0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e,
+	0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
+	0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x6f, 0x64,
+	0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x4e,
+	0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
+	0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65,
+	0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61,
+	0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4e,
+	0x0a, 0x18, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+	0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75,
+	0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63,
+	0x63, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x8f,
+	0x01, 0x0a, 0x13, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+	0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+	0x70, 0x61, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x70,
+	0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
+	0x22, 0x85, 0x01, 0x0a, 0x14, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e,
+	0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e,
+	0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12,
+	0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x03, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x09, 0x6d,
+	0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d,
+	0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+	0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x09, 0x6d,
+	0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x75, 0x6d, 0x22, 0xcd, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74,
+	0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x70, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73,
+	0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x76, 0x69, 0x73,
+	0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18,
+	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65,
+	0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61,
+	0x44, 0x61, 0x74, 0x61, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74,
+	0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0x5d, 0x0a, 0x0d,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
+	0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+	0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20,
+	0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+	0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f,
+	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x6b, 0xaa, 0x8c, 0x89,
+	0xa6, 0x01, 0x12, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73,
+	0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0a, 0x12, 0x08, 0x4d, 0x65, 0x74,
+	0x61, 0x44, 0x61, 0x74, 0x61, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x06, 0x22, 0x04, 0x6d, 0x65, 0x73,
+	0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x10, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01,
+	0x0c, 0x3a, 0x0a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xaa, 0x8c, 0x89,
+	0xa6, 0x01, 0x0d, 0x3a, 0x0b, 0x12, 0x09, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x73,
+	0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x68, 0x01, 0x22, 0x96, 0x02, 0x0a, 0x0b, 0x53, 0x65, 0x72,
+	0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05,
+	0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f,
+	0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74,
+	0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04,
+	0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68,
+	0x12, 0x44, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x2c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
 	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e,
-	0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x6b, 0xaa,
-	0x8c, 0x89, 0xa6, 0x01, 0x12, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52,
-	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0a, 0x12, 0x08, 0x4d,
-	0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x06, 0x22, 0x04, 0x6d,
-	0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x10, 0x01, 0xaa, 0x8c, 0x89,
-	0xa6, 0x01, 0x0c, 0x3a, 0x0a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xaa,
-	0x8c, 0x89, 0xa6, 0x01, 0x0d, 0x3a, 0x0b, 0x12, 0x09, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
-	0x61, 0x73, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x68, 0x01, 0x22, 0x96, 0x02, 0x0a, 0x0b, 0x53,
-	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61,
-	0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14,
-	0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67,
-	0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18,
-	0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a,
-	0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
-	0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f,
-	0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12,
-	0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61,
-	0x74, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x03,
-	0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
-	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
-	0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
-	0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61,
-	0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
-	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
-	0x02, 0x38, 0x01, 0x32, 0xeb, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
-	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64,
-	0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x64, 0x75,
-	0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
-	0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
-	0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x75, 0x62, 0x62,
+	0x66, 0x6f, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06,
+	0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
+	0x01, 0x32, 0xeb, 0x01, 0x0a, 0x0f, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6f, 0x0a, 0x10, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+	0x61, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x64, 0x75, 0x62, 0x62,
 	0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
 	0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
-	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x61,
-	0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x28, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f,
-	0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d,
-	0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65,
-	0x73, 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
-	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
-	0x61, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30,
-	0x01, 0x42, 0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
-	0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62,
-	0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68,
-	0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
-	0x33,
+	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e,
+	0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65,
+	0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
+	0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x28, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d,
+	0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74,
+	0x61, 0x64, 0x61, 0x74, 0x61, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x29, 0x2e, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
+	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x53,
+	0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42,
+	0x36, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x70,
+	0x61, 0x63, 0x68, 0x65, 0x2f, 0x64, 0x75, 0x62, 0x62, 0x6f, 0x2d, 0x6b, 0x75, 0x62, 0x65, 0x72,
+	0x6e, 0x65, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76,
+	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
diff --git a/api/mesh/v1alpha1/metadata.proto b/api/mesh/v1alpha1/metadata.proto
index ad6fd43..ea4e298 100644
--- a/api/mesh/v1alpha1/metadata.proto
+++ b/api/mesh/v1alpha1/metadata.proto
@@ -14,8 +14,9 @@
 }
 
 message MetaDataRegisterRequest {
-  string podName = 1; // dubbo的应用实例名, 由sdk通过环境变量获取
-  MetaData metadata = 2; // 上报的元数据
+  string namespace = 1;
+  string podName = 2; // dubbo的应用实例名, 由sdk通过环境变量获取
+  MetaData metadata = 3; // 上报的元数据
 }
 
 message MetaDataRegisterResponse {
@@ -25,9 +26,10 @@
 
 // 可以根据应用名和版本号进行获取
 message MetadataSyncRequest {
-  string nonce = 1;
-  string applicationName = 2;
-  string revision = 3;
+  string namespace = 1;
+  string nonce = 2;
+  string applicationName = 3;
+  string revision = 4;
 }
 
 message MetadataSyncResponse {
diff --git a/api/mesh/v1alpha1/metadata_grpc.pb.go b/api/mesh/v1alpha1/metadata_grpc.pb.go
index 0a216e9..a1303f6 100644
--- a/api/mesh/v1alpha1/metadata_grpc.pb.go
+++ b/api/mesh/v1alpha1/metadata_grpc.pb.go
@@ -1,13 +1,12 @@
 // Code generated by protoc-gen-go-grpc. DO NOT EDIT.
-// versions:
-// - protoc-gen-go-grpc v1.2.0
-// - protoc             v4.22.2
-// source: api/mesh/v1alpha1/metadata.proto
 
 package v1alpha1
 
 import (
 	context "context"
+)
+
+import (
 	grpc "google.golang.org/grpc"
 	codes "google.golang.org/grpc/codes"
 	status "google.golang.org/grpc/status"
diff --git a/api/mesh/v1alpha1/traffic_helper.go b/api/mesh/v1alpha1/traffic_helper.go
index 5454afa..2a6a238 100644
--- a/api/mesh/v1alpha1/traffic_helper.go
+++ b/api/mesh/v1alpha1/traffic_helper.go
@@ -31,12 +31,12 @@
 
 // Application 流量管控相关的基础label
 const (
-	Application    = "application"
-	Service        = "service"
-	ID             = "id"
-	ServiceVersion = "serviceVersion"
-	ServiceGroup   = "serviceGroup"
-	Revision       = "revision"
+	Application    = "dubbo.io/application"
+	Service        = "dubbo.io/service"
+	ID             = "dubbo.io/id"
+	ServiceVersion = "dubbo.io/serviceVersion"
+	ServiceGroup   = "dubbo.io/serviceGroup"
+	Revision       = "dubbo.io/revision"
 )
 
 type Base struct {
diff --git a/app/dubbo-cp/cmd/run.go b/app/dubbo-cp/cmd/run.go
index d4eb467..9b5c275 100644
--- a/app/dubbo-cp/cmd/run.go
+++ b/app/dubbo-cp/cmd/run.go
@@ -19,8 +19,6 @@
 
 import (
 	"fmt"
-	"github.com/apache/dubbo-kubernetes/pkg/config/core"
-	"github.com/apache/dubbo-kubernetes/pkg/test"
 	"time"
 )
 
@@ -33,6 +31,7 @@
 	"github.com/apache/dubbo-kubernetes/pkg/bufman"
 	"github.com/apache/dubbo-kubernetes/pkg/config"
 	dubbo_cp "github.com/apache/dubbo-kubernetes/pkg/config/app/dubbo-cp"
+	"github.com/apache/dubbo-kubernetes/pkg/config/core"
 	"github.com/apache/dubbo-kubernetes/pkg/core/bootstrap"
 	dubbo_cmd "github.com/apache/dubbo-kubernetes/pkg/core/cmd"
 	dds_global "github.com/apache/dubbo-kubernetes/pkg/dds/global"
@@ -43,6 +42,7 @@
 	"github.com/apache/dubbo-kubernetes/pkg/dubbo"
 	"github.com/apache/dubbo-kubernetes/pkg/hds"
 	"github.com/apache/dubbo-kubernetes/pkg/intercp"
+	"github.com/apache/dubbo-kubernetes/pkg/test"
 	"github.com/apache/dubbo-kubernetes/pkg/util/os"
 	dubbo_version "github.com/apache/dubbo-kubernetes/pkg/version"
 	"github.com/apache/dubbo-kubernetes/pkg/xds"
diff --git a/app/dubboctl/cmd/proxy.go b/app/dubboctl/cmd/proxy.go
index 2cb53b2..49dd267 100644
--- a/app/dubboctl/cmd/proxy.go
+++ b/app/dubboctl/cmd/proxy.go
@@ -19,20 +19,17 @@
 
 import (
 	"context"
+	"fmt"
+	"github.com/apache/dubbo-kubernetes/pkg/core"
+	"github.com/apache/dubbo-kubernetes/pkg/util/proto"
+	"github.com/pkg/errors"
 	"io"
 	"os"
 	"path/filepath"
-)
-
-import (
-	"github.com/pkg/errors"
+	"strings"
 
 	"github.com/spf13/cobra"
 
-	"go.uber.org/zap/zapcore"
-)
-
-import (
 	mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
 	"github.com/apache/dubbo-kubernetes/app/dubboctl/internal/envoy"
 	"github.com/apache/dubbo-kubernetes/pkg/config/app/dubboctl"
@@ -42,7 +39,9 @@
 	"github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
 	"github.com/apache/dubbo-kubernetes/pkg/core/resources/model/rest"
 	core_xds "github.com/apache/dubbo-kubernetes/pkg/core/xds"
+	dubbo_log "github.com/apache/dubbo-kubernetes/pkg/log"
 	"github.com/apache/dubbo-kubernetes/pkg/util/template"
+	"go.uber.org/zap/zapcore"
 )
 
 var runLog = controlPlaneLog.WithName("proxy")
@@ -92,14 +91,39 @@
 
 func addProxy(opts dubbo_cmd.RunCmdOpts, cmd *cobra.Command) {
 	proxyArgs := DefaultProxyConfig()
+
 	cfg := proxyArgs.Config
 	var proxyResource model.Resource
+	arg := struct {
+		logLevel   string
+		outputPath string
+		maxSize    int
+		maxBackups int
+		maxAge     int
+	}{}
+
 	proxyCmd := &cobra.Command{
 		Use:   "proxy",
 		Short: "Commands related to proxy",
 		Long:  "Commands help user to generate Ingress and Egress",
 		RunE: func(cmd *cobra.Command, args []string) error {
 			logger.InitCmdSugar(zapcore.AddSync(cmd.OutOrStdout()))
+			level, err := dubbo_log.ParseLogLevel(arg.logLevel)
+			if err != nil {
+				return err
+			}
+			proxyArgs.LogLevel = level
+			if arg.outputPath != "" {
+				output, err := filepath.Abs(arg.outputPath)
+				if err != nil {
+					return err
+				}
+
+				fmt.Printf("%s: logs will be stored in %q\n", "kuma-dp", output)
+				core.SetLogger(core.NewLoggerWithRotation(level, output, arg.maxSize, arg.maxBackups, arg.maxAge))
+			} else {
+				core.SetLogger(core.NewLogger(level))
+			}
 			return nil
 		},
 		PreRunE: func(cmd *cobra.Command, args []string) error {
@@ -110,6 +134,10 @@
 			if _, ok := proxyTypeMap[cfg.Dataplane.ProxyType]; !ok {
 				return errors.Errorf("invalid proxy type %q", cfg.Dataplane.ProxyType)
 			}
+			if cfg.DataplaneRuntime.EnvoyLogLevel == "" {
+				cfg.DataplaneRuntime.EnvoyLogLevel = proxyArgs.LogLevel.String()
+			}
+
 			proxyResource, err := readResource(cmd, &cfg.DataplaneRuntime)
 			if err != nil {
 				runLog.Error(err, "failed to read policy", "proxyType", cfg.Dataplane.ProxyType)
@@ -162,13 +190,12 @@
 				return errors.Errorf("Failed to generate Envoy bootstrap config. %v", err)
 			}
 			runLog.Info("received bootstrap configuration", "adminPort", bootstrap.GetAdmin().GetAddress().GetSocketAddress().GetPortValue())
+			opts.BootstrapConfig, err = proto.ToYAML(bootstrap)
+			if err != nil {
+				return errors.Errorf("could not convert to yaml. %v", err)
+			}
+			opts.AdminPort = bootstrap.GetAdmin().GetAddress().GetSocketAddress().GetPortValue()
 
-			//runLog.Info("received bootstrap configuration", "adminPort", bootstrap.GetAdmin().GetAddress().GetSocketAddress().GetPortValue())
-			//
-			//opts.BootstrapConfig, err = proto.ToYAML(&bootstrap)
-			//if err != nil {
-			//	return errors.Errorf("could not convert to yaml. %v", err)
-			//}
 			stopComponents := make(chan struct{})
 			envoyComponent, err := envoy.New(opts)
 			err = envoyComponent.Start(stopComponents)
@@ -180,9 +207,24 @@
 			return nil
 		},
 	}
+
+	// root flags
+	cmd.PersistentFlags().StringVar(&arg.logLevel, "log-level", dubbo_log.InfoLevel.String(), UsageOptions("log level", dubbo_log.OffLevel, dubbo_log.InfoLevel, dubbo_log.DebugLevel))
+	cmd.PersistentFlags().StringVar(&arg.outputPath, "log-output-path", arg.outputPath, "path to the file that will be filled with logs. Example: if we set it to /tmp/kuma.log then after the file is rotated we will have /tmp/kuma-2021-06-07T09-15-18.265.log")
+	cmd.PersistentFlags().IntVar(&arg.maxBackups, "log-max-retained-files", 1000, "maximum number of the old log files to retain")
+	cmd.PersistentFlags().IntVar(&arg.maxSize, "log-max-size", 100, "maximum size in megabytes of a log file before it gets rotated")
+	cmd.PersistentFlags().IntVar(&arg.maxAge, "log-max-age", 30, "maximum number of days to retain old log files based on the timestamp encoded in their filename")
+
 	proxyCmd.PersistentFlags().StringVar(&cfg.Dataplane.Name, "name", cfg.Dataplane.Name, "Name of the Dataplane")
 	proxyCmd.PersistentFlags().StringVar(&cfg.Dataplane.Mesh, "mesh", cfg.Dataplane.Mesh, "Mesh that Dataplane belongs to")
 	proxyCmd.PersistentFlags().StringVar(&cfg.Dataplane.ProxyType, "proxy-type", "dataplane", `type of the Dataplane ("dataplane", "ingress")`)
 	proxyCmd.PersistentFlags().StringVar(&cfg.DataplaneRuntime.ResourcePath, "dataplane-file", "Path to Ingress and Egress template to apply (YAML or JSON)", "data-plane-file")
 	cmd.AddCommand(proxyCmd)
 }
+func UsageOptions(desc string, options ...interface{}) string {
+	values := make([]string, 0, len(options))
+	for _, option := range options {
+		values = append(values, fmt.Sprintf("%v", option))
+	}
+	return fmt.Sprintf("%s: one of %s", desc, strings.Join(values, "|"))
+}
diff --git a/app/dubboctl/cmd/proxy_context.go b/app/dubboctl/cmd/proxy_context.go
index 8b6427d..33cbaff 100644
--- a/app/dubboctl/cmd/proxy_context.go
+++ b/app/dubboctl/cmd/proxy_context.go
@@ -18,6 +18,7 @@
 package cmd
 
 import (
+	"github.com/apache/dubbo-kubernetes/pkg/log"
 	"os"
 	"path/filepath"
 	"runtime"
@@ -47,6 +48,7 @@
 	Config                   *dubboctl.Config
 	BootstrapGenerator       envoy.BootstrapConfigFactoryFunc
 	DataplaneTokenGenerator  func(cfg *dubboctl.Config) (component.Component, error)
+	LogLevel                 log.LogLevel
 }
 
 var features = []string{core_xds.FeatureTCPAccessLogViaNamedPipe}
diff --git a/app/dubboctl/cmd/proxy_test.go b/app/dubboctl/cmd/proxy_test.go
new file mode 100644
index 0000000..ecb6552
--- /dev/null
+++ b/app/dubboctl/cmd/proxy_test.go
@@ -0,0 +1,266 @@
+//go:build !windows
+// +build !windows
+
+package cmd
+
+import (
+	"context"
+	"fmt"
+	dubbo_cmd "github.com/apache/dubbo-kubernetes/pkg/core/cmd"
+	"github.com/apache/dubbo-kubernetes/pkg/test"
+	. "github.com/onsi/ginkgo/v2"
+	. "github.com/onsi/gomega"
+	"io"
+	"os"
+	"path/filepath"
+	"strconv"
+	"strings"
+	"syscall"
+	"testing"
+)
+
+func TestCmd(t *testing.T) {
+	test.RunSpecs(t, "cmd Suite")
+}
+
+var _ = Describe("proxy", func() {
+	var cancel func()
+	var ctx context.Context
+	_ = dubbo_cmd.RunCmdOpts{
+		SetupSignalHandler: func() (context.Context, context.Context) {
+			return ctx, ctx
+		},
+	}
+	var tmpDir string
+	BeforeEach(func() {
+		ctx, cancel = context.WithCancel(context.Background())
+		var err error
+		tmpDir, err = os.MkdirTemp("", "")
+		Expect(err).ToNot(HaveOccurred())
+	})
+	AfterEach(func() {
+		if tmpDir != "" {
+			if tmpDir != "" {
+				// when
+				err := os.RemoveAll(tmpDir)
+				// then
+				Expect(err).ToNot(HaveOccurred())
+			}
+		}
+	})
+	type testCase struct {
+		envVars      map[string]string
+		args         []string
+		expectedFile string
+	}
+	DescribeTable("should be possible to start dataplane (Envoy) using `dubbo-proxy run`",
+		func(giveFunc func() testCase) {
+			given := giveFunc()
+
+			// setup
+			envoyPidFile := filepath.Join(tmpDir, "envoy-mock.pid")
+			envoyCmdlineFile := filepath.Join(tmpDir, "envoy-mock.cmdline")
+			corednsPidFile := filepath.Join(tmpDir, "coredns-mock.pid")
+			corednsCmdlineFile := filepath.Join(tmpDir, "coredns-mock.cmdline")
+
+			// and
+			env := given.envVars
+			env["ENVOY_MOCK_PID_FILE"] = envoyPidFile
+			env["ENVOY_MOCK_CMDLINE_FILE"] = envoyCmdlineFile
+			env["COREDNS_MOCK_PID_FILE"] = corednsPidFile
+			env["COREDNS_MOCK_CMDLINE_FILE"] = corednsCmdlineFile
+			for key, value := range env {
+				Expect(os.Setenv(key, value)).To(Succeed())
+			}
+
+			// given
+
+			reader, writer := io.Pipe()
+			go func() {
+				defer GinkgoRecover()
+				io.ReadAll(reader)
+			}()
+
+			cmd := getRootCmd([]string{"proxy", "--proxy-type=ingress", "--dataplane-file=/mnt/d/code/go/test/1.yaml"})
+			cmd.SetOut(writer)
+			cmd.SetErr(writer)
+			cancel()
+
+			// when
+			By("starting the Dubbo proxy")
+			errCh := make(chan error)
+			go func() {
+				defer close(errCh)
+				errCh <- cmd.Execute()
+			}()
+
+			// then
+			var actualConfigFile string
+			envoyPid := verifyComponentProcess("Envoy", envoyPidFile, envoyCmdlineFile, func(actualArgs []string) {
+				Expect(actualArgs[0]).To(Equal("--version"))
+				Expect(actualArgs[1]).To(Equal("--config-path"))
+				actualConfigFile = actualArgs[2]
+				Expect(actualConfigFile).To(BeARegularFile())
+				if given.expectedFile != "" {
+					Expect(actualArgs[2]).To(Equal(given.expectedFile))
+				}
+			})
+
+			err := <-errCh
+			Expect(err).ToNot(HaveOccurred())
+
+			By("waiting for dataplane (Envoy) to get stopped")
+			Eventually(func() bool {
+				//send sig 0 to check whether Envoy process still exists
+				err := syscall.Kill(int(envoyPid), syscall.Signal(0))
+				// we expect Envoy process to get killed by now
+				return err != nil
+			}, "5s", "100ms").Should(BeTrue())
+
+		},
+		Entry("can be launched with env vars", func() testCase {
+			return testCase{
+				envVars: map[string]string{
+					"DUBBO_CONTROL_PLANE_API_SERVER_URL":  "http://localhost:1234",
+					"DUBBO_DATAPLANE_NAME":                "example",
+					"DUBBO_DATAPLANE_MESH":                "default",
+					"DUBBO_DATAPLANE_RUNTIME_BINARY_PATH": filepath.Join("testdata", "envoy-mock.sleep.sh"),
+					// Notice: DUBBO_DATAPLANE_RUNTIME_CONFIG_DIR is not set in order to let `dubbo-dp` to create a temporary directory
+					"DUBBO_DNS_CORE_DNS_BINARY_PATH": filepath.Join("testdata", "coredns-mock.sleep.sh"),
+				},
+				args:         []string{},
+				expectedFile: "",
+			}
+		}),
+		Entry("can be launched with env vars and given config dir", func() testCase {
+			return testCase{
+				envVars: map[string]string{
+					"DUBBO_CONTROL_PLANE_API_SERVER_URL":  "http://localhost:1234",
+					"DUBBO_DATAPLANE_NAME":                "example",
+					"DUBBO_DATAPLANE_MESH":                "default",
+					"DUBBO_DATAPLANE_RUNTIME_BINARY_PATH": filepath.Join("testdata", "envoy-mock.sleep.sh"),
+					"DUBBO_DATAPLANE_RUNTIME_CONFIG_DIR":  tmpDir,
+					"DUBBO_DNS_CORE_DNS_BINARY_PATH":      filepath.Join("testdata", "coredns-mock.sleep.sh"),
+				},
+				args:         []string{},
+				expectedFile: filepath.Join(tmpDir, "bootstrap.yaml"),
+			}
+		}),
+		Entry("can be launched with args", func() testCase {
+			return testCase{
+				envVars: map[string]string{},
+				args: []string{
+					"--cp-address", "http://localhost:1234",
+					"--name", "example",
+					"--mesh", "default",
+					"--binary-path", filepath.Join("testdata", "envoy-mock.sleep.sh"),
+					// Notice: --config-dir is not set in order to let `dubbo-dp` to create a temporary directory
+					"--dns-coredns-path", filepath.Join("testdata", "coredns-mock.sleep.sh"),
+				},
+				expectedFile: "",
+			}
+		}),
+		Entry("can be launched with args and given config dir", func() testCase {
+			return testCase{
+				envVars: map[string]string{},
+				args: []string{
+					"--cp-address", "http://localhost:1234",
+					"--name", "example",
+					"--mesh", "default",
+					"--binary-path", filepath.Join("testdata", "envoy-mock.sleep.sh"),
+					"--config-dir", tmpDir,
+					"--dns-coredns-path", filepath.Join("testdata", "coredns-mock.sleep.sh"),
+				},
+				expectedFile: filepath.Join(tmpDir, "bootstrap.yaml"),
+			}
+		}),
+		Entry("can be launched with args and dataplane token", func() testCase {
+			return testCase{
+				envVars: map[string]string{},
+				args: []string{
+					"--cp-address", "http://localhost:1234",
+					"--name", "example",
+					"--mesh", "default",
+					"--binary-path", filepath.Join("testdata", "envoy-mock.sleep.sh"),
+					"--dataplane-token-file", filepath.Join("testdata", "token"),
+					// Notice: --config-dir is not set in order to let `dubbo-dp` to create a temporary directory
+					"--dns-coredns-path", filepath.Join("testdata", "coredns-mock.sleep.sh"),
+				},
+				expectedFile: "",
+			}
+		}),
+		Entry("can be launched without Envoy Admin API (env vars)", func() testCase {
+			return testCase{
+				envVars: map[string]string{
+					"DUBBO_CONTROL_PLANE_API_SERVER_URL":  "http://localhost:1234",
+					"DUBBO_DATAPLANE_NAME":                "example",
+					"DUBBO_DATAPLANE_MESH":                "default",
+					"DUBBO_DATAPLANE_RUNTIME_BINARY_PATH": filepath.Join("testdata", "envoy-mock.sleep.sh"),
+					// Notice: DUBBO_DATAPLANE_RUNTIME_CONFIG_DIR is not set in order to let `dubbo-dp` to create a temporary directory
+					"DUBBO_DNS_CORE_DNS_BINARY_PATH": filepath.Join("testdata", "coredns-mock.sleep.sh"),
+				},
+				args:         []string{},
+				expectedFile: "",
+			}
+		}),
+		Entry("can be launched without Envoy Admin API (command-line args)", func() testCase {
+			return testCase{
+				envVars: map[string]string{},
+				args: []string{
+					"--cp-address", "http://localhost:1234",
+					"--name", "example",
+					"--mesh", "default",
+					"--binary-path", filepath.Join("testdata", "envoy-mock.sleep.sh"),
+					// Notice: --config-dir is not set in order to let `dubbo-dp` to create a temporary directory
+					"--dns-coredns-path", filepath.Join("testdata", "coredns-mock.sleep.sh"),
+				},
+				expectedFile: "",
+			}
+		}),
+		Entry("can be launched with dataplane template", func() testCase {
+			return testCase{
+				envVars: map[string]string{},
+				args: []string{
+					"--cp-address", "http://localhost:1234",
+					"--binary-path", filepath.Join("testdata", "envoy-mock.sleep.sh"),
+					"--dataplane-token-file", filepath.Join("testdata", "token"),
+					"--dataplane-file", filepath.Join("testdata", "dataplane_template.yaml"),
+					"--dataplane-var", "name=example",
+					"--dataplane-var", "address=127.0.0.1",
+					"--dns-coredns-path", filepath.Join("testdata", "coredns-mock.sleep.sh"),
+				},
+				expectedFile: "",
+			}
+		}),
+	)
+
+})
+
+func verifyComponentProcess(processDescription, pidfile string, cmdlinefile string, argsVerifier func(expectedArgs []string)) int64 {
+	var pid int64
+	By(fmt.Sprintf("waiting for dataplane (%s) to get started", processDescription))
+	Eventually(func() bool {
+		data, err := os.ReadFile(pidfile)
+		if err != nil {
+			return false
+		}
+		pid, err = strconv.ParseInt(strings.TrimSpace(string(data)), 10, 32)
+		return err == nil
+	}, "5s", "100ms").Should(BeTrue())
+	Expect(pid).ToNot(BeZero())
+
+	By(fmt.Sprintf("verifying the arguments %s was launched with", processDescription))
+	// when
+	cmdline, err := os.ReadFile(cmdlinefile)
+
+	// then
+	Expect(err).ToNot(HaveOccurred())
+	// and
+	if argsVerifier != nil {
+		actualArgs := strings.FieldsFunc(string(cmdline), func(c rune) bool {
+			return c == '\n'
+		})
+		argsVerifier(actualArgs)
+	}
+	return pid
+}
diff --git a/app/dubboctl/internal/envoy/envoy.go b/app/dubboctl/internal/envoy/envoy.go
index fea3d39..fe4ef7d 100644
--- a/app/dubboctl/internal/envoy/envoy.go
+++ b/app/dubboctl/internal/envoy/envoy.go
@@ -183,6 +183,7 @@
 	err = command.Wait()
 	if err != nil && !errors.Is(err, context.Canceled) {
 		runLog.Error(err, "Envoy terminated with an error")
+
 		return err
 	}
 	runLog.Info("Envoy terminated successfully")
diff --git a/app/dubboctl/internal/envoy/remote_bootstrap.go b/app/dubboctl/internal/envoy/remote_bootstrap.go
index 63a2869..a963f12 100644
--- a/app/dubboctl/internal/envoy/remote_bootstrap.go
+++ b/app/dubboctl/internal/envoy/remote_bootstrap.go
@@ -36,6 +36,7 @@
 
 	"github.com/pkg/errors"
 
+	_ "github.com/apache/dubbo-kubernetes/pkg/xds/envoy"
 	"github.com/sethvargo/go-retry"
 )
 
diff --git a/pkg/admin/component.go b/pkg/admin/component.go
index aefad4b..3406f88 100644
--- a/pkg/admin/component.go
+++ b/pkg/admin/component.go
@@ -26,7 +26,7 @@
 var adminServerLog = core.Log.WithName("admin")
 
 func Setup(rt core_runtime.Runtime) error {
-	adminServer := server.NewAdminServer(*rt.Config().Admin).
+	adminServer := server.NewAdminServer(*rt.Config().Admin, rt.Config().Store.Kubernetes.SystemNamespace).
 		InitHTTPRouter()
 	if err := rt.Add(adminServer); err != nil {
 		adminServerLog.Error(err, "fail to start the admin server")
diff --git a/pkg/admin/server/server.go b/pkg/admin/server/server.go
index eba846c..e2ec2ee 100644
--- a/pkg/admin/server/server.go
+++ b/pkg/admin/server/server.go
@@ -33,13 +33,15 @@
 )
 
 type AdminServer struct {
-	Engine   *gin.Engine
-	adminCfg admin.Admin
+	Engine          *gin.Engine
+	adminCfg        admin.Admin
+	systemNamespace string
 }
 
-func NewAdminServer(adminCfg admin.Admin) *AdminServer {
+func NewAdminServer(adminCfg admin.Admin, ns string) *AdminServer {
 	return &AdminServer{
-		adminCfg: adminCfg,
+		adminCfg:        adminCfg,
+		systemNamespace: ns,
 	}
 }
 
diff --git a/pkg/config/app/dubboctl/proxy_config.go b/pkg/config/app/dubboctl/proxy_config.go
index 2e37844..2d9d219 100644
--- a/pkg/config/app/dubboctl/proxy_config.go
+++ b/pkg/config/app/dubboctl/proxy_config.go
@@ -18,6 +18,7 @@
 package dubboctl
 
 import (
+	mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
 	"time"
 )
 
@@ -177,3 +178,8 @@
 	// Drain time for listeners.
 	DrainTime config_types.Duration `json:"drainTime,omitempty" envconfig:"dubbo_dataplane_drain_time"`
 }
+
+func (d *Dataplane) IsZoneProxy() bool {
+	return d.ProxyType == string(mesh_proto.IngressProxyType) ||
+		d.ProxyType == string(mesh_proto.EgressProxyType)
+}
diff --git a/pkg/core/registry/notify.go b/pkg/core/registry/notify.go
index 184c264..d18e1fc 100644
--- a/pkg/core/registry/notify.go
+++ b/pkg/core/registry/notify.go
@@ -122,9 +122,14 @@
 	key := getDataplaneKey(app, revision)
 
 	dataplaneResource := mesh.NewDataplaneResource()
+	dataplaneResource.SetMeta(&resourceMetaObject{
+		Name: app + "-" + revision,
+		Mesh: core_model.DefaultMesh,
+	})
 	dataplaneResource.Spec.Networking = &mesh_proto.Dataplane_Networking{}
 	dataplaneResource.Spec.Extensions = map[string]string{}
 	dataplaneResource.Spec.Extensions[mesh_proto.ApplicationName] = app
+	dataplaneResource.Spec.Extensions[mesh_proto.Revision] = revision
 	dataplaneResource.SetMeta(&resourceMetaObject{
 		Name: key,
 	})
diff --git a/pkg/core/resources/model/resource.go b/pkg/core/resources/model/resource.go
index 01b425c..0e7358b 100644
--- a/pkg/core/resources/model/resource.go
+++ b/pkg/core/resources/model/resource.go
@@ -60,6 +60,13 @@
 	Name string
 }
 
+type ResourceReq struct {
+	Mesh      string
+	Name      string
+	PodName   string
+	Namespace string
+}
+
 type ResourceScope string
 
 const (
diff --git a/pkg/dubbo/client/stream.go b/pkg/dubbo/client/stream.go
index f200b47..a54840c 100644
--- a/pkg/dubbo/client/stream.go
+++ b/pkg/dubbo/client/stream.go
@@ -168,6 +168,7 @@
 
 	return result
 }
+
 func (s *stream) SubscribedApplicationNames() []string {
 	s.mu.RLock()
 	defer s.mu.RUnlock()
diff --git a/pkg/dubbo/client/sync_client.go b/pkg/dubbo/client/sync_client.go
index bad8d72..702545a 100644
--- a/pkg/dubbo/client/sync_client.go
+++ b/pkg/dubbo/client/sync_client.go
@@ -90,7 +90,12 @@
 				s.log.Info("OnMappingSyncRequestReceived successed")
 			}
 		case *mesh_proto.MetadataSyncRequest:
-			panic("unimplemented")
+			err = s.callbacks.OnMetadataSyncRequestReceived(received.(*mesh_proto.MetadataSyncRequest))
+			if err != nil {
+				s.log.Error(err, "error in OnMetadataSyncRequestReceived")
+			} else {
+				s.log.Info("OnMetadataSyncRequestReceived successed")
+			}
 		default:
 			return errors.New("unknown type request")
 		}
diff --git a/pkg/dubbo/metadata/register_request.go b/pkg/dubbo/metadata/register_request.go
index df12e06..3119159 100644
--- a/pkg/dubbo/metadata/register_request.go
+++ b/pkg/dubbo/metadata/register_request.go
@@ -17,7 +17,9 @@
 
 package metadata
 
-import "fmt"
+import (
+	"fmt"
+)
 
 import (
 	mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
@@ -25,7 +27,7 @@
 )
 
 type RegisterRequest struct {
-	ConfigsUpdated map[core_model.ResourceKey]*mesh_proto.MetaData
+	ConfigsUpdated map[core_model.ResourceReq]*mesh_proto.MetaData
 }
 
 func (q *RegisterRequest) merge(req *RegisterRequest) *RegisterRequest {
diff --git a/pkg/dubbo/metadata/server.go b/pkg/dubbo/metadata/server.go
index 762a56d..c0ef20e 100644
--- a/pkg/dubbo/metadata/server.go
+++ b/pkg/dubbo/metadata/server.go
@@ -19,6 +19,7 @@
 
 import (
 	"context"
+	"github.com/apache/dubbo-kubernetes/pkg/util/rmkey"
 	"io"
 	"strings"
 	"time"
@@ -94,6 +95,7 @@
 	mesh := core_model.DefaultMesh // todo: mesh
 	podName := req.GetPodName()
 	metadata := req.GetMetadata()
+	namespace := req.GetNamespace()
 	if metadata == nil {
 		return &mesh_proto.MetaDataRegisterResponse{
 			Success: false,
@@ -101,12 +103,13 @@
 		}, nil
 	}
 
-	// MetaData name = podName.revision
-	name := podName + "." + metadata.Revision
-	registerReq := &RegisterRequest{ConfigsUpdated: map[core_model.ResourceKey]*mesh_proto.MetaData{}}
-	key := core_model.ResourceKey{
-		Mesh: mesh,
-		Name: name,
+	name := rmkey.GenerateMetadataResourceKey(metadata.App, metadata.Revision, req.GetNamespace())
+	registerReq := &RegisterRequest{ConfigsUpdated: map[core_model.ResourceReq]*mesh_proto.MetaData{}}
+	key := core_model.ResourceReq{
+		Mesh:      mesh,
+		Name:      name,
+		PodName:   podName,
+		Namespace: namespace,
 	}
 	registerReq.ConfigsUpdated[key] = metadata
 
@@ -328,14 +331,17 @@
 	}
 }
 
-func (m *MetadataServer) tryRegister(key core_model.ResourceKey, newMetadata *mesh_proto.MetaData) error {
+func (m *MetadataServer) tryRegister(key core_model.ResourceReq, newMetadata *mesh_proto.MetaData) error {
 	err := core_store.InTx(m.ctx, m.transactions, func(ctx context.Context) error {
 
 		// get Metadata Resource first,
 		// if Metadata is not found, create it,
 		// else update it.
 		metadata := core_mesh.NewMetaDataResource()
-		err := m.resourceManager.Get(m.ctx, metadata, core_store.GetBy(key))
+		err := m.resourceManager.Get(m.ctx, metadata, core_store.GetBy(core_model.ResourceKey{
+			Mesh: key.Mesh,
+			Name: key.Name,
+		}))
 		if err != nil && !core_store.IsResourceNotFound(err) {
 			log.Error(err, "get Metadata Resource")
 			return err
@@ -344,14 +350,16 @@
 		if core_store.IsResourceNotFound(err) {
 			// create if not found
 			metadata.Spec = newMetadata
-			err = m.resourceManager.Create(m.ctx, metadata, core_store.CreateBy(key), core_store.CreatedAt(time.Now()))
+			err = m.resourceManager.Create(m.ctx, metadata, core_store.CreateBy(core_model.ResourceKey{
+				Mesh: key.Mesh,
+				Name: key.Name,
+			}), core_store.CreatedAt(time.Now()))
 			if err != nil {
 				log.Error(err, "create Metadata Resource failed")
 				return err
 			}
 
 			log.Info("create Metadata Resource success", "key", key, "metadata", newMetadata)
-			return nil
 		} else {
 			// if found, update it
 			metadata.Spec = newMetadata
@@ -363,8 +371,32 @@
 			}
 
 			log.Info("update Metadata Resource success", "key", key, "metadata", newMetadata)
-			return nil
 		}
+
+		// 更新dataplane资源
+		// 根据podName Get到dataplane资源
+		dataplane := core_mesh.NewDataplaneResource()
+		err = m.resourceManager.Get(m.ctx, dataplane, core_store.GetBy(core_model.ResourceKey{
+			Mesh: core_model.DefaultMesh,
+			Name: rmkey.GenerateNamespacedName(key.PodName, key.Namespace),
+		}))
+		if err != nil {
+			return err
+		}
+		if dataplane.Spec.Extensions == nil {
+			dataplane.Spec.Extensions = make(map[string]string)
+		}
+		// 拿到dataplane, 添加extensions, 设置revision
+		dataplane.Spec.Extensions[mesh_proto.Revision] = metadata.Spec.Revision
+		dataplane.Spec.Extensions[mesh_proto.Application] = metadata.Spec.App
+
+		// 更新dataplane
+		err = m.resourceManager.Update(m.ctx, dataplane)
+		if err != nil {
+			return err
+		}
+
+		return nil
 	})
 	if err != nil {
 		log.Error(err, "transactions failed")
diff --git a/pkg/dubbo/pusher/pusher.go b/pkg/dubbo/pusher/pusher.go
index 9604dc2..f91b037 100644
--- a/pkg/dubbo/pusher/pusher.go
+++ b/pkg/dubbo/pusher/pusher.go
@@ -27,6 +27,7 @@
 	"github.com/apache/dubbo-kubernetes/pkg/core"
 	"github.com/apache/dubbo-kubernetes/pkg/core/resources/manager"
 	core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
+	"github.com/apache/dubbo-kubernetes/pkg/core/resources/registry"
 	"github.com/apache/dubbo-kubernetes/pkg/events"
 )
 
@@ -75,6 +76,7 @@
 		newFullResyncTicker:           newFullResyncTicker,
 		resourceTypes:                 make(map[core_model.ResourceType]struct{}),
 		resourceRevisions:             make(map[core_model.ResourceType]revision),
+		resourceLastPushed:            make(map[core_model.ResourceType]core_model.ResourceList),
 		resourceChangedEventListeners: make(map[core_model.ResourceType]events.Listener),
 		eventsChannel:                 make(chan *changedEvent, eventsChannelSize),
 		requestChannel: make(chan struct {
@@ -156,8 +158,12 @@
 			return nil
 		case ce := <-p.eventsChannel:
 			log.Info("event received", "ResourceType", ce.resourceType)
-			var resourceList core_model.ResourceList
-			err := p.resourceManager.List(ctx, resourceList)
+			resourceList, err := registry.Global().NewList(ce.resourceType)
+			if err != nil {
+				log.Error(err, "failed to get resourceList")
+				continue
+			}
+			err = p.resourceManager.List(ctx, resourceList)
 			if err != nil {
 				log.Error(err, "list resource failed", "ResourceType", ce.resourceType)
 				continue
diff --git a/pkg/dubbo/servicemapping/register_request.go b/pkg/dubbo/servicemapping/register_request.go
index f679049..42a6c09 100644
--- a/pkg/dubbo/servicemapping/register_request.go
+++ b/pkg/dubbo/servicemapping/register_request.go
@@ -26,7 +26,7 @@
 )
 
 type RegisterRequest struct {
-	ConfigsUpdated map[core_model.ResourceKey]map[string]struct{}
+	ConfigsUpdated map[core_model.ResourceReq]map[string]struct{}
 }
 
 func (q *RegisterRequest) merge(req *RegisterRequest) *RegisterRequest {
diff --git a/pkg/dubbo/servicemapping/server.go b/pkg/dubbo/servicemapping/server.go
index bc802f3..a22f862 100644
--- a/pkg/dubbo/servicemapping/server.go
+++ b/pkg/dubbo/servicemapping/server.go
@@ -19,6 +19,7 @@
 
 import (
 	"context"
+	"github.com/apache/dubbo-kubernetes/pkg/util/rmkey"
 	"io"
 	"time"
 )
@@ -100,11 +101,12 @@
 	interfaces := req.GetInterfaceNames()
 	applicationName := req.GetApplicationName()
 
-	registerReq := &RegisterRequest{ConfigsUpdated: map[core_model.ResourceKey]map[string]struct{}{}}
+	registerReq := &RegisterRequest{ConfigsUpdated: map[core_model.ResourceReq]map[string]struct{}{}}
 	for _, interfaceName := range interfaces {
-		key := core_model.ResourceKey{
-			Mesh: mesh,
-			Name: interfaceName,
+		key := core_model.ResourceReq{
+			Mesh:      mesh,
+			Name:      interfaceName,
+			Namespace: req.GetNamespace(),
 		}
 		if _, ok := registerReq.ConfigsUpdated[key]; !ok {
 			registerReq.ConfigsUpdated[key] = make(map[string]struct{})
@@ -314,7 +316,7 @@
 			appNames = append(appNames, app)
 		}
 		for i := 0; i < 3; i++ {
-			if err := s.tryRegister(key.Mesh, key.Name, appNames); err != nil {
+			if err := s.tryRegister(key.Mesh, key.Name, key.Namespace, appNames); err != nil {
 				log.Error(err, "register failed", "key", key)
 			} else {
 				break
@@ -323,11 +325,11 @@
 	}
 }
 
-func (s *SnpServer) tryRegister(mesh, interfaceName string, newApps []string) error {
+func (s *SnpServer) tryRegister(mesh, interfaceName string, ns string, newApps []string) error {
 	err := core_store.InTx(s.ctx, s.transactions, func(ctx context.Context) error {
 		key := core_model.ResourceKey{
 			Mesh: mesh,
-			Name: interfaceName,
+			Name: rmkey.GenerateMappingResourceKey(interfaceName, ns),
 		}
 
 		// get Mapping Resource first,
diff --git a/pkg/plugins/resources/k8s/store.go b/pkg/plugins/resources/k8s/store.go
index c6c8e0a..2490530 100644
--- a/pkg/plugins/resources/k8s/store.go
+++ b/pkg/plugins/resources/k8s/store.go
@@ -19,7 +19,6 @@
 
 import (
 	"context"
-	"github.com/apache/dubbo-kubernetes/pkg/core/logger"
 	"strings"
 	"time"
 )
@@ -39,6 +38,7 @@
 
 import (
 	"github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
+	"github.com/apache/dubbo-kubernetes/pkg/core/logger"
 	core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
 	"github.com/apache/dubbo-kubernetes/pkg/core/resources/registry"
 	"github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
diff --git a/pkg/plugins/resources/traditional/store.go b/pkg/plugins/resources/traditional/store.go
index 721d87e..97b83f0 100644
--- a/pkg/plugins/resources/traditional/store.go
+++ b/pkg/plugins/resources/traditional/store.go
@@ -20,7 +20,7 @@
 import (
 	"context"
 	"fmt"
-	"github.com/dubbogo/go-zookeeper/zk"
+	util_k8s "github.com/apache/dubbo-kubernetes/pkg/util/k8s"
 	"sync"
 )
 
@@ -31,6 +31,8 @@
 	"dubbo.apache.org/dubbo-go/v3/metadata/report"
 	dubboRegistry "dubbo.apache.org/dubbo-go/v3/registry"
 
+	"github.com/dubbogo/go-zookeeper/zk"
+
 	"github.com/dubbogo/gost/encoding/yaml"
 
 	"github.com/pkg/errors"
@@ -97,7 +99,10 @@
 func (t *traditionalStore) Create(_ context.Context, resource core_model.Resource, fs ...store.CreateOptionsFunc) error {
 	var err error
 	opts := store.NewCreateOptions(fs...)
-
+	name, _, err := util_k8s.CoreNameToK8sName(opts.Name)
+	if err != nil {
+		return err
+	}
 	switch resource.Descriptor().Name {
 	case mesh.MappingType:
 		spec := resource.GetSpec()
@@ -210,7 +215,7 @@
 			return err
 		}
 
-		path := GenerateCpGroupPath(string(resource.Descriptor().Name), opts.Name)
+		path := GenerateCpGroupPath(string(resource.Descriptor().Name), name)
 		// 使用RegClient
 		err = t.regClient.SetContent(path, bytes)
 		if err != nil {
@@ -219,7 +224,7 @@
 	}
 
 	resource.SetMeta(&resourceMetaObject{
-		Name:             opts.Name,
+		Name:             name,
 		Mesh:             opts.Mesh,
 		CreationTime:     opts.CreationTime,
 		ModificationTime: opts.CreationTime,
@@ -231,7 +236,10 @@
 			t.eventWriter.Send(events.ResourceChangedEvent{
 				Operation: events.Create,
 				Type:      resource.Descriptor().Name,
-				Key:       core_model.MetaToResourceKey(resource.GetMeta()),
+				Key: core_model.MetaToResourceKey(&resourceMetaObject{
+					Name: name,
+					Mesh: opts.Mesh,
+				}),
 			})
 		}()
 	}
@@ -240,7 +248,10 @@
 
 func (t *traditionalStore) Update(ctx context.Context, resource core_model.Resource, fs ...store.UpdateOptionsFunc) error {
 	opts := store.NewUpdateOptions(fs...)
-
+	name, _, err := util_k8s.CoreNameToK8sName(opts.Name)
+	if err != nil {
+		return err
+	}
 	switch resource.Descriptor().Name {
 	case mesh.DataplaneType:
 		// Dataplane资源无法更新, 只能获取和删除
@@ -412,7 +423,7 @@
 			return err
 		}
 
-		path := GenerateCpGroupPath(string(resource.Descriptor().Name), opts.Name)
+		path := GenerateCpGroupPath(string(resource.Descriptor().Name), name)
 		// 使用RegClient
 		err = t.regClient.SetContent(path, bytes)
 		if err != nil {
@@ -420,7 +431,7 @@
 		}
 	}
 	resource.SetMeta(&resourceMetaObject{
-		Name:             opts.Name,
+		Name:             name,
 		Mesh:             opts.Mesh,
 		ModificationTime: opts.ModificationTime,
 		Labels:           maps.Clone(opts.Labels),
@@ -431,7 +442,10 @@
 			t.eventWriter.Send(events.ResourceChangedEvent{
 				Operation: events.Update,
 				Type:      resource.Descriptor().Name,
-				Key:       core_model.MetaToResourceKey(resource.GetMeta()),
+				Key: core_model.MetaToResourceKey(&resourceMetaObject{
+					Name: name,
+					Mesh: opts.Mesh,
+				}),
 			})
 		}()
 	}
@@ -440,7 +454,10 @@
 
 func (t *traditionalStore) Delete(ctx context.Context, resource core_model.Resource, fs ...store.DeleteOptionsFunc) error {
 	opts := store.NewDeleteOptions(fs...)
-
+	name, _, err := util_k8s.CoreNameToK8sName(opts.Name)
+	if err != nil {
+		return err
+	}
 	switch resource.Descriptor().Name {
 	case mesh.DataplaneType:
 		// 不支持删除
@@ -528,8 +545,8 @@
 	case mesh.MetaDataType:
 		// 无法删除
 	default:
-		path := GenerateCpGroupPath(string(resource.Descriptor().Name), opts.Name)
-		err := t.regClient.DeleteContent(path)
+		path := GenerateCpGroupPath(string(resource.Descriptor().Name), name)
+		err = t.regClient.DeleteContent(path)
 		if err != nil {
 			return err
 		}
@@ -542,7 +559,7 @@
 				Type:      resource.Descriptor().Name,
 				Key: core_model.ResourceKey{
 					Mesh: opts.Mesh,
-					Name: opts.Name,
+					Name: name,
 				},
 			})
 		}()
@@ -553,21 +570,25 @@
 func (c *traditionalStore) Get(_ context.Context, resource core_model.Resource, fs ...store.GetOptionsFunc) error {
 	opts := store.NewGetOptions(fs...)
 
+	name, _, err := util_k8s.CoreNameToK8sName(opts.Name)
+	if err != nil {
+		return err
+	}
+
 	switch resource.Descriptor().Name {
 	case mesh.DataplaneType:
-		key := opts.Name
-		value, ok := c.dCache.Load(key)
+		value, ok := c.dCache.Load(name)
 		if !ok {
 			return nil
 		}
 		r := value.(core_model.Resource)
 		resource.SetMeta(r.GetMeta())
-		err := resource.SetSpec(r.GetSpec())
+		err = resource.SetSpec(r.GetSpec())
 		if err != nil {
 			return err
 		}
 		resource.SetMeta(&resourceMetaObject{
-			Name: key,
+			Name: name,
 			Mesh: opts.Mesh,
 		})
 	case mesh.TagRouteType:
@@ -591,7 +612,7 @@
 			}
 		}
 		resource.SetMeta(&resourceMetaObject{
-			Name: opts.Name,
+			Name: name,
 			Mesh: opts.Mesh,
 		})
 	case mesh.ConditionRouteType:
@@ -615,7 +636,7 @@
 			}
 		}
 		resource.SetMeta(&resourceMetaObject{
-			Name: opts.Name,
+			Name: name,
 			Mesh: opts.Mesh,
 		})
 	case mesh.DynamicConfigType:
@@ -639,13 +660,12 @@
 			}
 		}
 		resource.SetMeta(&resourceMetaObject{
-			Name: opts.Name,
+			Name: name,
 			Mesh: opts.Mesh,
 		})
 	case mesh.MappingType:
 		// Get通过Key获取, 不设置listener
-		key := opts.Name
-		set, err := c.metadataReport.GetServiceAppMapping(key, mappingGroup, nil)
+		set, err := c.metadataReport.GetServiceAppMapping(name, mappingGroup, nil)
 		if err != nil {
 			if errors.Is(err, zk.ErrNoNode) {
 				return nil
@@ -654,24 +674,23 @@
 		}
 
 		meta := &resourceMetaObject{
-			Name: opts.Name,
+			Name: name,
 			Mesh: opts.Mesh,
 		}
 		resource.SetMeta(meta)
 		mapping := resource.GetSpec().(*mesh_proto.Mapping)
 		mapping.Zone = "default"
-		mapping.InterfaceName = key
+		mapping.InterfaceName = name
 		var items []string
 		for k := range set.Items {
 			items = append(items, fmt.Sprintf("%v", k))
 		}
 		mapping.ApplicationNames = items
 		resource.SetMeta(&resourceMetaObject{
-			Name: opts.Name,
+			Name: name,
 			Mesh: opts.Mesh,
 		})
 	case mesh.MetaDataType:
-		name := opts.Name
 		// 拆分name得到revision和app
 		app, revision := splitAppAndRevision(name)
 		if revision == "" {
@@ -702,11 +721,11 @@
 		}
 		metaData.Services = service
 		resource.SetMeta(&resourceMetaObject{
-			Name: opts.Name,
+			Name: name,
 			Mesh: opts.Mesh,
 		})
 	default:
-		path := GenerateCpGroupPath(string(resource.Descriptor().Name), opts.Name)
+		path := GenerateCpGroupPath(string(resource.Descriptor().Name), name)
 		value, err := c.regClient.GetContent(path)
 		if err != nil {
 			return err
@@ -715,7 +734,7 @@
 			return err
 		}
 		resource.SetMeta(&resourceMetaObject{
-			Name: opts.Name,
+			Name: name,
 			Mesh: opts.Mesh,
 		})
 	}
diff --git a/pkg/plugins/resources/traditional/utils_test.go b/pkg/plugins/resources/traditional/utils_test.go
index c5593ca..921e16d 100644
--- a/pkg/plugins/resources/traditional/utils_test.go
+++ b/pkg/plugins/resources/traditional/utils_test.go
@@ -17,7 +17,9 @@
 
 package traditional
 
-import "testing"
+import (
+	"testing"
+)
 
 func TestSplitAppAndRevision(t *testing.T) {
 	name := "dubbo-springboot-demo-lixinyang-bdc0958191bba7a0f050a32709ee1111"
diff --git a/pkg/test/component.go b/pkg/test/component.go
index 466c6f5..d3b1452 100644
--- a/pkg/test/component.go
+++ b/pkg/test/component.go
@@ -18,14 +18,21 @@
 package test
 
 import (
+	"time"
+)
+
+import (
 	mesh_proto "github.com/apache/dubbo-kubernetes/api/mesh/v1alpha1"
 	"github.com/apache/dubbo-kubernetes/pkg/core"
 	"github.com/apache/dubbo-kubernetes/pkg/core/resources/apis/mesh"
 	core_model "github.com/apache/dubbo-kubernetes/pkg/core/resources/model"
 	"github.com/apache/dubbo-kubernetes/pkg/core/resources/store"
 	core_runtime "github.com/apache/dubbo-kubernetes/pkg/core/runtime"
-	"strings"
-	"time"
+	"github.com/apache/dubbo-kubernetes/pkg/util/rmkey"
+)
+
+const (
+	SystemNamespace = "dubbo-system"
 )
 
 var testServerLog = core.Log.WithName("test")
@@ -84,7 +91,7 @@
 		// get
 		if err := manager.Get(rt.AppContext(), dataplaneResource,
 			store.GetBy(core_model.ResourceKey{
-				Name: dataplaneList.Items[0].Meta.GetName(),
+				Name: dataplaneList.Items[0].Meta.GetName(), // 这个GetName已经是name.namespace的格式了
 				Mesh: "default",
 			})); err != nil {
 			return err
@@ -112,7 +119,7 @@
 		return err
 	}
 	if err := manager.Create(rt.AppContext(), metadata2, store.CreateBy(core_model.ResourceKey{
-		Name: metadata2.Spec.App + "-" + metadata2.Spec.Revision,
+		Name: rmkey.GenerateMetadataResourceKey(metadata2.Spec.App, metadata2.Spec.Revision, SystemNamespace),
 		Mesh: "default",
 	})); err != nil {
 		return err
@@ -121,7 +128,7 @@
 	metadata1 := mesh.NewMetaDataResource()
 	// get
 	if err := manager.Get(rt.AppContext(), metadata1, store.GetBy(core_model.ResourceKey{
-		Name: metadata2.Spec.App + "-" + metadata2.Spec.Revision,
+		Name: rmkey.GenerateMetadataResourceKey(metadata2.Spec.App, metadata2.Spec.Revision, SystemNamespace),
 		Mesh: "default",
 	})); err != nil {
 		return err
@@ -173,7 +180,7 @@
 
 	// create
 	if err := manager.Create(rt.AppContext(), mapping2, store.CreateBy(core_model.ResourceKey{
-		Name: strings.ToLower(strings.ReplaceAll(mapping2.Spec.InterfaceName, ".", "-")),
+		Name: rmkey.GenerateMappingResourceKey(mapping2.Spec.InterfaceName, SystemNamespace),
 		Mesh: "default",
 	})); err != nil {
 		return err
@@ -183,7 +190,7 @@
 	mapping1 := mesh.NewMappingResource()
 	// get
 	if err := manager.Get(rt.AppContext(), mapping1, store.GetBy(core_model.ResourceKey{
-		Name: strings.ToLower(strings.ReplaceAll("org.apache.dubbo.springboot.demo.DemoService1", ".", "-")),
+		Name: rmkey.GenerateMappingResourceKey("org.apache.dubbo.springboot.demo.DemoService1", SystemNamespace),
 		Mesh: "default",
 	})); err != nil {
 		return err
diff --git a/pkg/util/rmkey/resource_name.go b/pkg/util/rmkey/resource_name.go
new file mode 100644
index 0000000..463c676
--- /dev/null
+++ b/pkg/util/rmkey/resource_name.go
@@ -0,0 +1,58 @@
+/*
+ * 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 rmkey
+
+import (
+	"strings"
+)
+
+import (
+	util_k8s "github.com/apache/dubbo-kubernetes/pkg/util/k8s"
+)
+
+const (
+	firstDelimiter  = "-"
+	secondDelimiter = "."
+	separator       = "/"
+)
+
+func GenerateMetadataResourceKey(app string, revision string, namespace string) string {
+	res := app
+	if revision != "" {
+		res += firstDelimiter + revision
+	}
+	if namespace != "" {
+		res += secondDelimiter + revision
+	}
+	return res
+}
+
+func GenerateNamespacedName(name string, namespace string) string {
+	if namespace == "" { // it's cluster scoped object
+		return name
+	}
+	return util_k8s.K8sNamespacedNameToCoreName(name, namespace)
+}
+
+func GenerateMappingResourceKey(interfaceName string, namespace string) string {
+	res := strings.ToLower(strings.ReplaceAll(interfaceName, ".", "-"))
+	if namespace == "" {
+		return res
+	}
+	return util_k8s.K8sNamespacedNameToCoreName(res, namespace)
+}
diff --git a/pkg/xds/bootstrap/templatae_v3.go b/pkg/xds/bootstrap/template_v3.go
similarity index 100%
rename from pkg/xds/bootstrap/templatae_v3.go
rename to pkg/xds/bootstrap/template_v3.go