rename
diff --git a/api/mesh/v1alpha1/metadata.pb.go b/api/mesh/v1alpha1/metadata.pb.go
index fb5994c..31da186 100644
--- a/api/mesh/v1alpha1/metadata.pb.go
+++ b/api/mesh/v1alpha1/metadata.pb.go
@@ -279,10 +279,11 @@
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	App      string `protobuf:"bytes,1,opt,name=app,proto3" json:"app,omitempty"`
-	Revision string `protobuf:"bytes,2,opt,name=revision,proto3" json:"revision,omitempty"`
+	Zone     string `protobuf:"bytes,1,opt,name=zone,proto3" json:"zone,omitempty"`
+	App      string `protobuf:"bytes,2,opt,name=app,proto3" json:"app,omitempty"`
+	Revision string `protobuf:"bytes,3,opt,name=revision,proto3" json:"revision,omitempty"`
 	// key format is '{group}/{interface name}:{version}:{protocol}'
-	Services map[string]*ServiceInfo `protobuf:"bytes,3,rep,name=services,proto3" json:"services,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Services map[string]*ServiceInfo `protobuf:"bytes,4,rep,name=services,proto3" json:"services,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
 }
 
 func (x *MetaData) Reset() {
@@ -317,6 +318,13 @@
 	return file_api_mesh_v1alpha1_metadata_proto_rawDescGZIP(), []int{4}
 }
 
+func (x *MetaData) GetZone() string {
+	if x != nil {
+		return x.Zone
+	}
+	return ""
+}
+
 func (x *MetaData) GetApp() string {
 	if x != nil {
 		return x.App
@@ -472,64 +480,66 @@
 	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, 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,
+	0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x75, 0x6d, 0x22, 0xe1, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74,
+	0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x70,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x70, 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, 0x12, 0x47, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69,
+	0x63, 0x65, 0x73, 0x18, 0x04, 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, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
-	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,
+	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, 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, 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 ea4e298..3cdcbe5 100644
--- a/api/mesh/v1alpha1/metadata.proto
+++ b/api/mesh/v1alpha1/metadata.proto
@@ -47,10 +47,11 @@
   option (dubbo.mesh.resource).ws.plural = "metadatas";
   option (dubbo.mesh.resource).allow_to_inspect = true;
 
-  string app = 1;
-  string revision = 2;
+  string zone = 1;
+  string app = 2;
+  string revision = 3;
   // key format is '{group}/{interface name}:{version}:{protocol}'
-  map<string, ServiceInfo> services = 3;
+  map<string, ServiceInfo> services = 4;
 }
 
 message ServiceInfo {
diff --git a/api/mesh/v1alpha1/zoneegress.pb.go b/api/mesh/v1alpha1/zoneegress.pb.go
index af60ddd..86d4a72 100644
--- a/api/mesh/v1alpha1/zoneegress.pb.go
+++ b/api/mesh/v1alpha1/zoneegress.pb.go
@@ -27,7 +27,7 @@
 	unknownFields protoimpl.UnknownFields
 
 	// Zone field contains Zone name where egress is serving, field will be
-	// automatically set by Global Kuma CP
+	// automatically set by Global Dubbo CP
 	Zone string `protobuf:"bytes,1,opt,name=zone,proto3" json:"zone,omitempty"`
 	// Networking defines the address and port of the Egress to listen on.
 	Networking *ZoneEgress_Networking `protobuf:"bytes,2,opt,name=networking,proto3" json:"networking,omitempty"`
diff --git a/api/mesh/v1alpha1/zoneegress.proto b/api/mesh/v1alpha1/zoneegress.proto
index 14150db..ddbcfd4 100644
--- a/api/mesh/v1alpha1/zoneegress.proto
+++ b/api/mesh/v1alpha1/zoneegress.proto
@@ -18,7 +18,7 @@
   option (dubbo.mesh.resource).scope_namespace = true;
 
   // Zone field contains Zone name where egress is serving, field will be
-  // automatically set by Global Kuma CP
+  // automatically set by Global Dubbo CP
   string zone = 1;
 
   message Networking {
diff --git a/api/system/v1alpha1/zone_insight.pb.go b/api/system/v1alpha1/zone_insight.pb.go
index d78141c..e952cb3 100644
--- a/api/system/v1alpha1/zone_insight.pb.go
+++ b/api/system/v1alpha1/zone_insight.pb.go
@@ -153,7 +153,7 @@
 	return ""
 }
 
-// KDSSubscription describes a single KDS subscription
+// DDSSubscription describes a single DDS subscription
 // created by a Zone to the Global.
 // Ideally, there should be only one such subscription per Zone lifecycle.
 // Presence of multiple subscriptions might indicate one of the following
@@ -176,12 +176,12 @@
 	ConnectTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=connect_time,json=connectTime,proto3" json:"connect_time,omitempty"`
 	// Time when a given Zone disconnected from the Global.
 	DisconnectTime *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=disconnect_time,json=disconnectTime,proto3" json:"disconnect_time,omitempty"`
-	// Status of the KDS subscription.
+	// Status of the DDS subscription.
 	Status *DDSSubscriptionStatus `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"`
 	// Generation is an integer number which is periodically increased by the
 	// status sink
 	Generation uint32 `protobuf:"varint,7,opt,name=generation,proto3" json:"generation,omitempty"`
-	// Config of Zone Kuma CP
+	// Config of Zone Dubbo CP
 	Config string `protobuf:"bytes,8,opt,name=config,proto3" json:"config,omitempty"`
 	// Indicates if subscription provided auth token
 	AuthTokenProvided bool `protobuf:"varint,9,opt,name=auth_token_provided,json=authTokenProvided,proto3" json:"auth_token_provided,omitempty"`
@@ -291,9 +291,9 @@
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	// Time when status of a given KDS subscription was most recently updated.
+	// Time when status of a given DDS subscription was most recently updated.
 	LastUpdateTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=last_update_time,json=lastUpdateTime,proto3" json:"last_update_time,omitempty"`
-	// Total defines an aggregate over individual KDS stats.
+	// Total defines an aggregate over individual DDS stats.
 	Total *DDSServiceStats            `protobuf:"bytes,2,opt,name=total,proto3" json:"total,omitempty"`
 	Stat  map[string]*DDSServiceStats `protobuf:"bytes,3,rep,name=stat,proto3" json:"stat,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
 }
diff --git a/api/system/v1alpha1/zone_insight.proto b/api/system/v1alpha1/zone_insight.proto
index 5d6ecf0..2927548 100644
--- a/api/system/v1alpha1/zone_insight.proto
+++ b/api/system/v1alpha1/zone_insight.proto
@@ -34,7 +34,7 @@
   string clusters_global_instance_id = 3;
 }
 
-// KDSSubscription describes a single KDS subscription
+// DDSSubscription describes a single DDS subscription
 // created by a Zone to the Global.
 // Ideally, there should be only one such subscription per Zone lifecycle.
 // Presence of multiple subscriptions might indicate one of the following
@@ -58,14 +58,14 @@
   // Time when a given Zone disconnected from the Global.
   google.protobuf.Timestamp disconnect_time = 4;
 
-  // Status of the KDS subscription.
+  // Status of the DDS subscription.
   DDSSubscriptionStatus status = 5;
 
   // Generation is an integer number which is periodically increased by the
   // status sink
   uint32 generation = 7;
 
-  // Config of Zone Kuma CP
+  // Config of Zone Dubbo CP
   string config = 8;
 
   // Indicates if subscription provided auth token
@@ -79,10 +79,10 @@
 // DDSSubscriptionStatus defines status of an DDS subscription.
 message DDSSubscriptionStatus {
 
-  // Time when status of a given KDS subscription was most recently updated.
+  // Time when status of a given DDS subscription was most recently updated.
   google.protobuf.Timestamp last_update_time = 1;
 
-  // Total defines an aggregate over individual KDS stats.
+  // Total defines an aggregate over individual DDS stats.
   DDSServiceStats total = 2;
 
   map<string, DDSServiceStats> stat = 3;
diff --git a/app/dubboctl/cmd/proxy.go b/app/dubboctl/cmd/proxy.go
index 49dd267..b1500e5 100644
--- a/app/dubboctl/cmd/proxy.go
+++ b/app/dubboctl/cmd/proxy.go
@@ -119,7 +119,7 @@
 					return err
 				}
 
-				fmt.Printf("%s: logs will be stored in %q\n", "kuma-dp", output)
+				fmt.Printf("%s: logs will be stored in %q\n", "dubbo-dp", output)
 				core.SetLogger(core.NewLoggerWithRotation(level, output, arg.maxSize, arg.maxBackups, arg.maxAge))
 			} else {
 				core.SetLogger(core.NewLogger(level))
@@ -200,7 +200,7 @@
 			envoyComponent, err := envoy.New(opts)
 			err = envoyComponent.Start(stopComponents)
 			if err != nil {
-				runLog.Error(err, "error while running Kuma DP")
+				runLog.Error(err, "error while running Dubbo DP")
 				return err
 			}
 			runLog.Info("stopping Dubbo proxy")
@@ -210,7 +210,7 @@
 
 	// 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().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/dubbo.log then after the file is rotated we will have /tmp/dubbo-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")
diff --git a/app/dubboctl/internal/envoy/envoy.go b/app/dubboctl/internal/envoy/envoy.go
index fe4ef7d..61d7262 100644
--- a/app/dubboctl/internal/envoy/envoy.go
+++ b/app/dubboctl/internal/envoy/envoy.go
@@ -67,9 +67,9 @@
 }
 
 type EnvoyVersion struct {
-	Build            string
-	Version          string
-	KumaDpCompatible bool
+	Build             string
+	Version           string
+	DubboDpCompatible bool
 }
 
 type Opts struct {
diff --git a/app/dubboctl/internal/envoy/remote_bootstrap.go b/app/dubboctl/internal/envoy/remote_bootstrap.go
index a963f12..8924121 100644
--- a/app/dubboctl/internal/envoy/remote_bootstrap.go
+++ b/app/dubboctl/internal/envoy/remote_bootstrap.go
@@ -50,7 +50,7 @@
 
 var (
 	log           = core.Log.WithName("dataplane")
-	DpNotFoundErr = errors.New("Dataplane entity not found. If you are running on Universal please create a Dataplane entity on kuma-cp before starting kuma-dp or pass it to kuma-dp run --dataplane-file=/file. If you are running on Kubernetes, please check the kuma-cp logs to determine why the Dataplane entity could not be created by the automatic sidecar injection.")
+	DpNotFoundErr = errors.New("Dataplane entity not found. If you are running on Universal please create a Dataplane entity on dubbo-cp before starting dubbo-dp or pass it to dubbo-dp run --dataplane-file=/file. If you are running on Kubernetes, please check the dubbo-cp logs to determine why the Dataplane entity could not be created by the automatic sidecar injection.")
 )
 
 type remoteBootstrap struct {
@@ -199,7 +199,7 @@
 			Envoy: types.EnvoyVersion{
 				Version:           params.EnvoyVersion.Version,
 				Build:             params.EnvoyVersion.Build,
-				DubboDpCompatible: params.EnvoyVersion.KumaDpCompatible,
+				DubboDpCompatible: params.EnvoyVersion.DubboDpCompatible,
 			},
 		},
 		DynamicMetadata:     params.DynamicMetadata,
diff --git a/pkg/config/app/dubbo-cp/config.go b/pkg/config/app/dubbo-cp/config.go
index f42d02f..fdc3b9b 100644
--- a/pkg/config/app/dubbo-cp/config.go
+++ b/pkg/config/app/dubbo-cp/config.go
@@ -116,11 +116,11 @@
 
 type DDSEventBasedWatchdog struct {
 	// How often we flush changes when experimental event based watchdog is used.
-	FlushInterval config_types.Duration `json:"flushInterval" envconfig:"DUBBO_EXPERIMENTAL_KDS_EVENT_BASED_WATCHDOG_FLUSH_INTERVAL"`
-	// How often we schedule full KDS resync when experimental event based watchdog is used.
-	FullResyncInterval config_types.Duration `json:"fullResyncInterval" envconfig:"DUBBO_EXPERIMENTAL_KDS_EVENT_BASED_WATCHDOG_FULL_RESYNC_INTERVAL"`
+	FlushInterval config_types.Duration `json:"flushInterval" envconfig:"DUBBO_EXPERIMENTAL_DDS_EVENT_BASED_WATCHDOG_FLUSH_INTERVAL"`
+	// How often we schedule full DDS resync when experimental event based watchdog is used.
+	FullResyncInterval config_types.Duration `json:"fullResyncInterval" envconfig:"DUBBO_EXPERIMENTAL_DDS_EVENT_BASED_WATCHDOG_FULL_RESYNC_INTERVAL"`
 	// If true, then initial full resync is going to be delayed by 0 to FullResyncInterval.
-	DelayFullResync bool `json:"delayFullResync" envconfig:"DUBBO_EXPERIMENTAL_KDS_EVENT_BASED_WATCHDOG_DELAY_FULL_RESYNC"`
+	DelayFullResync bool `json:"delayFullResync" envconfig:"DUBBO_EXPERIMENTAL_DDS_EVENT_BASED_WATCHDOG_DELAY_FULL_RESYNC"`
 }
 
 func DefaultEventBasedWatchdog() DDSEventBasedWatchdog {
diff --git a/pkg/config/dp-server/config.go b/pkg/config/dp-server/config.go
index 08addc9..e0d1688 100644
--- a/pkg/config/dp-server/config.go
+++ b/pkg/config/dp-server/config.go
@@ -72,37 +72,37 @@
 	// Configuration for zone proxy authentication.
 	ZoneProxy ZoneProxyAuthnConfig `json:"zoneProxy"`
 	// If true then Envoy uses Google gRPC instead of Envoy gRPC which lets a proxy reload the auth data (service account token, dp token etc.) from path without proxy restart.
-	EnableReloadableTokens bool `json:"enableReloadableTokens" envconfig:"kuma_dp_server_authn_enable_reloadable_tokens"`
+	EnableReloadableTokens bool `json:"enableReloadableTokens" envconfig:"dubbo_dp_server_authn_enable_reloadable_tokens"`
 }
 type DpProxyAuthnConfig struct {
 	// Type of authentication. Available values: "serviceAccountToken", "dpToken", "none".
 	// If empty, autoconfigured based on the environment - "serviceAccountToken" on Kubernetes, "dpToken" on Universal.
-	Type string `json:"type" envconfig:"kuma_dp_server_authn_dp_proxy_type"`
+	Type string `json:"type" envconfig:"dubbo_dp_server_authn_dp_proxy_type"`
 	// Configuration of dpToken authentication method
 	DpToken DpTokenAuthnConfig `json:"dpToken"`
 }
 type ZoneProxyAuthnConfig struct {
 	// Type of authentication. Available values: "serviceAccountToken", "zoneToken", "none".
 	// If empty, autoconfigured based on the environment - "serviceAccountToken" on Kubernetes, "zoneToken" on Universal.
-	Type string `json:"type" envconfig:"kuma_dp_server_authn_zone_proxy_type"`
+	Type string `json:"type" envconfig:"dubbo_dp_server_authn_zone_proxy_type"`
 	// Configuration for zoneToken authentication method.
 	ZoneToken ZoneTokenAuthnConfig `json:"zoneToken"`
 }
 type DpTokenAuthnConfig struct {
 	// If true the control plane token issuer is enabled. It's recommended to set it to false when all the tokens are issued offline.
-	EnableIssuer bool `json:"enableIssuer" envconfig:"kuma_dp_server_authn_dp_proxy_dp_token_enable_issuer"`
+	EnableIssuer bool `json:"enableIssuer" envconfig:"dubbo_dp_server_authn_dp_proxy_dp_token_enable_issuer"`
 	// DP Token validator configuration
 	Validator DpTokenValidatorConfig `json:"validator"`
 }
 type ZoneTokenAuthnConfig struct {
 	// If true the control plane token issuer is enabled. It's recommended to set it to false when all the tokens are issued offline.
-	EnableIssuer bool `json:"enableIssuer" envconfig:"kuma_dp_server_authn_zone_proxy_zone_token_enable_issuer"`
+	EnableIssuer bool `json:"enableIssuer" envconfig:"dubbo_dp_server_authn_zone_proxy_zone_token_enable_issuer"`
 	// Zone Token validator configuration
 	Validator ZoneTokenValidatorConfig `json:"validator"`
 }
 type DpTokenValidatorConfig struct {
-	// If true then Kuma secrets with prefix "dataplane-token-signing-key-{mesh}" are considered as signing keys.
-	UseSecrets bool `json:"useSecrets" envconfig:"kuma_dp_server_authn_dp_proxy_dp_token_validator_use_secrets"`
+	// If true then Dubbo secrets with prefix "dataplane-token-signing-key-{mesh}" are considered as signing keys.
+	UseSecrets bool `json:"useSecrets" envconfig:"dubbo_dp_server_authn_dp_proxy_dp_token_validator_use_secrets"`
 	// List of public keys used to validate the token
 	PublicKeys []config_types.MeshedPublicKey `json:"publicKeys"`
 }
@@ -117,8 +117,8 @@
 }
 
 type ZoneTokenValidatorConfig struct {
-	// If true then Kuma secrets with prefix "zone-token-signing-key" are considered as signing keys.
-	UseSecrets bool `json:"useSecrets" envconfig:"kuma_dp_server_authn_zone_proxy_zone_token_validator_use_secrets"`
+	// If true then Dubbo secrets with prefix "zone-token-signing-key" are considered as signing keys.
+	UseSecrets bool `json:"useSecrets" envconfig:"dubbo_dp_server_authn_zone_proxy_zone_token_validator_use_secrets"`
 	// List of public keys used to validate the token
 	PublicKeys []config_types.PublicKey `json:"publicKeys"`
 }
diff --git a/pkg/config/eventbus/config.go b/pkg/config/eventbus/config.go
index 0591005..b3099d1 100644
--- a/pkg/config/eventbus/config.go
+++ b/pkg/config/eventbus/config.go
@@ -19,7 +19,7 @@
 
 type Config struct {
 	// BufferSize controls the buffer for every single event listener.
-	// If we go over buffer, additional delay may happen to various operation like insight recomputation or KDS.
+	// If we go over buffer, additional delay may happen to various operation like insight recomputation or DDS.
 	BufferSize uint `json:"bufferSize" envconfig:"dubbo_event_bus_buffer_size"`
 }
 
diff --git a/pkg/config/multizone/dds.go b/pkg/config/multizone/dds.go
index bc8ae0b..89b9eba 100644
--- a/pkg/config/multizone/dds.go
+++ b/pkg/config/multizone/dds.go
@@ -32,36 +32,36 @@
 	config.BaseConfig
 
 	// Port of a gRPC server that serves Dubbo Discovery Service (DDS).
-	GrpcPort uint32 `json:"grpcPort" envconfig:"dubbo_multizone_global_kds_grpc_port"`
+	GrpcPort uint32 `json:"grpcPort" envconfig:"dubbo_multizone_global_dds_grpc_port"`
 	// Interval for refreshing state of the world
-	RefreshInterval config_types.Duration `json:"refreshInterval" envconfig:"dubbo_multizone_global_kds_refresh_interval"`
+	RefreshInterval config_types.Duration `json:"refreshInterval" envconfig:"dubbo_multizone_global_dds_refresh_interval"`
 	// Interval for flushing Zone Insights (stats of multi-zone communication)
-	ZoneInsightFlushInterval config_types.Duration `json:"zoneInsightFlushInterval" envconfig:"dubbo_multizone_global_kds_zone_insight_flush_interval"`
-	// TlsEnabled turns on TLS for KDS
-	TlsEnabled bool `json:"tlsEnabled" envconfig:"dubbo_multizone_global_kds_tls_enabled"`
+	ZoneInsightFlushInterval config_types.Duration `json:"zoneInsightFlushInterval" envconfig:"dubbo_multizone_global_dds_zone_insight_flush_interval"`
+	// TlsEnabled turns on TLS for DDS
+	TlsEnabled bool `json:"tlsEnabled" envconfig:"dubbo_multizone_global_dds_tls_enabled"`
 	// TlsCertFile defines a path to a file with PEM-encoded TLS cert.
-	TlsCertFile string `json:"tlsCertFile" envconfig:"dubbo_multizone_global_kds_tls_cert_file"`
+	TlsCertFile string `json:"tlsCertFile" envconfig:"dubbo_multizone_global_dds_tls_cert_file"`
 	// TlsKeyFile defines a path to a file with PEM-encoded TLS key.
-	TlsKeyFile string `json:"tlsKeyFile" envconfig:"dubbo_multizone_global_kds_tls_key_file"`
+	TlsKeyFile string `json:"tlsKeyFile" envconfig:"dubbo_multizone_global_dds_tls_key_file"`
 	// TlsMinVersion defines the minimum TLS version to be used
-	TlsMinVersion string `json:"tlsMinVersion" envconfig:"dubbo_multizone_global_kds_tls_min_version"`
+	TlsMinVersion string `json:"tlsMinVersion" envconfig:"dubbo_multizone_global_dds_tls_min_version"`
 	// TlsMaxVersion defines the maximum TLS version to be used
-	TlsMaxVersion string `json:"tlsMaxVersion" envconfig:"dubbo_multizone_global_kds_tls_max_version"`
+	TlsMaxVersion string `json:"tlsMaxVersion" envconfig:"dubbo_multizone_global_dds_tls_max_version"`
 	// TlsCipherSuites defines the list of ciphers to use
-	TlsCipherSuites []string `json:"tlsCipherSuites" envconfig:"dubbo_multizone_global_kds_tls_cipher_suites"`
-	// MaxMsgSize defines a maximum size of the message that is exchanged using KDS.
+	TlsCipherSuites []string `json:"tlsCipherSuites" envconfig:"dubbo_multizone_global_dds_tls_cipher_suites"`
+	// MaxMsgSize defines a maximum size of the message that is exchanged using DDS.
 	// In practice this means a limit on full list of one resource type.
-	MaxMsgSize uint32 `json:"maxMsgSize" envconfig:"dubbo_multizone_global_kds_max_msg_size"`
-	// MsgSendTimeout defines a timeout on sending a single KDS message.
-	// KDS stream between control planes is terminated if the control plane hits this timeout.
-	MsgSendTimeout config_types.Duration `json:"msgSendTimeout" envconfig:"dubbo_multizone_global_kds_msg_send_timeout"`
+	MaxMsgSize uint32 `json:"maxMsgSize" envconfig:"dubbo_multizone_global_dds_max_msg_size"`
+	// MsgSendTimeout defines a timeout on sending a single DDS message.
+	// DDS stream between control planes is terminated if the control plane hits this timeout.
+	MsgSendTimeout config_types.Duration `json:"msgSendTimeout" envconfig:"dubbo_multizone_global_dds_msg_send_timeout"`
 	// Backoff that is executed when the global control plane is sending the response that was previously rejected by zone control plane.
-	NackBackoff config_types.Duration `json:"nackBackoff" envconfig:"dubbo_multizone_global_kds_nack_backoff"`
-	// DisableSOTW if true doesn't expose SOTW version of KDS. Default: false
-	DisableSOTW bool `json:"disableSOTW" envconfig:"dubbo_multizone_global_kds_disable_sotw"`
+	NackBackoff config_types.Duration `json:"nackBackoff" envconfig:"dubbo_multizone_global_dds_nack_backoff"`
+	// DisableSOTW if true doesn't expose SOTW version of DDS. Default: false
+	DisableSOTW bool `json:"disableSOTW" envconfig:"dubbo_multizone_global_dds_disable_sotw"`
 	// ResponseBackoff is a time Global CP waits before sending ACK/NACK.
 	// This is a way to slow down Zone CP from sending resources too often.
-	ResponseBackoff config_types.Duration `json:"responseBackoff" envconfig:"dubbo_multizone_global_kds_response_backoff"`
+	ResponseBackoff config_types.Duration `json:"responseBackoff" envconfig:"dubbo_multizone_global_dds_response_backoff"`
 	// ZoneHealthCheck holds config for ensuring zones are online
 	ZoneHealthCheck ZoneHealthCheckConfig `json:"zoneHealthCheck"`
 }
@@ -108,22 +108,22 @@
 	config.BaseConfig
 
 	// Interval for refreshing state of the world
-	RefreshInterval config_types.Duration `json:"refreshInterval" envconfig:"kuma_multizone_zone_kds_refresh_interval"`
+	RefreshInterval config_types.Duration `json:"refreshInterval" envconfig:"dubbo_multizone_zone_dds_refresh_interval"`
 	// If true, TLS connection to the server won't be verified.
-	TlsSkipVerify bool `json:"tlsSkipVerify" envconfig:"kuma_multizone_zone_kds_tls_skip_verify"`
+	TlsSkipVerify bool `json:"tlsSkipVerify" envconfig:"dubbo_multizone_zone_dds_tls_skip_verify"`
 	// RootCAFile defines a path to a file with PEM-encoded Root CA. Client will verify the server by using it.
-	RootCAFile string `json:"rootCaFile" envconfig:"kuma_multizone_zone_kds_root_ca_file"`
-	// MaxMsgSize defines a maximum size of the message that is exchanged using KDS.
+	RootCAFile string `json:"rootCaFile" envconfig:"dubbo_multizone_zone_dds_root_ca_file"`
+	// MaxMsgSize defines a maximum size of the message that is exchanged using DDS.
 	// In practice this means a limit on full list of one resource type.
-	MaxMsgSize uint32 `json:"maxMsgSize" envconfig:"kuma_multizone_zone_kds_max_msg_size"`
-	// MsgSendTimeout defines a timeout on sending a single KDS message.
-	// KDS stream between control planes is terminated if the control plane hits this timeout.
-	MsgSendTimeout config_types.Duration `json:"msgSendTimeout" envconfig:"kuma_multizone_zone_kds_msg_send_timeout"`
+	MaxMsgSize uint32 `json:"maxMsgSize" envconfig:"dubbo_multizone_zone_dds_max_msg_size"`
+	// MsgSendTimeout defines a timeout on sending a single DDS message.
+	// DDS stream between control planes is terminated if the control plane hits this timeout.
+	MsgSendTimeout config_types.Duration `json:"msgSendTimeout" envconfig:"dubbo_multizone_zone_dds_msg_send_timeout"`
 	// Backoff that is executed when the zone control plane is sending the response that was previously rejected by global control plane.
-	NackBackoff config_types.Duration `json:"nackBackoff" envconfig:"kuma_multizone_zone_kds_nack_backoff"`
+	NackBackoff config_types.Duration `json:"nackBackoff" envconfig:"dubbo_multizone_zone_dds_nack_backoff"`
 	// ResponseBackoff is a time Zone CP waits before sending ACK/NACK.
 	// This is a way to slow down Global CP from sending resources too often.
-	ResponseBackoff config_types.Duration `json:"responseBackoff" envconfig:"kuma_multizone_zone_kds_response_backoff"`
+	ResponseBackoff config_types.Duration `json:"responseBackoff" envconfig:"dubbo_multizone_zone_dds_response_backoff"`
 }
 
 var _ config.Config = &DdsClientConfig{}
@@ -135,10 +135,10 @@
 
 	// PollInterval is the interval between the global CP checking ZoneInsight for
 	// health check pings and interval between zone CP sending health check pings
-	PollInterval config_types.Duration `json:"pollInterval" envconfig:"kuma_multizone_global_kds_zone_health_check_poll_interval"`
+	PollInterval config_types.Duration `json:"pollInterval" envconfig:"dubbo_multizone_global_dds_zone_health_check_poll_interval"`
 	// Timeout is the time after the last health check that a zone counts as
 	// no longer online
-	Timeout config_types.Duration `json:"timeout" envconfig:"kuma_multizone_global_kds_zone_health_check_timeout"`
+	Timeout config_types.Duration `json:"timeout" envconfig:"dubbo_multizone_global_dds_zone_health_check_timeout"`
 }
 
 func (c ZoneHealthCheckConfig) Validate() error {
diff --git a/pkg/config/plugins/runtime/k8s/config.go b/pkg/config/plugins/runtime/k8s/config.go
index c0aea14..ecf7f76 100644
--- a/pkg/config/plugins/runtime/k8s/config.go
+++ b/pkg/config/plugins/runtime/k8s/config.go
@@ -149,7 +149,7 @@
 	return errs
 }
 
-// DataplaneContainer defines the configuration of a Kuma dataplane proxy container.
+// DataplaneContainer defines the configuration of a Dubbo dataplane proxy container.
 type DataplaneContainer struct {
 	// Deprecated: Use DUBBO_BOOTSTRAP_SERVER_PARAMS_ADMIN_PORT instead.
 	AdminPort uint32 `json:"adminPort,omitempty" envconfig:"dubbo_runtime_kubernetes_injector_sidecar_container_admin_port"`
@@ -159,7 +159,7 @@
 	ReadinessProbe SidecarReadinessProbe `json:"readinessProbe,omitempty"`
 	// Liveness probe.
 	LivenessProbe SidecarLivenessProbe `json:"livenessProbe,omitempty"`
-	// EnvVars are additional environment variables that can be placed on Kuma DP sidecar
+	// EnvVars are additional environment variables that can be placed on Dubbo DP sidecar
 	EnvVars map[string]string `json:"envVars" envconfig:"dubbo_runtime_kubernetes_injector_sidecar_container_env_vars"`
 }
 
diff --git a/pkg/config/xds/config.go b/pkg/config/xds/config.go
index cb9a72c..ba2cd0b 100644
--- a/pkg/config/xds/config.go
+++ b/pkg/config/xds/config.go
@@ -66,7 +66,7 @@
 }
 
 type Gateway struct {
-	GlobalDownstreamMaxConnections uint64 `json:"globalDownstreamMaxConnections" envconfig:"kuma_proxy_gateway_global_downstream_max_connections"`
+	GlobalDownstreamMaxConnections uint64 `json:"globalDownstreamMaxConnections" envconfig:"dubbo_proxy_gateway_global_downstream_max_connections"`
 }
 
 func DefaultXdsServerConfig() *XdsServerConfig {
diff --git a/pkg/core/bootstrap/bootstrap.go b/pkg/core/bootstrap/bootstrap.go
index b3a2afa..8d5591a 100644
--- a/pkg/core/bootstrap/bootstrap.go
+++ b/pkg/core/bootstrap/bootstrap.go
@@ -122,8 +122,8 @@
 	}))
 
 	resourceManager := builder.ResourceManager()
-	kdsContext := dds_context.DefaultContext(appCtx, resourceManager, cfg)
-	builder.WithDDSContext(kdsContext)
+	ddsContext := dds_context.DefaultContext(appCtx, resourceManager, cfg)
+	builder.WithDDSContext(ddsContext)
 
 	if err := initializeMeshCache(builder); err != nil {
 		return nil, err
diff --git a/pkg/core/managers/apis/dataplane/dataplane_manager.go b/pkg/core/managers/apis/dataplane/dataplane_manager.go
index f3feb71..e4106a8 100644
--- a/pkg/core/managers/apis/dataplane/dataplane_manager.go
+++ b/pkg/core/managers/apis/dataplane/dataplane_manager.go
@@ -135,7 +135,7 @@
 	for _, inbound := range dp.Spec.Networking.Inbound {
 		if inbound.ServiceProbe != nil {
 			inbound.State = mesh_proto.Dataplane_Networking_Inbound_NotReady
-			// write health for backwards compatibility with Kuma 2.5 and older
+			// write health for backwards compatibility with Dubbo
 			inbound.Health = &mesh_proto.Dataplane_Networking_Inbound_Health{
 				Ready: false,
 			}
diff --git a/pkg/core/xds/sockets.go b/pkg/core/xds/sockets.go
index 32f11a9..089be44 100644
--- a/pkg/core/xds/sockets.go
+++ b/pkg/core/xds/sockets.go
@@ -7,12 +7,12 @@
 
 // AccessLogSocketName generates a socket path that will fit the Unix socket path limitation of 104 chars
 func AccessLogSocketName(tmpDir, name, mesh string) string {
-	return socketName(filepath.Join(tmpDir, fmt.Sprintf("kuma-al-%s-%s", name, mesh)))
+	return socketName(filepath.Join(tmpDir, fmt.Sprintf("dubbo-al-%s-%s", name, mesh)))
 }
 
 // MetricsHijackerSocketName generates a socket path that will fit the Unix socket path limitation of 104 chars
 func MetricsHijackerSocketName(tmpDir, name, mesh string) string {
-	return socketName(filepath.Join(tmpDir, fmt.Sprintf("kuma-mh-%s-%s", name, mesh)))
+	return socketName(filepath.Join(tmpDir, fmt.Sprintf("dubbo-mh-%s-%s", name, mesh)))
 }
 
 func socketName(s string) string {
diff --git a/pkg/dds/context/context.go b/pkg/dds/context/context.go
index ce45924..9a9da71 100644
--- a/pkg/dds/context/context.go
+++ b/pkg/dds/context/context.go
@@ -171,10 +171,10 @@
 	}
 }
 
-// HashSuffixMapper returns mapper that adds a hash suffix to the name during KDS sync
-func HashSuffixMapper(checkKDSFeature bool, labelsToUse ...string) reconcile.ResourceMapper {
+// HashSuffixMapper returns mapper that adds a hash suffix to the name during DDS sync
+func HashSuffixMapper(checkDDSFeature bool, labelsToUse ...string) reconcile.ResourceMapper {
 	return func(features dds.Features, r core_model.Resource) (core_model.Resource, error) {
-		if checkKDSFeature && !features.HasFeature(dds.FeatureHashSuffix) {
+		if checkDDSFeature && !features.HasFeature(dds.FeatureHashSuffix) {
 			return r, nil
 		}
 
diff --git a/pkg/dds/features.go b/pkg/dds/features.go
index 94326f9..4ac624e 100644
--- a/pkg/dds/features.go
+++ b/pkg/dds/features.go
@@ -45,8 +45,6 @@
 // global control plane to indicate it's still running.
 const FeatureZonePingHealth string = "zone-ping-health"
 
-// FeatureHashSuffix means that the zone control plane has a fix for the MeshGateway renaming
-// issue https://github.com/kumahq/kuma/pull/8450 and can handle the hash suffix in the resource name.
 const FeatureHashSuffix string = "hash-suffix"
 
 func ContextHasFeature(ctx context.Context, feature string) bool {
diff --git a/pkg/dds/global/components.go b/pkg/dds/global/components.go
index 0aec713..941d8e2 100644
--- a/pkg/dds/global/components.go
+++ b/pkg/dds/global/components.go
@@ -104,19 +104,19 @@
 		}
 		log := ddsDeltaGlobalLog.WithValues("peer-id", zoneID)
 		log = dubbo_log.AddFieldsFromCtx(log, stream.Context(), rt.Extensions())
-		kdsStream := dds_client.NewDeltaDDSStream(stream, zoneID, rt, "")
+		ddsStream := dds_client.NewDeltaDDSStream(stream, zoneID, rt, "")
 		sink := dds_client.NewDDSSyncClient(
 			log,
 			reg.ObjectTypes(model.HasDDSFlag(model.ZoneToGlobalFlag)),
-			kdsStream,
+			ddsStream,
 			dds_sync_store.GlobalSyncCallback(stream.Context(), resourceSyncer, rt.Config().Store.Type == store_config.KubernetesStore, kubeFactory, rt.Config().Store.Kubernetes.SystemNamespace),
 			rt.Config().Multizone.Global.DDS.ResponseBackoff.Duration,
 		)
 		go func() {
 			if err := sink.Receive(); err != nil {
-				errChan <- errors.Wrap(err, "KDSSyncClient finished with an error")
+				errChan <- errors.Wrap(err, "DDSSyncClient finished with an error")
 			} else {
-				log.V(1).Info("KDSSyncClient finished gracefully")
+				log.V(1).Info("DDSSyncClient finished gracefully")
 			}
 		}()
 	})
diff --git a/pkg/dds/mux/client.go b/pkg/dds/mux/client.go
index 7cbb8de..c070e37 100644
--- a/pkg/dds/mux/client.go
+++ b/pkg/dds/mux/client.go
@@ -146,10 +146,10 @@
 }
 
 func (c *client) startGlobalToZoneSync(ctx context.Context, log logr.Logger, conn *grpc.ClientConn, errorCh chan error) {
-	kdsClient := mesh_proto.NewDDSSyncServiceClient(conn)
+	ddsClient := mesh_proto.NewDDSSyncServiceClient(conn)
 	log = log.WithValues("rpc", "global-to-zone")
 	log.Info("initializing Dubbo Discovery Service (DDS) stream for global to zone sync of resources with delta xDS")
-	stream, err := kdsClient.GlobalToZoneSync(ctx)
+	stream, err := ddsClient.GlobalToZoneSync(ctx)
 	if err != nil {
 		errorCh <- err
 		return
@@ -160,10 +160,10 @@
 }
 
 func (c *client) startZoneToGlobalSync(ctx context.Context, log logr.Logger, conn *grpc.ClientConn, errorCh chan error) {
-	kdsClient := mesh_proto.NewDDSSyncServiceClient(conn)
+	ddsClient := mesh_proto.NewDDSSyncServiceClient(conn)
 	log = log.WithValues("rpc", "zone-to-global")
 	log.Info("initializing Dubbo Discovery Service (DDS) stream for zone to global sync of resources with delta xDS")
-	stream, err := kdsClient.ZoneToGlobalSync(ctx)
+	stream, err := ddsClient.ZoneToGlobalSync(ctx)
 	if err != nil {
 		errorCh <- err
 		return
@@ -223,7 +223,7 @@
 	err := <-processingErrorsCh
 	if status.Code(err) == codes.Unimplemented {
 		log.Error(err, "rpc stream failed, because global CP does not implement this rpc. Upgrade remote CP.")
-		// backwards compatibility. Do not rethrow error, so KDS multiplex can still operate.
+		// backwards compatibility. Do not rethrow error, so DDS multiplex can still operate.
 		return
 	}
 	if errors.Is(err, context.Canceled) {
diff --git a/pkg/dds/mux/zone_sync.go b/pkg/dds/mux/zone_sync.go
index c65a873..b6ef396 100644
--- a/pkg/dds/mux/zone_sync.go
+++ b/pkg/dds/mux/zone_sync.go
@@ -125,7 +125,7 @@
 	logger := clientLog.WithValues("clientID", zone)
 	for _, filter := range g.filters {
 		if err := filter.InterceptServerStream(stream); err != nil {
-			return errors.Wrap(err, "closing KDS stream following a callback error")
+			return errors.Wrap(err, "closing DDS stream following a callback error")
 		}
 	}
 
diff --git a/pkg/dds/store/sync.go b/pkg/dds/store/sync.go
index 8abe6e2..63148ad 100644
--- a/pkg/dds/store/sync.go
+++ b/pkg/dds/store/sync.go
@@ -305,11 +305,6 @@
 
 			return syncer.Sync(ctx, upstream, PrefilterBy(func(r core_model.Resource) bool {
 				if zi, ok := r.(*core_mesh.ZoneIngressResource); ok {
-					// Old zones don't have a 'kuma.io/zone' label on ZoneIngress, when upgrading to the new 2.6 version
-					// we don't want Zone CP to sync ZoneIngresses without 'kuma.io/zone' label to Global pretending
-					// they're originating here. That's why upgrade from 2.5 to 2.6 (and 2.7) requires casting resource
-					// to *core_mesh.ZoneIngressResource and checking its 'spec.zone' field.
-					// todo: remove in 2 releases after 2.6.x
 					return zi.IsRemoteIngress(localZone)
 				}
 
@@ -374,6 +369,10 @@
 				for _, m := range upstream.AddedResources.(*core_mesh.MappingResourceList).Items {
 					m.Spec.Zone = upstream.ControlPlaneId
 				}
+			case core_mesh.MetaDataType:
+				for _, m := range upstream.AddedResources.(*core_mesh.MetaDataResourceList).Items {
+					m.Spec.Zone = upstream.ControlPlaneId
+				}
 			}
 
 			return syncer.Sync(ctx, upstream, PrefilterBy(func(r model.Resource) bool {
diff --git a/pkg/dds/util/resource_test.go b/pkg/dds/util/resource_test.go
index 1b0004f..30e31e4 100644
--- a/pkg/dds/util/resource_test.go
+++ b/pkg/dds/util/resource_test.go
@@ -61,7 +61,7 @@
 		},
 		Entry(nil, testCase{name: "foo", suffix: "bar"}),
 		Entry(nil, testCase{name: "bar", suffix: "baz"}),
-		Entry(nil, testCase{name: "baz", suffix: "kuma-system"}),
-		Entry(nil, testCase{name: "faz", suffix: "daz.kuma-system"}),
+		Entry(nil, testCase{name: "baz", suffix: "dubbo-system"}),
+		Entry(nil, testCase{name: "faz", suffix: "daz.dubbo-system"}),
 	)
 })
diff --git a/pkg/dds/zone/components.go b/pkg/dds/zone/components.go
index ff02e46..0f4ff61 100644
--- a/pkg/dds/zone/components.go
+++ b/pkg/dds/zone/components.go
@@ -75,7 +75,7 @@
 	}
 
 	onGlobalToZoneSyncStarted := mux.OnGlobalToZoneSyncStartedFunc(func(stream mesh_proto.DDSSyncService_GlobalToZoneSyncClient, errChan chan error) {
-		log := ddsDeltaZoneLog.WithValues("kds-version", "v2")
+		log := ddsDeltaZoneLog.WithValues("dds-version", "v2")
 		syncClient := dds_client.NewDDSSyncClient(
 			log,
 			reg.ObjectTypes(model.HasDDSFlag(model.GlobalToZoneSelector)),
@@ -101,7 +101,7 @@
 	})
 
 	onZoneToGlobalSyncStarted := mux.OnZoneToGlobalSyncStartedFunc(func(stream mesh_proto.DDSSyncService_ZoneToGlobalSyncClient, errChan chan error) {
-		log := ddsDeltaZoneLog.WithValues("kds-version", "v2", "peer-id", "global")
+		log := ddsDeltaZoneLog.WithValues("dds-version", "v2", "peer-id", "global")
 		log.Info("ZoneToGlobalSync new session created")
 		session := dds_server.NewServerStream(stream)
 		go func() {
@@ -121,5 +121,5 @@
 		onZoneToGlobalSyncStarted,
 		*rt.Config().Multizone.Zone.DDS,
 	)
-	return rt.Add(component.NewResilientComponent(ddsDeltaZoneLog.WithName("kds-mux-client"), muxClient))
+	return rt.Add(component.NewResilientComponent(ddsDeltaZoneLog.WithName("dds-mux-client"), muxClient))
 }
diff --git a/pkg/plugins/runtime/k8s/controllers/inbound_converter.go b/pkg/plugins/runtime/k8s/controllers/inbound_converter.go
index c3df9ec..24f9064 100644
--- a/pkg/plugins/runtime/k8s/controllers/inbound_converter.go
+++ b/pkg/plugins/runtime/k8s/controllers/inbound_converter.go
@@ -77,7 +77,7 @@
 			Port:   uint32(containerPort),
 			Tags:   tags,
 			State:  state,
-			Health: &health, // write health for backwards compatibility with Kuma 2.5 and older
+			Health: &health, // write health for backwards compatibility with Dubbo
 		})
 	}
 
@@ -105,7 +105,7 @@
 		Port:   mesh_proto.TCPPortReserved,
 		Tags:   tags,
 		State:  state,
-		Health: &health, // write health for backwards compatibility with Kuma 2.5 and older
+		Health: &health, // write health for backwards compatibility with Dubbo
 	}
 }
 
@@ -175,7 +175,7 @@
 // ProtocolTagFor infers service protocol from a `<port>.service.dubbo.io/protocol` annotation or `appProtocol`.
 func ProtocolTagFor(svc *kube_core.Service, svcPort *kube_core.ServicePort) string {
 	var protocolValue string
-	protocolAnnotation := fmt.Sprintf("%d.service.kuma.io/protocol", svcPort.Port)
+	protocolAnnotation := fmt.Sprintf("%d.service.dubbo.io/protocol", svcPort.Port)
 
 	if svcPort.AppProtocol != nil {
 		protocolValue = *svcPort.AppProtocol
@@ -186,8 +186,8 @@
 		}
 	}
 
-	if explicitKumaProtocol, ok := svc.Annotations[protocolAnnotation]; ok && protocolValue == "" {
-		protocolValue = explicitKumaProtocol
+	if explicitDubboProtocol, ok := svc.Annotations[protocolAnnotation]; ok && protocolValue == "" {
+		protocolValue = explicitDubboProtocol
 	}
 
 	if protocolValue == "" {
diff --git a/pkg/plugins/runtime/k8s/controllers/pod_controller.go b/pkg/plugins/runtime/k8s/controllers/pod_controller.go
index a838de1..2b52018 100644
--- a/pkg/plugins/runtime/k8s/controllers/pod_controller.go
+++ b/pkg/plugins/runtime/k8s/controllers/pod_controller.go
@@ -287,7 +287,7 @@
 	if err != nil {
 		if !errors.Is(err, context.Canceled) {
 			log.Error(err, "unable to create/update Dataplane", "operationResult", operationResult)
-			r.EventRecorder.Eventf(pod, kube_core.EventTypeWarning, FailedToGenerateDubboDataplaneReason, "Failed to generate Kuma Dataplane: %s", err.Error())
+			r.EventRecorder.Eventf(pod, kube_core.EventTypeWarning, FailedToGenerateDubboDataplaneReason, "Failed to generate Dubbo Dataplane: %s", err.Error())
 		}
 
 		return err
@@ -295,10 +295,10 @@
 	switch operationResult {
 	case kube_controllerutil.OperationResultCreated:
 		log.Info("Dataplane created")
-		r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, CreatedDubboDataplaneReason, "Created Kuma Dataplane: %s", pod.Name)
+		r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, CreatedDubboDataplaneReason, "Created Dubbo Dataplane: %s", pod.Name)
 	case kube_controllerutil.OperationResultUpdated:
 		log.Info("Dataplane updated")
-		r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, UpdatedDubboDataplaneReason, "Updated Kuma Dataplane: %s", pod.Name)
+		r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, UpdatedDubboDataplaneReason, "Updated Dubbo Dataplane: %s", pod.Name)
 	}
 	return nil
 }
@@ -323,16 +323,16 @@
 	log := r.Log.WithValues("pod", kube_types.NamespacedName{Namespace: pod.Namespace, Name: pod.Name})
 	if err != nil {
 		log.Error(err, "unable to create/update Ingress", "operationResult", operationResult)
-		r.EventRecorder.Eventf(pod, kube_core.EventTypeWarning, FailedToGenerateDubboDataplaneReason, "Failed to generate Kuma Ingress: %s", err.Error())
+		r.EventRecorder.Eventf(pod, kube_core.EventTypeWarning, FailedToGenerateDubboDataplaneReason, "Failed to generate Dubbo Ingress: %s", err.Error())
 		return err
 	}
 	switch operationResult {
 	case kube_controllerutil.OperationResultCreated:
 		log.Info("ZoneIngress created")
-		r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, CreatedDubboDataplaneReason, "Created Kuma Ingress: %s", pod.Name)
+		r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, CreatedDubboDataplaneReason, "Created Dubbo Ingress: %s", pod.Name)
 	case kube_controllerutil.OperationResultUpdated:
 		log.Info("ZoneIngress updated")
-		r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, UpdatedDubboDataplaneReason, "Updated Kuma Ingress: %s", pod.Name)
+		r.EventRecorder.Eventf(pod, kube_core.EventTypeNormal, UpdatedDubboDataplaneReason, "Updated Dubbo Ingress: %s", pod.Name)
 	}
 	return nil
 }
diff --git a/pkg/plugins/runtime/k8s/metadata/annotations.go b/pkg/plugins/runtime/k8s/metadata/annotations.go
index 52b0298..5762beb 100644
--- a/pkg/plugins/runtime/k8s/metadata/annotations.go
+++ b/pkg/plugins/runtime/k8s/metadata/annotations.go
@@ -37,7 +37,7 @@
 	// which is crucial for Multizone communication
 	DubboIngressAnnotation = "dubbo.io/ingress"
 
-	// DUBBOSidecarEnvVarsAnnotation is a ; separated list of env vars that will be applied on Kuma Sidecar
+	// DUBBOSidecarEnvVarsAnnotation is a ; separated list of env vars that will be applied on Dubbo Sidecar
 	// Example value: TEST1=1;TEST2=2
 	DUBBOSidecarEnvVarsAnnotation = "dubbo.io/sidecar-env-vars"
 
@@ -54,11 +54,11 @@
 	DubboTagsAnnotation = "dubbo.io/tags"
 
 	// DubboIngressPublicAddressAnnotation allows to pick public address for Ingress
-	// If not defined, Kuma will try to pick this address from the Ingress Service
+	// If not defined, Dubbo will try to pick this address from the Ingress Service
 	DubboIngressPublicAddressAnnotation = "dubbo.io/ingress-public-address"
 
 	// DubboIngressPublicPortAnnotation allows to pick public port for Ingress
-	// If not defined, Kuma will try to pick this address from the Ingress Service
+	// If not defined, Dubbo will try to pick this address from the Ingress Service
 	DubboIngressPublicPortAnnotation = "dubbo.io/ingress-public-port"
 )
 
@@ -165,7 +165,7 @@
 	return v.([]string), exists
 }
 
-// GetMap returns map from annotation. Example: "kuma.io/sidecar-env-vars: TEST1=1;TEST2=2"
+// GetMap returns map from annotation. Example: "dubbo.io/sidecar-env-vars: TEST1=1;TEST2=2"
 func (a Annotations) GetMap(keys ...string) (map[string]string, bool, error) {
 	return a.GetMapWithDefault(map[string]string{}, keys...)
 }
diff --git a/pkg/plugins/runtime/k8s/webhooks/service_validator.go b/pkg/plugins/runtime/k8s/webhooks/service_validator.go
index 0414bba..94cf513 100644
--- a/pkg/plugins/runtime/k8s/webhooks/service_validator.go
+++ b/pkg/plugins/runtime/k8s/webhooks/service_validator.go
@@ -61,7 +61,7 @@
 func (v *ServiceValidator) validate(svc *kube_core.Service) error {
 	verr := &validators.ValidationError{}
 	for _, svcPort := range svc.Spec.Ports {
-		protocolAnnotation := fmt.Sprintf("%d.service.kuma.io/protocol", svcPort.Port)
+		protocolAnnotation := fmt.Sprintf("%d.service.dubbo.io/protocol", svcPort.Port)
 		protocolAnnotationValue, exists := svc.Annotations[protocolAnnotation]
 		if exists && core_mesh.ParseProtocol(protocolAnnotationValue) == core_mesh.ProtocolUnknown {
 			verr.AddViolationAt(validators.RootedAt("metadata").Field("annotations").Key(protocolAnnotation),
diff --git a/pkg/plugins/runtime/k8s/webhooks/validation.go b/pkg/plugins/runtime/k8s/webhooks/validation.go
index ba125c3..6e15bd3 100644
--- a/pkg/plugins/runtime/k8s/webhooks/validation.go
+++ b/pkg/plugins/runtime/k8s/webhooks/validation.go
@@ -196,7 +196,7 @@
 						{
 							Type:    "FieldValueInvalid",
 							Message: "cannot be empty",
-							Field:   "metadata.labels[kuma.io/origin]",
+							Field:   "metadata.labels[dubbo.io/origin]",
 						},
 					},
 				},
@@ -226,7 +226,7 @@
 						{
 							Type:    "FieldValueInvalid",
 							Message: "cannot be empty",
-							Field:   "metadata.annotations[kuma.io/synced]",
+							Field:   "metadata.annotations[dubbo.io/synced]",
 						},
 					},
 				},
@@ -239,7 +239,7 @@
 	return true
 }
 
-func convertValidationErrorOf(kumaErr validators.ValidationError, obj kube_runtime.Object, objMeta metav1.Object) admission.Response {
+func convertValidationErrorOf(dubboErr validators.ValidationError, obj kube_runtime.Object, objMeta metav1.Object) admission.Response {
 	details := &metav1.StatusDetails{
 		Name: objMeta.GetName(),
 		Kind: obj.GetObjectKind().GroupVersionKind().Kind,
@@ -249,14 +249,14 @@
 			Allowed: false,
 			Result: &metav1.Status{
 				Status:  "Failure",
-				Message: kumaErr.Error(),
+				Message: dubboErr.Error(),
 				Reason:  "Invalid",
 				Code:    int32(422),
 				Details: details,
 			},
 		},
 	}
-	for _, violation := range kumaErr.Violations {
+	for _, violation := range dubboErr.Violations {
 		cause := metav1.StatusCause{
 			Type:    "FieldValueInvalid",
 			Message: violation.Message,
diff --git a/pkg/xds/bootstrap/generator.go b/pkg/xds/bootstrap/generator.go
index 4c4fc70..7fc5c3b 100644
--- a/pkg/xds/bootstrap/generator.go
+++ b/pkg/xds/bootstrap/generator.go
@@ -241,7 +241,7 @@
 var DpTokenRequired = errors.New("Dataplane Token is required. Generate token using 'dubboctl generate dataplane-token > /path/file' and provide it via --dataplane-token-file=/path/file argument to Dubbo DP")
 
 var NotCA = errors.New("A data plane proxy is trying to verify the control plane using the certificate which is not a certificate authority (basic constraint 'CA' is set to 'false').\n" +
-	"Provide CA that was used to sign a certificate used in the control plane by using 'dubbo-dp run --ca-cert-file=file' or via KUMA_CONTROL_PLANE_CA_CERT_FILE")
+	"Provide CA that was used to sign a certificate used in the control plane by using 'dubbo-dp run --ca-cert-file=file' or via DUBBO_CONTROL_PLANE_CA_CERT_FILE")
 
 func SANMismatchErr(host string, sans []string) error {
 	return errors.Errorf("A data plane proxy is trying to connect to the control plane using %q address, but the certificate in the control plane has the following SANs %q. "+
diff --git a/pkg/xds/bootstrap/template_v3.go b/pkg/xds/bootstrap/template_v3.go
index b6151f9..71034f1 100644
--- a/pkg/xds/bootstrap/template_v3.go
+++ b/pkg/xds/bootstrap/template_v3.go
@@ -75,7 +75,7 @@
 	}
 
 	runtimeLayers := []*envoy_bootstrap_v3.RuntimeLayer{{
-		Name: "kuma",
+		Name: "dubbo",
 		LayerSpecifier: &envoy_bootstrap_v3.RuntimeLayer_StaticLayer{
 			StaticLayer: util_proto.MustStruct(map[string]interface{}{
 				"re2.max_program_size.error_level": 4294967295,