Repository: kumahq/kuma
Pull request #1183 (2020-11-20 10:35:25)

fix(ci) change proto package and cleanup validates (bp #1173)
This is an automated backport of pull request #1173 done by Mergify
---


<details>
<summary>Mergify commands and options</summary>

<br />

More conditions and actions can be found in the [documentation](https://docs.mergify.io/).

You can also trigger Mergify actions by commenting on this pull request:

- `@Mergifyio refresh` will re-evaluate the rules
- `@Mergifyio rebase` will rebase this PR on its base branch
- `@Mergifyio update` will merge the base branch into this PR
- `@Mergifyio backport <destination>` will backport this PR on `<destination>` branch

Additionally, on Mergify [dashboard](https://dashboard.mergify.io/) you can:

- look at your merge queues
- generate the Mergify configuration with the config editor.

Finally, you can contact us on https://mergify.io/
</details>



Patch:
diff --git a/api/Makefile b/api/Makefile
index 1bdb9f290..a7d570f6e 100644
--- a/api/Makefile
+++ b/api/Makefile
@@ -58,8 +58,8 @@ PROTOC_GO := protoc \
 	--proto_path=$(PROTOBUF_WKT_DIR)/include \
 	--proto_path=. \
 	$(protoc_search_go_paths) \
-	--go_out=plugins=grpc,$(go_mapping):. \
-	--validate_out=lang=go:.
+	--go_opt=paths=source_relative \
+	--go_out=plugins=grpc,$(go_mapping):.
 
 PROTOC_OS=unknown
 PROTOC_ARCH=$(shell uname -m)
diff --git a/api/mesh/v1alpha1/circuit_breaker.pb.go b/api/mesh/v1alpha1/circuit_breaker.pb.go
index 05fdb4933..4a7b327f6 100644
--- a/api/mesh/v1alpha1/circuit_breaker.pb.go
+++ b/api/mesh/v1alpha1/circuit_breaker.pb.go
@@ -415,42 +415,43 @@ func init() {
 }
 
 var fileDescriptor_7e0ea95e09ad1355 = []byte{
-	// 577 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x54, 0xcd, 0x6e, 0xd3, 0x4c,
-	0x14, 0x95, 0xdb, 0x7e, 0x4d, 0x7b, 0xd3, 0x7e, 0xa2, 0xb3, 0x32, 0xa6, 0x42, 0x15, 0x2c, 0xe8,
-	0xca, 0x51, 0x52, 0x40, 0xfc, 0x48, 0xa8, 0xe4, 0x07, 0x15, 0xa9, 0x12, 0xc8, 0x81, 0x2e, 0xba,
-	0x00, 0x4d, 0xec, 0x9b, 0x64, 0xe8, 0x78, 0x26, 0x9d, 0x9f, 0xb4, 0x3c, 0x01, 0x4f, 0xc5, 0x13,
-	0xb0, 0x60, 0xc5, 0xfb, 0x20, 0xff, 0xa5, 0x31, 0x69, 0x43, 0xa2, 0x6e, 0x58, 0x8e, 0xef, 0x39,
-	0xe7, 0x9e, 0x7b, 0xe6, 0x7a, 0xe0, 0x61, 0x8c, 0x7a, 0x58, 0x1b, 0xd7, 0x29, 0x1f, 0x0d, 0x69,
-	0xbd, 0x16, 0x32, 0x15, 0x5a, 0x66, 0x3e, 0xf7, 0x14, 0xd2, 0x33, 0x54, 0xfe, 0x48, 0x49, 0x23,
-	0x09, 0x39, 0xb3, 0x31, 0xf5, 0x13, 0xa4, 0x5f, 0x20, 0xbd, 0xdd, 0x32, 0x51, 0x23, 0xc7, 0xd0,
-	0xc8, 0x9c, 0xe1, 0xdd, 0x1f, 0x48, 0x39, 0xe0, 0x58, 0x4b, 0x4f, 0x3d, 0xdb, 0xaf, 0x45, 0x56,
-	0x51, 0xc3, 0xa4, 0xb8, 0xa9, 0x7e, 0xa1, 0xe8, 0x68, 0x84, 0x4a, 0x67, 0xf5, 0x07, 0xdf, 0xb6,
-	0xe0, 0xff, 0x56, 0xe6, 0xa5, 0x99, 0x59, 0x21, 0x4f, 0xa1, 0xa2, 0xa5, 0x55, 0x21, 0x6a, 0xd7,
-	0xd9, 0x5b, 0xdd, 0xaf, 0x36, 0x76, 0xfd, 0x59, 0x5b, 0x7e, 0x37, 0xf7, 0x11, 0x14, 0x60, 0x72,
-	0x08, 0x5b, 0x11, 0x6a, 0xc3, 0x44, 0xda, 0x5f, 0xbb, 0x2b, 0x0b, 0x90, 0x4b, 0x0c, 0xf2, 0x12,
-	0xd6, 0x42, 0x29, 0xfa, 0xee, 0xea, 0x9e, 0xb3, 0x5f, 0x6d, 0x3c, 0xba, 0x8e, 0x59, 0xf6, 0xea,
-	0xb7, 0xa4, 0xe8, 0x07, 0x29, 0xc9, 0xfb, 0x0e, 0xb0, 0x96, 0x1c, 0xc9, 0x13, 0xd8, 0x60, 0xc2,
-	0xa0, 0x1a, 0x53, 0xee, 0x3a, 0xa9, 0xd2, 0x5d, 0x3f, 0x4b, 0xc1, 0x2f, 0x52, 0xf0, 0xdb, 0x79,
-	0x4a, 0xc1, 0x04, 0x4a, 0x3a, 0x70, 0xa7, 0x47, 0x35, 0x76, 0xbe, 0x60, 0x98, 0x54, 0x3e, 0xb0,
-	0x18, 0xdd, 0x95, 0xbf, 0xd1, 0x67, 0x28, 0xe4, 0x18, 0x48, 0x4c, 0x2f, 0x8b, 0x4f, 0xef, 0x51,
-	0x85, 0x28, 0x4c, 0x3e, 0xd1, 0xee, 0x8c, 0xd0, 0xc7, 0xb7, 0xc2, 0x1c, 0x34, 0x4e, 0x28, 0xb7,
-	0x18, 0x5c, 0xc3, 0x23, 0x87, 0x70, 0x4f, 0x8f, 0x38, 0x33, 0x9d, 0x4b, 0x83, 0x4a, 0x50, 0xfe,
-	0x5a, 0x44, 0xc7, 0x32, 0xa4, 0xbc, 0xa3, 0x94, 0x54, 0xda, 0x5d, 0xdb, 0x73, 0xf6, 0x37, 0x82,
-	0x79, 0x10, 0xf2, 0x0e, 0x36, 0x23, 0x34, 0x69, 0xda, 0xda, 0xfd, 0x2f, 0xb5, 0x51, 0x5f, 0x30,
-	0x58, 0xbf, 0x5d, 0x10, 0x83, 0x2b, 0x0d, 0xef, 0x57, 0x05, 0x36, 0x27, 0x05, 0x72, 0x0a, 0x55,
-	0x23, 0xcd, 0xc4, 0x50, 0x96, 0xf7, 0xb3, 0xa5, 0x1b, 0xf8, 0x19, 0x3f, 0x98, 0x16, 0x23, 0x9f,
-	0x60, 0x7b, 0x40, 0x0d, 0x5e, 0xd0, 0xaf, 0xb9, 0xfa, 0xca, 0x2d, 0xd5, 0xcb, 0x72, 0x89, 0x77,
-	0x3e, 0x15, 0xe6, 0xea, 0x6d, 0xbd, 0x4f, 0x89, 0x91, 0x73, 0xd8, 0xd1, 0x86, 0x8a, 0x88, 0xaa,
-	0xa8, 0x8d, 0x63, 0x96, 0x6e, 0x4b, 0x7a, 0x5d, 0xd5, 0x46, 0x6b, 0xf9, 0x0e, 0xdd, 0x3f, 0xa5,
-	0x82, 0x59, 0x75, 0xd2, 0x85, 0x4a, 0x9f, 0x32, 0x6e, 0x15, 0xe6, 0xf7, 0xfc, 0x7c, 0xf9, 0x46,
-	0x6f, 0x32, 0x81, 0xa0, 0x50, 0xf2, 0x8e, 0x60, 0x3d, 0x9f, 0xe8, 0x15, 0x54, 0x43, 0x29, 0x34,
-	0x86, 0xd6, 0xb0, 0x31, 0xe6, 0x37, 0x3d, 0x7f, 0xa3, 0xa7, 0x09, 0xde, 0x4f, 0x07, 0x76, 0x66,
-	0xe6, 0x20, 0x4d, 0xd8, 0x56, 0x78, 0x6e, 0x51, 0x9b, 0x13, 0xc9, 0x6d, 0xbc, 0x98, 0x6e, 0x99,
-	0x92, 0x3c, 0x3c, 0x31, 0x13, 0x2c, 0xb6, 0xf1, 0x91, 0xd4, 0xa6, 0x58, 0x93, 0xf9, 0x12, 0x25,
-	0x06, 0x79, 0x0c, 0xeb, 0x7d, 0x9a, 0x24, 0x70, 0xe3, 0x8f, 0xda, 0x96, 0xb6, 0xc7, 0x31, 0xe3,
-	0xe6, 0x58, 0xef, 0x87, 0x03, 0x95, 0x3c, 0xb0, 0x7f, 0x64, 0x8e, 0x17, 0xb0, 0x69, 0x86, 0x0a,
-	0xf5, 0x50, 0xf2, 0x68, 0xa1, 0x37, 0xe7, 0x0a, 0xde, 0x84, 0xd3, 0x8d, 0x62, 0x49, 0x7a, 0xeb,
-	0x29, 0xf8, 0xe0, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x63, 0x96, 0xf8, 0x80, 0xb5, 0x06, 0x00,
-	0x00,
+	// 597 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x95, 0xdd, 0x4e, 0x13, 0x41,
+	0x14, 0xc7, 0x53, 0x40, 0x0a, 0xa7, 0x60, 0x64, 0xae, 0xd6, 0x95, 0x18, 0xa2, 0x17, 0x36, 0x5e,
+	0xcc, 0x86, 0xa2, 0xc6, 0x8f, 0xc4, 0x20, 0xb4, 0x06, 0x13, 0x12, 0xcd, 0xa2, 0x5c, 0x70, 0xa1,
+	0x99, 0xee, 0x9e, 0xb6, 0x23, 0xb3, 0x33, 0x65, 0x3e, 0x0a, 0x3e, 0x81, 0x4f, 0xe5, 0x13, 0x78,
+	0xe1, 0x95, 0xef, 0x63, 0xf6, 0x0b, 0xba, 0x16, 0xb0, 0x0d, 0x37, 0x5e, 0x35, 0xdb, 0x39, 0xff,
+	0xdf, 0xf9, 0x9f, 0xff, 0x9c, 0x6e, 0xe1, 0x61, 0x82, 0x66, 0x10, 0x8c, 0x36, 0x99, 0x18, 0x0e,
+	0xd8, 0x66, 0x10, 0x71, 0x1d, 0x39, 0x6e, 0xbf, 0x74, 0x35, 0xb2, 0x63, 0xd4, 0x74, 0xa8, 0x95,
+	0x55, 0x84, 0x1c, 0xbb, 0x84, 0xd1, 0xb4, 0x92, 0x96, 0x95, 0xfe, 0x7a, 0x55, 0x68, 0x50, 0x60,
+	0x64, 0x55, 0xa1, 0xf0, 0xef, 0xf7, 0x95, 0xea, 0x0b, 0x0c, 0xb2, 0xa7, 0xae, 0xeb, 0x05, 0xb1,
+	0xd3, 0xcc, 0x72, 0x25, 0xaf, 0x3a, 0x3f, 0xd5, 0x6c, 0x38, 0x44, 0x6d, 0xf2, 0xf3, 0x07, 0xdf,
+	0x57, 0xe0, 0xf6, 0x6e, 0xee, 0x65, 0x27, 0xb7, 0x42, 0x9e, 0x41, 0xdd, 0x28, 0xa7, 0x23, 0x34,
+	0x5e, 0x6d, 0x63, 0xbe, 0xd9, 0x68, 0xad, 0xd3, 0x49, 0x5b, 0xf4, 0xa0, 0xf0, 0x11, 0x96, 0xc5,
+	0x64, 0x1b, 0x56, 0x62, 0x34, 0x96, 0xcb, 0xac, 0xbf, 0xf1, 0xe6, 0xa6, 0x10, 0x57, 0x14, 0xe4,
+	0x15, 0x2c, 0x44, 0x4a, 0xf6, 0xbc, 0xf9, 0x8d, 0x5a, 0xb3, 0xd1, 0x7a, 0x74, 0x99, 0xb2, 0xea,
+	0x95, 0xee, 0x2a, 0xd9, 0x0b, 0x33, 0x91, 0xff, 0x03, 0x60, 0x21, 0x7d, 0x24, 0x4f, 0x61, 0x89,
+	0x4b, 0x8b, 0x7a, 0xc4, 0x84, 0x57, 0xcb, 0x48, 0x77, 0x69, 0x9e, 0x02, 0x2d, 0x53, 0xa0, 0xed,
+	0x22, 0xa5, 0xf0, 0xbc, 0x94, 0x74, 0xe0, 0x4e, 0x97, 0x19, 0xec, 0x7c, 0xc5, 0x28, 0x3d, 0xf9,
+	0xc8, 0x13, 0xf4, 0xe6, 0xfe, 0x25, 0x9f, 0x90, 0x90, 0x7d, 0x20, 0x09, 0x3b, 0x2b, 0xbf, 0xfa,
+	0x80, 0x3a, 0x42, 0x69, 0x8b, 0x89, 0xd6, 0x27, 0x40, 0x9f, 0xde, 0x49, 0xbb, 0xd5, 0x3a, 0x64,
+	0xc2, 0x61, 0x78, 0x89, 0x8e, 0x6c, 0xc3, 0x3d, 0x33, 0x14, 0xdc, 0x76, 0xce, 0x2c, 0x6a, 0xc9,
+	0xc4, 0x1b, 0x19, 0xef, 0xab, 0x88, 0x89, 0x8e, 0xd6, 0x4a, 0x1b, 0x6f, 0x61, 0xa3, 0xd6, 0x5c,
+	0x0a, 0xaf, 0x2b, 0x21, 0xef, 0x61, 0x39, 0x46, 0x9b, 0xa5, 0x6d, 0xbc, 0x5b, 0x99, 0x8d, 0xcd,
+	0x29, 0x83, 0xa5, 0xed, 0x52, 0x18, 0x5e, 0x30, 0xfc, 0xdf, 0x75, 0x58, 0x3e, 0x3f, 0x20, 0x47,
+	0xd0, 0xb0, 0xca, 0x9e, 0x1b, 0xca, 0xf3, 0x7e, 0x3e, 0x73, 0x03, 0x9a, 0xeb, 0xc3, 0x71, 0x18,
+	0xf9, 0x0c, 0xab, 0x7d, 0x66, 0xf1, 0x94, 0x7d, 0x2b, 0xe8, 0x73, 0x37, 0xa4, 0x57, 0x71, 0xa9,
+	0x77, 0x31, 0x16, 0xe6, 0xfc, 0x4d, 0xbd, 0x8f, 0xc1, 0xc8, 0x09, 0xac, 0x19, 0xcb, 0x64, 0xcc,
+	0x74, 0xdc, 0xc6, 0x11, 0xcf, 0xb6, 0x25, 0xbb, 0xae, 0x46, 0x6b, 0x77, 0xf6, 0x0e, 0x07, 0x7f,
+	0xa3, 0xc2, 0x49, 0x3a, 0x39, 0x80, 0x7a, 0x8f, 0x71, 0xe1, 0x34, 0x16, 0xf7, 0xfc, 0x62, 0xf6,
+	0x46, 0x6f, 0x73, 0x40, 0x58, 0x92, 0xfc, 0x3d, 0x58, 0x2c, 0x26, 0x7a, 0x0d, 0x8d, 0x48, 0x49,
+	0x83, 0x91, 0xb3, 0x7c, 0x84, 0xc5, 0x4d, 0x5f, 0xbf, 0xd1, 0xe3, 0x02, 0xff, 0x57, 0x0d, 0xd6,
+	0x26, 0xe6, 0x20, 0x3b, 0xb0, 0xaa, 0xf1, 0xc4, 0xa1, 0xb1, 0x87, 0x4a, 0xb8, 0x64, 0x3a, 0x6e,
+	0x55, 0x92, 0xbe, 0x78, 0x12, 0x2e, 0x79, 0xe2, 0x92, 0x3d, 0x65, 0x6c, 0xb9, 0x26, 0xd7, 0x23,
+	0x2a, 0x0a, 0xf2, 0x04, 0x16, 0x7b, 0x2c, 0x4d, 0xe0, 0xca, 0x1f, 0x6a, 0x5b, 0xb9, 0xae, 0xc0,
+	0x5c, 0x5b, 0xd4, 0xfa, 0x3f, 0x6b, 0x50, 0x2f, 0x02, 0xfb, 0x4f, 0xe6, 0x78, 0x09, 0xcb, 0x76,
+	0xa0, 0xd1, 0x0c, 0x94, 0x88, 0xa7, 0x7a, 0xe7, 0x5c, 0x94, 0xef, 0x3c, 0x3e, 0x6a, 0xf6, 0xb9,
+	0x1d, 0xb8, 0x2e, 0x8d, 0x54, 0x12, 0xa4, 0x9b, 0x33, 0x38, 0xc9, 0x3e, 0x02, 0x36, 0xe4, 0x41,
+	0xe5, 0x4f, 0xa8, 0xbb, 0x98, 0xc1, 0xb6, 0xfe, 0x04, 0x00, 0x00, 0xff, 0xff, 0x60, 0x29, 0xe2,
+	0x0d, 0xd5, 0x06, 0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/circuit_breaker.proto b/api/mesh/v1alpha1/circuit_breaker.proto
index ba22e282a..2b43c5124 100644
--- a/api/mesh/v1alpha1/circuit_breaker.proto
+++ b/api/mesh/v1alpha1/circuit_breaker.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "mesh/v1alpha1/selector.proto";
 import "google/protobuf/duration.proto";
@@ -73,4 +73,4 @@ message CircuitBreaker {
   }
 
   Conf conf = 3;
-}
\ No newline at end of file
+}
diff --git a/api/mesh/v1alpha1/dataplane.pb.go b/api/mesh/v1alpha1/dataplane.pb.go
index 80f4d0080..9bad85aac 100644
--- a/api/mesh/v1alpha1/dataplane.pb.go
+++ b/api/mesh/v1alpha1/dataplane.pb.go
@@ -677,55 +677,56 @@ func init() {
 func init() { proto.RegisterFile("mesh/v1alpha1/dataplane.proto", fileDescriptor_7608682fd5ea84a4) }
 
 var fileDescriptor_7608682fd5ea84a4 = []byte{
-	// 789 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x4b, 0x6b, 0xeb, 0x46,
-	0x14, 0x66, 0x24, 0xf9, 0xa1, 0x93, 0xba, 0x24, 0x13, 0x37, 0x35, 0xea, 0x03, 0x27, 0x84, 0x62,
-	0x0a, 0x55, 0x9a, 0xb6, 0xd0, 0x92, 0xa6, 0x14, 0x8b, 0x86, 0x3e, 0x42, 0x1a, 0x33, 0xcd, 0xa2,
-	0x74, 0x63, 0xc6, 0xd6, 0x60, 0x0b, 0x3b, 0x92, 0x90, 0xc6, 0x4e, 0xbd, 0xeb, 0x8f, 0xe8, 0xaa,
-	0x74, 0x73, 0x7f, 0xcf, 0x5d, 0xdc, 0xfd, 0x5d, 0xdc, 0xdd, 0xfd, 0x13, 0xd9, 0xe4, 0xa2, 0x79,
-	0x48, 0xb2, 0x13, 0x82, 0x9d, 0xcb, 0xdd, 0x8d, 0xce, 0x9c, 0xef, 0x9b, 0x6f, 0xbe, 0x73, 0xe6,
-	0xd8, 0xf0, 0xc9, 0x35, 0x4b, 0xc7, 0x47, 0xf3, 0x63, 0x3a, 0x8d, 0xc7, 0xf4, 0xf8, 0xc8, 0xa7,
-	0x9c, 0xc6, 0x53, 0x1a, 0x32, 0x37, 0x4e, 0x22, 0x1e, 0x61, 0x3c, 0x99, 0x5d, 0x53, 0x37, 0xcb,
-	0x71, 0x75, 0x8e, 0xf3, 0xd1, 0x32, 0xe4, 0x9a, 0xf1, 0x24, 0x18, 0xa6, 0x12, 0xe0, 0x7c, 0x38,
-	0xa7, 0xd3, 0xc0, 0xa7, 0x9c, 0x1d, 0xe9, 0x85, 0xdc, 0x38, 0xf8, 0x67, 0x07, 0xec, 0x9f, 0x34,
-	0x3b, 0xfe, 0x05, 0x20, 0x64, 0xfc, 0x26, 0x4a, 0x26, 0x41, 0x38, 0x6a, 0xa1, 0x36, 0xea, 0x6c,
-	0x7d, 0xd5, 0x71, 0xef, 0x1f, 0xe6, 0xe6, 0x10, 0xf7, 0xf7, 0x3c, 0x9f, 0x94, 0xb0, 0xf8, 0x14,
-	0x6a, 0x4a, 0x41, 0xcb, 0x10, 0x34, 0x07, 0x0f, 0xd1, 0x5c, 0xc8, 0x14, 0x8f, 0x0e, 0x27, 0x2c,
-	0xf4, 0x89, 0x86, 0xe0, 0x53, 0xa8, 0xc6, 0x49, 0x34, 0x60, 0x69, 0xcb, 0x14, 0xe0, 0xc3, 0xc7,
-	0x35, 0xf4, 0x44, 0x2e, 0x51, 0x18, 0xe7, 0x65, 0x03, 0xa0, 0x90, 0x85, 0x7f, 0x83, 0x5a, 0x10,
-	0x8e, 0x12, 0x96, 0xa6, 0xad, 0xaa, 0x60, 0xfb, 0x72, 0xdd, 0x1b, 0xb9, 0xbf, 0x4a, 0x1c, 0xd1,
-	0x04, 0xb8, 0x05, 0x35, 0xea, 0xfb, 0x82, 0xab, 0xd2, 0x46, 0x1d, 0x9b, 0xe8, 0xcf, 0xec, 0x94,
-	0x11, 0xe5, 0xec, 0x86, 0x2e, 0x94, 0xe6, 0xf5, 0x4f, 0xf9, 0x59, 0xe2, 0x88, 0x26, 0x90, 0x8a,
-	0x07, 0xd1, 0x2c, 0xf4, 0x5b, 0xa8, 0x6d, 0x6e, 0xa8, 0x58, 0xe0, 0x88, 0x26, 0xc0, 0x17, 0x50,
-	0x8f, 0x66, 0x5c, 0x92, 0x19, 0x82, 0xec, 0x78, 0x6d, 0xb2, 0x4b, 0x05, 0x24, 0x39, 0x05, 0x8e,
-	0xa0, 0xc9, 0x13, 0x1a, 0xa6, 0x31, 0x4d, 0x58, 0xc8, 0xfb, 0x71, 0x12, 0xfd, 0xbd, 0xc8, 0x7a,
-	0xc5, 0x12, 0x77, 0x3e, 0x5d, 0x9b, 0xfa, 0xaa, 0x20, 0xe9, 0x29, 0x0e, 0xb2, 0xcb, 0xef, 0x07,
-	0x9d, 0x67, 0x26, 0xd4, 0x54, 0x19, 0x70, 0x04, 0x3b, 0x74, 0x4e, 0x83, 0x29, 0x1d, 0x4c, 0xd9,
-	0x1f, 0x2c, 0x99, 0x07, 0x43, 0x96, 0x2a, 0x87, 0xba, 0x9b, 0xd6, 0xd4, 0xed, 0xae, 0x30, 0x91,
-	0xfb, 0xdc, 0xf8, 0x10, 0x1a, 0xf1, 0x6c, 0x30, 0x0d, 0x86, 0x5d, 0x55, 0x74, 0x43, 0x14, 0x7d,
-	0x39, 0x88, 0x3f, 0x05, 0x90, 0x81, 0x5e, 0x94, 0x70, 0x51, 0xfd, 0x06, 0x29, 0x45, 0x9c, 0x57,
-	0x08, 0xb6, 0x57, 0x4f, 0xc3, 0x7d, 0xb0, 0x38, 0x1d, 0x69, 0xf9, 0xe7, 0x6f, 0x2d, 0xdf, 0xbd,
-	0xa2, 0xa3, 0xf4, 0x2c, 0xe4, 0xc9, 0x82, 0x08, 0x62, 0xfc, 0x31, 0xd8, 0x41, 0x98, 0x72, 0x1a,
-	0x66, 0x26, 0x19, 0x42, 0x54, 0x11, 0xc0, 0x18, 0xac, 0xec, 0x30, 0xa1, 0xd6, 0x26, 0x62, 0xed,
-	0x7c, 0x0b, 0x76, 0x4e, 0x82, 0xb7, 0xc1, 0x9c, 0xb0, 0x85, 0x98, 0x01, 0x36, 0xc9, 0x96, 0xb8,
-	0x09, 0x95, 0x39, 0x9d, 0xce, 0x98, 0x32, 0x41, 0x7e, 0x9c, 0x18, 0xdf, 0x21, 0xe7, 0x5f, 0x23,
-	0xab, 0x91, 0x6c, 0x10, 0x0c, 0x56, 0x5c, 0xd8, 0x20, 0xd6, 0xb8, 0x0d, 0x5b, 0xa9, 0x54, 0x29,
-	0x1c, 0xb2, 0xc4, 0x56, 0x39, 0x84, 0x3f, 0x83, 0xf7, 0xd5, 0xa7, 0x76, 0xba, 0x2a, 0x0e, 0x59,
-	0x89, 0x3e, 0xf2, 0xfe, 0xfe, 0x54, 0x7e, 0xca, 0x1e, 0x3f, 0xd9, 0xf4, 0xc1, 0x14, 0xf6, 0x79,
-	0xf5, 0x5b, 0xaf, 0xf2, 0x1f, 0x32, 0xea, 0x48, 0x1a, 0xf9, 0x74, 0x5b, 0x5e, 0x23, 0xa8, 0xeb,
-	0x27, 0x54, 0x56, 0x6e, 0x2e, 0x2b, 0xd7, 0x8e, 0x59, 0x25, 0xc7, 0xf6, 0xa1, 0xa6, 0x6e, 0x2e,
-	0x69, 0xbd, 0xda, 0xad, 0x67, 0x25, 0xc6, 0x18, 0x11, 0x1d, 0xc7, 0x97, 0xea, 0xc2, 0x15, 0x71,
-	0xe1, 0xef, 0x37, 0x7e, 0xd4, 0xab, 0x0d, 0xf3, 0xf4, 0x7b, 0xfe, 0x8f, 0xa0, 0xa6, 0x66, 0x58,
-	0x5e, 0x06, 0xb4, 0x61, 0x19, 0x14, 0xfe, 0x5d, 0x94, 0xe1, 0x39, 0x82, 0xdd, 0x07, 0xc6, 0x0d,
-	0xfe, 0x01, 0x3e, 0x48, 0x98, 0x1f, 0x24, 0x6c, 0xc8, 0xfb, 0x99, 0xe9, 0xfd, 0x62, 0xe6, 0xa2,
-	0x4e, 0xc3, 0xb3, 0x6f, 0xbd, 0xea, 0xe7, 0x56, 0xeb, 0xee, 0xce, 0x24, 0xbb, 0x3a, 0x2f, 0xeb,
-	0x55, 0xdd, 0xe8, 0x3f, 0xc2, 0xde, 0x32, 0xbc, 0x34, 0x66, 0x57, 0xf0, 0xcd, 0x32, 0x3e, 0xef,
-	0x88, 0x6f, 0x60, 0x4f, 0xc1, 0xe9, 0x70, 0xc8, 0xd2, 0xb4, 0x9f, 0xea, 0x91, 0x66, 0xb6, 0xcd,
-	0x8e, 0x4d, 0x9a, 0x72, 0xb7, 0x2b, 0x36, 0xf5, 0x48, 0x72, 0x5e, 0x20, 0xa8, 0xca, 0xdf, 0xbb,
-	0xbc, 0x71, 0x50, 0xa9, 0x71, 0xce, 0xc1, 0x66, 0xa1, 0x1f, 0x47, 0x41, 0xc8, 0xf5, 0x5b, 0xf8,
-	0x62, 0x9d, 0x1f, 0x4f, 0xf7, 0x4c, 0xa1, 0x48, 0x81, 0x77, 0x7c, 0xa8, 0xeb, 0x30, 0xde, 0x87,
-	0xf7, 0x94, 0x3f, 0xfd, 0xd2, 0xa1, 0x5b, 0x2a, 0xd6, 0x93, 0x4d, 0x5b, 0xa4, 0x50, 0x3e, 0x56,
-	0x95, 0xc8, 0x53, 0x28, 0x1f, 0x0b, 0xc9, 0xd9, 0x96, 0x1a, 0x3b, 0xd9, 0xda, 0x83, 0xbf, 0xea,
-	0x5a, 0xd6, 0xa0, 0x2a, 0xfe, 0x95, 0x7c, 0xfd, 0x26, 0x00, 0x00, 0xff, 0xff, 0x35, 0x1f, 0x84,
-	0x1b, 0x00, 0x09, 0x00, 0x00,
+	// 810 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0x4b, 0x6f, 0xeb, 0x44,
+	0x14, 0xd6, 0xd8, 0xce, 0xc3, 0xa7, 0x04, 0xdd, 0x3b, 0x0d, 0x97, 0xc8, 0x3c, 0x94, 0x7b, 0x75,
+	0x85, 0xa2, 0x4a, 0x38, 0x14, 0x90, 0x40, 0xa5, 0x08, 0xc5, 0xa2, 0xe2, 0x51, 0x95, 0x46, 0x43,
+	0x17, 0x88, 0x4d, 0x34, 0xb1, 0x47, 0x89, 0x95, 0xc4, 0x36, 0xf6, 0x24, 0x25, 0x3b, 0x7e, 0x04,
+	0x2b, 0xc4, 0x86, 0xdf, 0xc3, 0x82, 0x3d, 0x0b, 0x76, 0xfc, 0x89, 0x6e, 0x8a, 0x3c, 0x0f, 0xdb,
+	0x49, 0xab, 0x2a, 0x29, 0xba, 0xab, 0xcc, 0x9c, 0x39, 0xdf, 0x77, 0xbe, 0x39, 0xe7, 0xcc, 0x89,
+	0xe1, 0x9d, 0x05, 0xcb, 0xa6, 0xfd, 0xd5, 0x31, 0x9d, 0x27, 0x53, 0x7a, 0xdc, 0x0f, 0x28, 0xa7,
+	0xc9, 0x9c, 0x46, 0xcc, 0x4d, 0xd2, 0x98, 0xc7, 0x18, 0xcf, 0x96, 0x0b, 0xea, 0xe6, 0x3e, 0xae,
+	0xf6, 0x71, 0xde, 0xda, 0x84, 0x2c, 0x18, 0x4f, 0x43, 0x3f, 0x93, 0x00, 0xe7, 0xcd, 0x15, 0x9d,
+	0x87, 0x01, 0xe5, 0xac, 0xaf, 0x17, 0xf2, 0xe0, 0xc5, 0x2f, 0x4f, 0xc1, 0xfe, 0x52, 0xb3, 0xe3,
+	0xaf, 0x01, 0x22, 0xc6, 0xaf, 0xe3, 0x74, 0x16, 0x46, 0x93, 0x0e, 0xea, 0xa2, 0xde, 0xc1, 0x87,
+	0x3d, 0xf7, 0x6e, 0x30, 0xb7, 0x80, 0xb8, 0xdf, 0x15, 0xfe, 0xa4, 0x82, 0xc5, 0xa7, 0xd0, 0x50,
+	0x0a, 0x3a, 0x86, 0xa0, 0x79, 0x71, 0x1f, 0xcd, 0x85, 0x74, 0xf1, 0xa8, 0x3f, 0x63, 0x51, 0x40,
+	0x34, 0x04, 0x9f, 0x42, 0x3d, 0x49, 0xe3, 0x31, 0xcb, 0x3a, 0xa6, 0x00, 0xbf, 0x7c, 0x58, 0xc3,
+	0x50, 0xf8, 0x12, 0x85, 0x71, 0xfe, 0x6e, 0x01, 0x94, 0xb2, 0xf0, 0xb7, 0xd0, 0x08, 0xa3, 0x49,
+	0xca, 0xb2, 0xac, 0x53, 0x17, 0x6c, 0x1f, 0xec, 0x7a, 0x23, 0xf7, 0x1b, 0x89, 0x23, 0x9a, 0x00,
+	0x77, 0xa0, 0x41, 0x83, 0x40, 0x70, 0xd5, 0xba, 0xa8, 0x67, 0x13, 0xbd, 0xcd, 0xa3, 0x4c, 0x28,
+	0x67, 0xd7, 0x74, 0xad, 0x34, 0xef, 0x1e, 0xe5, 0x2b, 0x89, 0x23, 0x9a, 0x40, 0x2a, 0x1e, 0xc7,
+	0xcb, 0x28, 0xe8, 0xa0, 0xae, 0xb9, 0xa7, 0x62, 0x81, 0x23, 0x9a, 0x00, 0x5f, 0x40, 0x33, 0x5e,
+	0x72, 0x49, 0x66, 0x08, 0xb2, 0xe3, 0x9d, 0xc9, 0x2e, 0x15, 0x90, 0x14, 0x14, 0x38, 0x86, 0x36,
+	0x4f, 0x69, 0x94, 0x25, 0x34, 0x65, 0x11, 0x1f, 0x25, 0x69, 0xfc, 0xf3, 0x3a, 0xef, 0x15, 0x4b,
+	0xdc, 0xf9, 0x74, 0x67, 0xea, 0xab, 0x92, 0x64, 0xa8, 0x38, 0xc8, 0x21, 0xbf, 0x6b, 0x74, 0xfe,
+	0x30, 0xa1, 0xa1, 0xca, 0x80, 0x63, 0x78, 0x4a, 0x57, 0x34, 0x9c, 0xd3, 0xf1, 0x9c, 0x7d, 0xcf,
+	0xd2, 0x55, 0xe8, 0xb3, 0x4c, 0x65, 0x68, 0xb0, 0x6f, 0x4d, 0xdd, 0xc1, 0x16, 0x13, 0xb9, 0xcb,
+	0x8d, 0x5f, 0x42, 0x2b, 0x59, 0x8e, 0xe7, 0xa1, 0x3f, 0x50, 0x45, 0x37, 0x44, 0xd1, 0x37, 0x8d,
+	0xf8, 0x5d, 0x00, 0x69, 0x18, 0xc6, 0x29, 0x17, 0xd5, 0x6f, 0x91, 0x8a, 0xc5, 0xf9, 0x07, 0xc1,
+	0x93, 0xed, 0x68, 0x78, 0x04, 0x16, 0xa7, 0x13, 0x2d, 0xff, 0xfc, 0x7f, 0xcb, 0x77, 0xaf, 0xe8,
+	0x24, 0x3b, 0x8b, 0x78, 0xba, 0x26, 0x82, 0x18, 0xbf, 0x0d, 0x76, 0x18, 0x65, 0x9c, 0x46, 0x79,
+	0x92, 0x0c, 0x21, 0xaa, 0x34, 0x60, 0x0c, 0x56, 0x1e, 0x4c, 0xa8, 0xb5, 0x89, 0x58, 0x3b, 0x9f,
+	0x80, 0x5d, 0x90, 0xe0, 0x27, 0x60, 0xce, 0xd8, 0x5a, 0xcc, 0x00, 0x9b, 0xe4, 0x4b, 0xdc, 0x86,
+	0xda, 0x8a, 0xce, 0x97, 0x4c, 0x25, 0x41, 0x6e, 0x4e, 0x8c, 0x4f, 0x91, 0xf3, 0xab, 0x91, 0xd7,
+	0x48, 0x36, 0x08, 0x06, 0x2b, 0x29, 0xd3, 0x20, 0xd6, 0xb8, 0x0b, 0x07, 0x99, 0x54, 0x29, 0x32,
+	0x64, 0x89, 0xa3, 0xaa, 0x09, 0xbf, 0x07, 0xaf, 0xab, 0xad, 0xce, 0x74, 0x5d, 0x04, 0xd9, 0xb2,
+	0x3e, 0xf0, 0xfe, 0x7e, 0x50, 0xf9, 0x94, 0x3d, 0x7e, 0xb2, 0xef, 0x83, 0x29, 0xd3, 0xe7, 0x35,
+	0x6f, 0xbc, 0xda, 0x6f, 0xc8, 0x68, 0x22, 0x99, 0xc8, 0xc7, 0xa7, 0xe5, 0x5f, 0x04, 0x4d, 0xfd,
+	0x84, 0xaa, 0xca, 0xcd, 0x4d, 0xe5, 0x3a, 0x63, 0x56, 0x25, 0x63, 0xcf, 0xa1, 0xa1, 0x6e, 0x2e,
+	0x69, 0xbd, 0xc6, 0x8d, 0x67, 0xa5, 0xc6, 0x14, 0x11, 0x6d, 0xc7, 0x97, 0xea, 0xc2, 0x35, 0x71,
+	0xe1, 0xcf, 0xf6, 0x7e, 0xd4, 0xdb, 0x0d, 0xf3, 0xf8, 0x7b, 0xfe, 0x8e, 0xa0, 0xa1, 0x66, 0x58,
+	0x51, 0x06, 0xb4, 0x67, 0x19, 0x14, 0xfe, 0x55, 0x94, 0xe1, 0x4f, 0x04, 0x87, 0xf7, 0x8c, 0x1b,
+	0xfc, 0x39, 0xbc, 0x91, 0xb2, 0x20, 0x4c, 0x99, 0xcf, 0x47, 0x79, 0xd2, 0x47, 0xe5, 0xcc, 0x45,
+	0xbd, 0x96, 0x67, 0xdf, 0x78, 0xf5, 0x23, 0xab, 0x73, 0x7b, 0x6b, 0x92, 0x43, 0xed, 0x97, 0xf7,
+	0xaa, 0x6e, 0xf4, 0x2f, 0xe0, 0xd9, 0x26, 0xbc, 0x32, 0x66, 0xb7, 0xf0, 0xed, 0x2a, 0xbe, 0xe8,
+	0x88, 0x8f, 0xe1, 0x99, 0x82, 0x53, 0xdf, 0x67, 0x59, 0x36, 0xca, 0xf4, 0x48, 0x33, 0xbb, 0x66,
+	0xcf, 0x26, 0x6d, 0x79, 0x3a, 0x10, 0x87, 0x7a, 0x24, 0x39, 0x7f, 0x21, 0xa8, 0xcb, 0xff, 0xbb,
+	0xa2, 0x71, 0x50, 0xa5, 0x71, 0xce, 0xc1, 0x66, 0x51, 0x90, 0xc4, 0x61, 0xc4, 0xf5, 0x5b, 0x78,
+	0x7f, 0x97, 0x3f, 0x4f, 0xf7, 0x4c, 0xa1, 0x48, 0x89, 0x77, 0x02, 0x68, 0x6a, 0x33, 0x7e, 0x0e,
+	0xaf, 0xa9, 0xfc, 0x8c, 0x2a, 0x41, 0x0f, 0x94, 0x6d, 0x28, 0x9b, 0xb6, 0x74, 0xa1, 0x7c, 0xaa,
+	0x2a, 0x51, 0xb8, 0x50, 0x3e, 0x15, 0x92, 0xf3, 0x23, 0x35, 0x76, 0xf2, 0xb5, 0x77, 0xf4, 0x63,
+	0x6f, 0x12, 0xf2, 0xe9, 0x72, 0xec, 0xfa, 0xf1, 0xa2, 0x9f, 0x6b, 0x9d, 0xfe, 0x24, 0x7e, 0xfa,
+	0x34, 0x09, 0xfb, 0x1b, 0x5f, 0x35, 0xe3, 0xba, 0xf8, 0x6a, 0xf9, 0xe8, 0xbf, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xc4, 0x4a, 0x07, 0x6b, 0x20, 0x09, 0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/dataplane.pb.validate.go b/api/mesh/v1alpha1/dataplane.pb.validate.go
deleted file mode 100644
index df4ba5598..000000000
--- a/api/mesh/v1alpha1/dataplane.pb.validate.go
+++ /dev/null
@@ -1,931 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: mesh/v1alpha1/dataplane.proto
-
-package v1alpha1
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"net"
-	"net/mail"
-	"net/url"
-	"regexp"
-	"strings"
-	"time"
-	"unicode/utf8"
-
-	"github.com/golang/protobuf/ptypes"
-)
-
-// ensure the imports are used
-var (
-	_ = bytes.MinRead
-	_ = errors.New("")
-	_ = fmt.Print
-	_ = utf8.UTFMax
-	_ = (*regexp.Regexp)(nil)
-	_ = (*strings.Reader)(nil)
-	_ = net.IPv4len
-	_ = time.Duration(0)
-	_ = (*url.URL)(nil)
-	_ = (*mail.Address)(nil)
-	_ = ptypes.DynamicAny{}
-)
-
-// define the regex for a UUID once up-front
-var _dataplane_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")
-
-// Validate checks the field values on Dataplane with the rules defined in the
-// proto definition for this message. If any rules are violated, an error is returned.
-func (m *Dataplane) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if v, ok := interface{}(m.GetNetworking()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return DataplaneValidationError{
-				field:  "Networking",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if v, ok := interface{}(m.GetMetrics()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return DataplaneValidationError{
-				field:  "Metrics",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if v, ok := interface{}(m.GetProbes()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return DataplaneValidationError{
-				field:  "Probes",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// DataplaneValidationError is the validation error returned by
-// Dataplane.Validate if the designated constraints aren't met.
-type DataplaneValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e DataplaneValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e DataplaneValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e DataplaneValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e DataplaneValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e DataplaneValidationError) ErrorName() string { return "DataplaneValidationError" }
-
-// Error satisfies the builtin error interface
-func (e DataplaneValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sDataplane.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = DataplaneValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = DataplaneValidationError{}
-
-// Validate checks the field values on Dataplane_Networking with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *Dataplane_Networking) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if v, ok := interface{}(m.GetIngress()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return Dataplane_NetworkingValidationError{
-				field:  "Ingress",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	// no validation rules for Address
-
-	if v, ok := interface{}(m.GetGateway()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return Dataplane_NetworkingValidationError{
-				field:  "Gateway",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	for idx, item := range m.GetInbound() {
-		_, _ = idx, item
-
-		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return Dataplane_NetworkingValidationError{
-					field:  fmt.Sprintf("Inbound[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	for idx, item := range m.GetOutbound() {
-		_, _ = idx, item
-
-		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return Dataplane_NetworkingValidationError{
-					field:  fmt.Sprintf("Outbound[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	if v, ok := interface{}(m.GetTransparentProxying()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return Dataplane_NetworkingValidationError{
-				field:  "TransparentProxying",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// Dataplane_NetworkingValidationError is the validation error returned by
-// Dataplane_Networking.Validate if the designated constraints aren't met.
-type Dataplane_NetworkingValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e Dataplane_NetworkingValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e Dataplane_NetworkingValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e Dataplane_NetworkingValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e Dataplane_NetworkingValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e Dataplane_NetworkingValidationError) ErrorName() string {
-	return "Dataplane_NetworkingValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e Dataplane_NetworkingValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sDataplane_Networking.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = Dataplane_NetworkingValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = Dataplane_NetworkingValidationError{}
-
-// Validate checks the field values on Dataplane_Probes with the rules defined
-// in the proto definition for this message. If any rules are violated, an
-// error is returned.
-func (m *Dataplane_Probes) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Port
-
-	for idx, item := range m.GetEndpoints() {
-		_, _ = idx, item
-
-		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return Dataplane_ProbesValidationError{
-					field:  fmt.Sprintf("Endpoints[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	return nil
-}
-
-// Dataplane_ProbesValidationError is the validation error returned by
-// Dataplane_Probes.Validate if the designated constraints aren't met.
-type Dataplane_ProbesValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e Dataplane_ProbesValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e Dataplane_ProbesValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e Dataplane_ProbesValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e Dataplane_ProbesValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e Dataplane_ProbesValidationError) ErrorName() string { return "Dataplane_ProbesValidationError" }
-
-// Error satisfies the builtin error interface
-func (e Dataplane_ProbesValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sDataplane_Probes.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = Dataplane_ProbesValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = Dataplane_ProbesValidationError{}
-
-// Validate checks the field values on Dataplane_Networking_Ingress with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *Dataplane_Networking_Ingress) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	for idx, item := range m.GetAvailableServices() {
-		_, _ = idx, item
-
-		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return Dataplane_Networking_IngressValidationError{
-					field:  fmt.Sprintf("AvailableServices[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	// no validation rules for PublicAddress
-
-	// no validation rules for PublicPort
-
-	return nil
-}
-
-// Dataplane_Networking_IngressValidationError is the validation error returned
-// by Dataplane_Networking_Ingress.Validate if the designated constraints
-// aren't met.
-type Dataplane_Networking_IngressValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e Dataplane_Networking_IngressValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e Dataplane_Networking_IngressValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e Dataplane_Networking_IngressValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e Dataplane_Networking_IngressValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e Dataplane_Networking_IngressValidationError) ErrorName() string {
-	return "Dataplane_Networking_IngressValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e Dataplane_Networking_IngressValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sDataplane_Networking_Ingress.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = Dataplane_Networking_IngressValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = Dataplane_Networking_IngressValidationError{}
-
-// Validate checks the field values on Dataplane_Networking_Inbound with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *Dataplane_Networking_Inbound) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Port
-
-	// no validation rules for ServicePort
-
-	// no validation rules for ServiceAddress
-
-	// no validation rules for Address
-
-	if len(m.GetTags()) < 1 {
-		return Dataplane_Networking_InboundValidationError{
-			field:  "Tags",
-			reason: "value must contain at least 1 pair(s)",
-		}
-	}
-
-	return nil
-}
-
-// Dataplane_Networking_InboundValidationError is the validation error returned
-// by Dataplane_Networking_Inbound.Validate if the designated constraints
-// aren't met.
-type Dataplane_Networking_InboundValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e Dataplane_Networking_InboundValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e Dataplane_Networking_InboundValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e Dataplane_Networking_InboundValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e Dataplane_Networking_InboundValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e Dataplane_Networking_InboundValidationError) ErrorName() string {
-	return "Dataplane_Networking_InboundValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e Dataplane_Networking_InboundValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sDataplane_Networking_Inbound.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = Dataplane_Networking_InboundValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = Dataplane_Networking_InboundValidationError{}
-
-// Validate checks the field values on Dataplane_Networking_Outbound with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *Dataplane_Networking_Outbound) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Address
-
-	// no validation rules for Port
-
-	if err := m._validateHostname(m.GetService()); err != nil {
-		return Dataplane_Networking_OutboundValidationError{
-			field:  "Service",
-			reason: "value must be a valid hostname",
-			cause:  err,
-		}
-	}
-
-	// no validation rules for Tags
-
-	return nil
-}
-
-func (m *Dataplane_Networking_Outbound) _validateHostname(host string) error {
-	s := strings.ToLower(strings.TrimSuffix(host, "."))
-
-	if len(host) > 253 {
-		return errors.New("hostname cannot exceed 253 characters")
-	}
-
-	for _, part := range strings.Split(s, ".") {
-		if l := len(part); l == 0 || l > 63 {
-			return errors.New("hostname part must be non-empty and cannot exceed 63 characters")
-		}
-
-		if part[0] == '-' {
-			return errors.New("hostname parts cannot begin with hyphens")
-		}
-
-		if part[len(part)-1] == '-' {
-			return errors.New("hostname parts cannot end with hyphens")
-		}
-
-		for _, r := range part {
-			if (r < 'a' || r > 'z') && (r < '0' || r > '9') && r != '-' {
-				return fmt.Errorf("hostname parts can only contain alphanumeric characters or hyphens, got %q", string(r))
-			}
-		}
-	}
-
-	return nil
-}
-
-// Dataplane_Networking_OutboundValidationError is the validation error
-// returned by Dataplane_Networking_Outbound.Validate if the designated
-// constraints aren't met.
-type Dataplane_Networking_OutboundValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e Dataplane_Networking_OutboundValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e Dataplane_Networking_OutboundValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e Dataplane_Networking_OutboundValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e Dataplane_Networking_OutboundValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e Dataplane_Networking_OutboundValidationError) ErrorName() string {
-	return "Dataplane_Networking_OutboundValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e Dataplane_Networking_OutboundValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sDataplane_Networking_Outbound.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = Dataplane_Networking_OutboundValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = Dataplane_Networking_OutboundValidationError{}
-
-// Validate checks the field values on Dataplane_Networking_Gateway with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *Dataplane_Networking_Gateway) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if len(m.GetTags()) < 1 {
-		return Dataplane_Networking_GatewayValidationError{
-			field:  "Tags",
-			reason: "value must contain at least 1 pair(s)",
-		}
-	}
-
-	return nil
-}
-
-// Dataplane_Networking_GatewayValidationError is the validation error returned
-// by Dataplane_Networking_Gateway.Validate if the designated constraints
-// aren't met.
-type Dataplane_Networking_GatewayValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e Dataplane_Networking_GatewayValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e Dataplane_Networking_GatewayValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e Dataplane_Networking_GatewayValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e Dataplane_Networking_GatewayValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e Dataplane_Networking_GatewayValidationError) ErrorName() string {
-	return "Dataplane_Networking_GatewayValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e Dataplane_Networking_GatewayValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sDataplane_Networking_Gateway.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = Dataplane_Networking_GatewayValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = Dataplane_Networking_GatewayValidationError{}
-
-// Validate checks the field values on Dataplane_Networking_TransparentProxying
-// with the rules defined in the proto definition for this message. If any
-// rules are violated, an error is returned.
-func (m *Dataplane_Networking_TransparentProxying) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if m.GetRedirectPortInbound() > 65535 {
-		return Dataplane_Networking_TransparentProxyingValidationError{
-			field:  "RedirectPortInbound",
-			reason: "value must be less than or equal to 65535",
-		}
-	}
-
-	if m.GetRedirectPortOutbound() > 65535 {
-		return Dataplane_Networking_TransparentProxyingValidationError{
-			field:  "RedirectPortOutbound",
-			reason: "value must be less than or equal to 65535",
-		}
-	}
-
-	return nil
-}
-
-// Dataplane_Networking_TransparentProxyingValidationError is the validation
-// error returned by Dataplane_Networking_TransparentProxying.Validate if the
-// designated constraints aren't met.
-type Dataplane_Networking_TransparentProxyingValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e Dataplane_Networking_TransparentProxyingValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e Dataplane_Networking_TransparentProxyingValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e Dataplane_Networking_TransparentProxyingValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e Dataplane_Networking_TransparentProxyingValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e Dataplane_Networking_TransparentProxyingValidationError) ErrorName() string {
-	return "Dataplane_Networking_TransparentProxyingValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e Dataplane_Networking_TransparentProxyingValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sDataplane_Networking_TransparentProxying.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = Dataplane_Networking_TransparentProxyingValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = Dataplane_Networking_TransparentProxyingValidationError{}
-
-// Validate checks the field values on
-// Dataplane_Networking_Ingress_AvailableService with the rules defined in the
-// proto definition for this message. If any rules are violated, an error is returned.
-func (m *Dataplane_Networking_Ingress_AvailableService) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Tags
-
-	// no validation rules for Instances
-
-	// no validation rules for Mesh
-
-	return nil
-}
-
-// Dataplane_Networking_Ingress_AvailableServiceValidationError is the
-// validation error returned by
-// Dataplane_Networking_Ingress_AvailableService.Validate if the designated
-// constraints aren't met.
-type Dataplane_Networking_Ingress_AvailableServiceValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e Dataplane_Networking_Ingress_AvailableServiceValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e Dataplane_Networking_Ingress_AvailableServiceValidationError) Reason() string {
-	return e.reason
-}
-
-// Cause function returns cause value.
-func (e Dataplane_Networking_Ingress_AvailableServiceValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e Dataplane_Networking_Ingress_AvailableServiceValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e Dataplane_Networking_Ingress_AvailableServiceValidationError) ErrorName() string {
-	return "Dataplane_Networking_Ingress_AvailableServiceValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e Dataplane_Networking_Ingress_AvailableServiceValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sDataplane_Networking_Ingress_AvailableService.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = Dataplane_Networking_Ingress_AvailableServiceValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = Dataplane_Networking_Ingress_AvailableServiceValidationError{}
-
-// Validate checks the field values on Dataplane_Probes_Endpoint with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *Dataplane_Probes_Endpoint) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for InboundPort
-
-	// no validation rules for InboundPath
-
-	// no validation rules for Path
-
-	return nil
-}
-
-// Dataplane_Probes_EndpointValidationError is the validation error returned by
-// Dataplane_Probes_Endpoint.Validate if the designated constraints aren't met.
-type Dataplane_Probes_EndpointValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e Dataplane_Probes_EndpointValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e Dataplane_Probes_EndpointValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e Dataplane_Probes_EndpointValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e Dataplane_Probes_EndpointValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e Dataplane_Probes_EndpointValidationError) ErrorName() string {
-	return "Dataplane_Probes_EndpointValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e Dataplane_Probes_EndpointValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sDataplane_Probes_Endpoint.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = Dataplane_Probes_EndpointValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = Dataplane_Probes_EndpointValidationError{}
diff --git a/api/mesh/v1alpha1/dataplane.proto b/api/mesh/v1alpha1/dataplane.proto
index 0b49c1e51..bfa5a6d5a 100644
--- a/api/mesh/v1alpha1/dataplane.proto
+++ b/api/mesh/v1alpha1/dataplane.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "mesh/v1alpha1/metrics.proto";
 
diff --git a/api/mesh/v1alpha1/dataplane_insight.pb.go b/api/mesh/v1alpha1/dataplane_insight.pb.go
index 47215ac2c..7526322e5 100644
--- a/api/mesh/v1alpha1/dataplane_insight.pb.go
+++ b/api/mesh/v1alpha1/dataplane_insight.pb.go
@@ -375,43 +375,44 @@ func init() {
 }
 
 var fileDescriptor_35794f05b529b342 = []byte{
-	// 600 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0xdf, 0x4e, 0x13, 0x41,
-	0x14, 0xc6, 0xb3, 0xed, 0x82, 0x38, 0x08, 0xe2, 0x24, 0xc0, 0x52, 0x62, 0x24, 0x4d, 0x48, 0xf0,
-	0xc2, 0x6d, 0xd0, 0x78, 0x45, 0x8c, 0x71, 0xc1, 0x18, 0x12, 0x8c, 0x3a, 0xc5, 0x1b, 0x2e, 0xdc,
-	0x0c, 0x33, 0x87, 0x32, 0xb2, 0x9d, 0xd9, 0xcc, 0x4c, 0xab, 0xbe, 0x82, 0x4f, 0xe0, 0x03, 0xf0,
-	0x04, 0xbe, 0x8b, 0x2f, 0xc3, 0x8d, 0x66, 0x66, 0xff, 0x74, 0x55, 0xfe, 0xf5, 0xae, 0xed, 0x39,
-	0xbf, 0xef, 0x9c, 0xf3, 0xcd, 0x57, 0xb4, 0x39, 0x04, 0x73, 0xda, 0x1b, 0x6f, 0xd3, 0x2c, 0x3f,
-	0xa5, 0xdb, 0x3d, 0x4e, 0x2d, 0xcd, 0x33, 0x2a, 0x21, 0x15, 0xd2, 0x88, 0xc1, 0xa9, 0x8d, 0x73,
-	0xad, 0xac, 0xc2, 0xf8, 0x6c, 0x34, 0xa4, 0xb1, 0xeb, 0x8d, 0xab, 0xde, 0xce, 0xa3, 0x81, 0x52,
-	0x83, 0x0c, 0x7a, 0xbe, 0xe3, 0x78, 0x74, 0xd2, 0xb3, 0x62, 0x08, 0xc6, 0xd2, 0x61, 0x5e, 0x40,
-	0x9d, 0xd5, 0x31, 0xcd, 0x04, 0xa7, 0x16, 0x7a, 0xd5, 0x87, 0xa2, 0xd0, 0x3d, 0x6f, 0xa3, 0xa5,
-	0xbd, 0x6a, 0xd2, 0x7e, 0x31, 0x08, 0xbf, 0x43, 0x0b, 0x66, 0x74, 0x6c, 0x98, 0x16, 0xb9, 0x15,
-	0x4a, 0x9a, 0x28, 0xd8, 0x68, 0x6f, 0xcd, 0x3f, 0x7d, 0x1c, 0xff, 0x3f, 0x3a, 0xde, 0x13, 0x86,
-	0xa9, 0x31, 0xe8, 0x6f, 0xfd, 0x06, 0x41, 0xfe, 0xe6, 0xf1, 0x0b, 0x14, 0x0e, 0x0f, 0x0f, 0xfa,
-	0x51, 0x6b, 0x23, 0xb8, 0x52, 0xe7, 0x9f, 0x25, 0xe2, 0xb7, 0x87, 0x07, 0x7d, 0xe2, 0xb1, 0xce,
-	0xef, 0x00, 0x85, 0xee, 0x2b, 0x3e, 0x42, 0xeb, 0x0c, 0xb4, 0x15, 0x27, 0x82, 0x51, 0x0b, 0x29,
-	0x7c, 0xcd, 0x85, 0xa6, 0x6e, 0x44, 0xea, 0x0e, 0x8e, 0x02, 0x2f, 0xdf, 0x89, 0x0b, 0x37, 0xe2,
-	0xca, 0x8d, 0xf8, 0xb0, 0x72, 0x83, 0xac, 0x35, 0xf0, 0xd7, 0x35, 0xed, 0xea, 0xf8, 0x13, 0x7a,
-	0x98, 0x51, 0x63, 0xd3, 0xe6, 0x00, 0x0d, 0x03, 0x90, 0x50, 0x34, 0x95, 0xcb, 0x5f, 0xa7, 0xbe,
-	0xee, 0x04, 0x76, 0x27, 0x3c, 0x69, 0xe0, 0x78, 0x07, 0xad, 0x5d, 0x25, 0x6d, 0xa2, 0xf6, 0x46,
-	0xb0, 0xb5, 0x40, 0x22, 0x76, 0x39, 0x6b, 0xba, 0xbf, 0x5a, 0x68, 0xf9, 0x52, 0xa7, 0xf1, 0x2a,
-	0x6a, 0x09, 0xee, 0x2f, 0xbf, 0x9b, 0xdc, 0xb9, 0x48, 0x42, 0xdd, 0x5a, 0x0a, 0x48, 0x4b, 0x70,
-	0x9c, 0xa0, 0x35, 0xa6, 0xa4, 0xd5, 0x2a, 0x4b, 0xeb, 0x18, 0x59, 0x2a, 0x19, 0xa4, 0x82, 0xfb,
-	0x5b, 0x1a, 0xfd, 0x2b, 0x65, 0xe7, 0xfb, 0xf2, 0x01, 0x7c, 0xdf, 0x3e, 0xc7, 0x6f, 0xd0, 0x3d,
-	0xa6, 0xa4, 0x04, 0x66, 0x0b, 0x83, 0xdb, 0x37, 0x59, 0x90, 0xcc, 0x5d, 0x24, 0x33, 0x3f, 0x83,
-	0xd6, 0x5c, 0x40, 0xe6, 0x4b, 0xd2, 0x9b, 0xbb, 0x8b, 0xee, 0x73, 0xb7, 0x7e, 0x43, 0x2b, 0xbc,
-	0xd1, 0xce, 0xc5, 0x09, 0xe2, 0x45, 0x3e, 0xa0, 0x59, 0x63, 0xa9, 0x1d, 0x99, 0x68, 0xc6, 0xb3,
-	0xbd, 0x5b, 0xe7, 0xb1, 0xef, 0x31, 0xbf, 0xdc, 0xf7, 0xc0, 0x1d, 0x5c, 0x0a, 0x75, 0x7f, 0xb4,
-	0xd1, 0xfa, 0x35, 0x04, 0xde, 0x43, 0x4b, 0x3e, 0x14, 0xa3, 0xdc, 0xfd, 0x67, 0x6e, 0x9b, 0xb2,
-	0x45, 0xc7, 0x7c, 0xf4, 0x88, 0x5f, 0xfc, 0x25, 0x9a, 0xb1, 0xca, 0xd2, 0xec, 0xda, 0xfc, 0xd7,
-	0x5b, 0x80, 0x1e, 0x0b, 0x06, 0x6e, 0x01, 0x43, 0x0a, 0x0e, 0xef, 0xa0, 0x36, 0xe3, 0xa6, 0xb4,
-	0x7f, 0x0a, 0xdc, 0x51, 0x0e, 0x06, 0x6e, 0x4a, 0xbf, 0xa7, 0x81, 0xa1, 0x80, 0x33, 0x5e, 0x19,
-	0x3e, 0x0d, 0x9c, 0x15, 0xb0, 0xe6, 0x26, 0x9a, 0x9d, 0x1a, 0xd6, 0xdc, 0x74, 0xcf, 0x83, 0x66,
-	0xe4, 0x1b, 0x65, 0xbc, 0x89, 0x16, 0x35, 0x98, 0x5c, 0x49, 0x03, 0x26, 0x35, 0x20, 0xad, 0x7f,
-	0x92, 0x90, 0x2c, 0xd4, 0xbf, 0xf6, 0x41, 0x5a, 0xfc, 0x1c, 0xad, 0x4c, 0xda, 0x28, 0x3b, 0x93,
-	0xea, 0x4b, 0x06, 0x7c, 0x00, 0x45, 0xfa, 0x43, 0xb2, 0x5c, 0x57, 0x5f, 0x35, 0x8a, 0xf8, 0x09,
-	0xc2, 0x13, 0x4c, 0xc3, 0x67, 0x60, 0x16, 0xb8, 0xb7, 0x3e, 0x24, 0x0f, 0xea, 0x0a, 0x29, 0x0b,
-	0x09, 0x3a, 0x9a, 0xab, 0xae, 0x39, 0x9e, 0xf5, 0x59, 0x78, 0xf6, 0x27, 0x00, 0x00, 0xff, 0xff,
-	0xe1, 0x68, 0x8d, 0x9f, 0xca, 0x05, 0x00, 0x00,
+	// 623 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xdf, 0x4e, 0x13, 0x4f,
+	0x14, 0xc7, 0xb3, 0xed, 0xc2, 0x8f, 0xdf, 0x20, 0x88, 0x93, 0x00, 0x4b, 0x89, 0x91, 0x34, 0x21,
+	0x41, 0x13, 0x77, 0x83, 0xc6, 0x2b, 0x62, 0x8c, 0x05, 0x63, 0x48, 0x30, 0xea, 0x14, 0x6f, 0xb8,
+	0x70, 0x33, 0x9d, 0x39, 0xb4, 0x23, 0xdb, 0x99, 0x75, 0x66, 0x5a, 0xf5, 0x15, 0x7c, 0x02, 0x1f,
+	0x80, 0x27, 0xf0, 0x5d, 0x7c, 0x19, 0x6e, 0x34, 0x33, 0xbb, 0x6d, 0x17, 0x85, 0x42, 0xaf, 0xfa,
+	0xe7, 0x9c, 0xcf, 0xf7, 0x9c, 0xf3, 0xdd, 0x6f, 0x8b, 0xb6, 0xfb, 0x60, 0x7a, 0xc9, 0x70, 0x97,
+	0x66, 0x79, 0x8f, 0xee, 0x26, 0x9c, 0x5a, 0x9a, 0x67, 0x54, 0x42, 0x2a, 0xa4, 0x11, 0xdd, 0x9e,
+	0x8d, 0x73, 0xad, 0xac, 0xc2, 0xf8, 0x6c, 0xd0, 0xa7, 0xb1, 0xeb, 0x8d, 0x47, 0xbd, 0x8d, 0x07,
+	0x5d, 0xa5, 0xba, 0x19, 0x24, 0xbe, 0xa3, 0x33, 0x38, 0x4d, 0xac, 0xe8, 0x83, 0xb1, 0xb4, 0x9f,
+	0x17, 0x50, 0x63, 0x7d, 0x48, 0x33, 0xc1, 0xa9, 0x85, 0x64, 0xf4, 0xa6, 0x28, 0x34, 0xcf, 0xeb,
+	0x68, 0xe5, 0x60, 0x34, 0xe9, 0xb0, 0x18, 0x84, 0xdf, 0xa2, 0x25, 0x33, 0xe8, 0x18, 0xa6, 0x45,
+	0x6e, 0x85, 0x92, 0x26, 0x0a, 0xb6, 0xea, 0x3b, 0x8b, 0x4f, 0x1e, 0xc6, 0xff, 0x8e, 0x8e, 0x0f,
+	0x84, 0x61, 0x6a, 0x08, 0xfa, 0x5b, 0xbb, 0x42, 0x90, 0xcb, 0x3c, 0x7e, 0x8e, 0xc2, 0xfe, 0xf1,
+	0x51, 0x3b, 0xaa, 0x6d, 0x05, 0xd7, 0xea, 0xfc, 0xb5, 0x44, 0xfc, 0xe6, 0xf8, 0xa8, 0x4d, 0x3c,
+	0xd6, 0xf8, 0x1d, 0xa0, 0xd0, 0x7d, 0xc4, 0x27, 0x68, 0x93, 0x81, 0xb6, 0xe2, 0x54, 0x30, 0x6a,
+	0x21, 0x85, 0xaf, 0xb9, 0xd0, 0xd4, 0x8d, 0x48, 0xdd, 0xc1, 0x51, 0xe0, 0xe5, 0x1b, 0x71, 0xe1,
+	0x46, 0x3c, 0x72, 0x23, 0x3e, 0x1e, 0xb9, 0x41, 0x36, 0x2a, 0xf8, 0xab, 0x31, 0xed, 0xea, 0xf8,
+	0x23, 0xba, 0x9f, 0x51, 0x63, 0xd3, 0xea, 0x00, 0x0d, 0x5d, 0x90, 0x50, 0x34, 0x95, 0xcb, 0x4f,
+	0x53, 0xdf, 0x74, 0x02, 0xfb, 0x13, 0x9e, 0x54, 0x70, 0xbc, 0x87, 0x36, 0xae, 0x93, 0x36, 0x51,
+	0x7d, 0x2b, 0xd8, 0x59, 0x22, 0x11, 0xbb, 0x9a, 0x35, 0xcd, 0x5f, 0x35, 0xb4, 0x7a, 0xa5, 0xd3,
+	0x78, 0x1d, 0xd5, 0x04, 0xf7, 0x97, 0xff, 0xdf, 0xfa, 0xef, 0xa2, 0x15, 0xea, 0xda, 0x4a, 0x40,
+	0x6a, 0x82, 0xe3, 0x16, 0xda, 0x60, 0x4a, 0x5a, 0xad, 0xb2, 0x74, 0x1c, 0x23, 0x4b, 0x25, 0x83,
+	0x54, 0x70, 0x7f, 0x4b, 0xa5, 0x7f, 0xad, 0xec, 0x7c, 0x57, 0x3e, 0x00, 0xdf, 0x77, 0xc8, 0xf1,
+	0x6b, 0x74, 0x87, 0x29, 0x29, 0x81, 0xd9, 0xc2, 0xe0, 0xfa, 0x4d, 0x16, 0xb4, 0x16, 0x2e, 0x5a,
+	0x73, 0x3f, 0x83, 0xda, 0x42, 0x40, 0x16, 0x4b, 0xd2, 0x9b, 0xbb, 0x8f, 0xee, 0x72, 0xb7, 0x7e,
+	0x45, 0x2b, 0xbc, 0xd1, 0xce, 0xe5, 0x09, 0xe2, 0x45, 0xde, 0xa3, 0x79, 0x63, 0xa9, 0x1d, 0x98,
+	0x68, 0xce, 0xb3, 0xc9, 0xad, 0xf3, 0xd8, 0xf6, 0x98, 0x5f, 0xee, 0x7b, 0xe0, 0x0e, 0x2e, 0x85,
+	0x9a, 0x3f, 0xea, 0x68, 0x73, 0x0a, 0x81, 0x0f, 0xd0, 0x8a, 0x0f, 0xc5, 0x20, 0x77, 0xbf, 0x99,
+	0xdb, 0xa6, 0x6c, 0xd9, 0x31, 0x1f, 0x3c, 0xe2, 0x17, 0x7f, 0x81, 0xe6, 0xac, 0xb2, 0x34, 0x9b,
+	0x9a, 0xff, 0xf1, 0x16, 0xa0, 0x87, 0x82, 0x81, 0x5b, 0xc0, 0x90, 0x82, 0xc3, 0x7b, 0xa8, 0xce,
+	0xb8, 0x29, 0xed, 0x9f, 0x01, 0x77, 0x94, 0x83, 0x81, 0x9b, 0xd2, 0xef, 0x59, 0x60, 0x28, 0xe0,
+	0x8c, 0x8f, 0x0c, 0x9f, 0x05, 0xce, 0x0a, 0x58, 0x73, 0x13, 0xcd, 0xcf, 0x0c, 0x6b, 0x6e, 0x9a,
+	0xe7, 0x41, 0x35, 0xf2, 0x95, 0x32, 0xde, 0x46, 0xcb, 0x1a, 0x4c, 0xae, 0xa4, 0x01, 0x93, 0x1a,
+	0x90, 0xd6, 0x3f, 0x92, 0x90, 0x2c, 0x8d, 0xbf, 0x6d, 0x83, 0xb4, 0xf8, 0x19, 0x5a, 0x9b, 0xb4,
+	0x51, 0x76, 0x26, 0xd5, 0x97, 0x0c, 0x78, 0x17, 0x8a, 0xf4, 0x87, 0x64, 0x75, 0x5c, 0x7d, 0x59,
+	0x29, 0xe2, 0xc7, 0x08, 0x4f, 0x30, 0x0d, 0x9f, 0x80, 0x59, 0xe0, 0xde, 0xfa, 0x90, 0xdc, 0x1b,
+	0x57, 0x48, 0x59, 0x68, 0x3d, 0x3a, 0xd9, 0xe9, 0x0a, 0xdb, 0x1b, 0x74, 0x62, 0xa6, 0xfa, 0x89,
+	0x3b, 0xb1, 0xf7, 0xd9, 0xbf, 0x24, 0x34, 0x17, 0xc9, 0xa5, 0xbf, 0xf4, 0xce, 0xbc, 0xcf, 0xca,
+	0xd3, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x19, 0x23, 0x3d, 0xe8, 0xea, 0x05, 0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/dataplane_insight.proto b/api/mesh/v1alpha1/dataplane_insight.proto
index 4b1916a1f..02df0e2c9 100644
--- a/api/mesh/v1alpha1/dataplane_insight.proto
+++ b/api/mesh/v1alpha1/dataplane_insight.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "google/protobuf/timestamp.proto";
 import "validate/validate.proto";
diff --git a/api/mesh/v1alpha1/dataplane_overview.pb.go b/api/mesh/v1alpha1/dataplane_overview.pb.go
index 51bd82945..e30f0fa85 100644
--- a/api/mesh/v1alpha1/dataplane_overview.pb.go
+++ b/api/mesh/v1alpha1/dataplane_overview.pb.go
@@ -78,7 +78,7 @@ func init() {
 }
 
 var fileDescriptor_ea8390996584fcf0 = []byte{
-	// 187 bytes of a gzipped FileDescriptorProto
+	// 210 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcb, 0x4d, 0x2d, 0xce,
 	0xd0, 0x2f, 0x33, 0x4c, 0xcc, 0x29, 0xc8, 0x48, 0x34, 0xd4, 0x4f, 0x49, 0x2c, 0x49, 0x2c, 0xc8,
 	0x49, 0xcc, 0x4b, 0x8d, 0xcf, 0x2f, 0x4b, 0x2d, 0x2a, 0xcb, 0x4c, 0x2d, 0xd7, 0x2b, 0x28, 0xca,
@@ -89,6 +89,8 @@ var fileDescriptor_ea8390996584fcf0 = []byte{
 	0x93, 0x24, 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, 0x64, 0xf5, 0x30, 0x1d, 0xa7, 0x07, 0xd7, 0xe9,
 	0xc4, 0xf1, 0xcb, 0x89, 0xb5, 0x8b, 0x91, 0x49, 0x80, 0x31, 0x08, 0xa1, 0x53, 0x28, 0x90, 0x4b,
 	0x10, 0xc3, 0x41, 0x12, 0x4c, 0x60, 0xe3, 0x54, 0xf0, 0x1a, 0xe7, 0x09, 0x51, 0x1b, 0x24, 0x90,
-	0x82, 0x26, 0xe2, 0xc4, 0x15, 0xc5, 0x01, 0x53, 0x9e, 0xc4, 0x06, 0xf6, 0x82, 0x31, 0x20, 0x00,
-	0x00, 0xff, 0xff, 0x70, 0x99, 0x13, 0x2a, 0x5f, 0x01, 0x00, 0x00,
+	0x82, 0x26, 0xe2, 0xa4, 0x15, 0xa5, 0x91, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f,
+	0xab, 0x0f, 0x32, 0x23, 0xa3, 0x10, 0x4c, 0xe9, 0x27, 0x16, 0x64, 0xea, 0xa3, 0x04, 0x46, 0x12,
+	0x1b, 0xd8, 0x8b, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x40, 0xdc, 0x30, 0x61, 0x7f, 0x01,
+	0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/dataplane_overview.proto b/api/mesh/v1alpha1/dataplane_overview.proto
index a41661752..6dcbd1563 100644
--- a/api/mesh/v1alpha1/dataplane_overview.proto
+++ b/api/mesh/v1alpha1/dataplane_overview.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "mesh/v1alpha1/dataplane.proto";
 import "mesh/v1alpha1/dataplane_insight.proto";
diff --git a/api/mesh/v1alpha1/externalservice.pb.go b/api/mesh/v1alpha1/externalservice.pb.go
index 3282f9778..8f6018e5d 100644
--- a/api/mesh/v1alpha1/externalservice.pb.go
+++ b/api/mesh/v1alpha1/externalservice.pb.go
@@ -201,29 +201,30 @@ func init() {
 }
 
 var fileDescriptor_df6b95621b774a94 = []byte{
-	// 370 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xbd, 0x8e, 0xda, 0x40,
-	0x10, 0xc7, 0x65, 0x9b, 0x0f, 0x7b, 0x28, 0x12, 0xad, 0x22, 0xc5, 0x72, 0x65, 0x25, 0x0d, 0x4d,
-	0x16, 0x41, 0x8a, 0x7c, 0x34, 0x51, 0x08, 0x54, 0x20, 0x0a, 0x9b, 0x2a, 0x0d, 0x1a, 0xec, 0x11,
-	0x58, 0x18, 0x1b, 0xed, 0x2e, 0xbe, 0xf3, 0xab, 0xdc, 0x8b, 0xdc, 0x53, 0xdc, 0x2b, 0xdc, 0x83,
-	0x5c, 0x75, 0xb2, 0x17, 0xc3, 0xe9, 0xae, 0xe1, 0xba, 0x1d, 0x69, 0xfe, 0xbf, 0xdf, 0xf8, 0x2f,
-	0xc3, 0xd7, 0x3d, 0xc9, 0xed, 0xa0, 0x18, 0x62, 0x7a, 0xd8, 0xe2, 0x70, 0x40, 0xb7, 0x8a, 0x44,
-	0x86, 0xa9, 0x24, 0x51, 0x24, 0x11, 0xf1, 0x83, 0xc8, 0x55, 0xce, 0xd8, 0xee, 0xb8, 0x47, 0x5e,
-	0x6d, 0xf2, 0x66, 0xd3, 0xfb, 0x5c, 0x60, 0x9a, 0xc4, 0xa8, 0x68, 0xd0, 0x3c, 0xf4, 0xb2, 0xe7,
-	0xcb, 0x52, 0x2a, 0xda, 0x5f, 0x98, 0x31, 0x2a, 0x94, 0xf9, 0x51, 0x34, 0xb8, 0x2f, 0xf7, 0x2d,
-	0xf8, 0x30, 0x3d, 0x89, 0x42, 0x2d, 0x62, 0x0b, 0x80, 0x8c, 0xd4, 0x4d, 0x2e, 0x76, 0x49, 0xb6,
-	0x71, 0x0d, 0xdf, 0xe8, 0xf7, 0x46, 0x9c, 0xbf, 0xf5, 0xf2, 0x57, 0x41, 0xbe, 0x38, 0xa7, 0x82,
-	0x17, 0x04, 0x36, 0x83, 0x96, 0xc2, 0x8d, 0x74, 0x4d, 0xdf, 0xea, 0xf7, 0x46, 0xdf, 0xae, 0x21,
-	0x2d, 0x71, 0x23, 0xa7, 0x99, 0x12, 0xe5, 0xd8, 0x7e, 0x1a, 0xb7, 0xef, 0x0c, 0xd3, 0x36, 0x82,
-	0x1a, 0xe2, 0x3d, 0x98, 0x00, 0x17, 0x0f, 0x73, 0xa1, 0x8b, 0x71, 0x2c, 0x48, 0xca, 0xfa, 0x50,
-	0x27, 0x68, 0x46, 0x36, 0x01, 0x4b, 0xa5, 0x95, 0xb4, 0x3a, 0x7f, 0xf4, 0xbe, 0xf3, 0xf9, 0x72,
-	0x1e, 0x06, 0x55, 0xdc, 0x7b, 0x34, 0xc0, 0x5a, 0xce, 0xc3, 0xca, 0x43, 0x19, 0xae, 0x53, 0x8a,
-	0x6b, 0x8f, 0x1d, 0x34, 0x23, 0xfb, 0x05, 0xdd, 0x08, 0x57, 0x11, 0x09, 0x75, 0x72, 0xf9, 0xda,
-	0xa5, 0xab, 0xbf, 0xd8, 0x26, 0xa8, 0x30, 0xac, 0xab, 0x0f, 0x3a, 0x11, 0xfe, 0x23, 0xa1, 0xd8,
-	0x5f, 0xe8, 0x45, 0x69, 0x42, 0x99, 0xd2, 0x71, 0xeb, 0xca, 0x38, 0xe8, 0x50, 0x8d, 0xf8, 0x03,
-	0xa7, 0x69, 0xb5, 0xa3, 0xd2, 0x6d, 0x5d, 0x49, 0x70, 0x74, 0x66, 0x46, 0xa5, 0xf7, 0x03, 0x9c,
-	0x73, 0xd9, 0xec, 0x23, 0x58, 0x15, 0x46, 0x37, 0x59, 0x3d, 0xd9, 0x27, 0x68, 0x17, 0x98, 0x1e,
-	0xa9, 0xfe, 0x36, 0x27, 0xd0, 0xc3, 0x6f, 0xf3, 0xa7, 0x31, 0x86, 0xff, 0x76, 0x83, 0x5e, 0x77,
-	0xea, 0x9f, 0xe9, 0xfb, 0x73, 0x00, 0x00, 0x00, 0xff, 0xff, 0x35, 0xf9, 0x68, 0xc8, 0xc2, 0x02,
-	0x00, 0x00,
+	// 391 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xbd, 0x8e, 0xd3, 0x40,
+	0x10, 0xc7, 0xe5, 0x38, 0x77, 0x17, 0x4f, 0x0a, 0xd0, 0x0a, 0x09, 0xcb, 0x95, 0x05, 0x4d, 0x84,
+	0xc4, 0x5a, 0x17, 0x0a, 0x3e, 0x1a, 0x44, 0xb8, 0xab, 0xee, 0x74, 0x85, 0x9d, 0x8a, 0xe6, 0x34,
+	0xb1, 0x47, 0xb6, 0x15, 0x7f, 0x84, 0xdd, 0xb5, 0xc1, 0xaf, 0xc2, 0x8b, 0xf0, 0x14, 0xbc, 0x02,
+	0x0f, 0x42, 0x85, 0x76, 0x37, 0x4e, 0xf8, 0x68, 0x72, 0x95, 0x77, 0xa4, 0xf9, 0xff, 0x7e, 0xe3,
+	0xd1, 0xc0, 0xf3, 0x9a, 0x64, 0x11, 0xf5, 0x97, 0x58, 0xed, 0x0a, 0xbc, 0x8c, 0xe8, 0xab, 0x22,
+	0xd1, 0x60, 0x25, 0x49, 0xf4, 0x65, 0x4a, 0x7c, 0x27, 0x5a, 0xd5, 0x32, 0xb6, 0xed, 0x6a, 0xe4,
+	0xba, 0x93, 0x8f, 0x9d, 0xc1, 0xd3, 0x1e, 0xab, 0x32, 0x43, 0x45, 0xd1, 0xf8, 0xb0, 0xcd, 0x41,
+	0x28, 0x07, 0xa9, 0xa8, 0x3e, 0x32, 0x33, 0x54, 0x28, 0xdb, 0x4e, 0x8c, 0xb8, 0x67, 0xdf, 0xa7,
+	0xf0, 0xe8, 0x7a, 0x2f, 0x4a, 0xac, 0x88, 0xdd, 0x01, 0x34, 0xa4, 0xbe, 0xb4, 0x62, 0x5b, 0x36,
+	0xb9, 0xef, 0x84, 0xce, 0x62, 0xbe, 0xe4, 0xfc, 0x7f, 0x2f, 0xff, 0x27, 0xc8, 0xef, 0x0e, 0xa9,
+	0xf8, 0x0f, 0x02, 0xbb, 0x81, 0xa9, 0xc2, 0x5c, 0xfa, 0x93, 0xd0, 0x5d, 0xcc, 0x97, 0x2f, 0x4f,
+	0x21, 0xad, 0x31, 0x97, 0xd7, 0x8d, 0x12, 0xc3, 0x6a, 0xf6, 0x6b, 0x75, 0xf6, 0xcd, 0x99, 0xcc,
+	0x9c, 0xd8, 0x40, 0x82, 0x1f, 0x13, 0x80, 0xa3, 0x87, 0xf9, 0x70, 0x81, 0x59, 0x26, 0x48, 0x4a,
+	0x33, 0xa8, 0x17, 0x8f, 0x25, 0xbb, 0x02, 0x57, 0x55, 0x5a, 0xaa, 0xc7, 0x5f, 0x3e, 0x6c, 0x7c,
+	0xbe, 0xbe, 0x4d, 0x62, 0x1d, 0x0f, 0x7e, 0x3a, 0xe0, 0xae, 0x6f, 0x13, 0xed, 0xa1, 0x06, 0x37,
+	0x15, 0x65, 0xc6, 0x33, 0x8b, 0xc7, 0x92, 0xbd, 0x85, 0x8b, 0x14, 0xef, 0x53, 0x12, 0x6a, 0xef,
+	0x0a, 0xad, 0xcb, 0xae, 0xfe, 0x68, 0xbb, 0x42, 0x85, 0x89, 0x59, 0x7d, 0x7c, 0x9e, 0xe2, 0x47,
+	0x12, 0x8a, 0x7d, 0x80, 0x79, 0x5a, 0x95, 0xd4, 0x28, 0x1b, 0x77, 0x4f, 0x8c, 0x83, 0x0d, 0x19,
+	0xc4, 0x7b, 0xd8, 0x57, 0xf7, 0x5b, 0x1a, 0xfc, 0xe9, 0x89, 0x04, 0xcf, 0x66, 0x6e, 0x68, 0x08,
+	0x5e, 0x83, 0x77, 0x58, 0x36, 0x7b, 0x0c, 0xae, 0xc6, 0xd8, 0x4d, 0xea, 0x27, 0x7b, 0x02, 0x67,
+	0x3d, 0x56, 0x1d, 0x99, 0x7f, 0xf3, 0x62, 0x5b, 0xbc, 0x9b, 0xbc, 0x71, 0x56, 0x2f, 0x3e, 0x2d,
+	0xf2, 0x52, 0x15, 0xdd, 0x86, 0xa7, 0x6d, 0x1d, 0x69, 0x63, 0xf1, 0xd9, 0x7c, 0x22, 0xdc, 0x95,
+	0xd1, 0x5f, 0xa7, 0xbc, 0x39, 0x37, 0xc7, 0xf6, 0xea, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xeb,
+	0x38, 0x8f, 0xe2, 0xe2, 0x02, 0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/externalservice.pb.validate.go b/api/mesh/v1alpha1/externalservice.pb.validate.go
deleted file mode 100644
index 43c126a4f..000000000
--- a/api/mesh/v1alpha1/externalservice.pb.validate.go
+++ /dev/null
@@ -1,298 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: mesh/v1alpha1/externalservice.proto
-
-package v1alpha1
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"net"
-	"net/mail"
-	"net/url"
-	"regexp"
-	"strings"
-	"time"
-	"unicode/utf8"
-
-	"github.com/golang/protobuf/ptypes"
-)
-
-// ensure the imports are used
-var (
-	_ = bytes.MinRead
-	_ = errors.New("")
-	_ = fmt.Print
-	_ = utf8.UTFMax
-	_ = (*regexp.Regexp)(nil)
-	_ = (*strings.Reader)(nil)
-	_ = net.IPv4len
-	_ = time.Duration(0)
-	_ = (*url.URL)(nil)
-	_ = (*mail.Address)(nil)
-	_ = ptypes.DynamicAny{}
-)
-
-// define the regex for a UUID once up-front
-var _externalservice_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")
-
-// Validate checks the field values on ExternalService with the rules defined
-// in the proto definition for this message. If any rules are violated, an
-// error is returned.
-func (m *ExternalService) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if v, ok := interface{}(m.GetNetworking()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return ExternalServiceValidationError{
-				field:  "Networking",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if len(m.GetTags()) < 1 {
-		return ExternalServiceValidationError{
-			field:  "Tags",
-			reason: "value must contain at least 1 pair(s)",
-		}
-	}
-
-	return nil
-}
-
-// ExternalServiceValidationError is the validation error returned by
-// ExternalService.Validate if the designated constraints aren't met.
-type ExternalServiceValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e ExternalServiceValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ExternalServiceValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ExternalServiceValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ExternalServiceValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ExternalServiceValidationError) ErrorName() string { return "ExternalServiceValidationError" }
-
-// Error satisfies the builtin error interface
-func (e ExternalServiceValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sExternalService.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = ExternalServiceValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = ExternalServiceValidationError{}
-
-// Validate checks the field values on ExternalService_Networking with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *ExternalService_Networking) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Address
-
-	if v, ok := interface{}(m.GetTls()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return ExternalService_NetworkingValidationError{
-				field:  "Tls",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// ExternalService_NetworkingValidationError is the validation error returned
-// by ExternalService_Networking.Validate if the designated constraints aren't met.
-type ExternalService_NetworkingValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e ExternalService_NetworkingValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ExternalService_NetworkingValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ExternalService_NetworkingValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ExternalService_NetworkingValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ExternalService_NetworkingValidationError) ErrorName() string {
-	return "ExternalService_NetworkingValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e ExternalService_NetworkingValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sExternalService_Networking.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = ExternalService_NetworkingValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = ExternalService_NetworkingValidationError{}
-
-// Validate checks the field values on ExternalService_Networking_TLS with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *ExternalService_Networking_TLS) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Enabled
-
-	if v, ok := interface{}(m.GetCaCert()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return ExternalService_Networking_TLSValidationError{
-				field:  "CaCert",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if v, ok := interface{}(m.GetClientCert()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return ExternalService_Networking_TLSValidationError{
-				field:  "ClientCert",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if v, ok := interface{}(m.GetClientKey()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return ExternalService_Networking_TLSValidationError{
-				field:  "ClientKey",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// ExternalService_Networking_TLSValidationError is the validation error
-// returned by ExternalService_Networking_TLS.Validate if the designated
-// constraints aren't met.
-type ExternalService_Networking_TLSValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e ExternalService_Networking_TLSValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ExternalService_Networking_TLSValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ExternalService_Networking_TLSValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ExternalService_Networking_TLSValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ExternalService_Networking_TLSValidationError) ErrorName() string {
-	return "ExternalService_Networking_TLSValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e ExternalService_Networking_TLSValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sExternalService_Networking_TLS.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = ExternalService_Networking_TLSValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = ExternalService_Networking_TLSValidationError{}
diff --git a/api/mesh/v1alpha1/externalservice.proto b/api/mesh/v1alpha1/externalservice.proto
index e93249e6c..eab257201 100644
--- a/api/mesh/v1alpha1/externalservice.proto
+++ b/api/mesh/v1alpha1/externalservice.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "validate/validate.proto";
 
diff --git a/api/mesh/v1alpha1/fault_injection.pb.go b/api/mesh/v1alpha1/fault_injection.pb.go
index c38e72202..bd93d77b1 100644
--- a/api/mesh/v1alpha1/fault_injection.pb.go
+++ b/api/mesh/v1alpha1/fault_injection.pb.go
@@ -312,31 +312,32 @@ func init() {
 }
 
 var fileDescriptor_ff4d722195e1e7eb = []byte{
-	// 412 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x92, 0x4f, 0x8b, 0xd4, 0x40,
-	0x10, 0xc5, 0xc9, 0xee, 0x66, 0x95, 0x5a, 0x11, 0xb6, 0x4f, 0x31, 0x0c, 0xb2, 0xe8, 0xc1, 0xbd,
-	0xd8, 0x61, 0xb3, 0x20, 0x88, 0x7b, 0xd0, 0xdd, 0x45, 0x98, 0x6b, 0x0f, 0x7a, 0xf0, 0x32, 0x74,
-	0x92, 0xca, 0x1f, 0xed, 0xe9, 0x0e, 0xfd, 0x67, 0x06, 0x6f, 0x82, 0xf8, 0xe5, 0xfc, 0x54, 0x92,
-	0xa4, 0xc3, 0x38, 0x46, 0x61, 0x64, 0x8e, 0xe9, 0x7a, 0xbf, 0x57, 0xaf, 0x2a, 0x05, 0xcf, 0x57,
-	0x68, 0xea, 0x64, 0x7d, 0xc5, 0x45, 0x5b, 0xf3, 0xab, 0xa4, 0xe4, 0x4e, 0xd8, 0x65, 0x23, 0x3f,
-	0x63, 0x6e, 0x1b, 0x25, 0x69, 0xab, 0x95, 0x55, 0x84, 0x7c, 0x71, 0x2b, 0x4e, 0x3b, 0x25, 0x1d,
-	0x95, 0xf1, 0xd3, 0x4a, 0xa9, 0x4a, 0x60, 0xd2, 0x2b, 0x32, 0x57, 0x26, 0x85, 0xd3, 0x7c, 0xcb,
-	0xc4, 0xb3, 0x5d, 0x63, 0x83, 0x02, 0x73, 0xab, 0xb4, 0xaf, 0x4e, 0xe8, 0x8d, 0xe6, 0x6d, 0x8b,
-	0xda, 0x0c, 0xf5, 0x67, 0x3f, 0x4f, 0xe1, 0xf1, 0xfb, 0x2e, 0xcb, 0x7c, 0x8c, 0x42, 0x5e, 0xc1,
-	0x03, 0xa3, 0x9c, 0xce, 0xd1, 0x44, 0xc1, 0xc5, 0xf1, 0xe5, 0x59, 0x3a, 0xa3, 0xd3, 0x58, 0x74,
-	0xe1, 0xfb, 0xb0, 0x51, 0x4c, 0xde, 0xc2, 0xa3, 0x02, 0x8d, 0x6d, 0x64, 0x9f, 0xce, 0x44, 0x47,
-	0x7b, 0xc0, 0x3b, 0x04, 0x79, 0x03, 0x27, 0xb9, 0x92, 0x65, 0x74, 0x7c, 0x11, 0x5c, 0x9e, 0xa5,
-	0x2f, 0xfe, 0x46, 0xee, 0x66, 0xa5, 0x77, 0x4a, 0x96, 0xac, 0x87, 0xe2, 0x6f, 0x21, 0x9c, 0x74,
-	0x9f, 0xe4, 0x0e, 0xc2, 0x02, 0x05, 0xff, 0x1a, 0x05, 0xbd, 0xcd, 0xcb, 0x3d, 0x6d, 0xe8, 0x7d,
-	0x07, 0xb1, 0x81, 0xed, 0x4c, 0x78, 0xa6, 0xb4, 0x8d, 0x8e, 0xfe, 0xcf, 0xe4, 0x5d, 0x07, 0xb1,
-	0x81, 0x25, 0x35, 0x10, 0x8d, 0xa6, 0x55, 0xd2, 0xe0, 0x32, 0xe3, 0xb2, 0xd8, 0x34, 0x85, 0xad,
-	0xfd, 0x74, 0xaf, 0xf7, 0x75, 0x64, 0xde, 0xe1, 0x76, 0x34, 0x60, 0xe7, 0xfa, 0xcf, 0xa7, 0x78,
-	0x0d, 0x61, 0x1f, 0x9f, 0xdc, 0x00, 0xb4, 0xa8, 0x73, 0x94, 0x96, 0x57, 0xe8, 0x37, 0x30, 0xa3,
-	0xc3, 0x11, 0xd0, 0xf1, 0x08, 0xe8, 0xbd, 0x72, 0x99, 0xc0, 0x8f, 0x5c, 0x38, 0x64, 0xbf, 0xe9,
-	0x49, 0x02, 0xe1, 0xba, 0x7b, 0xf4, 0x53, 0x3f, 0x99, 0x82, 0xfe, 0xf6, 0xd8, 0xa0, 0x8b, 0xbf,
-	0x07, 0x10, 0xf6, 0x23, 0x1f, 0xd8, 0xf8, 0x06, 0xa0, 0xb6, 0xb6, 0x5d, 0x58, 0x6e, 0x9d, 0xf1,
-	0xdd, 0xa7, 0xf4, 0x87, 0xb9, 0xb4, 0xd7, 0xa9, 0xa7, 0xb7, 0xfa, 0xf8, 0x47, 0x00, 0xe7, 0x93,
-	0x35, 0x1d, 0x98, 0x28, 0x85, 0x50, 0x34, 0xab, 0xc6, 0xfe, 0x33, 0xcc, 0xc2, 0xea, 0x46, 0x56,
-	0x03, 0x38, 0x48, 0x6f, 0xe1, 0xd3, 0xc3, 0xf1, 0x57, 0x66, 0xa7, 0xbd, 0xf0, 0xfa, 0x57, 0x00,
-	0x00, 0x00, 0xff, 0xff, 0xeb, 0x09, 0x7e, 0x32, 0xf8, 0x03, 0x00, 0x00,
+	// 431 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x93, 0xc1, 0x6b, 0xd4, 0x40,
+	0x14, 0xc6, 0x49, 0xdb, 0x54, 0x78, 0x15, 0xa1, 0x73, 0x8a, 0x61, 0x91, 0xa2, 0x07, 0x17, 0xc1,
+	0x09, 0xdd, 0x82, 0x20, 0xf6, 0xa0, 0x6d, 0x11, 0x7a, 0xcd, 0xa2, 0x07, 0x2f, 0x65, 0x92, 0xbc,
+	0x4d, 0x46, 0xb3, 0x33, 0x71, 0xe6, 0xcd, 0x16, 0x6f, 0x82, 0xf8, 0xcf, 0xf9, 0x57, 0x49, 0x92,
+	0x09, 0x35, 0x46, 0x61, 0xcb, 0x9e, 0x42, 0x66, 0xbe, 0xdf, 0xf7, 0xbe, 0xf7, 0xf2, 0x02, 0xcf,
+	0xd6, 0x68, 0xab, 0x64, 0x73, 0x2a, 0xea, 0xa6, 0x12, 0xa7, 0xc9, 0x4a, 0xb8, 0x9a, 0x6e, 0xa4,
+	0xfa, 0x8c, 0x39, 0x49, 0xad, 0x78, 0x63, 0x34, 0x69, 0xc6, 0xbe, 0xb8, 0xb5, 0xe0, 0xad, 0x92,
+	0x0f, 0xca, 0xf8, 0x49, 0xa9, 0x75, 0x59, 0x63, 0xd2, 0x29, 0x32, 0xb7, 0x4a, 0x0a, 0x67, 0xc4,
+	0x1d, 0x13, 0xcf, 0xc6, 0xc6, 0x16, 0x6b, 0xcc, 0x49, 0x1b, 0x7f, 0x3b, 0xa1, 0x6f, 0x8d, 0x68,
+	0x1a, 0x34, 0xb6, 0xbf, 0x7f, 0xfa, 0xeb, 0x10, 0x1e, 0xbd, 0x6f, 0xb3, 0x5c, 0x0f, 0x51, 0xd8,
+	0x2b, 0x78, 0x60, 0xb5, 0x33, 0x39, 0xda, 0x28, 0x38, 0xd9, 0x9f, 0x1f, 0x2d, 0x66, 0x7c, 0x1a,
+	0x8b, 0x2f, 0x7d, 0x9d, 0x74, 0x10, 0xb3, 0xb7, 0xf0, 0xb0, 0x40, 0x4b, 0x52, 0x75, 0xe9, 0x6c,
+	0xb4, 0xb7, 0x05, 0x3c, 0x22, 0xd8, 0x1b, 0x38, 0xc8, 0xb5, 0x5a, 0x45, 0xfb, 0x27, 0xc1, 0xfc,
+	0x68, 0xf1, 0xfc, 0x5f, 0xe4, 0x38, 0x2b, 0xbf, 0xd4, 0x6a, 0x95, 0x76, 0x50, 0xfc, 0x3d, 0x84,
+	0x83, 0xf6, 0x95, 0x5d, 0x42, 0x58, 0x60, 0x2d, 0xbe, 0x45, 0x41, 0x67, 0xf3, 0x72, 0x4b, 0x1b,
+	0x7e, 0xd5, 0x42, 0x69, 0xcf, 0xb6, 0x26, 0x22, 0xd3, 0x86, 0xa2, 0xbd, 0xfb, 0x99, 0xbc, 0x6b,
+	0xa1, 0xb4, 0x67, 0x59, 0x05, 0xcc, 0xa0, 0x6d, 0xb4, 0xb2, 0x78, 0x93, 0x09, 0x55, 0xdc, 0xca,
+	0x82, 0x2a, 0xdf, 0xdd, 0xeb, 0x6d, 0x1d, 0x53, 0xef, 0x70, 0x31, 0x18, 0xa4, 0xc7, 0xe6, 0xef,
+	0xa3, 0x78, 0x03, 0x61, 0x17, 0x9f, 0x9d, 0x03, 0x34, 0x68, 0x72, 0x54, 0x24, 0x4a, 0xf4, 0x13,
+	0x98, 0xf1, 0x7e, 0x09, 0xf8, 0xb0, 0x04, 0xfc, 0x4a, 0xbb, 0xac, 0xc6, 0x8f, 0xa2, 0x76, 0x98,
+	0xfe, 0xa1, 0x67, 0x09, 0x84, 0x9b, 0xf6, 0xd0, 0x77, 0xfd, 0x78, 0x0a, 0xfa, 0xdd, 0x4b, 0x7b,
+	0x5d, 0xfc, 0x23, 0x80, 0xb0, 0x6b, 0x79, 0xc7, 0xc2, 0xe7, 0x00, 0x15, 0x51, 0xb3, 0x24, 0x41,
+	0xce, 0xfa, 0xea, 0x53, 0xfa, 0xc3, 0xb5, 0xa2, 0xb3, 0x85, 0xa7, 0xef, 0xf4, 0xf1, 0xcf, 0x00,
+	0x8e, 0x27, 0x63, 0xda, 0x31, 0xd1, 0x02, 0xc2, 0x5a, 0xae, 0x25, 0xfd, 0x37, 0xcc, 0x92, 0x8c,
+	0x54, 0x65, 0x0f, 0xf6, 0xd2, 0x8b, 0x17, 0x9f, 0xe6, 0xa5, 0xa4, 0xca, 0x65, 0x3c, 0xd7, 0xeb,
+	0xa4, 0xfd, 0xbe, 0xd5, 0xd7, 0xee, 0x91, 0x88, 0x46, 0x26, 0xa3, 0xff, 0x34, 0x3b, 0xec, 0x8c,
+	0xce, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0x5d, 0xb2, 0x7f, 0x68, 0x18, 0x04, 0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/fault_injection.proto b/api/mesh/v1alpha1/fault_injection.proto
index bd5d6bb18..9903dc25e 100644
--- a/api/mesh/v1alpha1/fault_injection.proto
+++ b/api/mesh/v1alpha1/fault_injection.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "google/protobuf/duration.proto";
 import "mesh/v1alpha1/selector.proto";
diff --git a/api/mesh/v1alpha1/health_check.pb.go b/api/mesh/v1alpha1/health_check.pb.go
index a8f4c5e69..0729efcc6 100644
--- a/api/mesh/v1alpha1/health_check.pb.go
+++ b/api/mesh/v1alpha1/health_check.pb.go
@@ -8,7 +8,6 @@ import (
 	_ "github.com/envoyproxy/protoc-gen-validate/validate"
 	proto "github.com/golang/protobuf/proto"
 	duration "github.com/golang/protobuf/ptypes/duration"
-	_ "github.com/golang/protobuf/ptypes/wrappers"
 	math "math"
 )
 
@@ -160,27 +159,28 @@ func init() {
 func init() { proto.RegisterFile("mesh/v1alpha1/health_check.proto", fileDescriptor_a4f9382814224e98) }
 
 var fileDescriptor_a4f9382814224e98 = []byte{
-	// 350 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xb1, 0x4e, 0xeb, 0x30,
-	0x14, 0x86, 0xeb, 0x34, 0xf7, 0x26, 0x72, 0x41, 0x02, 0x33, 0x10, 0xaa, 0x0a, 0x45, 0x88, 0xa1,
-	0xea, 0xe0, 0xa8, 0x85, 0xa1, 0x1b, 0x90, 0x32, 0x20, 0xc6, 0xc0, 0xc4, 0x52, 0xb9, 0x89, 0xdb,
-	0x44, 0x75, 0xe3, 0xc8, 0x76, 0x8a, 0x78, 0x0d, 0x1e, 0x83, 0xc7, 0xe1, 0x71, 0x32, 0xa1, 0x3a,
-	0x75, 0x45, 0x29, 0x0c, 0xdd, 0x72, 0x74, 0xce, 0xf7, 0xeb, 0xcb, 0x2f, 0x43, 0x7f, 0x41, 0x65,
-	0x1a, 0x2c, 0xfb, 0x84, 0x15, 0x29, 0xe9, 0x07, 0x29, 0x25, 0x4c, 0xa5, 0xe3, 0x38, 0xa5, 0xf1,
-	0x1c, 0x17, 0x82, 0x2b, 0x8e, 0xd0, 0xbc, 0x5c, 0x10, 0xbc, 0x3a, 0xc3, 0xe6, 0xac, 0xdd, 0xd9,
-	0xa6, 0x24, 0x65, 0x34, 0x56, 0x5c, 0xd4, 0x44, 0xfb, 0x7c, 0xc6, 0xf9, 0x8c, 0xd1, 0x40, 0x4f,
-	0x93, 0x72, 0x1a, 0x24, 0xa5, 0x20, 0x2a, 0xe3, 0xf9, 0x5f, 0xfb, 0x57, 0x41, 0x8a, 0x82, 0x0a,
-	0xb9, 0xde, 0x9f, 0x2e, 0x09, 0xcb, 0x12, 0xa2, 0x68, 0x60, 0x3e, 0xea, 0xc5, 0xc5, 0x67, 0x13,
-	0xb6, 0x1e, 0xb4, 0xe1, 0x68, 0x25, 0x88, 0x6e, 0xa1, 0x23, 0x79, 0x29, 0x62, 0x2a, 0x3d, 0xe0,
-	0x37, 0xbb, 0xad, 0x41, 0x07, 0xef, 0xca, 0xe2, 0xa7, 0xb5, 0x5d, 0xe8, 0x56, 0xe1, 0xbf, 0x77,
-	0x60, 0xb9, 0x20, 0x32, 0x18, 0x7a, 0x84, 0x07, 0x09, 0x95, 0x2a, 0xcb, 0xb5, 0x9f, 0xf4, 0xac,
-	0xbd, 0x62, 0xb6, 0x58, 0x34, 0x84, 0x76, 0xcc, 0xf3, 0xa9, 0xd7, 0xf4, 0x41, 0xb7, 0x35, 0xb8,
-	0xfc, 0x2d, 0xe3, 0x9b, 0x3c, 0x1e, 0xf1, 0x7c, 0x1a, 0x69, 0xa2, 0x5d, 0x01, 0x68, 0xaf, 0x46,
-	0x74, 0x07, 0xdd, 0x2c, 0x57, 0x54, 0x2c, 0x09, 0xf3, 0x80, 0x8e, 0x39, 0xc3, 0x75, 0x59, 0xd8,
-	0x94, 0x85, 0xef, 0xd7, 0x65, 0x86, 0xb0, 0x0a, 0x9d, 0x0f, 0x60, 0xbb, 0xa0, 0xd7, 0x88, 0x36,
-	0x18, 0xba, 0x81, 0x8e, 0xca, 0x16, 0x94, 0x97, 0xca, 0xb3, 0xf6, 0x49, 0x30, 0x14, 0x1a, 0xc2,
-	0x93, 0x32, 0xaf, 0xdf, 0xc1, 0xdb, 0x58, 0xa5, 0x82, 0xca, 0x94, 0xb3, 0x44, 0xff, 0xd5, 0x61,
-	0xe8, 0x54, 0xa1, 0xdd, 0xb3, 0xfc, 0x46, 0x84, 0x36, 0x37, 0xcf, 0xe6, 0x04, 0x5d, 0xc3, 0xe3,
-	0x5d, 0xce, 0xde, 0xe6, 0x8e, 0x7e, 0x52, 0x21, 0x7c, 0x71, 0x4d, 0x3f, 0x93, 0xff, 0xda, 0xf1,
-	0xea, 0x2b, 0x00, 0x00, 0xff, 0xff, 0xda, 0xb9, 0x4f, 0x77, 0x96, 0x02, 0x00, 0x00,
+	// 359 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xc1, 0x4e, 0x83, 0x30,
+	0x1c, 0xc6, 0x57, 0x86, 0x42, 0x3a, 0x4d, 0xb4, 0x1e, 0xc4, 0x65, 0x31, 0xc4, 0x78, 0x58, 0x76,
+	0x68, 0xb3, 0xe9, 0x61, 0x37, 0x95, 0x79, 0x30, 0x1e, 0xd1, 0x93, 0x97, 0xa5, 0x83, 0x6e, 0x25,
+	0x03, 0x3a, 0xa1, 0x5d, 0xe2, 0x6b, 0xf8, 0x18, 0x3e, 0x8e, 0x8f, 0xc3, 0xc9, 0x50, 0xc6, 0x22,
+	0xce, 0xcb, 0x4e, 0xd0, 0xf4, 0xfb, 0x7d, 0xff, 0xef, 0xff, 0x01, 0x74, 0x13, 0x96, 0x73, 0xb2,
+	0x1e, 0xd2, 0x78, 0xc5, 0xe9, 0x90, 0x70, 0x46, 0x63, 0xc9, 0xa7, 0x01, 0x67, 0xc1, 0x12, 0xaf,
+	0x32, 0x21, 0x05, 0x42, 0x4b, 0x95, 0x50, 0x5c, 0xca, 0x70, 0x2d, 0xeb, 0xf6, 0x9a, 0x54, 0xce,
+	0x62, 0x16, 0x48, 0x91, 0x55, 0x44, 0xf7, 0x72, 0x21, 0xc4, 0x22, 0x66, 0x44, 0x9f, 0x66, 0x6a,
+	0x4e, 0x42, 0x95, 0x51, 0x19, 0x89, 0x74, 0x73, 0x7f, 0xbe, 0xa6, 0x71, 0x14, 0x52, 0xc9, 0x48,
+	0xfd, 0x52, 0x5d, 0x5c, 0x7d, 0xb7, 0x61, 0xe7, 0x49, 0x27, 0x98, 0x94, 0x01, 0xd0, 0x3d, 0xb4,
+	0x72, 0xa1, 0xb2, 0x80, 0xe5, 0x0e, 0x70, 0xdb, 0xfd, 0xce, 0xa8, 0x87, 0x77, 0xc3, 0xe0, 0x97,
+	0xcd, 0x74, 0xcf, 0x2e, 0xbc, 0x83, 0x4f, 0x60, 0xd8, 0xc0, 0xaf, 0x31, 0xf4, 0x0c, 0x8f, 0x42,
+	0x96, 0xcb, 0x28, 0xd5, 0xf3, 0x73, 0xc7, 0xd8, 0xcb, 0xa6, 0xc1, 0xa2, 0x31, 0x34, 0x03, 0x91,
+	0xce, 0x9d, 0xb6, 0x0b, 0xfa, 0x9d, 0xd1, 0xf5, 0x7f, 0x1e, 0xbf, 0xc2, 0xe3, 0x89, 0x48, 0xe7,
+	0xbe, 0x26, 0xba, 0x05, 0x80, 0x66, 0x79, 0x44, 0x0f, 0xd0, 0x8e, 0x52, 0xc9, 0xb2, 0x35, 0x8d,
+	0x1d, 0xa0, 0x6d, 0x2e, 0x70, 0x55, 0x16, 0xae, 0xcb, 0xc2, 0x8f, 0x9b, 0xb2, 0x3c, 0x58, 0x78,
+	0xd6, 0x17, 0x30, 0x6d, 0x30, 0x68, 0xf9, 0x5b, 0x0c, 0xdd, 0x41, 0x4b, 0x46, 0x09, 0x13, 0x4a,
+	0x3a, 0xc6, 0x3e, 0x0e, 0x35, 0x85, 0xc6, 0xf0, 0x4c, 0xa5, 0xd5, 0x77, 0xfe, 0x98, 0x4a, 0x9e,
+	0xb1, 0x9c, 0x8b, 0x38, 0xd4, 0x5b, 0x1d, 0x7b, 0x56, 0xe1, 0x99, 0x03, 0xc3, 0x6d, 0xf9, 0x68,
+	0xab, 0x79, 0xad, 0x25, 0xe8, 0x16, 0x9e, 0xee, 0x72, 0x66, 0x93, 0x3b, 0xf9, 0x4b, 0x79, 0x83,
+	0xb7, 0xfe, 0x22, 0x92, 0x5c, 0xcd, 0x70, 0x20, 0x12, 0x52, 0x96, 0xc6, 0xdf, 0xf5, 0x83, 0xd0,
+	0x55, 0x44, 0x1a, 0x3f, 0xd2, 0xec, 0x50, 0xef, 0x70, 0xf3, 0x13, 0x00, 0x00, 0xff, 0xff, 0xe5,
+	0x9e, 0x3f, 0x14, 0x96, 0x02, 0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/health_check.pb.validate.go b/api/mesh/v1alpha1/health_check.pb.validate.go
deleted file mode 100644
index 6eb679113..000000000
--- a/api/mesh/v1alpha1/health_check.pb.validate.go
+++ /dev/null
@@ -1,291 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: mesh/v1alpha1/health_check.proto
-
-package v1alpha1
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"net"
-	"net/mail"
-	"net/url"
-	"regexp"
-	"strings"
-	"time"
-	"unicode/utf8"
-
-	"github.com/golang/protobuf/ptypes"
-)
-
-// ensure the imports are used
-var (
-	_ = bytes.MinRead
-	_ = errors.New("")
-	_ = fmt.Print
-	_ = utf8.UTFMax
-	_ = (*regexp.Regexp)(nil)
-	_ = (*strings.Reader)(nil)
-	_ = net.IPv4len
-	_ = time.Duration(0)
-	_ = (*url.URL)(nil)
-	_ = (*mail.Address)(nil)
-	_ = ptypes.DynamicAny{}
-)
-
-// define the regex for a UUID once up-front
-var _health_check_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")
-
-// Validate checks the field values on HealthCheck with the rules defined in
-// the proto definition for this message. If any rules are violated, an error
-// is returned.
-func (m *HealthCheck) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if len(m.GetSources()) < 1 {
-		return HealthCheckValidationError{
-			field:  "Sources",
-			reason: "value must contain at least 1 item(s)",
-		}
-	}
-
-	for idx, item := range m.GetSources() {
-		_, _ = idx, item
-
-		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return HealthCheckValidationError{
-					field:  fmt.Sprintf("Sources[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	if len(m.GetDestinations()) < 1 {
-		return HealthCheckValidationError{
-			field:  "Destinations",
-			reason: "value must contain at least 1 item(s)",
-		}
-	}
-
-	for idx, item := range m.GetDestinations() {
-		_, _ = idx, item
-
-		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return HealthCheckValidationError{
-					field:  fmt.Sprintf("Destinations[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	if v, ok := interface{}(m.GetConf()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return HealthCheckValidationError{
-				field:  "Conf",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// HealthCheckValidationError is the validation error returned by
-// HealthCheck.Validate if the designated constraints aren't met.
-type HealthCheckValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e HealthCheckValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e HealthCheckValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e HealthCheckValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e HealthCheckValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e HealthCheckValidationError) ErrorName() string { return "HealthCheckValidationError" }
-
-// Error satisfies the builtin error interface
-func (e HealthCheckValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sHealthCheck.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = HealthCheckValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = HealthCheckValidationError{}
-
-// Validate checks the field values on HealthCheck_Conf with the rules defined
-// in the proto definition for this message. If any rules are violated, an
-// error is returned.
-func (m *HealthCheck_Conf) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if m.GetInterval() == nil {
-		return HealthCheck_ConfValidationError{
-			field:  "Interval",
-			reason: "value is required",
-		}
-	}
-
-	if d := m.GetInterval(); d != nil {
-		dur, err := ptypes.Duration(d)
-		if err != nil {
-			return HealthCheck_ConfValidationError{
-				field:  "Interval",
-				reason: "value is not a valid duration",
-				cause:  err,
-			}
-		}
-
-		gt := time.Duration(0*time.Second + 0*time.Nanosecond)
-
-		if dur <= gt {
-			return HealthCheck_ConfValidationError{
-				field:  "Interval",
-				reason: "value must be greater than 0s",
-			}
-		}
-
-	}
-
-	if m.GetTimeout() == nil {
-		return HealthCheck_ConfValidationError{
-			field:  "Timeout",
-			reason: "value is required",
-		}
-	}
-
-	if d := m.GetTimeout(); d != nil {
-		dur, err := ptypes.Duration(d)
-		if err != nil {
-			return HealthCheck_ConfValidationError{
-				field:  "Timeout",
-				reason: "value is not a valid duration",
-				cause:  err,
-			}
-		}
-
-		gt := time.Duration(0*time.Second + 0*time.Nanosecond)
-
-		if dur <= gt {
-			return HealthCheck_ConfValidationError{
-				field:  "Timeout",
-				reason: "value must be greater than 0s",
-			}
-		}
-
-	}
-
-	if m.GetUnhealthyThreshold() <= 0 {
-		return HealthCheck_ConfValidationError{
-			field:  "UnhealthyThreshold",
-			reason: "value must be greater than 0",
-		}
-	}
-
-	if m.GetHealthyThreshold() <= 0 {
-		return HealthCheck_ConfValidationError{
-			field:  "HealthyThreshold",
-			reason: "value must be greater than 0",
-		}
-	}
-
-	return nil
-}
-
-// HealthCheck_ConfValidationError is the validation error returned by
-// HealthCheck_Conf.Validate if the designated constraints aren't met.
-type HealthCheck_ConfValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e HealthCheck_ConfValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e HealthCheck_ConfValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e HealthCheck_ConfValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e HealthCheck_ConfValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e HealthCheck_ConfValidationError) ErrorName() string { return "HealthCheck_ConfValidationError" }
-
-// Error satisfies the builtin error interface
-func (e HealthCheck_ConfValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sHealthCheck_Conf.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = HealthCheck_ConfValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = HealthCheck_ConfValidationError{}
diff --git a/api/mesh/v1alpha1/health_check.proto b/api/mesh/v1alpha1/health_check.proto
index 9b65794e2..95cdf1701 100644
--- a/api/mesh/v1alpha1/health_check.proto
+++ b/api/mesh/v1alpha1/health_check.proto
@@ -2,13 +2,11 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "mesh/v1alpha1/selector.proto";
 
 import "google/protobuf/duration.proto";
-import "google/protobuf/wrappers.proto";
-
 import "validate/validate.proto";
 
 // HealthCheck defines configuration for health checking.
diff --git a/api/mesh/v1alpha1/kds.pb.go b/api/mesh/v1alpha1/kds.pb.go
index d3fea7292..67f17618b 100644
--- a/api/mesh/v1alpha1/kds.pb.go
+++ b/api/mesh/v1alpha1/kds.pb.go
@@ -153,31 +153,32 @@ func init() {
 func init() { proto.RegisterFile("mesh/v1alpha1/kds.proto", fileDescriptor_5c4a288324484b61) }
 
 var fileDescriptor_5c4a288324484b61 = []byte{
-	// 381 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x52, 0xcb, 0x4e, 0xf2, 0x40,
-	0x14, 0x4e, 0xf9, 0xfb, 0x5f, 0x98, 0x1f, 0x13, 0x1d, 0x49, 0xac, 0x8d, 0x11, 0xe3, 0x25, 0x61,
-	0x35, 0x95, 0xba, 0x72, 0x65, 0x34, 0x44, 0x17, 0xc6, 0x4d, 0xd1, 0x0d, 0x1b, 0x33, 0x0c, 0x07,
-	0x98, 0xc0, 0x74, 0x6a, 0x67, 0xda, 0x84, 0x97, 0xf2, 0x39, 0x5c, 0xfb, 0x44, 0xa6, 0x07, 0x6a,
-	0x2a, 0x44, 0xdd, 0xb8, 0x3b, 0x3d, 0xdf, 0xed, 0xf4, 0x6b, 0xc9, 0x8e, 0x02, 0x33, 0x09, 0xf2,
-	0x0e, 0x9f, 0x25, 0x13, 0xde, 0x09, 0xa6, 0x43, 0xc3, 0x92, 0x54, 0x5b, 0x4d, 0xe9, 0x34, 0x53,
-	0x9c, 0x15, 0x28, 0x2b, 0x51, 0xbf, 0x35, 0xd6, 0x7a, 0x3c, 0x83, 0x00, 0x19, 0x83, 0x6c, 0x14,
-	0x58, 0xa9, 0xc0, 0x58, 0xae, 0x92, 0x85, 0xc8, 0xdf, 0x83, 0x38, 0xd7, 0xf3, 0x80, 0x27, 0x32,
-	0xc8, 0xc3, 0x60, 0x28, 0x8d, 0xd0, 0x39, 0xa4, 0xf3, 0x25, 0xba, 0xbb, 0x2a, 0xe7, 0xf1, 0x12,
-	0x3a, 0x7c, 0xa9, 0x91, 0xc6, 0x6d, 0xa6, 0x78, 0x04, 0x46, 0x67, 0xa9, 0x00, 0x7a, 0x4e, 0x5c,
-	0x05, 0x96, 0x7b, 0xce, 0x81, 0xd3, 0xfe, 0x1f, 0x9e, 0xb0, 0xf5, 0x6b, 0x58, 0x95, 0xcf, 0xee,
-	0xc0, 0xf2, 0x08, 0x25, 0xb4, 0x4d, 0x5c, 0x93, 0x80, 0xf0, 0x6a, 0x28, 0x6d, 0xb2, 0x45, 0x2a,
-	0x2b, 0x53, 0xd9, 0x65, 0x3c, 0x8f, 0x90, 0xe1, 0xbf, 0x3a, 0xc4, 0x2d, 0x84, 0x94, 0x12, 0x37,
-	0xe6, 0x0a, 0x30, 0xad, 0x1e, 0xe1, 0x5c, 0xec, 0x8a, 0x3c, 0xb4, 0xa9, 0x47, 0x38, 0xd3, 0x0b,
-	0xb2, 0x21, 0x52, 0xe0, 0x56, 0xea, 0xf8, 0xb1, 0x78, 0x77, 0xef, 0x17, 0x66, 0xf8, 0x6b, 0x19,
-	0xf7, 0x65, 0x31, 0x51, 0xa3, 0x14, 0x14, 0x2b, 0x7a, 0x43, 0xb6, 0x94, 0x1e, 0xca, 0x91, 0x14,
-	0x15, 0x13, 0xf7, 0x5b, 0x93, 0xcd, 0xaa, 0x08, 0x8d, 0x3c, 0xf2, 0x37, 0x87, 0xd4, 0x48, 0x1d,
-	0x7b, 0xbf, 0xf1, 0xc0, 0xf2, 0x31, 0x7c, 0xae, 0x91, 0x66, 0x51, 0x4d, 0xb7, 0x6c, 0xbf, 0x07,
-	0x69, 0x2e, 0x05, 0x50, 0x41, 0x68, 0x17, 0x66, 0x96, 0x57, 0x7b, 0x33, 0xf4, 0x88, 0xe1, 0x37,
-	0x63, 0x3c, 0x91, 0x2c, 0x0f, 0x19, 0x32, 0xde, 0xa5, 0x11, 0x3c, 0x65, 0x60, 0xac, 0x7f, 0xfc,
-	0x35, 0xc9, 0x24, 0x3a, 0x36, 0xd0, 0x76, 0x4e, 0x1d, 0xda, 0x27, 0xdb, 0x3d, 0x9b, 0x02, 0x57,
-	0x1f, 0x53, 0xf6, 0x57, 0x0c, 0x56, 0x03, 0x5a, 0x9f, 0xe2, 0x15, 0xef, 0x07, 0x42, 0xaf, 0xc1,
-	0x8a, 0xc9, 0xcf, 0x5a, 0x5f, 0x91, 0xfe, 0xbf, 0xf2, 0x9f, 0x1a, 0xfc, 0xc1, 0xf2, 0xcf, 0xde,
-	0x02, 0x00, 0x00, 0xff, 0xff, 0xd8, 0x0c, 0x25, 0xe8, 0x17, 0x03, 0x00, 0x00,
+	// 400 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x53, 0x3d, 0x8f, 0xd3, 0x30,
+	0x18, 0x56, 0x4a, 0x00, 0xd5, 0x14, 0x09, 0x4c, 0x25, 0x42, 0x84, 0x28, 0xe2, 0x43, 0x8a, 0x18,
+	0x6c, 0x1a, 0x26, 0x26, 0x04, 0xaa, 0x60, 0x40, 0x2c, 0x29, 0x2c, 0x5d, 0x90, 0xeb, 0xbe, 0x6d,
+	0xac, 0xd6, 0x71, 0x1a, 0x3b, 0x91, 0xfa, 0xa7, 0xf8, 0x1d, 0xcc, 0xf7, 0x8b, 0x4e, 0x7e, 0xdb,
+	0x9c, 0xd2, 0x56, 0x77, 0xb7, 0xdc, 0x14, 0xc7, 0xcf, 0x97, 0xf3, 0xf8, 0x0d, 0x79, 0xae, 0xc1,
+	0xe6, 0xbc, 0x19, 0x8b, 0x4d, 0x99, 0x8b, 0x31, 0x5f, 0x2f, 0x2c, 0x2b, 0x2b, 0xe3, 0x0c, 0xa5,
+	0xeb, 0x5a, 0x0b, 0xe6, 0x51, 0xd6, 0xa2, 0xf1, 0x68, 0x65, 0xcc, 0x6a, 0x03, 0x1c, 0x19, 0xf3,
+	0x7a, 0xc9, 0x9d, 0xd2, 0x60, 0x9d, 0xd0, 0xe5, 0x5e, 0x14, 0xbf, 0x84, 0xa2, 0x31, 0x3b, 0x2e,
+	0x4a, 0xc5, 0x9b, 0x94, 0x2f, 0x94, 0x95, 0xa6, 0x81, 0x6a, 0x77, 0x40, 0x5f, 0x9c, 0xca, 0x45,
+	0x71, 0x80, 0xde, 0xfc, 0xef, 0x91, 0xc1, 0xcf, 0x5a, 0x8b, 0x0c, 0xac, 0xa9, 0x2b, 0x09, 0xf4,
+	0x33, 0x09, 0x35, 0x38, 0x11, 0x05, 0xaf, 0x83, 0xe4, 0x51, 0xfa, 0x9e, 0x9d, 0x9f, 0x86, 0x75,
+	0xf9, 0xec, 0x17, 0x38, 0x91, 0xa1, 0x84, 0x26, 0x24, 0xb4, 0x25, 0xc8, 0xa8, 0x87, 0xd2, 0x21,
+	0xdb, 0xa7, 0xb2, 0x36, 0x95, 0x7d, 0x2d, 0x76, 0x19, 0x32, 0xe2, 0x8b, 0x80, 0x84, 0x5e, 0x48,
+	0x29, 0x09, 0x0b, 0xa1, 0x01, 0xd3, 0xfa, 0x19, 0xae, 0xfd, 0x9e, 0xcf, 0x43, 0x9b, 0x7e, 0x86,
+	0x6b, 0xfa, 0x85, 0x3c, 0x96, 0x15, 0x08, 0xa7, 0x4c, 0xf1, 0xd7, 0x7f, 0x7b, 0x74, 0x0f, 0x33,
+	0xe2, 0xb3, 0x8c, 0xdf, 0x6d, 0x31, 0xd9, 0xa0, 0x15, 0xf8, 0x2d, 0xfa, 0x83, 0x3c, 0xd5, 0x66,
+	0xa1, 0x96, 0x4a, 0x76, 0x4c, 0xc2, 0x5b, 0x4d, 0x9e, 0x74, 0x45, 0x68, 0x14, 0x91, 0x87, 0x0d,
+	0x54, 0x56, 0x99, 0x22, 0xba, 0x8f, 0x07, 0x6c, 0x5f, 0xd3, 0x7f, 0x3d, 0x32, 0xf4, 0xd5, 0x4c,
+	0xda, 0xf6, 0xa7, 0x50, 0x35, 0x4a, 0x02, 0x95, 0x84, 0x4e, 0x60, 0xe3, 0x44, 0xb7, 0x37, 0x4b,
+	0xdf, 0x32, 0xbc, 0x33, 0x26, 0x4a, 0xc5, 0x9a, 0x94, 0x21, 0xe3, 0x4a, 0x9a, 0xc1, 0xb6, 0x06,
+	0xeb, 0xe2, 0x77, 0x37, 0x93, 0x6c, 0x69, 0x0a, 0x0b, 0x49, 0xf0, 0x31, 0xa0, 0x33, 0xf2, 0x6c,
+	0xea, 0x2a, 0x10, 0xfa, 0x38, 0xe5, 0xd5, 0x89, 0xc1, 0x69, 0xc0, 0xe8, 0x5a, 0xbc, 0xe3, 0xfd,
+	0x87, 0xd0, 0xef, 0xe0, 0x64, 0x7e, 0xb7, 0xd6, 0xdf, 0x3e, 0xcc, 0x92, 0x95, 0x72, 0x79, 0x3d,
+	0x67, 0xd2, 0x68, 0xee, 0x07, 0x2d, 0xdf, 0xe2, 0x03, 0xe7, 0xf8, 0xe8, 0xff, 0x98, 0x3f, 0xc0,
+	0xcb, 0xf9, 0x74, 0x19, 0x00, 0x00, 0xff, 0xff, 0x88, 0x0a, 0xc1, 0xd2, 0x37, 0x03, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
diff --git a/api/mesh/v1alpha1/kds.pb.validate.go b/api/mesh/v1alpha1/kds.pb.validate.go
deleted file mode 100644
index 72d3e0553..000000000
--- a/api/mesh/v1alpha1/kds.pb.validate.go
+++ /dev/null
@@ -1,215 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: mesh/v1alpha1/kds.proto
-
-package v1alpha1
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"net"
-	"net/mail"
-	"net/url"
-	"regexp"
-	"strings"
-	"time"
-	"unicode/utf8"
-
-	"github.com/golang/protobuf/ptypes"
-)
-
-// ensure the imports are used
-var (
-	_ = bytes.MinRead
-	_ = errors.New("")
-	_ = fmt.Print
-	_ = utf8.UTFMax
-	_ = (*regexp.Regexp)(nil)
-	_ = (*strings.Reader)(nil)
-	_ = net.IPv4len
-	_ = time.Duration(0)
-	_ = (*url.URL)(nil)
-	_ = (*mail.Address)(nil)
-	_ = ptypes.DynamicAny{}
-)
-
-// define the regex for a UUID once up-front
-var _kds_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")
-
-// Validate checks the field values on KumaResource with the rules defined in
-// the proto definition for this message. If any rules are violated, an error
-// is returned.
-func (m *KumaResource) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return KumaResourceValidationError{
-				field:  "Meta",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if v, ok := interface{}(m.GetSpec()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return KumaResourceValidationError{
-				field:  "Spec",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// KumaResourceValidationError is the validation error returned by
-// KumaResource.Validate if the designated constraints aren't met.
-type KumaResourceValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e KumaResourceValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e KumaResourceValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e KumaResourceValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e KumaResourceValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e KumaResourceValidationError) ErrorName() string { return "KumaResourceValidationError" }
-
-// Error satisfies the builtin error interface
-func (e KumaResourceValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sKumaResource.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = KumaResourceValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = KumaResourceValidationError{}
-
-// Validate checks the field values on KumaResource_Meta with the rules defined
-// in the proto definition for this message. If any rules are violated, an
-// error is returned.
-func (m *KumaResource_Meta) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Name
-
-	// no validation rules for Mesh
-
-	if v, ok := interface{}(m.GetCreationTime()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return KumaResource_MetaValidationError{
-				field:  "CreationTime",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if v, ok := interface{}(m.GetModificationTime()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return KumaResource_MetaValidationError{
-				field:  "ModificationTime",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	// no validation rules for Version
-
-	return nil
-}
-
-// KumaResource_MetaValidationError is the validation error returned by
-// KumaResource_Meta.Validate if the designated constraints aren't met.
-type KumaResource_MetaValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e KumaResource_MetaValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e KumaResource_MetaValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e KumaResource_MetaValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e KumaResource_MetaValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e KumaResource_MetaValidationError) ErrorName() string {
-	return "KumaResource_MetaValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e KumaResource_MetaValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sKumaResource_Meta.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = KumaResource_MetaValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = KumaResource_MetaValidationError{}
diff --git a/api/mesh/v1alpha1/kds.proto b/api/mesh/v1alpha1/kds.proto
index 625cb877c..f03f0e6db 100644
--- a/api/mesh/v1alpha1/kds.proto
+++ b/api/mesh/v1alpha1/kds.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "google/protobuf/timestamp.proto";
 import "envoy/api/v2/discovery.proto";
@@ -30,4 +30,4 @@ message KumaResource {
   }
   Meta meta = 1;
   google.protobuf.Any spec = 2;
-}
\ No newline at end of file
+}
diff --git a/api/mesh/v1alpha1/mesh.pb.go b/api/mesh/v1alpha1/mesh.pb.go
index 99211188e..3c093de3a 100644
--- a/api/mesh/v1alpha1/mesh.pb.go
+++ b/api/mesh/v1alpha1/mesh.pb.go
@@ -848,50 +848,52 @@ func init() {
 func init() { proto.RegisterFile("mesh/v1alpha1/mesh.proto", fileDescriptor_ae9b3cd8c92bbf6a) }
 
 var fileDescriptor_ae9b3cd8c92bbf6a = []byte{
-	// 718 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xcf, 0x6f, 0xd3, 0x30,
-	0x14, 0x56, 0xd7, 0xd2, 0x66, 0xaf, 0x62, 0x42, 0x3e, 0xb0, 0x2a, 0x1b, 0xd3, 0x14, 0x21, 0x98,
-	0x40, 0x4a, 0xd5, 0x4e, 0xa0, 0x1d, 0xd0, 0xd0, 0xba, 0x09, 0x31, 0xb1, 0x0d, 0xc9, 0x4c, 0x3b,
-	0x8c, 0x93, 0x9b, 0xb8, 0x89, 0x55, 0x37, 0x0e, 0x8e, 0xc3, 0x98, 0x10, 0x7f, 0x04, 0x67, 0x0e,
-	0xfc, 0x4f, 0x1c, 0xf8, 0x7b, 0x90, 0x1d, 0xa7, 0xeb, 0xaf, 0x55, 0x1a, 0x70, 0xb3, 0xdf, 0xfb,
-	0xbe, 0xe7, 0xcf, 0xef, 0x7d, 0x71, 0xa0, 0x35, 0xa2, 0x59, 0xdc, 0xfe, 0xdc, 0x21, 0x3c, 0x8d,
-	0x49, 0xa7, 0xad, 0x77, 0x7e, 0x2a, 0x85, 0x12, 0x08, 0x0d, 0xf3, 0x11, 0xf1, 0x4d, 0xa0, 0x4c,
-	0xbb, 0x1b, 0xb3, 0x68, 0x25, 0x59, 0x90, 0x15, 0x04, 0x77, 0x2b, 0x12, 0x22, 0xe2, 0xb4, 0x6d,
-	0x76, 0xfd, 0x7c, 0xd0, 0xbe, 0x92, 0x24, 0x4d, 0xa9, 0x2c, 0xf3, 0x9b, 0xb3, 0xf9, 0x4c, 0xc9,
-	0x3c, 0x50, 0x45, 0xd6, 0xfb, 0x55, 0x85, 0xda, 0x29, 0xcd, 0x62, 0xd4, 0x81, 0xda, 0x48, 0xf1,
-	0xac, 0x55, 0xd9, 0xae, 0xec, 0x34, 0xbb, 0x8f, 0xfc, 0x79, 0x19, 0xbe, 0xc6, 0xf9, 0xa7, 0x8a,
-	0x67, 0xd8, 0x40, 0xd1, 0x0b, 0x68, 0x28, 0x49, 0x02, 0x96, 0x44, 0xad, 0x15, 0xc3, 0xda, 0x58,
-	0xc4, 0x3a, 0x2f, 0x20, 0xb8, 0xc4, 0x6a, 0x1a, 0x17, 0x51, 0xa4, 0x69, 0xd5, 0xdb, 0x69, 0x27,
-	0x05, 0x04, 0x97, 0x58, 0x4d, 0xb3, 0x17, 0x6f, 0xd5, 0x6e, 0xa7, 0x9d, 0x16, 0x10, 0x5c, 0x62,
-	0xd1, 0x3e, 0x40, 0x42, 0xd5, 0x95, 0x90, 0x43, 0x7d, 0xe0, 0x3d, 0xc3, 0xdc, 0x5a, 0xc4, 0x3c,
-	0x1b, 0xa3, 0xf0, 0x04, 0x43, 0x1f, 0x2b, 0x45, 0xae, 0x34, 0xb9, 0x7e, 0xfb, 0xb1, 0xb8, 0x80,
-	0xe0, 0x12, 0xeb, 0x7e, 0x85, 0x9a, 0xee, 0x14, 0x7a, 0x02, 0x6b, 0x34, 0x21, 0x7d, 0x4e, 0xc3,
-	0x1e, 0x09, 0x86, 0x34, 0x09, 0x4d, 0x83, 0x57, 0xf1, 0x4c, 0x14, 0xbd, 0x03, 0xa7, 0x5f, 0x2c,
-	0xb3, 0xd6, 0xca, 0x76, 0x75, 0xa7, 0xd9, 0x6d, 0x2f, 0x3a, 0xe7, 0x90, 0x4a, 0xc5, 0x06, 0x2c,
-	0x20, 0x8a, 0x1e, 0xe4, 0x2a, 0x16, 0x92, 0xa9, 0x6b, 0x5b, 0x02, 0x8f, 0x0b, 0x78, 0xbf, 0x57,
-	0x60, 0x63, 0x09, 0x12, 0x21, 0xa8, 0x25, 0x64, 0x44, 0xad, 0x14, 0xb3, 0xd6, 0x31, 0x75, 0x9d,
-	0x52, 0x33, 0xc9, 0x55, 0x6c, 0xd6, 0xe8, 0x0c, 0xea, 0x61, 0xaa, 0x0b, 0xd9, 0x41, 0xbd, 0xbc,
-	0xa3, 0x24, 0xff, 0xc8, 0xb0, 0xb1, 0xad, 0x82, 0x9e, 0x43, 0x2d, 0x10, 0xc9, 0xc0, 0xce, 0x6f,
-	0xdd, 0x2f, 0x9c, 0xe9, 0x97, 0xce, 0xf4, 0x3f, 0x18, 0x67, 0x62, 0x03, 0x72, 0xbf, 0x57, 0xa0,
-	0x5e, 0xf0, 0xd1, 0x47, 0x70, 0xa4, 0x50, 0x44, 0x31, 0x91, 0x58, 0x7f, 0xbe, 0xfe, 0x3b, 0x25,
-	0x3e, 0xb6, 0x65, 0xf0, 0xb8, 0xa0, 0xfb, 0x0c, 0x9c, 0x32, 0x8a, 0xb6, 0x00, 0xe8, 0x97, 0x94,
-	0xc9, 0x9b, 0xa3, 0x56, 0xf1, 0x44, 0xc4, 0xfb, 0x51, 0x01, 0xb8, 0xf1, 0x09, 0x3a, 0x04, 0x47,
-	0xe4, 0xaa, 0x2f, 0x72, 0x3b, 0xd6, 0x66, 0xf7, 0xe9, 0x72, 0x67, 0xf9, 0xef, 0x2d, 0x1c, 0x8f,
-	0x89, 0xee, 0x5b, 0x70, 0xca, 0x28, 0x7a, 0x05, 0xcd, 0x94, 0x64, 0x99, 0x8a, 0xa5, 0xc8, 0xa3,
-	0xd8, 0xd6, 0x74, 0xe7, 0xfa, 0xd4, 0x13, 0x82, 0x5f, 0x10, 0x9e, 0x53, 0x3c, 0x09, 0xf7, 0x3e,
-	0x41, 0xc3, 0x7e, 0x6c, 0xda, 0x76, 0x21, 0x1d, 0x90, 0x9c, 0xab, 0x19, 0xdb, 0x4d, 0x47, 0xd1,
-	0xfe, 0x9c, 0xed, 0xbc, 0x25, 0xdf, 0xf0, 0xbc, 0xd3, 0x7e, 0x56, 0x60, 0x6d, 0x3a, 0xb9, 0xd0,
-	0x5c, 0x7b, 0xe0, 0x64, 0x64, 0x94, 0xf2, 0x9b, 0xa7, 0x62, 0x73, 0xee, 0x52, 0x47, 0x22, 0xef,
-	0x73, 0x5a, 0x5c, 0x6b, 0x8c, 0x1e, 0xdb, 0xb2, 0x3a, 0x61, 0xcb, 0xbb, 0xd8, 0xc8, 0x53, 0xe0,
-	0x5e, 0xb2, 0x74, 0xc8, 0x92, 0x69, 0x99, 0x87, 0x22, 0x19, 0xb0, 0x08, 0x3d, 0x80, 0x6a, 0x2e,
-	0xb9, 0xd5, 0xaa, 0x97, 0xe8, 0x31, 0xdc, 0xd7, 0x0f, 0x15, 0x3d, 0x0e, 0x3b, 0xdd, 0xbd, 0x3e,
-	0x53, 0x46, 0xaf, 0x83, 0xa7, 0x83, 0xda, 0x28, 0x24, 0x65, 0x17, 0x54, 0x66, 0xda, 0x28, 0x85,
-	0xb8, 0x89, 0x88, 0x1e, 0x85, 0x7d, 0xc0, 0xfe, 0xf7, 0x28, 0x6c, 0xd9, 0xf9, 0x51, 0x7c, 0x83,
-	0xb5, 0xe9, 0xdc, 0xc2, 0x49, 0x3c, 0x84, 0xfa, 0x40, 0xc8, 0x11, 0x51, 0xf6, 0x43, 0xb7, 0xbb,
-	0x7f, 0xef, 0xb3, 0x0f, 0xad, 0x37, 0x8c, 0xd3, 0x69, 0x09, 0xb6, 0xcb, 0x08, 0x6a, 0x29, 0x51,
-	0x71, 0x29, 0x44, 0xaf, 0xbd, 0x5d, 0x58, 0x3f, 0x0f, 0xd2, 0x85, 0xf0, 0x16, 0x34, 0x48, 0x18,
-	0x4a, 0x9a, 0x65, 0x96, 0x51, 0x6e, 0xbd, 0x63, 0x68, 0xd8, 0x97, 0x16, 0xed, 0x83, 0xcb, 0x45,
-	0x40, 0x38, 0x53, 0xd7, 0x07, 0x57, 0x44, 0xd2, 0x13, 0x41, 0xc2, 0x1e, 0xe1, 0x24, 0x31, 0xff,
-	0xa3, 0x8a, 0x19, 0xda, 0x12, 0x44, 0x0f, 0x2e, 0x9d, 0xb2, 0xa7, 0xfd, 0xba, 0xb9, 0xd2, 0xee,
-	0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x26, 0x02, 0x0d, 0x5a, 0x96, 0x07, 0x00, 0x00,
+	// 741 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xcd, 0x6e, 0xdb, 0x38,
+	0x10, 0x86, 0x63, 0xaf, 0xed, 0x8c, 0xb1, 0xc1, 0x82, 0x87, 0x8d, 0xa1, 0x64, 0x83, 0x40, 0x58,
+	0xec, 0x06, 0x59, 0x40, 0x82, 0x1d, 0xec, 0x22, 0x87, 0x45, 0x8a, 0x38, 0x41, 0xd1, 0xa0, 0x49,
+	0x0a, 0xb0, 0x41, 0x0e, 0xe9, 0x89, 0x92, 0x68, 0x89, 0x30, 0x2d, 0x2a, 0x14, 0xd5, 0x34, 0x28,
+	0xfa, 0x10, 0x3d, 0xf7, 0xd0, 0x77, 0xea, 0xa1, 0xcf, 0x53, 0x90, 0xa2, 0x1c, 0xff, 0xc5, 0x40,
+	0xda, 0x9e, 0x44, 0xce, 0x7c, 0xdf, 0xcc, 0x70, 0xe6, 0x23, 0x05, 0xdd, 0x31, 0xcd, 0x13, 0xff,
+	0x6d, 0x8f, 0xf0, 0x2c, 0x21, 0x3d, 0x5f, 0xef, 0xbc, 0x4c, 0x0a, 0x25, 0x10, 0x1a, 0x15, 0x63,
+	0xe2, 0x19, 0x43, 0xe5, 0x76, 0xb6, 0xe6, 0xd1, 0x4a, 0xb2, 0x30, 0x2f, 0x09, 0xce, 0x4e, 0x2c,
+	0x44, 0xcc, 0xa9, 0x6f, 0x76, 0x41, 0x31, 0xf4, 0xef, 0x24, 0xc9, 0x32, 0x2a, 0x2b, 0xff, 0xf6,
+	0xbc, 0x3f, 0x57, 0xb2, 0x08, 0x55, 0xe9, 0x75, 0xbf, 0xd4, 0xa1, 0x71, 0x41, 0xf3, 0x04, 0xf5,
+	0xa0, 0x31, 0x56, 0x3c, 0xef, 0xd6, 0x76, 0x6b, 0x7b, 0x9d, 0xfe, 0x1f, 0xde, 0x62, 0x19, 0x9e,
+	0xc6, 0x79, 0x17, 0x8a, 0xe7, 0xd8, 0x40, 0xd1, 0xbf, 0xd0, 0x52, 0x92, 0x84, 0x2c, 0x8d, 0xbb,
+	0x6b, 0x86, 0xb5, 0xb5, 0x8c, 0x75, 0x55, 0x42, 0x70, 0x85, 0xd5, 0x34, 0x2e, 0xe2, 0x58, 0xd3,
+	0xea, 0x8f, 0xd3, 0xce, 0x4b, 0x08, 0xae, 0xb0, 0x9a, 0x66, 0x0f, 0xde, 0x6d, 0x3c, 0x4e, 0xbb,
+	0x28, 0x21, 0xb8, 0xc2, 0xa2, 0x23, 0x80, 0x94, 0xaa, 0x3b, 0x21, 0x47, 0x3a, 0xe1, 0x2f, 0x86,
+	0xb9, 0xb3, 0x8c, 0x79, 0x39, 0x41, 0xe1, 0x29, 0x86, 0x4e, 0x2b, 0x45, 0xa1, 0x34, 0xb9, 0xf9,
+	0x78, 0x5a, 0x5c, 0x42, 0x70, 0x85, 0x75, 0xde, 0x43, 0x43, 0x77, 0x0a, 0xfd, 0x05, 0x1b, 0x34,
+	0x25, 0x01, 0xa7, 0xd1, 0x80, 0x84, 0x23, 0x9a, 0x46, 0xa6, 0xc1, 0xeb, 0x78, 0xce, 0x8a, 0x5e,
+	0x42, 0x3b, 0x28, 0x97, 0x79, 0x77, 0x6d, 0xb7, 0xbe, 0xd7, 0xe9, 0xfb, 0xcb, 0xf2, 0x9c, 0x50,
+	0xa9, 0xd8, 0x90, 0x85, 0x44, 0xd1, 0xe3, 0x42, 0x25, 0x42, 0x32, 0x75, 0x6f, 0x43, 0xe0, 0x49,
+	0x00, 0xf7, 0xeb, 0x1a, 0x6c, 0xad, 0x40, 0x22, 0x04, 0x8d, 0x94, 0x8c, 0xa9, 0x2d, 0xc5, 0xac,
+	0xb5, 0x4d, 0xdd, 0x67, 0xd4, 0x4c, 0x72, 0x1d, 0x9b, 0x35, 0xba, 0x84, 0x66, 0x94, 0xe9, 0x40,
+	0x76, 0x50, 0xff, 0x3d, 0xb1, 0x24, 0xef, 0xd4, 0xb0, 0xb1, 0x8d, 0x82, 0xfe, 0x81, 0x46, 0x28,
+	0xd2, 0xa1, 0x9d, 0xdf, 0xa6, 0x57, 0x2a, 0xd3, 0xab, 0x94, 0xe9, 0xbd, 0x36, 0xca, 0xc4, 0x06,
+	0xe4, 0x7c, 0xac, 0x41, 0xb3, 0xe4, 0xa3, 0x37, 0xd0, 0x96, 0x42, 0x11, 0xc5, 0x44, 0x6a, 0xf5,
+	0xf9, 0xec, 0xfb, 0x2a, 0xf1, 0xb0, 0x0d, 0x83, 0x27, 0x01, 0x9d, 0x7d, 0x68, 0x57, 0x56, 0xb4,
+	0x03, 0x40, 0xdf, 0x65, 0x4c, 0x3e, 0xa4, 0x5a, 0xc7, 0x53, 0x16, 0xf7, 0x53, 0x0d, 0xe0, 0x41,
+	0x27, 0xe8, 0x04, 0xda, 0xa2, 0x50, 0x81, 0x28, 0xec, 0x58, 0x3b, 0xfd, 0xbf, 0x57, 0x2b, 0xcb,
+	0x7b, 0x65, 0xe1, 0x78, 0x42, 0x74, 0x5e, 0x40, 0xbb, 0xb2, 0xa2, 0xff, 0xa1, 0x93, 0x91, 0x3c,
+	0x57, 0x89, 0x14, 0x45, 0x9c, 0xd8, 0x98, 0xce, 0x42, 0x9f, 0x06, 0x42, 0xf0, 0x6b, 0xc2, 0x0b,
+	0x8a, 0xa7, 0xe1, 0xee, 0x2d, 0xb4, 0xec, 0x65, 0xd3, 0xb2, 0x8b, 0xe8, 0x90, 0x14, 0x5c, 0xcd,
+	0xc9, 0x6e, 0xd6, 0x8a, 0x8e, 0x16, 0x64, 0xe7, 0xae, 0xb8, 0xc3, 0x8b, 0x4a, 0xfb, 0x5c, 0x83,
+	0x8d, 0x59, 0xe7, 0x52, 0x71, 0x1d, 0x42, 0x3b, 0x27, 0xe3, 0x8c, 0x3f, 0x3c, 0x15, 0xdb, 0x0b,
+	0x87, 0x3a, 0x15, 0x45, 0xc0, 0x69, 0x79, 0xac, 0x09, 0x7a, 0x22, 0xcb, 0xfa, 0x94, 0x2c, 0x9f,
+	0x22, 0x23, 0x57, 0x81, 0x73, 0xc3, 0xb2, 0x11, 0x4b, 0x67, 0xcb, 0x3c, 0x11, 0xe9, 0x90, 0xc5,
+	0xe8, 0x37, 0xa8, 0x17, 0x92, 0xdb, 0x5a, 0xf5, 0x12, 0xfd, 0x09, 0xbf, 0xea, 0x87, 0x8a, 0x9e,
+	0x45, 0xbd, 0xfe, 0x61, 0xc0, 0x94, 0xa9, 0xb7, 0x8d, 0x67, 0x8d, 0x5a, 0x28, 0x24, 0x63, 0xd7,
+	0x54, 0xe6, 0x5a, 0x28, 0x65, 0x71, 0x53, 0x16, 0x3d, 0x0a, 0xfb, 0x80, 0xfd, 0xec, 0x51, 0xd8,
+	0xb0, 0x8b, 0xa3, 0xf8, 0x00, 0x1b, 0xb3, 0xbe, 0xa5, 0x93, 0xf8, 0x1d, 0x9a, 0x43, 0x21, 0xc7,
+	0x44, 0xd9, 0x8b, 0x6e, 0x77, 0x3f, 0xde, 0x67, 0x0f, 0xba, 0xcf, 0x19, 0xa7, 0xb3, 0x25, 0xd8,
+	0x2e, 0x23, 0x68, 0x64, 0x44, 0x25, 0x55, 0x21, 0x7a, 0xed, 0x1e, 0xc0, 0xe6, 0x55, 0x98, 0x2d,
+	0x85, 0x77, 0xa1, 0x45, 0xa2, 0x48, 0xd2, 0x3c, 0xb7, 0x8c, 0x6a, 0xeb, 0x9e, 0x41, 0xcb, 0xbe,
+	0xb4, 0xe8, 0x08, 0x1c, 0x2e, 0x42, 0xc2, 0x99, 0xba, 0x3f, 0xbe, 0x23, 0x92, 0x9e, 0x0b, 0x12,
+	0x0d, 0x08, 0x27, 0xa9, 0xf9, 0x1f, 0xd5, 0xcc, 0xd0, 0x56, 0x20, 0x06, 0xfb, 0x37, 0x7b, 0x31,
+	0x53, 0x49, 0x11, 0x78, 0xa1, 0x18, 0xfb, 0xba, 0xd1, 0xc9, 0xad, 0xf9, 0xf8, 0x24, 0x63, 0xfe,
+	0xcc, 0x0f, 0x37, 0x68, 0x9a, 0x23, 0x1f, 0x7c, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x5a, 0x5b,
+	0x33, 0xb6, 0x07, 0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/mesh.pb.validate.go b/api/mesh/v1alpha1/mesh.pb.validate.go
deleted file mode 100644
index 4c1bea97b..000000000
--- a/api/mesh/v1alpha1/mesh.pb.validate.go
+++ /dev/null
@@ -1,1242 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: mesh/v1alpha1/mesh.proto
-
-package v1alpha1
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"net"
-	"net/mail"
-	"net/url"
-	"regexp"
-	"strings"
-	"time"
-	"unicode/utf8"
-
-	"github.com/golang/protobuf/ptypes"
-)
-
-// ensure the imports are used
-var (
-	_ = bytes.MinRead
-	_ = errors.New("")
-	_ = fmt.Print
-	_ = utf8.UTFMax
-	_ = (*regexp.Regexp)(nil)
-	_ = (*strings.Reader)(nil)
-	_ = net.IPv4len
-	_ = time.Duration(0)
-	_ = (*url.URL)(nil)
-	_ = (*mail.Address)(nil)
-	_ = ptypes.DynamicAny{}
-)
-
-// define the regex for a UUID once up-front
-var _mesh_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")
-
-// Validate checks the field values on Mesh with the rules defined in the proto
-// definition for this message. If any rules are violated, an error is returned.
-func (m *Mesh) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if v, ok := interface{}(m.GetMtls()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return MeshValidationError{
-				field:  "Mtls",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if v, ok := interface{}(m.GetTracing()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return MeshValidationError{
-				field:  "Tracing",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if v, ok := interface{}(m.GetLogging()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return MeshValidationError{
-				field:  "Logging",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if v, ok := interface{}(m.GetMetrics()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return MeshValidationError{
-				field:  "Metrics",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if v, ok := interface{}(m.GetNetworking()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return MeshValidationError{
-				field:  "Networking",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if v, ok := interface{}(m.GetRouting()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return MeshValidationError{
-				field:  "Routing",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// MeshValidationError is the validation error returned by Mesh.Validate if the
-// designated constraints aren't met.
-type MeshValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e MeshValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e MeshValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e MeshValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e MeshValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e MeshValidationError) ErrorName() string { return "MeshValidationError" }
-
-// Error satisfies the builtin error interface
-func (e MeshValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sMesh.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = MeshValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = MeshValidationError{}
-
-// Validate checks the field values on CertificateAuthorityBackend with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *CertificateAuthorityBackend) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Name
-
-	// no validation rules for Type
-
-	if v, ok := interface{}(m.GetDpCert()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return CertificateAuthorityBackendValidationError{
-				field:  "DpCert",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if v, ok := interface{}(m.GetConf()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return CertificateAuthorityBackendValidationError{
-				field:  "Conf",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// CertificateAuthorityBackendValidationError is the validation error returned
-// by CertificateAuthorityBackend.Validate if the designated constraints
-// aren't met.
-type CertificateAuthorityBackendValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e CertificateAuthorityBackendValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e CertificateAuthorityBackendValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e CertificateAuthorityBackendValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e CertificateAuthorityBackendValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e CertificateAuthorityBackendValidationError) ErrorName() string {
-	return "CertificateAuthorityBackendValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e CertificateAuthorityBackendValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sCertificateAuthorityBackend.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = CertificateAuthorityBackendValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = CertificateAuthorityBackendValidationError{}
-
-// Validate checks the field values on Networking with the rules defined in the
-// proto definition for this message. If any rules are violated, an error is returned.
-func (m *Networking) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if v, ok := interface{}(m.GetOutbound()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return NetworkingValidationError{
-				field:  "Outbound",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// NetworkingValidationError is the validation error returned by
-// Networking.Validate if the designated constraints aren't met.
-type NetworkingValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e NetworkingValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e NetworkingValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e NetworkingValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e NetworkingValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e NetworkingValidationError) ErrorName() string { return "NetworkingValidationError" }
-
-// Error satisfies the builtin error interface
-func (e NetworkingValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sNetworking.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = NetworkingValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = NetworkingValidationError{}
-
-// Validate checks the field values on Tracing with the rules defined in the
-// proto definition for this message. If any rules are violated, an error is returned.
-func (m *Tracing) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for DefaultBackend
-
-	for idx, item := range m.GetBackends() {
-		_, _ = idx, item
-
-		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return TracingValidationError{
-					field:  fmt.Sprintf("Backends[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	return nil
-}
-
-// TracingValidationError is the validation error returned by Tracing.Validate
-// if the designated constraints aren't met.
-type TracingValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e TracingValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e TracingValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e TracingValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e TracingValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e TracingValidationError) ErrorName() string { return "TracingValidationError" }
-
-// Error satisfies the builtin error interface
-func (e TracingValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sTracing.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = TracingValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = TracingValidationError{}
-
-// Validate checks the field values on TracingBackend with the rules defined in
-// the proto definition for this message. If any rules are violated, an error
-// is returned.
-func (m *TracingBackend) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Name
-
-	if v, ok := interface{}(m.GetSampling()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return TracingBackendValidationError{
-				field:  "Sampling",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	// no validation rules for Type
-
-	if v, ok := interface{}(m.GetConf()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return TracingBackendValidationError{
-				field:  "Conf",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// TracingBackendValidationError is the validation error returned by
-// TracingBackend.Validate if the designated constraints aren't met.
-type TracingBackendValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e TracingBackendValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e TracingBackendValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e TracingBackendValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e TracingBackendValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e TracingBackendValidationError) ErrorName() string { return "TracingBackendValidationError" }
-
-// Error satisfies the builtin error interface
-func (e TracingBackendValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sTracingBackend.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = TracingBackendValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = TracingBackendValidationError{}
-
-// Validate checks the field values on ZipkinTracingBackendConfig with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *ZipkinTracingBackendConfig) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Url
-
-	// no validation rules for TraceId128Bit
-
-	// no validation rules for ApiVersion
-
-	return nil
-}
-
-// ZipkinTracingBackendConfigValidationError is the validation error returned
-// by ZipkinTracingBackendConfig.Validate if the designated constraints aren't met.
-type ZipkinTracingBackendConfigValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e ZipkinTracingBackendConfigValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ZipkinTracingBackendConfigValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ZipkinTracingBackendConfigValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ZipkinTracingBackendConfigValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ZipkinTracingBackendConfigValidationError) ErrorName() string {
-	return "ZipkinTracingBackendConfigValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e ZipkinTracingBackendConfigValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sZipkinTracingBackendConfig.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = ZipkinTracingBackendConfigValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = ZipkinTracingBackendConfigValidationError{}
-
-// Validate checks the field values on Logging with the rules defined in the
-// proto definition for this message. If any rules are violated, an error is returned.
-func (m *Logging) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for DefaultBackend
-
-	for idx, item := range m.GetBackends() {
-		_, _ = idx, item
-
-		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return LoggingValidationError{
-					field:  fmt.Sprintf("Backends[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	return nil
-}
-
-// LoggingValidationError is the validation error returned by Logging.Validate
-// if the designated constraints aren't met.
-type LoggingValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e LoggingValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e LoggingValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e LoggingValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e LoggingValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e LoggingValidationError) ErrorName() string { return "LoggingValidationError" }
-
-// Error satisfies the builtin error interface
-func (e LoggingValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sLogging.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = LoggingValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = LoggingValidationError{}
-
-// Validate checks the field values on LoggingBackend with the rules defined in
-// the proto definition for this message. If any rules are violated, an error
-// is returned.
-func (m *LoggingBackend) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Name
-
-	// no validation rules for Format
-
-	// no validation rules for Type
-
-	if v, ok := interface{}(m.GetConf()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return LoggingBackendValidationError{
-				field:  "Conf",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// LoggingBackendValidationError is the validation error returned by
-// LoggingBackend.Validate if the designated constraints aren't met.
-type LoggingBackendValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e LoggingBackendValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e LoggingBackendValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e LoggingBackendValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e LoggingBackendValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e LoggingBackendValidationError) ErrorName() string { return "LoggingBackendValidationError" }
-
-// Error satisfies the builtin error interface
-func (e LoggingBackendValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sLoggingBackend.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = LoggingBackendValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = LoggingBackendValidationError{}
-
-// Validate checks the field values on FileLoggingBackendConfig with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *FileLoggingBackendConfig) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Path
-
-	return nil
-}
-
-// FileLoggingBackendConfigValidationError is the validation error returned by
-// FileLoggingBackendConfig.Validate if the designated constraints aren't met.
-type FileLoggingBackendConfigValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e FileLoggingBackendConfigValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e FileLoggingBackendConfigValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e FileLoggingBackendConfigValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e FileLoggingBackendConfigValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e FileLoggingBackendConfigValidationError) ErrorName() string {
-	return "FileLoggingBackendConfigValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e FileLoggingBackendConfigValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sFileLoggingBackendConfig.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = FileLoggingBackendConfigValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = FileLoggingBackendConfigValidationError{}
-
-// Validate checks the field values on TcpLoggingBackendConfig with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *TcpLoggingBackendConfig) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Address
-
-	return nil
-}
-
-// TcpLoggingBackendConfigValidationError is the validation error returned by
-// TcpLoggingBackendConfig.Validate if the designated constraints aren't met.
-type TcpLoggingBackendConfigValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e TcpLoggingBackendConfigValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e TcpLoggingBackendConfigValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e TcpLoggingBackendConfigValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e TcpLoggingBackendConfigValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e TcpLoggingBackendConfigValidationError) ErrorName() string {
-	return "TcpLoggingBackendConfigValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e TcpLoggingBackendConfigValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sTcpLoggingBackendConfig.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = TcpLoggingBackendConfigValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = TcpLoggingBackendConfigValidationError{}
-
-// Validate checks the field values on Routing with the rules defined in the
-// proto definition for this message. If any rules are violated, an error is returned.
-func (m *Routing) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for LocalityAwareLoadBalancing
-
-	return nil
-}
-
-// RoutingValidationError is the validation error returned by Routing.Validate
-// if the designated constraints aren't met.
-type RoutingValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e RoutingValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e RoutingValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e RoutingValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e RoutingValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e RoutingValidationError) ErrorName() string { return "RoutingValidationError" }
-
-// Error satisfies the builtin error interface
-func (e RoutingValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sRouting.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = RoutingValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = RoutingValidationError{}
-
-// Validate checks the field values on Mesh_Mtls with the rules defined in the
-// proto definition for this message. If any rules are violated, an error is returned.
-func (m *Mesh_Mtls) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for EnabledBackend
-
-	for idx, item := range m.GetBackends() {
-		_, _ = idx, item
-
-		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return Mesh_MtlsValidationError{
-					field:  fmt.Sprintf("Backends[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	return nil
-}
-
-// Mesh_MtlsValidationError is the validation error returned by
-// Mesh_Mtls.Validate if the designated constraints aren't met.
-type Mesh_MtlsValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e Mesh_MtlsValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e Mesh_MtlsValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e Mesh_MtlsValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e Mesh_MtlsValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e Mesh_MtlsValidationError) ErrorName() string { return "Mesh_MtlsValidationError" }
-
-// Error satisfies the builtin error interface
-func (e Mesh_MtlsValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sMesh_Mtls.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = Mesh_MtlsValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = Mesh_MtlsValidationError{}
-
-// Validate checks the field values on CertificateAuthorityBackend_DpCert with
-// the rules defined in the proto definition for this message. If any rules
-// are violated, an error is returned.
-func (m *CertificateAuthorityBackend_DpCert) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if v, ok := interface{}(m.GetRotation()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return CertificateAuthorityBackend_DpCertValidationError{
-				field:  "Rotation",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// CertificateAuthorityBackend_DpCertValidationError is the validation error
-// returned by CertificateAuthorityBackend_DpCert.Validate if the designated
-// constraints aren't met.
-type CertificateAuthorityBackend_DpCertValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e CertificateAuthorityBackend_DpCertValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e CertificateAuthorityBackend_DpCertValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e CertificateAuthorityBackend_DpCertValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e CertificateAuthorityBackend_DpCertValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e CertificateAuthorityBackend_DpCertValidationError) ErrorName() string {
-	return "CertificateAuthorityBackend_DpCertValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e CertificateAuthorityBackend_DpCertValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sCertificateAuthorityBackend_DpCert.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = CertificateAuthorityBackend_DpCertValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = CertificateAuthorityBackend_DpCertValidationError{}
-
-// Validate checks the field values on
-// CertificateAuthorityBackend_DpCert_Rotation with the rules defined in the
-// proto definition for this message. If any rules are violated, an error is returned.
-func (m *CertificateAuthorityBackend_DpCert_Rotation) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Expiration
-
-	return nil
-}
-
-// CertificateAuthorityBackend_DpCert_RotationValidationError is the validation
-// error returned by CertificateAuthorityBackend_DpCert_Rotation.Validate if
-// the designated constraints aren't met.
-type CertificateAuthorityBackend_DpCert_RotationValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e CertificateAuthorityBackend_DpCert_RotationValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e CertificateAuthorityBackend_DpCert_RotationValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e CertificateAuthorityBackend_DpCert_RotationValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e CertificateAuthorityBackend_DpCert_RotationValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e CertificateAuthorityBackend_DpCert_RotationValidationError) ErrorName() string {
-	return "CertificateAuthorityBackend_DpCert_RotationValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e CertificateAuthorityBackend_DpCert_RotationValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sCertificateAuthorityBackend_DpCert_Rotation.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = CertificateAuthorityBackend_DpCert_RotationValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = CertificateAuthorityBackend_DpCert_RotationValidationError{}
-
-// Validate checks the field values on Networking_Outbound with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *Networking_Outbound) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if v, ok := interface{}(m.GetPassthrough()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return Networking_OutboundValidationError{
-				field:  "Passthrough",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// Networking_OutboundValidationError is the validation error returned by
-// Networking_Outbound.Validate if the designated constraints aren't met.
-type Networking_OutboundValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e Networking_OutboundValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e Networking_OutboundValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e Networking_OutboundValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e Networking_OutboundValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e Networking_OutboundValidationError) ErrorName() string {
-	return "Networking_OutboundValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e Networking_OutboundValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sNetworking_Outbound.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = Networking_OutboundValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = Networking_OutboundValidationError{}
diff --git a/api/mesh/v1alpha1/mesh.proto b/api/mesh/v1alpha1/mesh.proto
index e62aa5d90..c1f408f63 100644
--- a/api/mesh/v1alpha1/mesh.proto
+++ b/api/mesh/v1alpha1/mesh.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "mesh/v1alpha1/metrics.proto";
 import "google/protobuf/wrappers.proto";
diff --git a/api/mesh/v1alpha1/mesh_insight.pb.go b/api/mesh/v1alpha1/mesh_insight.pb.go
index a8f7d1ec2..8cfd4d481 100644
--- a/api/mesh/v1alpha1/mesh_insight.pb.go
+++ b/api/mesh/v1alpha1/mesh_insight.pb.go
@@ -184,25 +184,26 @@ func init() {
 func init() { proto.RegisterFile("mesh/v1alpha1/mesh_insight.proto", fileDescriptor_eb86a336b65b3e70) }
 
 var fileDescriptor_eb86a336b65b3e70 = []byte{
-	// 308 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0x41, 0x4b, 0xfb, 0x40,
-	0x10, 0xc5, 0x69, 0x43, 0xfb, 0x6f, 0xa7, 0x04, 0xfe, 0x2c, 0x22, 0x21, 0x17, 0x43, 0x4f, 0x22,
-	0xb8, 0xa1, 0x7a, 0x50, 0x3c, 0x79, 0xd0, 0x43, 0x0f, 0x05, 0xd9, 0x0a, 0x1e, 0xcb, 0x36, 0x6e,
-	0x92, 0xa5, 0x9b, 0xdd, 0xd0, 0x9d, 0x14, 0xf2, 0x05, 0xfd, 0x5c, 0x92, 0x4d, 0x22, 0x2d, 0x22,
-	0xf4, 0x96, 0xc7, 0xbc, 0xf7, 0x7b, 0x33, 0x59, 0x88, 0x0a, 0x61, 0xf3, 0xf8, 0xb0, 0xe0, 0xaa,
-	0xcc, 0xf9, 0x22, 0x6e, 0xd4, 0x46, 0x6a, 0x2b, 0xb3, 0x1c, 0x69, 0xb9, 0x37, 0x68, 0x08, 0xd9,
-	0x55, 0x05, 0xa7, 0xcd, 0x80, 0xf6, 0xb6, 0xf0, 0x2a, 0x33, 0x26, 0x53, 0x22, 0x76, 0x8e, 0x6d,
-	0x95, 0xc6, 0x28, 0x0b, 0x61, 0x91, 0x17, 0x65, 0x1b, 0x9a, 0x7f, 0x79, 0x30, 0x5b, 0x09, 0x9b,
-	0x2f, 0x5b, 0x14, 0x79, 0x80, 0xa9, 0xe2, 0x16, 0x37, 0xb6, 0xd6, 0x49, 0x30, 0x88, 0x06, 0xd7,
-	0xb3, 0xbb, 0x90, 0xb6, 0x10, 0xda, 0x43, 0xe8, 0x7b, 0x0f, 0x61, 0x93, 0xc6, 0xbc, 0xae, 0x75,
-	0x42, 0x56, 0x00, 0x9f, 0x1c, 0x79, 0xa9, 0xb8, 0x16, 0x36, 0x18, 0xba, 0xe4, 0x2d, 0xfd, 0xbd,
-	0x12, 0x3d, 0x6a, 0xa3, 0x2f, 0x7d, 0x62, 0x8d, 0x1c, 0xd9, 0x11, 0x80, 0x2c, 0x61, 0x52, 0x1a,
-	0x25, 0x13, 0x29, 0x6c, 0xe0, 0x45, 0xde, 0x39, 0xb0, 0xb7, 0xce, 0xff, 0xaa, 0x71, 0x5f, 0xb3,
-	0x9f, 0x78, 0xf8, 0x01, 0xfe, 0x49, 0x0f, 0xb9, 0x80, 0x11, 0x1a, 0xe4, 0xca, 0xdd, 0xe7, 0xb3,
-	0x56, 0x90, 0x4b, 0x18, 0x1b, 0xad, 0xa4, 0x16, 0x6e, 0x79, 0x9f, 0x75, 0x8a, 0x04, 0xf0, 0xcf,
-	0xa4, 0xa9, 0x1b, 0x78, 0x6e, 0xd0, 0xcb, 0x70, 0x0e, 0xe0, 0x3a, 0xeb, 0xbf, 0xa9, 0x61, 0x06,
-	0xfe, 0xc9, 0x5e, 0xe4, 0x3f, 0x78, 0x3b, 0x51, 0x3b, 0xd3, 0x94, 0x35, 0x9f, 0xe4, 0x19, 0x46,
-	0x07, 0xae, 0x2a, 0xd1, 0xfd, 0xb4, 0x9b, 0xb3, 0xee, 0x74, 0x9d, 0xac, 0x0d, 0x3e, 0x0d, 0x1f,
-	0x07, 0xdb, 0xb1, 0x7b, 0x9d, 0xfb, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x02, 0x66, 0x8c, 0x7c,
-	0x28, 0x02, 0x00, 0x00,
+	// 331 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0x4b, 0xc3, 0x30,
+	0x18, 0xc5, 0xd9, 0xca, 0xe6, 0xf6, 0x8d, 0x82, 0x04, 0x91, 0xd2, 0x8b, 0x63, 0xa7, 0x31, 0x30,
+	0x61, 0x7a, 0x50, 0x3c, 0x89, 0xe8, 0x61, 0x87, 0x81, 0x64, 0x82, 0xe0, 0x65, 0x64, 0x35, 0x6b,
+	0xc3, 0xd2, 0x24, 0x2e, 0xe9, 0xa0, 0xff, 0xa0, 0x7f, 0x97, 0x34, 0x5d, 0x65, 0x43, 0x84, 0x9d,
+	0xda, 0xc7, 0xf7, 0xde, 0xef, 0x7d, 0x69, 0x03, 0xc3, 0x9c, 0xdb, 0x8c, 0xec, 0xa6, 0x4c, 0x9a,
+	0x8c, 0x4d, 0x49, 0xa5, 0x96, 0x42, 0x59, 0x91, 0x66, 0x0e, 0x9b, 0xad, 0x76, 0x1a, 0xa1, 0x4d,
+	0x91, 0x33, 0x5c, 0x0d, 0x70, 0x63, 0x8b, 0xaf, 0x52, 0xad, 0x53, 0xc9, 0x89, 0x77, 0xac, 0x8a,
+	0x35, 0x71, 0x22, 0xe7, 0xd6, 0xb1, 0xdc, 0xd4, 0xa1, 0xd1, 0x77, 0x00, 0x83, 0x39, 0xb7, 0xd9,
+	0xac, 0x46, 0xa1, 0x3b, 0xe8, 0x4b, 0x66, 0xdd, 0xd2, 0x96, 0x2a, 0x89, 0x5a, 0xc3, 0xd6, 0x78,
+	0x70, 0x13, 0xe3, 0x1a, 0x82, 0x1b, 0x08, 0x7e, 0x6b, 0x20, 0xb4, 0x57, 0x99, 0x17, 0xa5, 0x4a,
+	0xd0, 0x1c, 0xe0, 0x93, 0x39, 0x66, 0x24, 0x53, 0xdc, 0x46, 0x6d, 0x9f, 0xbc, 0xc6, 0x7f, 0x57,
+	0xc2, 0x07, 0x6d, 0xf8, 0xb9, 0x49, 0x2c, 0x1c, 0x73, 0xf4, 0x00, 0x80, 0x66, 0xd0, 0x33, 0x5a,
+	0x8a, 0x44, 0x70, 0x1b, 0x05, 0xc3, 0xe0, 0x14, 0xd8, 0xeb, 0xde, 0xff, 0xa2, 0xdc, 0xb6, 0xa4,
+	0xbf, 0xf1, 0xf8, 0x1d, 0xc2, 0xa3, 0x1e, 0x74, 0x01, 0x1d, 0xa7, 0x1d, 0x93, 0xfe, 0x7c, 0x21,
+	0xad, 0x05, 0xba, 0x84, 0xae, 0x56, 0x52, 0x28, 0xee, 0x97, 0x0f, 0xe9, 0x5e, 0xa1, 0x08, 0xce,
+	0xf4, 0x7a, 0xed, 0x07, 0x81, 0x1f, 0x34, 0x32, 0x1e, 0x01, 0xf8, 0xce, 0xf2, 0x7f, 0x6a, 0x9c,
+	0x42, 0x78, 0xb4, 0x17, 0x3a, 0x87, 0x60, 0xc3, 0x4b, 0x6f, 0xea, 0xd3, 0xea, 0x15, 0x3d, 0x42,
+	0x67, 0xc7, 0x64, 0xc1, 0xf7, 0x1f, 0x6d, 0x72, 0xd2, 0x39, 0x7d, 0x27, 0xad, 0x83, 0x0f, 0xed,
+	0xfb, 0xd6, 0xd3, 0xe4, 0x63, 0x9c, 0x0a, 0x97, 0x15, 0x2b, 0x9c, 0xe8, 0x9c, 0x54, 0x88, 0xec,
+	0xcb, 0x3f, 0x08, 0x33, 0x82, 0x1c, 0x5d, 0x9e, 0x55, 0xd7, 0xff, 0xc9, 0xdb, 0x9f, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0xe7, 0xe3, 0xde, 0xb8, 0x54, 0x02, 0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/mesh_insight.proto b/api/mesh/v1alpha1/mesh_insight.proto
index 509d3e922..d87dc80ba 100644
--- a/api/mesh/v1alpha1/mesh_insight.proto
+++ b/api/mesh/v1alpha1/mesh_insight.proto
@@ -2,6 +2,8 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
+
 import "google/protobuf/timestamp.proto";
 
 // MeshInsight defines the observed state of a Mesh.
@@ -21,4 +23,4 @@ message MeshInsight {
   // PolicyStat defines statistic for all policies in general
   message PolicyStat { uint32 total = 1; }
   map<string, PolicyStat> policies = 3;
-}
\ No newline at end of file
+}
diff --git a/api/mesh/v1alpha1/metrics.pb.go b/api/mesh/v1alpha1/metrics.pb.go
index 7206723b7..adf6e0a27 100644
--- a/api/mesh/v1alpha1/metrics.pb.go
+++ b/api/mesh/v1alpha1/metrics.pb.go
@@ -215,28 +215,29 @@ func init() {
 func init() { proto.RegisterFile("mesh/v1alpha1/metrics.proto", fileDescriptor_7dd8c7f420ce268c) }
 
 var fileDescriptor_7dd8c7f420ce268c = []byte{
-	// 355 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x90, 0x4f, 0x4b, 0xeb, 0x40,
+	// 374 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x4f, 0x4b, 0xeb, 0x40,
 	0x14, 0xc5, 0xc9, 0x9f, 0xf7, 0x5e, 0x3b, 0xe5, 0x95, 0xc7, 0xf0, 0xc0, 0x10, 0xa5, 0x94, 0x2c,
-	0xa4, 0x20, 0x4c, 0x68, 0x05, 0x15, 0x11, 0x17, 0x15, 0x77, 0x16, 0x4a, 0x5a, 0x5c, 0xb8, 0x9b,
-	0xa4, 0xb7, 0x49, 0xc9, 0x9f, 0x89, 0x33, 0x93, 0x4a, 0x3f, 0x83, 0x5f, 0x5a, 0x66, 0x92, 0x14,
-	0xda, 0x8a, 0xbb, 0x93, 0x3b, 0xe7, 0x9e, 0xdf, 0x3d, 0x41, 0xe7, 0x39, 0x88, 0xc4, 0xdf, 0x8e,
-	0x69, 0x56, 0x26, 0x74, 0xec, 0xe7, 0x20, 0xf9, 0x26, 0x12, 0xa4, 0xe4, 0x4c, 0x32, 0x8c, 0xd3,
-	0x2a, 0xa7, 0x44, 0x39, 0x48, 0xeb, 0x70, 0x2f, 0x62, 0xc6, 0xe2, 0x0c, 0x7c, 0xed, 0x08, 0xab,
-	0xb5, 0x2f, 0x24, 0xaf, 0x22, 0x59, 0x6f, 0xb8, 0x83, 0xe3, 0xd7, 0x0f, 0x4e, 0xcb, 0x12, 0x78,
-	0x93, 0xe8, 0xbd, 0xa3, 0x3f, 0xb3, 0x1a, 0x81, 0x2f, 0x51, 0x1f, 0x0a, 0x1a, 0x66, 0xb0, 0x9a,
-	0xd2, 0x28, 0x85, 0x62, 0xe5, 0x18, 0x43, 0x63, 0xd4, 0x0d, 0x8e, 0xa6, 0xf8, 0x11, 0x75, 0xc2,
-	0x5a, 0x0a, 0xc7, 0x1c, 0x5a, 0xa3, 0xde, 0xc4, 0x23, 0xa7, 0x77, 0x91, 0x26, 0xb6, 0xd9, 0x0a,
-	0xf6, 0x3b, 0x1e, 0xa0, 0xfe, 0xe1, 0x1b, 0xc6, 0xc8, 0x2e, 0x68, 0x0e, 0x0d, 0x4f, 0x6b, 0x35,
-	0x93, 0xbb, 0x12, 0x1c, 0xb3, 0x9e, 0x29, 0x8d, 0xaf, 0x90, 0x1d, 0xb1, 0x62, 0xed, 0x58, 0x43,
-	0x63, 0xd4, 0x9b, 0x9c, 0x91, 0xba, 0x1b, 0x69, 0xbb, 0x91, 0x85, 0x6e, 0x1e, 0x68, 0x93, 0xf7,
-	0x69, 0xa2, 0xc1, 0x9c, 0xb3, 0x1c, 0x64, 0x02, 0x95, 0x38, 0x24, 0x3e, 0xb1, 0x62, 0xbd, 0x89,
-	0x15, 0xa3, 0x64, 0x5c, 0x6a, 0xee, 0xdf, 0x40, 0x6b, 0x3d, 0xa3, 0x32, 0x69, 0xb9, 0x4a, 0xe3,
-	0x39, 0xb2, 0x25, 0x8d, 0x85, 0x63, 0xe9, 0xb6, 0x0f, 0xdf, 0xb5, 0xfd, 0x99, 0x44, 0x96, 0x34,
-	0x16, 0xcf, 0x85, 0xe4, 0xbb, 0x40, 0x27, 0xe1, 0x1b, 0xd4, 0x11, 0xe9, 0xa6, 0x9c, 0x2d, 0x5f,
-	0x16, 0x8e, 0xad, 0xdb, 0xb8, 0x27, 0x6d, 0xa6, 0x8c, 0x65, 0xaf, 0x34, 0xab, 0x20, 0xd8, 0x7b,
-	0xdd, 0x5b, 0xd4, 0xdd, 0x47, 0xe1, 0x7f, 0xc8, 0x4a, 0x61, 0xd7, 0xfc, 0x35, 0x25, 0xf1, 0x7f,
-	0xf4, 0x6b, 0xab, 0x36, 0x9a, 0xeb, 0xeb, 0x8f, 0x7b, 0xf3, 0xce, 0x98, 0xa2, 0xb7, 0x4e, 0x7b,
-	0x6b, 0xf8, 0x5b, 0x23, 0xae, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x05, 0x61, 0xef, 0x74, 0x6b,
-	0x02, 0x00, 0x00,
+	0x24, 0x28, 0x4c, 0x68, 0x05, 0x15, 0x11, 0x17, 0x15, 0x77, 0x16, 0x4a, 0x5a, 0x5c, 0xb8, 0x9b,
+	0xa4, 0xd3, 0x24, 0xe4, 0xcf, 0x4c, 0x67, 0x26, 0x95, 0x7e, 0x06, 0xbf, 0xb4, 0xcc, 0x24, 0x2d,
+	0xb4, 0x15, 0x57, 0x39, 0xb9, 0xf7, 0xdc, 0x7b, 0xee, 0x2f, 0x04, 0x9c, 0x97, 0x44, 0xa4, 0xc1,
+	0x66, 0x84, 0x0b, 0x96, 0xe2, 0x51, 0x50, 0x12, 0xc9, 0xb3, 0x58, 0x20, 0xc6, 0xa9, 0xa4, 0x10,
+	0xe6, 0x75, 0x89, 0x91, 0x72, 0xa0, 0x9d, 0xc3, 0xbd, 0x48, 0x28, 0x4d, 0x0a, 0x12, 0x68, 0x47,
+	0x54, 0xaf, 0x02, 0x21, 0x79, 0x1d, 0xcb, 0x66, 0xc2, 0x1d, 0x1c, 0x77, 0x3f, 0x38, 0x66, 0x8c,
+	0xf0, 0x76, 0xa3, 0xb7, 0x06, 0x7f, 0xa6, 0x4d, 0x04, 0xbc, 0x04, 0x7d, 0x52, 0xe1, 0xa8, 0x20,
+	0xcb, 0x09, 0x8e, 0x73, 0x52, 0x2d, 0x1d, 0x63, 0x68, 0xf8, 0xdd, 0xf0, 0xa8, 0x0a, 0x9f, 0x40,
+	0x27, 0x6a, 0xa4, 0x70, 0xcc, 0xa1, 0xe5, 0xf7, 0xc6, 0x1e, 0x3a, 0xbd, 0x0b, 0xb5, 0x6b, 0xdb,
+	0xa9, 0x70, 0x3f, 0xe3, 0x11, 0xd0, 0x3f, 0xec, 0x41, 0x08, 0xec, 0x0a, 0x97, 0xa4, 0xcd, 0xd3,
+	0x5a, 0xd5, 0xe4, 0x96, 0x11, 0xc7, 0x6c, 0x6a, 0x4a, 0xc3, 0x6b, 0x60, 0xc7, 0xb4, 0x5a, 0x39,
+	0xd6, 0xd0, 0xf0, 0x7b, 0xe3, 0x33, 0xd4, 0xb0, 0xa1, 0x1d, 0x1b, 0x9a, 0x6b, 0xf2, 0x50, 0x9b,
+	0xbc, 0x4f, 0x13, 0x0c, 0x66, 0x9c, 0x96, 0x44, 0xa6, 0xa4, 0x16, 0x87, 0x89, 0xcf, 0xb4, 0x5a,
+	0x65, 0x89, 0xca, 0x60, 0x94, 0x4b, 0x9d, 0xfb, 0x37, 0xd4, 0x5a, 0xd7, 0xb0, 0x4c, 0x77, 0xb9,
+	0x4a, 0xc3, 0x19, 0xb0, 0x25, 0x4e, 0x84, 0x63, 0x69, 0xda, 0xc7, 0xef, 0x68, 0x7f, 0x4e, 0x42,
+	0x0b, 0x9c, 0x88, 0x97, 0x4a, 0xf2, 0x6d, 0xa8, 0x37, 0xc1, 0x5b, 0xd0, 0x11, 0x79, 0xc6, 0xa6,
+	0x8b, 0xd7, 0xb9, 0x63, 0x6b, 0x1a, 0xf7, 0x84, 0x66, 0x42, 0x69, 0xf1, 0x86, 0x8b, 0x9a, 0x84,
+	0x7b, 0xaf, 0x7b, 0x07, 0xba, 0xfb, 0x55, 0xf0, 0x1f, 0xb0, 0x72, 0xb2, 0x6d, 0xbf, 0x9a, 0x92,
+	0xf0, 0x3f, 0xf8, 0xb5, 0x51, 0x13, 0xed, 0xf5, 0xcd, 0xcb, 0x83, 0x79, 0x6f, 0x4c, 0xae, 0xde,
+	0xfd, 0x24, 0x93, 0x69, 0x1d, 0xa1, 0x98, 0x96, 0x81, 0x02, 0x48, 0xd7, 0xfa, 0x11, 0x60, 0x96,
+	0x05, 0x07, 0xff, 0x5c, 0xf4, 0x5b, 0x9f, 0x70, 0xf3, 0x15, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x3f,
+	0x4c, 0x82, 0x8b, 0x02, 0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/metrics.proto b/api/mesh/v1alpha1/metrics.proto
index 4da8e29a6..42367cb7a 100644
--- a/api/mesh/v1alpha1/metrics.proto
+++ b/api/mesh/v1alpha1/metrics.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "google/protobuf/struct.proto";
 import "google/protobuf/wrappers.proto";
diff --git a/api/mesh/v1alpha1/mux.pb.go b/api/mesh/v1alpha1/mux.pb.go
index 26517514e..fafaceaa4 100644
--- a/api/mesh/v1alpha1/mux.pb.go
+++ b/api/mesh/v1alpha1/mux.pb.go
@@ -112,22 +112,23 @@ func init() {
 func init() { proto.RegisterFile("mesh/v1alpha1/mux.proto", fileDescriptor_df76defa729b08eb) }
 
 var fileDescriptor_df76defa729b08eb = []byte{
-	// 229 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0xd0, 0x3f, 0x4b, 0x03, 0x31,
-	0x18, 0xc7, 0xf1, 0x46, 0xd0, 0x2b, 0x8f, 0x08, 0x92, 0xc5, 0x52, 0x45, 0xc5, 0xa9, 0xd3, 0x13,
-	0x7b, 0x6e, 0x82, 0x4b, 0x71, 0xe8, 0x72, 0xcb, 0x75, 0x73, 0x7b, 0xac, 0x0f, 0x36, 0x78, 0x69,
-	0x62, 0xfe, 0xd1, 0xbe, 0x08, 0xdf, 0xb3, 0x78, 0x67, 0x5c, 0x44, 0xd7, 0x7c, 0x7f, 0x1f, 0x48,
-	0x02, 0x67, 0x86, 0xc3, 0x46, 0xe5, 0x39, 0x75, 0x6e, 0x43, 0x73, 0x65, 0xd2, 0x0e, 0x9d, 0xb7,
-	0xd1, 0x4a, 0xf9, 0x96, 0x0c, 0xe1, 0x57, 0xc5, 0x52, 0xa7, 0x17, 0xbc, 0xcd, 0x76, 0xaf, 0xc8,
-	0x69, 0x95, 0x6b, 0xf5, 0xa2, 0xc3, 0xda, 0x66, 0xf6, 0xfb, 0x41, 0xdc, 0x7c, 0x08, 0xa8, 0x1a,
-	0x0e, 0x81, 0x5e, 0x59, 0xde, 0x43, 0xe5, 0xf9, 0x3d, 0x71, 0x88, 0x13, 0x71, 0x2d, 0x66, 0xc7,
-	0xf5, 0x25, 0xf6, 0x16, 0xc9, 0x69, 0xcc, 0x35, 0x3e, 0x16, 0xdb, 0x0e, 0xab, 0xe5, 0xa8, 0x2d,
-	0x40, 0x3e, 0xc0, 0xd8, 0x73, 0x70, 0x76, 0x1b, 0x78, 0x72, 0xd0, 0xe3, 0xab, 0x3f, 0xf1, 0x30,
-	0x5b, 0x8e, 0xda, 0x1f, 0xb2, 0xa8, 0xe0, 0x30, 0x53, 0x97, 0xb8, 0x26, 0x38, 0x6d, 0x52, 0x17,
-	0xb5, 0xeb, 0x78, 0xb7, 0x62, 0x9f, 0xf5, 0x9a, 0x65, 0x03, 0x27, 0xab, 0xe8, 0x99, 0x4c, 0xb9,
-	0xe8, 0x39, 0xfe, 0x7e, 0x27, 0x7e, 0xc7, 0xe9, 0x7f, 0x71, 0x26, 0x6e, 0xc5, 0x02, 0x9e, 0xc6,
-	0xe5, 0xfc, 0xf9, 0xa8, 0xff, 0x85, 0xbb, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x25, 0x2e, 0xd9,
-	0x88, 0x52, 0x01, 0x00, 0x00,
+	// 247 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0xd0, 0x3f, 0x4b, 0xc3, 0x40,
+	0x18, 0x06, 0xf0, 0x46, 0xd0, 0xc8, 0x89, 0x20, 0xb7, 0x58, 0xaa, 0xa8, 0x38, 0x05, 0x87, 0xf7,
+	0x6c, 0xdc, 0x04, 0x97, 0xe2, 0xd0, 0x25, 0x4b, 0xba, 0xb9, 0xbd, 0x8d, 0x2f, 0xcd, 0x61, 0xae,
+	0x77, 0xbd, 0x7f, 0xb4, 0x1f, 0xc2, 0xef, 0x2c, 0xbd, 0x18, 0x41, 0xc4, 0x4e, 0x37, 0x3c, 0xcf,
+	0x0f, 0xee, 0x7d, 0xd8, 0xa5, 0x22, 0xd7, 0x8a, 0x38, 0xc5, 0xce, 0xb4, 0x38, 0x15, 0x2a, 0x6c,
+	0xc1, 0x58, 0xed, 0x35, 0xe7, 0x1f, 0x41, 0x21, 0xec, 0x53, 0x18, 0xd2, 0xc9, 0x35, 0xad, 0xa3,
+	0xde, 0x09, 0x34, 0x52, 0xc4, 0x52, 0xbc, 0x4b, 0xd7, 0xe8, 0x48, 0x76, 0xd7, 0x8b, 0xfb, 0xcf,
+	0x8c, 0xe5, 0x15, 0x39, 0x87, 0x2b, 0xe2, 0xcf, 0x2c, 0xb7, 0xb4, 0x09, 0xe4, 0xfc, 0x38, 0xbb,
+	0xcb, 0x8a, 0xb3, 0xf2, 0x06, 0x92, 0x05, 0x34, 0x12, 0x62, 0x09, 0xaf, 0x83, 0xad, 0xfb, 0xd6,
+	0x7c, 0x54, 0x0f, 0x80, 0xbf, 0xb0, 0x53, 0x4b, 0xce, 0xe8, 0xb5, 0xa3, 0xf1, 0x51, 0xc2, 0xb7,
+	0xff, 0xe2, 0xbe, 0x36, 0x1f, 0xd5, 0x3f, 0x64, 0x96, 0xb3, 0xe3, 0x88, 0x5d, 0xa0, 0x12, 0xd9,
+	0x45, 0x15, 0x3a, 0x2f, 0x4d, 0x47, 0xdb, 0x05, 0xd9, 0x28, 0x1b, 0xe2, 0x15, 0x3b, 0x5f, 0x78,
+	0x4b, 0xa8, 0x86, 0x8f, 0x5e, 0xc1, 0xdf, 0x3b, 0xe1, 0x3b, 0x9c, 0x1c, 0x0a, 0x8b, 0xec, 0x31,
+	0x9b, 0x3d, 0xbc, 0x15, 0x2b, 0xe9, 0xdb, 0xb0, 0x84, 0x46, 0x2b, 0xb1, 0x2f, 0xb7, 0x9b, 0xf4,
+	0xa4, 0x8d, 0x7e, 0x4d, 0xbb, 0x3c, 0x49, 0x2b, 0x3d, 0x7d, 0x05, 0x00, 0x00, 0xff, 0xff, 0x28,
+	0x7d, 0x51, 0xc2, 0x72, 0x01, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
diff --git a/api/mesh/v1alpha1/mux.proto b/api/mesh/v1alpha1/mux.proto
index ee554cc0b..887d536e4 100644
--- a/api/mesh/v1alpha1/mux.proto
+++ b/api/mesh/v1alpha1/mux.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "envoy/api/v2/discovery.proto";
 
diff --git a/api/mesh/v1alpha1/proxy_template.pb.go b/api/mesh/v1alpha1/proxy_template.pb.go
index 78eb2f069..031e02081 100644
--- a/api/mesh/v1alpha1/proxy_template.pb.go
+++ b/api/mesh/v1alpha1/proxy_template.pb.go
@@ -1133,51 +1133,52 @@ func init() {
 }
 
 var fileDescriptor_129e53d675ac14f4 = []byte{
-	// 723 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x96, 0xdf, 0x6b, 0xdb, 0x3a,
-	0x14, 0xc7, 0xe3, 0xfc, 0xf6, 0x49, 0xc3, 0xbd, 0xe8, 0x5e, 0x8a, 0x31, 0x7d, 0x28, 0x79, 0xb8,
-	0x94, 0xcb, 0x70, 0x69, 0x0b, 0x5b, 0x97, 0xd1, 0xb2, 0xb5, 0x6c, 0x98, 0xb2, 0x96, 0xa2, 0x74,
-	0x2d, 0x1b, 0x83, 0xe2, 0xa5, 0x4a, 0x63, 0x62, 0x5b, 0x46, 0x96, 0xd3, 0xe5, 0x2f, 0xd8, 0x5f,
-	0x35, 0xf6, 0xb0, 0x87, 0x6d, 0x7f, 0xce, 0x9e, 0xb6, 0xc7, 0x61, 0x59, 0x8e, 0x2d, 0x96, 0xd2,
-	0x25, 0x79, 0xd8, 0xde, 0x2c, 0xf9, 0x9c, 0xcf, 0x57, 0x5f, 0x1d, 0x89, 0x23, 0xe8, 0xf8, 0x24,
-	0x1a, 0x6e, 0x8e, 0xb7, 0x1c, 0x2f, 0x1c, 0x3a, 0x5b, 0x9b, 0x21, 0xa3, 0x6f, 0x27, 0x97, 0x9c,
-	0xf8, 0xa1, 0xe7, 0x70, 0x62, 0x85, 0x8c, 0x72, 0x8a, 0xd0, 0x28, 0xf6, 0x1d, 0x2b, 0x09, 0xb4,
-	0xb2, 0x40, 0x73, 0x4d, 0xcd, 0x8b, 0x88, 0x47, 0xfa, 0x9c, 0xb2, 0x34, 0xa3, 0xf3, 0xf9, 0x2f,
-	0x68, 0x9f, 0x26, 0xa8, 0x33, 0x49, 0x42, 0x5d, 0xd0, 0xb3, 0x98, 0xc8, 0xd0, 0xd6, 0x2b, 0x1b,
-	0xad, 0xed, 0x35, 0xeb, 0x67, 0xae, 0xd5, 0x93, 0x41, 0x38, 0x0f, 0x47, 0x5d, 0xa8, 0xf6, 0x69,
-	0x30, 0x30, 0xca, 0xeb, 0xda, 0x46, 0x6b, 0xfb, 0xbf, 0x59, 0x69, 0x8a, 0x98, 0x75, 0x48, 0x83,
-	0x01, 0x16, 0x39, 0xe6, 0x47, 0x0d, 0xaa, 0xc9, 0x10, 0x19, 0xd0, 0x70, 0xfd, 0x90, 0x32, 0x9e,
-	0xca, 0xeb, 0x38, 0x1b, 0xa2, 0x23, 0xd0, 0x19, 0x89, 0x68, 0xcc, 0xfa, 0x24, 0x32, 0xca, 0x62,
-	0x69, 0xf7, 0xee, 0xd4, 0xc0, 0xce, 0x0d, 0x96, 0x49, 0x38, 0x4f, 0x47, 0x2f, 0xa0, 0xed, 0xd3,
-	0x2b, 0x77, 0xe0, 0xf6, 0x1d, 0xee, 0xd2, 0x20, 0x32, 0x2a, 0x82, 0xb7, 0x79, 0xf7, 0x9a, 0x8f,
-	0x8b, 0x69, 0x58, 0xa5, 0x98, 0xdf, 0x57, 0xa0, 0xad, 0x04, 0xa0, 0x1e, 0x34, 0xfa, 0x5e, 0x1c,
-	0x71, 0xc2, 0x0c, 0x4d, 0x6c, 0xcb, 0x83, 0x39, 0x25, 0xac, 0xc3, 0x34, 0xdd, 0x2e, 0xe1, 0x8c,
-	0x84, 0xce, 0xa1, 0xe9, 0xb9, 0x11, 0x27, 0x01, 0x61, 0x72, 0xb3, 0x77, 0xe7, 0xa5, 0x3e, 0x97,
-	0xf9, 0x76, 0x09, 0x4f, 0x59, 0x88, 0x40, 0x3b, 0x20, 0xfc, 0x86, 0xb2, 0xd1, 0x33, 0xd7, 0x4b,
-	0x96, 0x5c, 0x11, 0xf0, 0xbd, 0x79, 0xe1, 0x27, 0x45, 0x88, 0x5d, 0xc2, 0x2a, 0x15, 0xbd, 0x06,
-	0x18, 0x72, 0x1e, 0x4a, 0x8d, 0xaa, 0xd0, 0xe8, 0xce, 0xab, 0x61, 0x4f, 0x09, 0x76, 0x09, 0x17,
-	0x78, 0xe8, 0x12, 0x5a, 0x63, 0x97, 0xf1, 0xd8, 0xf1, 0x6c, 0x1a, 0x71, 0xa3, 0x26, 0xf0, 0x8f,
-	0xe6, 0xc5, 0x9f, 0xe7, 0x08, 0xbb, 0x84, 0x8b, 0x44, 0xf3, 0x93, 0x06, 0x0d, 0x59, 0x14, 0xd4,
-	0x83, 0x9a, 0xef, 0xf0, 0xfe, 0x50, 0x16, 0x77, 0x6f, 0xc1, 0xe2, 0x5a, 0xc7, 0x09, 0x04, 0xa7,
-	0x2c, 0xb4, 0x06, 0x3a, 0x0d, 0x09, 0x13, 0x21, 0xa2, 0xbe, 0x3a, 0xce, 0x27, 0xd0, 0xbf, 0x50,
-	0x1b, 0x3b, 0x5e, 0x4c, 0x44, 0x71, 0x74, 0x9c, 0x0e, 0xcc, 0x1d, 0xa8, 0x09, 0x06, 0x5a, 0x85,
-	0x3a, 0x65, 0xee, 0xb5, 0x1b, 0x88, 0x25, 0xe9, 0x58, 0x8e, 0x10, 0x82, 0x6a, 0xe0, 0xf8, 0x44,
-	0xf2, 0xc4, 0xb7, 0xf9, 0x45, 0x83, 0x66, 0x76, 0x10, 0xd0, 0x99, 0x6a, 0x65, 0x7f, 0xd1, 0x13,
-	0xf5, 0x9b, 0xbc, 0x7c, 0xd3, 0xa0, 0xad, 0x9c, 0x3b, 0xf4, 0x52, 0x35, 0x74, 0xb8, 0xd4, 0x29,
-	0x5e, 0xde, 0xd5, 0xc5, 0x02, 0xae, 0x50, 0x07, 0x56, 0xb2, 0xdb, 0x79, 0x92, 0xfc, 0x4b, 0x89,
-	0xca, 0x9c, 0xf9, 0x55, 0x03, 0xc8, 0x6f, 0x03, 0x3a, 0x57, 0x6d, 0x3f, 0x5e, 0xfc, 0x62, 0xfd,
-	0xc1, 0x9e, 0xdf, 0x95, 0xa1, 0x55, 0xb8, 0xa2, 0xe8, 0x42, 0x35, 0xfd, 0x64, 0x89, 0xeb, 0xbe,
-	0xbc, 0xeb, 0xd1, 0x22, 0xae, 0xef, 0xc3, 0x2a, 0xa3, 0x31, 0x27, 0x49, 0x13, 0x74, 0xaf, 0xe3,
-	0x54, 0xa0, 0xe0, 0xff, 0x96, 0xbf, 0x07, 0x75, 0xa8, 0xf2, 0x49, 0x48, 0x3a, 0xef, 0x35, 0xf8,
-	0x47, 0x71, 0xd8, 0x13, 0xad, 0x6e, 0xaa, 0xa5, 0x15, 0xb4, 0x8e, 0xa0, 0x11, 0x32, 0x3a, 0x70,
-	0x3d, 0x22, 0xdb, 0x87, 0x75, 0xe7, 0x7e, 0x9d, 0xa6, 0xf1, 0x29, 0x34, 0xe9, 0x45, 0x12, 0x80,
-	0xf6, 0xa1, 0xc2, 0x9c, 0x1b, 0xd9, 0x29, 0xfe, 0xff, 0x95, 0x7e, 0x3c, 0x65, 0x24, 0x89, 0xd3,
-	0xf5, 0x7f, 0xd0, 0xc0, 0xbc, 0x5d, 0x71, 0xa6, 0x0d, 0x0c, 0xf5, 0xd0, 0x61, 0x8e, 0x9f, 0xbd,
-	0x06, 0xba, 0xf3, 0xb9, 0xb0, 0x4e, 0x45, 0xf2, 0xd3, 0x80, 0xb3, 0x09, 0x96, 0x24, 0xf3, 0x21,
-	0xb4, 0x0a, 0xd3, 0xe8, 0x6f, 0xa8, 0x8c, 0xc8, 0x44, 0xaa, 0x26, 0x9f, 0x79, 0xc9, 0xcb, 0x85,
-	0x92, 0x77, 0xcb, 0xbb, 0x5a, 0xe7, 0x0a, 0x56, 0x67, 0x5b, 0x55, 0x5f, 0x2e, 0xda, 0x52, 0x2f,
-	0x97, 0xce, 0x15, 0x18, 0xb7, 0x85, 0xcd, 0xdc, 0x24, 0x03, 0x1a, 0x63, 0xc2, 0xa2, 0xfc, 0xf8,
-	0x66, 0x43, 0x64, 0x42, 0x33, 0xc3, 0xca, 0x33, 0x36, 0x1d, 0x1f, 0xc0, 0xab, 0x66, 0xb6, 0xaa,
-	0x37, 0x75, 0xf1, 0x56, 0xdc, 0xf9, 0x11, 0x00, 0x00, 0xff, 0xff, 0x51, 0x6c, 0x97, 0xea, 0x83,
-	0x0a, 0x00, 0x00,
+	// 744 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x96, 0x5f, 0x6b, 0xdb, 0x3c,
+	0x14, 0xc6, 0xe3, 0xfc, 0x6d, 0x4e, 0x1a, 0xde, 0x17, 0xbd, 0x2f, 0xc5, 0x98, 0x5e, 0x94, 0x5c,
+	0x8c, 0x52, 0x86, 0x43, 0x5b, 0xd8, 0xba, 0x8c, 0x96, 0xad, 0x65, 0x23, 0x94, 0xb5, 0x14, 0xa5,
+	0x6b, 0xd9, 0x18, 0x14, 0x35, 0x55, 0x1a, 0x13, 0xdb, 0xf2, 0x64, 0x39, 0x5d, 0x3e, 0xc1, 0x3e,
+	0xd5, 0xd8, 0xc5, 0x2e, 0xb6, 0x7d, 0x9c, 0x5d, 0x6d, 0x97, 0xc3, 0xb2, 0x9c, 0x58, 0x2c, 0xa5,
+	0x4b, 0x72, 0xb1, 0x5d, 0x25, 0x92, 0xcf, 0xf9, 0x3d, 0x7a, 0x74, 0x24, 0x8e, 0xa0, 0xe1, 0xd1,
+	0xb0, 0xdf, 0x1c, 0x6e, 0x12, 0x37, 0xe8, 0x93, 0xcd, 0x66, 0xc0, 0xd9, 0xbb, 0xd1, 0x85, 0xa0,
+	0x5e, 0xe0, 0x12, 0x41, 0xed, 0x80, 0x33, 0xc1, 0x10, 0x1a, 0x44, 0x1e, 0xb1, 0xe3, 0x40, 0x3b,
+	0x0d, 0xb4, 0x56, 0xf5, 0xbc, 0x90, 0xba, 0xb4, 0x2b, 0x18, 0x4f, 0x32, 0x1a, 0x5f, 0xfe, 0x81,
+	0xfa, 0x49, 0x8c, 0x3a, 0x55, 0x24, 0xd4, 0x82, 0x6a, 0x1a, 0x13, 0x9a, 0xc6, 0x5a, 0x61, 0xbd,
+	0xb6, 0xb5, 0x6a, 0xff, 0xca, 0xb5, 0x3b, 0x2a, 0x08, 0x4f, 0xc2, 0x51, 0x0b, 0x8a, 0x5d, 0xe6,
+	0xf7, 0xcc, 0xfc, 0x9a, 0xb1, 0x5e, 0xdb, 0xba, 0x37, 0x2d, 0x4d, 0x13, 0xb3, 0x0f, 0x98, 0xdf,
+	0xc3, 0x32, 0xc7, 0xfa, 0x64, 0x40, 0x31, 0x1e, 0x22, 0x13, 0x2a, 0x8e, 0x17, 0x30, 0x2e, 0x12,
+	0xf9, 0x2a, 0x4e, 0x87, 0xe8, 0x10, 0xaa, 0x9c, 0x86, 0x2c, 0xe2, 0x5d, 0x1a, 0x9a, 0x79, 0xb9,
+	0xb4, 0xfb, 0x77, 0x6a, 0x60, 0x72, 0x83, 0x55, 0x12, 0x9e, 0xa4, 0xa3, 0x97, 0x50, 0xf7, 0xd8,
+	0x95, 0xd3, 0x73, 0xba, 0x44, 0x38, 0xcc, 0x0f, 0xcd, 0x82, 0xe4, 0x35, 0xef, 0x5e, 0xf3, 0x51,
+	0x36, 0x0d, 0xeb, 0x14, 0xeb, 0xc7, 0x32, 0xd4, 0xb5, 0x00, 0xd4, 0x81, 0x4a, 0xd7, 0x8d, 0x42,
+	0x41, 0xb9, 0x69, 0xc8, 0x6d, 0x79, 0x38, 0xa3, 0x84, 0x7d, 0x90, 0xa4, 0xb7, 0x73, 0x38, 0x25,
+	0xa1, 0x33, 0x58, 0x72, 0x9d, 0x50, 0x50, 0x9f, 0x72, 0xb5, 0xd9, 0x3b, 0xb3, 0x52, 0x5f, 0xa8,
+	0xfc, 0x76, 0x0e, 0x8f, 0x59, 0x88, 0x42, 0xdd, 0xa7, 0xe2, 0x86, 0xf1, 0xc1, 0x73, 0xc7, 0x8d,
+	0x97, 0x5c, 0x90, 0xf0, 0xdd, 0x59, 0xe1, 0xc7, 0x59, 0x48, 0x3b, 0x87, 0x75, 0x2a, 0x7a, 0x03,
+	0xd0, 0x17, 0x22, 0x50, 0x1a, 0x45, 0xa9, 0xd1, 0x9a, 0x55, 0xa3, 0x3d, 0x26, 0xb4, 0x73, 0x38,
+	0xc3, 0x43, 0x17, 0x50, 0x1b, 0x3a, 0x5c, 0x44, 0xc4, 0x6d, 0xb3, 0x50, 0x98, 0x25, 0x89, 0x7f,
+	0x3c, 0x2b, 0xfe, 0x6c, 0x82, 0x68, 0xe7, 0x70, 0x96, 0x68, 0x7d, 0x36, 0xa0, 0xa2, 0x8a, 0x82,
+	0x3a, 0x50, 0xf2, 0x88, 0xe8, 0xf6, 0x55, 0x71, 0x77, 0xe7, 0x2c, 0xae, 0x7d, 0x14, 0x43, 0x70,
+	0xc2, 0x42, 0xab, 0x50, 0x65, 0x01, 0xe5, 0x32, 0x44, 0xd6, 0xb7, 0x8a, 0x27, 0x13, 0xe8, 0x7f,
+	0x28, 0x0d, 0x89, 0x1b, 0x51, 0x59, 0x9c, 0x2a, 0x4e, 0x06, 0xd6, 0x36, 0x94, 0x24, 0x03, 0xad,
+	0x40, 0x99, 0x71, 0xe7, 0xda, 0xf1, 0xe5, 0x92, 0xaa, 0x58, 0x8d, 0x10, 0x82, 0xa2, 0x4f, 0x3c,
+	0xaa, 0x78, 0xf2, 0xbf, 0xf5, 0xd5, 0x80, 0xa5, 0xf4, 0x20, 0xa0, 0x53, 0xdd, 0xca, 0xde, 0xbc,
+	0x27, 0xea, 0x0f, 0x79, 0xf9, 0x6e, 0x40, 0x5d, 0x3b, 0x77, 0xe8, 0x95, 0x6e, 0xe8, 0x60, 0xa1,
+	0x53, 0xbc, 0xb8, 0xab, 0xf3, 0x39, 0x5c, 0xa1, 0x06, 0x2c, 0xa7, 0xb7, 0xf3, 0x38, 0xfe, 0x96,
+	0x10, 0xb5, 0x39, 0xeb, 0x9b, 0x01, 0x30, 0xb9, 0x0d, 0xe8, 0x4c, 0xb7, 0xfd, 0x64, 0xfe, 0x8b,
+	0xf5, 0x17, 0x7b, 0x7e, 0x9f, 0x87, 0x5a, 0xe6, 0x8a, 0xa2, 0x73, 0xdd, 0xf4, 0xd3, 0x05, 0xae,
+	0xfb, 0xe2, 0xae, 0x07, 0xf3, 0xb8, 0x7e, 0x00, 0x2b, 0x9c, 0x45, 0x82, 0xc6, 0x4d, 0xd0, 0xb9,
+	0x8e, 0x12, 0x81, 0x8c, 0xff, 0x5b, 0xbe, 0xee, 0x97, 0xa1, 0x28, 0x46, 0x01, 0x6d, 0x7c, 0x30,
+	0xe0, 0x3f, 0xcd, 0x61, 0x47, 0xb6, 0xba, 0xb1, 0x96, 0x91, 0xd1, 0x3a, 0x84, 0x4a, 0xc0, 0x59,
+	0xcf, 0x71, 0xa9, 0x6a, 0x1f, 0xf6, 0x9d, 0xfb, 0x75, 0x92, 0xc4, 0x27, 0xd0, 0xb8, 0x17, 0x29,
+	0x00, 0xda, 0x83, 0x02, 0x27, 0x37, 0xaa, 0x53, 0x6c, 0xfc, 0x4e, 0x3f, 0x1e, 0x33, 0xe2, 0xc4,
+	0xf1, 0xfa, 0x3f, 0x1a, 0x60, 0xdd, 0xae, 0x38, 0xd5, 0x06, 0x86, 0x72, 0x40, 0x38, 0xf1, 0xd2,
+	0xd7, 0x40, 0x6b, 0x36, 0x17, 0xf6, 0x89, 0x4c, 0x7e, 0xe6, 0x0b, 0x3e, 0xc2, 0x8a, 0x64, 0x3d,
+	0x82, 0x5a, 0x66, 0x1a, 0xfd, 0x0b, 0x85, 0x01, 0x1d, 0x29, 0xd5, 0xf8, 0xef, 0xa4, 0xe4, 0xf9,
+	0x4c, 0xc9, 0x5b, 0xf9, 0x1d, 0xa3, 0x71, 0x05, 0x2b, 0xd3, 0xad, 0xea, 0x2f, 0x17, 0x63, 0xa1,
+	0x97, 0x4b, 0xe3, 0x0a, 0xcc, 0xdb, 0xc2, 0xa6, 0x6e, 0x92, 0x09, 0x95, 0x21, 0xe5, 0xe1, 0xe4,
+	0xf8, 0xa6, 0x43, 0x64, 0xc1, 0x52, 0x8a, 0x55, 0x67, 0x6c, 0x3c, 0xde, 0xdf, 0x78, 0xbd, 0x7e,
+	0xed, 0x88, 0x7e, 0x74, 0x69, 0x77, 0x99, 0xd7, 0x8c, 0x97, 0xda, 0x7f, 0x2b, 0x7f, 0x9a, 0x24,
+	0x70, 0x9a, 0xda, 0x9b, 0xf2, 0xb2, 0x2c, 0xdf, 0x92, 0xdb, 0x3f, 0x03, 0x00, 0x00, 0xff, 0xff,
+	0x51, 0xb4, 0x29, 0x3c, 0xa3, 0x0a, 0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/proxy_template.proto b/api/mesh/v1alpha1/proxy_template.proto
index b143a2a88..2f4b34e9f 100644
--- a/api/mesh/v1alpha1/proxy_template.proto
+++ b/api/mesh/v1alpha1/proxy_template.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "mesh/v1alpha1/selector.proto";
 
diff --git a/api/mesh/v1alpha1/selector.pb.go b/api/mesh/v1alpha1/selector.pb.go
index 7b66cc25d..a040128d2 100644
--- a/api/mesh/v1alpha1/selector.pb.go
+++ b/api/mesh/v1alpha1/selector.pb.go
@@ -69,7 +69,7 @@ func init() {
 func init() { proto.RegisterFile("mesh/v1alpha1/selector.proto", fileDescriptor_95def39c1d383442) }
 
 var fileDescriptor_95def39c1d383442 = []byte{
-	// 161 bytes of a gzipped FileDescriptorProto
+	// 183 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xc9, 0x4d, 0x2d, 0xce,
 	0xd0, 0x2f, 0x33, 0x4c, 0xcc, 0x29, 0xc8, 0x48, 0x34, 0xd4, 0x2f, 0x4e, 0xcd, 0x49, 0x4d, 0x2e,
 	0xc9, 0x2f, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0xca, 0x2e, 0xcd, 0x4d, 0xd4, 0x03,
@@ -78,7 +78,8 @@ var fileDescriptor_95def39c1d383442 = []byte{
 	0xa0, 0x07, 0x53, 0xac, 0xe7, 0x0b, 0x52, 0xe9, 0x9a, 0x57, 0x52, 0x54, 0x19, 0x04, 0xd1, 0x25,
 	0x65, 0xc1, 0xc5, 0x85, 0x10, 0x14, 0x12, 0xe0, 0x62, 0xce, 0x4e, 0xad, 0x94, 0x60, 0x54, 0x60,
 	0xd4, 0xe0, 0x0c, 0x02, 0x31, 0x85, 0x44, 0xb8, 0x58, 0xcb, 0x12, 0x73, 0x4a, 0x53, 0x25, 0x98,
-	0xc0, 0x62, 0x10, 0x8e, 0x15, 0x93, 0x05, 0xa3, 0x13, 0x57, 0x14, 0x07, 0xcc, 0x82, 0x24, 0x36,
-	0xb0, 0x63, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x0f, 0x3a, 0xd2, 0xdf, 0xcc, 0x00, 0x00,
-	0x00,
+	0xc0, 0x62, 0x10, 0x8e, 0x15, 0x93, 0x05, 0xa3, 0x93, 0x56, 0x94, 0x46, 0x7a, 0x66, 0x49, 0x46,
+	0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x3e, 0xc8, 0xd6, 0x8c, 0x42, 0x30, 0xa5, 0x9f, 0x58, 0x90,
+	0xa9, 0x8f, 0xe2, 0xa9, 0x24, 0x36, 0xb0, 0x67, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x99,
+	0x36, 0x1b, 0x88, 0xec, 0x00, 0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/selector.proto b/api/mesh/v1alpha1/selector.proto
index a22ad6f51..5d3250da6 100644
--- a/api/mesh/v1alpha1/selector.proto
+++ b/api/mesh/v1alpha1/selector.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 // Selector defines structure for selecting tags for given dataplane
 message Selector {
diff --git a/api/mesh/v1alpha1/traffic_log.pb.go b/api/mesh/v1alpha1/traffic_log.pb.go
index ddca41638..4a86f76af 100644
--- a/api/mesh/v1alpha1/traffic_log.pb.go
+++ b/api/mesh/v1alpha1/traffic_log.pb.go
@@ -128,19 +128,20 @@ func init() {
 func init() { proto.RegisterFile("mesh/v1alpha1/traffic_log.proto", fileDescriptor_47c4f4c9c894eeed) }
 
 var fileDescriptor_47c4f4c9c894eeed = []byte{
-	// 212 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0xcf, 0x4d, 0x2d, 0xce,
-	0xd0, 0x2f, 0x33, 0x4c, 0xcc, 0x29, 0xc8, 0x48, 0x34, 0xd4, 0x2f, 0x29, 0x4a, 0x4c, 0x4b, 0xcb,
-	0x4c, 0x8e, 0xcf, 0xc9, 0x4f, 0xd7, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0xca, 0x2e, 0xcd,
-	0x4d, 0xd4, 0x03, 0xa9, 0xd2, 0x83, 0xa9, 0x92, 0x92, 0x41, 0xd5, 0x54, 0x9c, 0x9a, 0x93, 0x9a,
-	0x5c, 0x92, 0x5f, 0x04, 0xd1, 0xa1, 0xf4, 0x90, 0x91, 0x8b, 0x2b, 0x04, 0x62, 0x8e, 0x4f, 0x7e,
-	0xba, 0x90, 0x19, 0x17, 0x7b, 0x71, 0x7e, 0x69, 0x51, 0x72, 0x6a, 0xb1, 0x04, 0xa3, 0x02, 0xb3,
-	0x06, 0xb7, 0x91, 0x8c, 0x1e, 0xa6, 0x91, 0x7a, 0xc1, 0x50, 0x33, 0x82, 0x60, 0x8a, 0x85, 0x1c,
-	0xb8, 0x78, 0x52, 0x52, 0x8b, 0x4b, 0x32, 0xf3, 0x12, 0x4b, 0x32, 0xf3, 0xf3, 0x8a, 0x25, 0x98,
-	0x88, 0xd0, 0x8c, 0xa2, 0x43, 0xc8, 0x9c, 0x8b, 0x25, 0x39, 0x3f, 0x2f, 0x4d, 0x82, 0x59, 0x81,
-	0x51, 0x83, 0xdb, 0x48, 0x19, 0x9b, 0x4e, 0x84, 0x3b, 0xf5, 0x9c, 0xf3, 0xf3, 0xd2, 0x82, 0xc0,
-	0x1a, 0xa4, 0x14, 0xb8, 0x58, 0x40, 0x3c, 0x21, 0x09, 0x2e, 0xf6, 0xa4, 0xc4, 0xe4, 0xec, 0xd4,
-	0xbc, 0x14, 0x09, 0x46, 0x05, 0x46, 0x0d, 0xce, 0x20, 0x18, 0xd7, 0x89, 0x2b, 0x8a, 0x03, 0x66,
-	0x46, 0x12, 0x1b, 0xd8, 0xdb, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa6, 0x25, 0xf4, 0xe3,
-	0x4b, 0x01, 0x00, 0x00,
+	// 233 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xb1, 0x4b, 0xc4, 0x30,
+	0x14, 0xc6, 0x89, 0x77, 0x78, 0xf8, 0xce, 0x29, 0x53, 0x38, 0x0e, 0x2c, 0xba, 0x14, 0x87, 0x84,
+	0x3b, 0x41, 0x57, 0xd1, 0xd5, 0xa9, 0x3a, 0xb9, 0x48, 0x9a, 0x4b, 0x9a, 0x70, 0x6d, 0x5e, 0x4d,
+	0x52, 0xff, 0x5f, 0xff, 0x13, 0x69, 0x6b, 0x91, 0xa2, 0x83, 0xd3, 0xe3, 0x83, 0xef, 0xf7, 0xe3,
+	0xf1, 0xc1, 0x45, 0xa3, 0xa3, 0x15, 0x1f, 0x3b, 0x59, 0xb7, 0x56, 0xee, 0x44, 0x0a, 0xd2, 0x18,
+	0xa7, 0xde, 0x6a, 0xac, 0x78, 0x1b, 0x30, 0x21, 0xa5, 0xc7, 0xae, 0x91, 0xbc, 0x6f, 0xf1, 0xa9,
+	0xb5, 0xd9, 0xce, 0xa1, 0xa8, 0x6b, 0xad, 0x12, 0x86, 0x91, 0xb8, 0xfc, 0x24, 0x00, 0x2f, 0xa3,
+	0xe7, 0x09, 0x2b, 0x7a, 0x0b, 0xab, 0x88, 0x5d, 0x50, 0x3a, 0x32, 0x92, 0x2d, 0xf2, 0xf5, 0x7e,
+	0xcb, 0x7f, 0x2b, 0xf9, 0xf3, 0xb7, 0xa3, 0x98, 0xca, 0xf4, 0x1e, 0xce, 0x0f, 0x3a, 0x26, 0xe7,
+	0x65, 0x72, 0xe8, 0x23, 0x3b, 0xf9, 0x07, 0x3c, 0x23, 0xe8, 0x1d, 0x2c, 0x15, 0x7a, 0xc3, 0x16,
+	0x19, 0xc9, 0xd7, 0xfb, 0xab, 0xbf, 0xc8, 0x9f, 0x3f, 0xf9, 0x23, 0x7a, 0x53, 0x0c, 0xc0, 0x26,
+	0x83, 0x65, 0x9f, 0x28, 0x83, 0x55, 0x29, 0xd5, 0x51, 0xfb, 0x03, 0x23, 0x19, 0xc9, 0xcf, 0x8a,
+	0x29, 0x3e, 0x5c, 0xbf, 0xe6, 0x95, 0x4b, 0xb6, 0x2b, 0xb9, 0xc2, 0x46, 0xf4, 0x62, 0xfb, 0x3e,
+	0x1c, 0x21, 0x5b, 0x27, 0x66, 0xf3, 0x94, 0xa7, 0xc3, 0x2c, 0x37, 0x5f, 0x01, 0x00, 0x00, 0xff,
+	0xff, 0x5b, 0xf8, 0x5a, 0x3a, 0x6b, 0x01, 0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/traffic_log.proto b/api/mesh/v1alpha1/traffic_log.proto
index f66548071..e82f8fa2d 100644
--- a/api/mesh/v1alpha1/traffic_log.proto
+++ b/api/mesh/v1alpha1/traffic_log.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "mesh/v1alpha1/selector.proto";
 
diff --git a/api/mesh/v1alpha1/traffic_permission.pb.go b/api/mesh/v1alpha1/traffic_permission.pb.go
index a361dacc2..a10832218 100644
--- a/api/mesh/v1alpha1/traffic_permission.pb.go
+++ b/api/mesh/v1alpha1/traffic_permission.pb.go
@@ -79,7 +79,7 @@ func init() {
 }
 
 var fileDescriptor_7871a84a653f4288 = []byte{
-	// 165 bytes of a gzipped FileDescriptorProto
+	// 187 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcb, 0x4d, 0x2d, 0xce,
 	0xd0, 0x2f, 0x33, 0x4c, 0xcc, 0x29, 0xc8, 0x48, 0x34, 0xd4, 0x2f, 0x29, 0x4a, 0x4c, 0x4b, 0xcb,
 	0x4c, 0x8e, 0x2f, 0x48, 0x2d, 0xca, 0xcd, 0x2c, 0x2e, 0xce, 0xcc, 0xcf, 0xd3, 0x2b, 0x28, 0xca,
@@ -88,7 +88,8 @@ var fileDescriptor_7871a84a653f4288 = []byte{
 	0x25, 0x18, 0x02, 0x31, 0x2e, 0x00, 0x6e, 0x9a, 0x90, 0x19, 0x17, 0x7b, 0x71, 0x7e, 0x69, 0x51,
 	0x72, 0x6a, 0xb1, 0x04, 0xa3, 0x02, 0xb3, 0x06, 0xb7, 0x91, 0x8c, 0x1e, 0xa6, 0xc9, 0x7a, 0xc1,
 	0x50, 0xa3, 0x82, 0x60, 0x8a, 0x85, 0x1c, 0xb8, 0x78, 0x52, 0x52, 0x8b, 0x4b, 0x32, 0xf3, 0x12,
-	0x4b, 0x32, 0xf3, 0xf3, 0x8a, 0x25, 0x98, 0x88, 0xd0, 0x8c, 0xa2, 0xc3, 0x89, 0x2b, 0x8a, 0x03,
-	0xa6, 0x24, 0x89, 0x0d, 0xec, 0x44, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdb, 0x75, 0x98,
-	0x93, 0xfe, 0x00, 0x00, 0x00,
+	0x4b, 0x32, 0xf3, 0xf3, 0x8a, 0x25, 0x98, 0x88, 0xd0, 0x8c, 0xa2, 0xc3, 0x49, 0x2b, 0x4a, 0x23,
+	0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x1f, 0xa4, 0x2f, 0xa3, 0x10, 0x4c,
+	0xe9, 0x27, 0x16, 0x64, 0xea, 0xa3, 0x78, 0x25, 0x89, 0x0d, 0xec, 0x05, 0x63, 0x40, 0x00, 0x00,
+	0x00, 0xff, 0xff, 0x37, 0xdd, 0x83, 0xfc, 0x1e, 0x01, 0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/traffic_permission.proto b/api/mesh/v1alpha1/traffic_permission.proto
index beff43978..a217dfb12 100644
--- a/api/mesh/v1alpha1/traffic_permission.proto
+++ b/api/mesh/v1alpha1/traffic_permission.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "mesh/v1alpha1/selector.proto";
 
diff --git a/api/mesh/v1alpha1/traffic_route.pb.go b/api/mesh/v1alpha1/traffic_route.pb.go
index 5ed6df12b..5e2f3f60a 100644
--- a/api/mesh/v1alpha1/traffic_route.pb.go
+++ b/api/mesh/v1alpha1/traffic_route.pb.go
@@ -190,28 +190,29 @@ func init() {
 func init() { proto.RegisterFile("mesh/v1alpha1/traffic_route.proto", fileDescriptor_059271a05615c95f) }
 
 var fileDescriptor_059271a05615c95f = []byte{
-	// 361 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0x3f, 0x4b, 0xc3, 0x40,
-	0x18, 0xc6, 0xbd, 0x34, 0x69, 0xe3, 0xdb, 0x2a, 0xf1, 0x28, 0x18, 0x42, 0xc1, 0x5a, 0x50, 0x42,
-	0x87, 0x94, 0xd6, 0x41, 0x71, 0x10, 0x49, 0xd5, 0xc1, 0xc1, 0x21, 0x75, 0x72, 0x91, 0x33, 0xbd,
-	0xd8, 0xd0, 0x34, 0x57, 0x92, 0x4b, 0xa5, 0x5f, 0x41, 0x70, 0x71, 0xf4, 0x9b, 0xf9, 0x55, 0x3a,
-	0x49, 0x2e, 0x09, 0xa6, 0x2a, 0xa8, 0x4b, 0x78, 0xf3, 0xde, 0xfb, 0x7b, 0x9e, 0xe7, 0xfe, 0xc0,
-	0xfe, 0x8c, 0xc6, 0x93, 0xde, 0xa2, 0x4f, 0x82, 0xf9, 0x84, 0xf4, 0x7b, 0x3c, 0x22, 0x9e, 0xe7,
-	0xbb, 0xf7, 0x11, 0x4b, 0x38, 0xb5, 0xe6, 0x11, 0xe3, 0x0c, 0xe3, 0x69, 0x32, 0x23, 0x56, 0x3a,
-	0x67, 0x15, 0x73, 0x46, 0x6b, 0x1d, 0x8b, 0x69, 0x40, 0x5d, 0xce, 0xa2, 0x8c, 0x30, 0x76, 0x17,
-	0x24, 0xf0, 0xc7, 0x84, 0xd3, 0x5e, 0x51, 0x64, 0x0b, 0x9d, 0x17, 0x19, 0x1a, 0xb7, 0x99, 0x85,
-	0x93, 0x3a, 0xe0, 0x73, 0xa8, 0xc5, 0x2c, 0x89, 0x5c, 0x1a, 0xeb, 0xa8, 0x5d, 0x31, 0xeb, 0x83,
-	0x96, 0xf5, 0xdd, 0xcd, 0x1a, 0xe5, 0xf2, 0xb6, 0xba, 0xb2, 0x95, 0x57, 0x24, 0xa9, 0xc8, 0x29,
-	0x30, 0x7c, 0x0d, 0x8d, 0x31, 0x8d, 0xb9, 0x1f, 0x12, 0xee, 0xb3, 0x30, 0xd6, 0xa5, 0x7f, 0xc9,
-	0xac, 0xb1, 0x78, 0x08, 0xb2, 0xcb, 0x42, 0x4f, 0xaf, 0xb4, 0x91, 0x59, 0x1f, 0x1c, 0xfc, 0xa4,
-	0x51, 0x4e, 0x6f, 0x0d, 0x59, 0xe8, 0x09, 0xb1, 0x67, 0x24, 0x69, 0xc8, 0x11, 0xb0, 0xf1, 0x8e,
-	0x40, 0x19, 0xcd, 0x03, 0x9f, 0xe3, 0x3d, 0xa8, 0x3e, 0x51, 0xff, 0x71, 0xc2, 0x75, 0xd4, 0x46,
-	0xe6, 0x96, 0x5d, 0x5b, 0xd9, 0x72, 0x57, 0x32, 0x37, 0x9c, 0xbc, 0x8d, 0x19, 0xd4, 0x4b, 0xfe,
-	0x79, 0xf4, 0xe3, 0x5f, 0x6d, 0x85, 0xba, 0x75, 0xf1, 0x49, 0x5e, 0x86, 0x3c, 0x5a, 0xda, 0xcd,
-	0x95, 0xbd, 0xf3, 0x86, 0xb6, 0x55, 0xd4, 0x91, 0x23, 0x49, 0x43, 0x5d, 0xf1, 0x75, 0xca, 0x0e,
-	0xc6, 0x19, 0x68, 0x5f, 0x31, 0xac, 0x41, 0x65, 0x4a, 0x97, 0x22, 0xe2, 0xa6, 0x93, 0x96, 0xb8,
-	0x09, 0xca, 0x82, 0x04, 0x09, 0xd5, 0x25, 0xd1, 0xcb, 0x7e, 0x4e, 0xa5, 0x13, 0x64, 0xdc, 0x80,
-	0x9c, 0xee, 0x19, 0x5f, 0x81, 0x12, 0xa7, 0x21, 0xf2, 0x4b, 0x3b, 0xfc, 0x5b, 0xe4, 0xd2, 0xb9,
-	0x67, 0xb8, 0x0d, 0x77, 0x6a, 0x31, 0xff, 0x50, 0x15, 0x4f, 0xe4, 0xe8, 0x23, 0x00, 0x00, 0xff,
-	0xff, 0x16, 0xb4, 0x4e, 0x7f, 0x92, 0x02, 0x00, 0x00,
+	// 384 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0x41, 0x4f, 0xa3, 0x40,
+	0x14, 0xc7, 0x77, 0x28, 0xb4, 0xdd, 0x69, 0x77, 0xc3, 0x4e, 0x9a, 0x2c, 0x21, 0x4d, 0xb6, 0xdb,
+	0x64, 0x37, 0xa4, 0x87, 0x21, 0xad, 0x07, 0x8d, 0x07, 0x63, 0xa8, 0x7a, 0xf0, 0xe0, 0x81, 0x7a,
+	0xf2, 0x62, 0xa6, 0x74, 0x28, 0x93, 0x52, 0x06, 0x61, 0xa8, 0xe9, 0x57, 0x30, 0xf1, 0xe2, 0xd1,
+	0x6f, 0xe6, 0x57, 0xe9, 0xc9, 0x30, 0xd0, 0x48, 0xd5, 0x44, 0xbd, 0xc0, 0xe3, 0xf1, 0x7e, 0xff,
+	0xff, 0x1f, 0xe6, 0xc1, 0xbf, 0x4b, 0x9a, 0x06, 0xf6, 0x6a, 0x48, 0xc2, 0x38, 0x20, 0x43, 0x5b,
+	0x24, 0xc4, 0xf7, 0x99, 0x77, 0x9d, 0xf0, 0x4c, 0x50, 0x1c, 0x27, 0x5c, 0x70, 0x84, 0x16, 0xd9,
+	0x92, 0xe0, 0x7c, 0x0e, 0x6f, 0xe7, 0xcc, 0xee, 0x2e, 0x96, 0xd2, 0x90, 0x7a, 0x82, 0x27, 0x05,
+	0x61, 0xfe, 0x5e, 0x91, 0x90, 0xcd, 0x88, 0xa0, 0xf6, 0xb6, 0x28, 0x5e, 0xf4, 0xef, 0x55, 0xd8,
+	0xbe, 0x2c, 0x2c, 0xdc, 0xdc, 0x01, 0x1d, 0xc3, 0x46, 0xca, 0xb3, 0xc4, 0xa3, 0xa9, 0x01, 0x7a,
+	0x35, 0xab, 0x35, 0xea, 0xe2, 0xb7, 0x6e, 0x78, 0x52, 0xca, 0x3b, 0xcd, 0x8d, 0xa3, 0x3d, 0x00,
+	0xa5, 0x09, 0xdc, 0x2d, 0x86, 0xce, 0x61, 0x7b, 0x46, 0x53, 0xc1, 0x22, 0x22, 0x18, 0x8f, 0x52,
+	0x43, 0xf9, 0x92, 0xcc, 0x0e, 0x8b, 0xc6, 0x50, 0xf5, 0x78, 0xe4, 0x1b, 0xb5, 0x1e, 0xb0, 0x5a,
+	0xa3, 0x7f, 0xef, 0x69, 0x54, 0xd3, 0xe3, 0x31, 0x8f, 0x7c, 0x29, 0x76, 0x07, 0x14, 0x1d, 0xb8,
+	0x12, 0x36, 0x9f, 0x00, 0xd4, 0x26, 0x71, 0xc8, 0x04, 0xfa, 0x03, 0xeb, 0xb7, 0x94, 0xcd, 0x03,
+	0x61, 0x80, 0x1e, 0xb0, 0x7e, 0x38, 0x8d, 0x8d, 0xa3, 0x0e, 0x14, 0xeb, 0x9b, 0x5b, 0xb6, 0x11,
+	0x87, 0xad, 0x8a, 0x7f, 0x19, 0x7d, 0xff, 0x43, 0x5b, 0xa9, 0x8e, 0x4f, 0x5e, 0xc8, 0xd3, 0x48,
+	0x24, 0x6b, 0xa7, 0xb3, 0x71, 0x7e, 0x3d, 0x82, 0x9f, 0x4d, 0xd0, 0x57, 0x13, 0x45, 0x07, 0x03,
+	0x79, 0x75, 0xab, 0x0e, 0xe6, 0x11, 0xd4, 0x5f, 0x63, 0x48, 0x87, 0xb5, 0x05, 0x5d, 0xcb, 0x88,
+	0xdf, 0xdd, 0xbc, 0x44, 0x1d, 0xa8, 0xad, 0x48, 0x98, 0x51, 0x43, 0x91, 0xbd, 0xe2, 0xe1, 0x50,
+	0x39, 0x00, 0xe6, 0x05, 0x54, 0xf3, 0x6f, 0x46, 0x67, 0x50, 0x4b, 0xf3, 0x10, 0xe5, 0xa1, 0xfd,
+	0xff, 0x5c, 0xe4, 0xca, 0x7f, 0x2f, 0x70, 0x67, 0x70, 0x65, 0xcd, 0x99, 0x08, 0xb2, 0x29, 0xf6,
+	0xf8, 0xd2, 0xce, 0x45, 0x82, 0x1b, 0x79, 0xb3, 0x49, 0xcc, 0xec, 0x9d, 0x1d, 0x9b, 0xd6, 0xe5,
+	0x0a, 0xed, 0x3d, 0x07, 0x00, 0x00, 0xff, 0xff, 0x30, 0x0f, 0xcb, 0x7b, 0xb2, 0x02, 0x00, 0x00,
 }
diff --git a/api/mesh/v1alpha1/traffic_route.pb.validate.go b/api/mesh/v1alpha1/traffic_route.pb.validate.go
deleted file mode 100644
index 8ef6837bb..000000000
--- a/api/mesh/v1alpha1/traffic_route.pb.validate.go
+++ /dev/null
@@ -1,352 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: mesh/v1alpha1/traffic_route.proto
-
-package v1alpha1
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"net"
-	"net/mail"
-	"net/url"
-	"regexp"
-	"strings"
-	"time"
-	"unicode/utf8"
-
-	"github.com/golang/protobuf/ptypes"
-)
-
-// ensure the imports are used
-var (
-	_ = bytes.MinRead
-	_ = errors.New("")
-	_ = fmt.Print
-	_ = utf8.UTFMax
-	_ = (*regexp.Regexp)(nil)
-	_ = (*strings.Reader)(nil)
-	_ = net.IPv4len
-	_ = time.Duration(0)
-	_ = (*url.URL)(nil)
-	_ = (*mail.Address)(nil)
-	_ = ptypes.DynamicAny{}
-)
-
-// define the regex for a UUID once up-front
-var _traffic_route_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")
-
-// Validate checks the field values on TrafficRoute with the rules defined in
-// the proto definition for this message. If any rules are violated, an error
-// is returned.
-func (m *TrafficRoute) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if len(m.GetSources()) < 1 {
-		return TrafficRouteValidationError{
-			field:  "Sources",
-			reason: "value must contain at least 1 item(s)",
-		}
-	}
-
-	for idx, item := range m.GetSources() {
-		_, _ = idx, item
-
-		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return TrafficRouteValidationError{
-					field:  fmt.Sprintf("Sources[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	if len(m.GetDestinations()) < 1 {
-		return TrafficRouteValidationError{
-			field:  "Destinations",
-			reason: "value must contain at least 1 item(s)",
-		}
-	}
-
-	for idx, item := range m.GetDestinations() {
-		_, _ = idx, item
-
-		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return TrafficRouteValidationError{
-					field:  fmt.Sprintf("Destinations[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	if m.GetConf() == nil {
-		return TrafficRouteValidationError{
-			field:  "Conf",
-			reason: "value is required",
-		}
-	}
-
-	if v, ok := interface{}(m.GetConf()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return TrafficRouteValidationError{
-				field:  "Conf",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// TrafficRouteValidationError is the validation error returned by
-// TrafficRoute.Validate if the designated constraints aren't met.
-type TrafficRouteValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e TrafficRouteValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e TrafficRouteValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e TrafficRouteValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e TrafficRouteValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e TrafficRouteValidationError) ErrorName() string { return "TrafficRouteValidationError" }
-
-// Error satisfies the builtin error interface
-func (e TrafficRouteValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sTrafficRoute.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = TrafficRouteValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = TrafficRouteValidationError{}
-
-// Validate checks the field values on TrafficRoute_Split with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *TrafficRoute_Split) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if m.GetWeight() < 0 {
-		return TrafficRoute_SplitValidationError{
-			field:  "Weight",
-			reason: "value must be greater than or equal to 0",
-		}
-	}
-
-	if len(m.GetDestination()) < 1 {
-		return TrafficRoute_SplitValidationError{
-			field:  "Destination",
-			reason: "value must contain at least 1 pair(s)",
-		}
-	}
-
-	for key, val := range m.GetDestination() {
-		_ = val
-
-		if utf8.RuneCountInString(key) < 1 {
-			return TrafficRoute_SplitValidationError{
-				field:  fmt.Sprintf("Destination[%v]", key),
-				reason: "value length must be at least 1 runes",
-			}
-		}
-
-		if utf8.RuneCountInString(val) < 1 {
-			return TrafficRoute_SplitValidationError{
-				field:  fmt.Sprintf("Destination[%v]", key),
-				reason: "value length must be at least 1 runes",
-			}
-		}
-
-	}
-
-	return nil
-}
-
-// TrafficRoute_SplitValidationError is the validation error returned by
-// TrafficRoute_Split.Validate if the designated constraints aren't met.
-type TrafficRoute_SplitValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e TrafficRoute_SplitValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e TrafficRoute_SplitValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e TrafficRoute_SplitValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e TrafficRoute_SplitValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e TrafficRoute_SplitValidationError) ErrorName() string {
-	return "TrafficRoute_SplitValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e TrafficRoute_SplitValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sTrafficRoute_Split.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = TrafficRoute_SplitValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = TrafficRoute_SplitValidationError{}
-
-// Validate checks the field values on TrafficRoute_Conf with the rules defined
-// in the proto definition for this message. If any rules are violated, an
-// error is returned.
-func (m *TrafficRoute_Conf) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if len(m.GetSplit()) < 1 {
-		return TrafficRoute_ConfValidationError{
-			field:  "Split",
-			reason: "value must contain at least 1 item(s)",
-		}
-	}
-
-	for idx, item := range m.GetSplit() {
-		_, _ = idx, item
-
-		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return TrafficRoute_ConfValidationError{
-					field:  fmt.Sprintf("Split[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	return nil
-}
-
-// TrafficRoute_ConfValidationError is the validation error returned by
-// TrafficRoute_Conf.Validate if the designated constraints aren't met.
-type TrafficRoute_ConfValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e TrafficRoute_ConfValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e TrafficRoute_ConfValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e TrafficRoute_ConfValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e TrafficRoute_ConfValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e TrafficRoute_ConfValidationError) ErrorName() string {
-	return "TrafficRoute_ConfValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e TrafficRoute_ConfValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sTrafficRoute_Conf.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = TrafficRoute_ConfValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = TrafficRoute_ConfValidationError{}
diff --git a/api/mesh/v1alpha1/traffic_route.proto b/api/mesh/v1alpha1/traffic_route.proto
index 5c1107392..3f43db9fc 100644
--- a/api/mesh/v1alpha1/traffic_route.proto
+++ b/api/mesh/v1alpha1/traffic_route.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "mesh/v1alpha1/selector.proto";
 import "validate/validate.proto";
diff --git a/api/mesh/v1alpha1/traffic_trace.pb.go b/api/mesh/v1alpha1/traffic_trace.pb.go
index 8bc30740d..4b52bbef7 100644
--- a/api/mesh/v1alpha1/traffic_trace.pb.go
+++ b/api/mesh/v1alpha1/traffic_trace.pb.go
@@ -119,7 +119,7 @@ func init() {
 func init() { proto.RegisterFile("mesh/v1alpha1/traffic_trace.proto", fileDescriptor_bc2b4b31d8d46cbb) }
 
 var fileDescriptor_bc2b4b31d8d46cbb = []byte{
-	// 187 bytes of a gzipped FileDescriptorProto
+	// 209 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0xcc, 0x4d, 0x2d, 0xce,
 	0xd0, 0x2f, 0x33, 0x4c, 0xcc, 0x29, 0xc8, 0x48, 0x34, 0xd4, 0x2f, 0x29, 0x4a, 0x4c, 0x4b, 0xcb,
 	0x4c, 0x8e, 0x2f, 0x29, 0x4a, 0x4c, 0x4e, 0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0xca,
@@ -130,6 +130,8 @@ var fileDescriptor_bc2b4b31d8d46cbb = []byte{
 	0x92, 0xf3, 0xf3, 0xd2, 0x24, 0x98, 0x15, 0x18, 0x35, 0xb8, 0x8d, 0x54, 0xb1, 0x69, 0x43, 0xb6,
 	0x4b, 0xcf, 0x39, 0x3f, 0x2f, 0x2d, 0x08, 0xac, 0x45, 0x4a, 0x81, 0x8b, 0x05, 0xc4, 0x13, 0x92,
 	0xe0, 0x62, 0x4f, 0x4a, 0x4c, 0xce, 0x4e, 0xcd, 0x4b, 0x91, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0c,
-	0x82, 0x71, 0x9d, 0xb8, 0xa2, 0x38, 0x60, 0xa6, 0x24, 0xb1, 0x81, 0x1d, 0x6f, 0x0c, 0x08, 0x00,
-	0x00, 0xff, 0xff, 0x2b, 0xc3, 0x68, 0xa5, 0x13, 0x01, 0x00, 0x00,
+	0x82, 0x71, 0x9d, 0xb4, 0xa2, 0x34, 0xd2, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73,
+	0xf5, 0x41, 0x46, 0x67, 0x14, 0x82, 0x29, 0xfd, 0xc4, 0x82, 0x4c, 0x7d, 0x14, 0x4f, 0x26, 0xb1,
+	0x81, 0x3d, 0x67, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xf9, 0x2f, 0x6b, 0xec, 0x33, 0x01, 0x00,
+	0x00,
 }
diff --git a/api/mesh/v1alpha1/traffic_trace.proto b/api/mesh/v1alpha1/traffic_trace.proto
index 7c3c4206d..6852922f4 100644
--- a/api/mesh/v1alpha1/traffic_trace.proto
+++ b/api/mesh/v1alpha1/traffic_trace.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.mesh.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/mesh/v1alpha1";
 
 import "mesh/v1alpha1/selector.proto";
 
diff --git a/api/observability/v1alpha1/mads.pb.validate.go b/api/observability/v1alpha1/mads.pb.validate.go
deleted file mode 100644
index 969857957..000000000
--- a/api/observability/v1alpha1/mads.pb.validate.go
+++ /dev/null
@@ -1,198 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: observability/v1alpha1/mads.proto
-
-package v1alpha1
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"net"
-	"net/mail"
-	"net/url"
-	"regexp"
-	"strings"
-	"time"
-	"unicode/utf8"
-
-	"github.com/golang/protobuf/ptypes"
-)
-
-// ensure the imports are used
-var (
-	_ = bytes.MinRead
-	_ = errors.New("")
-	_ = fmt.Print
-	_ = utf8.UTFMax
-	_ = (*regexp.Regexp)(nil)
-	_ = (*strings.Reader)(nil)
-	_ = net.IPv4len
-	_ = time.Duration(0)
-	_ = (*url.URL)(nil)
-	_ = (*mail.Address)(nil)
-	_ = ptypes.DynamicAny{}
-)
-
-// define the regex for a UUID once up-front
-var _mads_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")
-
-// Validate checks the field values on MonitoringAssignment with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *MonitoringAssignment) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if len(m.GetName()) < 1 {
-		return MonitoringAssignmentValidationError{
-			field:  "Name",
-			reason: "value length must be at least 1 bytes",
-		}
-	}
-
-	for idx, item := range m.GetTargets() {
-		_, _ = idx, item
-
-		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return MonitoringAssignmentValidationError{
-					field:  fmt.Sprintf("Targets[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	// no validation rules for Labels
-
-	return nil
-}
-
-// MonitoringAssignmentValidationError is the validation error returned by
-// MonitoringAssignment.Validate if the designated constraints aren't met.
-type MonitoringAssignmentValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e MonitoringAssignmentValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e MonitoringAssignmentValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e MonitoringAssignmentValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e MonitoringAssignmentValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e MonitoringAssignmentValidationError) ErrorName() string {
-	return "MonitoringAssignmentValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e MonitoringAssignmentValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sMonitoringAssignment.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = MonitoringAssignmentValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = MonitoringAssignmentValidationError{}
-
-// Validate checks the field values on MonitoringAssignment_Target with the
-// rules defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *MonitoringAssignment_Target) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Labels
-
-	return nil
-}
-
-// MonitoringAssignment_TargetValidationError is the validation error returned
-// by MonitoringAssignment_Target.Validate if the designated constraints
-// aren't met.
-type MonitoringAssignment_TargetValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e MonitoringAssignment_TargetValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e MonitoringAssignment_TargetValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e MonitoringAssignment_TargetValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e MonitoringAssignment_TargetValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e MonitoringAssignment_TargetValidationError) ErrorName() string {
-	return "MonitoringAssignment_TargetValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e MonitoringAssignment_TargetValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sMonitoringAssignment_Target.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = MonitoringAssignment_TargetValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = MonitoringAssignment_TargetValidationError{}
diff --git a/api/system/v1alpha1/config.pb.go b/api/system/v1alpha1/config.pb.go
index 23e5a4a38..8d5a1580b 100644
--- a/api/system/v1alpha1/config.pb.go
+++ b/api/system/v1alpha1/config.pb.go
@@ -69,12 +69,13 @@ func init() {
 func init() { proto.RegisterFile("system/v1alpha1/config.proto", fileDescriptor_7a5fd8fca9a69870) }
 
 var fileDescriptor_7a5fd8fca9a69870 = []byte{
-	// 99 bytes of a gzipped FileDescriptorProto
+	// 121 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x29, 0xae, 0x2c, 0x2e,
 	0x49, 0xcd, 0xd5, 0x2f, 0x33, 0x4c, 0xcc, 0x29, 0xc8, 0x48, 0x34, 0xd4, 0x4f, 0xce, 0xcf, 0x4b,
 	0xcb, 0x4c, 0xd7, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0xc9, 0x2e, 0xcd, 0x4d, 0xd4, 0x83,
 	0x28, 0xd1, 0x83, 0x29, 0x51, 0x52, 0xe0, 0x62, 0x73, 0x06, 0xab, 0x12, 0x12, 0xe3, 0x62, 0x83,
-	0xa8, 0x97, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0c, 0x82, 0xf2, 0x9c, 0xb8, 0xa2, 0x38, 0x60, 0xaa,
-	0x93, 0xd8, 0xc0, 0x46, 0x19, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x9d, 0x54, 0xf3, 0x80, 0x6a,
-	0x00, 0x00, 0x00,
+	0xa8, 0x97, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0c, 0x82, 0xf2, 0x9c, 0x74, 0xa2, 0xb4, 0xd2, 0x33,
+	0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x41, 0x86, 0x64, 0x14, 0x82, 0x29, 0xfd,
+	0xc4, 0x82, 0x4c, 0x7d, 0x34, 0x2b, 0x93, 0xd8, 0xc0, 0x96, 0x19, 0x03, 0x02, 0x00, 0x00, 0xff,
+	0xff, 0x07, 0x87, 0xdd, 0x02, 0x8c, 0x00, 0x00, 0x00,
 }
diff --git a/api/system/v1alpha1/config.pb.validate.go b/api/system/v1alpha1/config.pb.validate.go
deleted file mode 100644
index 88cc8e0fc..000000000
--- a/api/system/v1alpha1/config.pb.validate.go
+++ /dev/null
@@ -1,103 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: system/v1alpha1/config.proto
-
-package v1alpha1
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"net"
-	"net/mail"
-	"net/url"
-	"regexp"
-	"strings"
-	"time"
-	"unicode/utf8"
-
-	"github.com/golang/protobuf/ptypes"
-)
-
-// ensure the imports are used
-var (
-	_ = bytes.MinRead
-	_ = errors.New("")
-	_ = fmt.Print
-	_ = utf8.UTFMax
-	_ = (*regexp.Regexp)(nil)
-	_ = (*strings.Reader)(nil)
-	_ = net.IPv4len
-	_ = time.Duration(0)
-	_ = (*url.URL)(nil)
-	_ = (*mail.Address)(nil)
-	_ = ptypes.DynamicAny{}
-)
-
-// define the regex for a UUID once up-front
-var _config_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")
-
-// Validate checks the field values on Config with the rules defined in the
-// proto definition for this message. If any rules are violated, an error is returned.
-func (m *Config) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for Config
-
-	return nil
-}
-
-// ConfigValidationError is the validation error returned by Config.Validate if
-// the designated constraints aren't met.
-type ConfigValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e ConfigValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ConfigValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ConfigValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ConfigValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ConfigValidationError) ErrorName() string { return "ConfigValidationError" }
-
-// Error satisfies the builtin error interface
-func (e ConfigValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sConfig.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = ConfigValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = ConfigValidationError{}
diff --git a/api/system/v1alpha1/config.proto b/api/system/v1alpha1/config.proto
index 00789d089..b92e80f01 100644
--- a/api/system/v1alpha1/config.proto
+++ b/api/system/v1alpha1/config.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.system.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/system/v1alpha1";
 
 // Config is a entity that represents dynamic configuration that is stored in
 // underlying storage. For now it's used only for internal mechanisms.
diff --git a/api/system/v1alpha1/datasource.pb.go b/api/system/v1alpha1/datasource.pb.go
index 98c8fb97f..17952114e 100644
--- a/api/system/v1alpha1/datasource.pb.go
+++ b/api/system/v1alpha1/datasource.pb.go
@@ -124,18 +124,19 @@ func init() {
 func init() { proto.RegisterFile("system/v1alpha1/datasource.proto", fileDescriptor_4cdac177af1029de) }
 
 var fileDescriptor_4cdac177af1029de = []byte{
-	// 196 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x34, 0x8e, 0x3f, 0x4b, 0xc7, 0x30,
-	0x10, 0x86, 0xad, 0x96, 0xa0, 0xe7, 0x16, 0x3a, 0x04, 0x05, 0x29, 0x4e, 0x9d, 0x12, 0xaa, 0xf8,
-	0x05, 0x8a, 0x83, 0xb3, 0x82, 0x83, 0xdb, 0xb5, 0x5e, 0x6b, 0x31, 0x6d, 0x42, 0xfe, 0x28, 0xc5,
-	0x2f, 0x2f, 0xbf, 0xa4, 0x1d, 0xdf, 0xe3, 0x79, 0xdf, 0xe7, 0xa0, 0xf6, 0x9b, 0x0f, 0xb4, 0xa8,
-	0x9f, 0x16, 0xb5, 0xfd, 0xc2, 0x56, 0x7d, 0x62, 0x40, 0x6f, 0xa2, 0x1b, 0x48, 0x5a, 0x67, 0x82,
-	0xe1, 0xd5, 0x77, 0x5c, 0x50, 0x66, 0x4c, 0x1e, 0xd8, 0xcd, 0xdd, 0x64, 0xcc, 0xa4, 0x49, 0x25,
-	0xa6, 0x8f, 0xa3, 0xfa, 0x75, 0x68, 0x2d, 0x39, 0x9f, 0x5b, 0xf7, 0x7f, 0x00, 0xcf, 0x18, 0xf0,
-	0x2d, 0x2d, 0x71, 0x01, 0xcc, 0xd3, 0xe0, 0x28, 0x88, 0xa2, 0x2e, 0x9a, 0xab, 0x97, 0xb3, 0xd7,
-	0x3d, 0xf3, 0x0a, 0xca, 0x71, 0xd6, 0x24, 0xce, 0xf7, 0x7b, 0x4a, 0xfc, 0x09, 0xd8, 0xbc, 0xea,
-	0x79, 0x25, 0x71, 0x51, 0x17, 0xcd, 0xf5, 0xc3, 0xad, 0xcc, 0x3a, 0x79, 0xe8, 0x64, 0xb7, 0x05,
-	0xf2, 0xef, 0xa8, 0x23, 0x9d, 0xc6, 0x32, 0xdc, 0x31, 0x28, 0xc3, 0x66, 0xa9, 0x83, 0x8f, 0xcb,
-	0xe3, 0xd1, 0x9e, 0xa5, 0xca, 0xe3, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc6, 0xa1, 0x21, 0x28,
-	0xe9, 0x00, 0x00, 0x00,
+	// 216 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x8f, 0xc1, 0x4a, 0xc4, 0x30,
+	0x10, 0x86, 0xad, 0x2e, 0x01, 0xe3, 0x2d, 0xec, 0x21, 0x28, 0x48, 0xf1, 0xb4, 0x88, 0x24, 0xac,
+	0xe2, 0x0b, 0x14, 0x0f, 0x9e, 0x15, 0x3c, 0x78, 0x9b, 0xd6, 0xd9, 0x36, 0x98, 0x6e, 0x62, 0x32,
+	0x51, 0x8a, 0x2f, 0x2f, 0x4d, 0xda, 0x8b, 0xa7, 0xf0, 0x87, 0x6f, 0xbe, 0x7f, 0x86, 0xd7, 0x71,
+	0x8a, 0x84, 0xa3, 0xfe, 0xde, 0x83, 0xf5, 0x03, 0xec, 0xf5, 0x07, 0x10, 0x44, 0x97, 0x42, 0x87,
+	0xca, 0x07, 0x47, 0x4e, 0x6c, 0x3f, 0xd3, 0x08, 0xaa, 0x60, 0x6a, 0xc5, 0x2e, 0xaf, 0x7b, 0xe7,
+	0x7a, 0x8b, 0x3a, 0x33, 0x6d, 0x3a, 0xe8, 0x9f, 0x00, 0xde, 0x63, 0x88, 0x65, 0xea, 0xe6, 0x97,
+	0xf3, 0x27, 0x20, 0x78, 0xcd, 0x26, 0x21, 0x39, 0x8b, 0xd8, 0x05, 0x24, 0x59, 0xd5, 0xd5, 0xee,
+	0xfc, 0xf9, 0xe4, 0x65, 0xc9, 0x62, 0xcb, 0x37, 0x07, 0x63, 0x51, 0x9e, 0x2e, 0xff, 0x39, 0x89,
+	0x47, 0xce, 0xcc, 0xd1, 0x9a, 0x23, 0xca, 0xb3, 0xba, 0xda, 0x5d, 0xdc, 0x5f, 0xa9, 0x52, 0xa7,
+	0xd6, 0x3a, 0xd5, 0x4c, 0x84, 0xf1, 0x0d, 0x6c, 0xc2, 0x59, 0x56, 0xe0, 0x86, 0xf1, 0x0d, 0x4d,
+	0x1e, 0x9b, 0xbb, 0xf7, 0xdb, 0xde, 0xd0, 0x90, 0x5a, 0xd5, 0xb9, 0x51, 0xcf, 0xfb, 0x0f, 0x5f,
+	0xf9, 0xd1, 0xe0, 0x8d, 0xfe, 0x77, 0x71, 0xcb, 0xb2, 0xf4, 0xe1, 0x2f, 0x00, 0x00, 0xff, 0xff,
+	0xc9, 0xd1, 0xd0, 0x02, 0x0b, 0x01, 0x00, 0x00,
 }
diff --git a/api/system/v1alpha1/datasource.pb.validate.go b/api/system/v1alpha1/datasource.pb.validate.go
deleted file mode 100644
index 16542deff..000000000
--- a/api/system/v1alpha1/datasource.pb.validate.go
+++ /dev/null
@@ -1,123 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: system/v1alpha1/datasource.proto
-
-package v1alpha1
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"net"
-	"net/mail"
-	"net/url"
-	"regexp"
-	"strings"
-	"time"
-	"unicode/utf8"
-
-	"github.com/golang/protobuf/ptypes"
-)
-
-// ensure the imports are used
-var (
-	_ = bytes.MinRead
-	_ = errors.New("")
-	_ = fmt.Print
-	_ = utf8.UTFMax
-	_ = (*regexp.Regexp)(nil)
-	_ = (*strings.Reader)(nil)
-	_ = net.IPv4len
-	_ = time.Duration(0)
-	_ = (*url.URL)(nil)
-	_ = (*mail.Address)(nil)
-	_ = ptypes.DynamicAny{}
-)
-
-// define the regex for a UUID once up-front
-var _datasource_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")
-
-// Validate checks the field values on DataSource with the rules defined in the
-// proto definition for this message. If any rules are violated, an error is returned.
-func (m *DataSource) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	switch m.Type.(type) {
-
-	case *DataSource_Secret:
-		// no validation rules for Secret
-
-	case *DataSource_File:
-		// no validation rules for File
-
-	case *DataSource_Inline:
-
-		if v, ok := interface{}(m.GetInline()).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return DataSourceValidationError{
-					field:  "Inline",
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	return nil
-}
-
-// DataSourceValidationError is the validation error returned by
-// DataSource.Validate if the designated constraints aren't met.
-type DataSourceValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e DataSourceValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e DataSourceValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e DataSourceValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e DataSourceValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e DataSourceValidationError) ErrorName() string { return "DataSourceValidationError" }
-
-// Error satisfies the builtin error interface
-func (e DataSourceValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sDataSource.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = DataSourceValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = DataSourceValidationError{}
diff --git a/api/system/v1alpha1/datasource.proto b/api/system/v1alpha1/datasource.proto
index 1542a1614..93e0929d3 100644
--- a/api/system/v1alpha1/datasource.proto
+++ b/api/system/v1alpha1/datasource.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.system.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/system/v1alpha1";
 
 import "google/protobuf/wrappers.proto";
 
diff --git a/api/system/v1alpha1/secret.pb.go b/api/system/v1alpha1/secret.pb.go
index ff5e6e9bf..87d2e40b9 100644
--- a/api/system/v1alpha1/secret.pb.go
+++ b/api/system/v1alpha1/secret.pb.go
@@ -69,7 +69,7 @@ func init() {
 func init() { proto.RegisterFile("system/v1alpha1/secret.proto", fileDescriptor_d1fd9b3e953ffaf0) }
 
 var fileDescriptor_d1fd9b3e953ffaf0 = []byte{
-	// 145 bytes of a gzipped FileDescriptorProto
+	// 167 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x29, 0xae, 0x2c, 0x2e,
 	0x49, 0xcd, 0xd5, 0x2f, 0x33, 0x4c, 0xcc, 0x29, 0xc8, 0x48, 0x34, 0xd4, 0x2f, 0x4e, 0x4d, 0x2e,
 	0x4a, 0x2d, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0xc9, 0x2e, 0xcd, 0x4d, 0xd4, 0x83,
@@ -77,7 +77,8 @@ var fileDescriptor_d1fd9b3e953ffaf0 = []byte{
 	0x2a, 0x4d, 0xd3, 0x2f, 0x2f, 0x4a, 0x2c, 0x28, 0x48, 0x2d, 0x2a, 0x86, 0xe8, 0x52, 0xb2, 0xe4,
 	0x62, 0x0b, 0x06, 0x9b, 0x22, 0xa4, 0xcf, 0xc5, 0x92, 0x92, 0x58, 0x92, 0x28, 0xc1, 0xa8, 0xc0,
 	0xa8, 0xc1, 0x6d, 0x24, 0xad, 0x07, 0xd1, 0xa8, 0x07, 0xd3, 0xa8, 0xe7, 0x54, 0x59, 0x92, 0x5a,
-	0x1c, 0x96, 0x98, 0x53, 0x9a, 0x1a, 0x04, 0x56, 0xe8, 0xc4, 0x15, 0xc5, 0x01, 0xb3, 0x26, 0x89,
-	0x0d, 0xac, 0xcc, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x3d, 0xc8, 0xa2, 0x7a, 0xa3, 0x00, 0x00,
-	0x00,
+	0x1c, 0x96, 0x98, 0x53, 0x9a, 0x1a, 0x04, 0x56, 0xe8, 0xa4, 0x13, 0xa5, 0x95, 0x9e, 0x59, 0x92,
+	0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x0f, 0xb2, 0x3d, 0xa3, 0x10, 0x4c, 0xe9, 0x27, 0x16,
+	0x64, 0xea, 0xa3, 0xb9, 0x35, 0x89, 0x0d, 0x6c, 0x90, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x90,
+	0x23, 0xb5, 0xa2, 0xc5, 0x00, 0x00, 0x00,
 }
diff --git a/api/system/v1alpha1/secret.pb.validate.go b/api/system/v1alpha1/secret.pb.validate.go
deleted file mode 100644
index 9abeea0e0..000000000
--- a/api/system/v1alpha1/secret.pb.validate.go
+++ /dev/null
@@ -1,111 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: system/v1alpha1/secret.proto
-
-package v1alpha1
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"net"
-	"net/mail"
-	"net/url"
-	"regexp"
-	"strings"
-	"time"
-	"unicode/utf8"
-
-	"github.com/golang/protobuf/ptypes"
-)
-
-// ensure the imports are used
-var (
-	_ = bytes.MinRead
-	_ = errors.New("")
-	_ = fmt.Print
-	_ = utf8.UTFMax
-	_ = (*regexp.Regexp)(nil)
-	_ = (*strings.Reader)(nil)
-	_ = net.IPv4len
-	_ = time.Duration(0)
-	_ = (*url.URL)(nil)
-	_ = (*mail.Address)(nil)
-	_ = ptypes.DynamicAny{}
-)
-
-// define the regex for a UUID once up-front
-var _secret_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")
-
-// Validate checks the field values on Secret with the rules defined in the
-// proto definition for this message. If any rules are violated, an error is returned.
-func (m *Secret) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return SecretValidationError{
-				field:  "Data",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// SecretValidationError is the validation error returned by Secret.Validate if
-// the designated constraints aren't met.
-type SecretValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e SecretValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e SecretValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e SecretValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e SecretValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e SecretValidationError) ErrorName() string { return "SecretValidationError" }
-
-// Error satisfies the builtin error interface
-func (e SecretValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sSecret.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = SecretValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = SecretValidationError{}
diff --git a/api/system/v1alpha1/secret.proto b/api/system/v1alpha1/secret.proto
index 95f3a99fd..9dea72612 100644
--- a/api/system/v1alpha1/secret.proto
+++ b/api/system/v1alpha1/secret.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.system.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/system/v1alpha1";
 
 import "google/protobuf/wrappers.proto";
 
diff --git a/api/system/v1alpha1/zone.pb.go b/api/system/v1alpha1/zone.pb.go
index 8cf14f42e..cec985db1 100644
--- a/api/system/v1alpha1/zone.pb.go
+++ b/api/system/v1alpha1/zone.pb.go
@@ -60,11 +60,12 @@ func init() {
 func init() { proto.RegisterFile("system/v1alpha1/zone.proto", fileDescriptor_0b77e158d4963c0f) }
 
 var fileDescriptor_0b77e158d4963c0f = []byte{
-	// 83 bytes of a gzipped FileDescriptorProto
+	// 105 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2a, 0xae, 0x2c, 0x2e,
 	0x49, 0xcd, 0xd5, 0x2f, 0x33, 0x4c, 0xcc, 0x29, 0xc8, 0x48, 0x34, 0xd4, 0xaf, 0xca, 0xcf, 0x4b,
 	0xd5, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0xc9, 0x2e, 0xcd, 0x4d, 0xd4, 0x83, 0x28, 0xd0,
-	0x83, 0x29, 0x50, 0x62, 0xe3, 0x62, 0x89, 0xca, 0xcf, 0x4b, 0x75, 0xe2, 0x8a, 0xe2, 0x80, 0x89,
-	0x25, 0xb1, 0x81, 0x35, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0xa4, 0xd6, 0x08, 0x45, 0x4e,
-	0x00, 0x00, 0x00,
+	0x83, 0x29, 0x50, 0x62, 0xe3, 0x62, 0x89, 0xca, 0xcf, 0x4b, 0x75, 0xd2, 0x89, 0xd2, 0x4a, 0xcf,
+	0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x07, 0x29, 0xcd, 0x28, 0x04, 0x53, 0xfa,
+	0x89, 0x05, 0x99, 0xfa, 0x68, 0xc6, 0x26, 0xb1, 0x81, 0x8d, 0x34, 0x06, 0x04, 0x00, 0x00, 0xff,
+	0xff, 0xf9, 0x11, 0xf0, 0x14, 0x70, 0x00, 0x00, 0x00,
 }
diff --git a/api/system/v1alpha1/zone.pb.validate.go b/api/system/v1alpha1/zone.pb.validate.go
deleted file mode 100644
index 9917a365c..000000000
--- a/api/system/v1alpha1/zone.pb.validate.go
+++ /dev/null
@@ -1,101 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: system/v1alpha1/zone.proto
-
-package v1alpha1
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"net"
-	"net/mail"
-	"net/url"
-	"regexp"
-	"strings"
-	"time"
-	"unicode/utf8"
-
-	"github.com/golang/protobuf/ptypes"
-)
-
-// ensure the imports are used
-var (
-	_ = bytes.MinRead
-	_ = errors.New("")
-	_ = fmt.Print
-	_ = utf8.UTFMax
-	_ = (*regexp.Regexp)(nil)
-	_ = (*strings.Reader)(nil)
-	_ = net.IPv4len
-	_ = time.Duration(0)
-	_ = (*url.URL)(nil)
-	_ = (*mail.Address)(nil)
-	_ = ptypes.DynamicAny{}
-)
-
-// define the regex for a UUID once up-front
-var _zone_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")
-
-// Validate checks the field values on Zone with the rules defined in the proto
-// definition for this message. If any rules are violated, an error is returned.
-func (m *Zone) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	return nil
-}
-
-// ZoneValidationError is the validation error returned by Zone.Validate if the
-// designated constraints aren't met.
-type ZoneValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e ZoneValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ZoneValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ZoneValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ZoneValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ZoneValidationError) ErrorName() string { return "ZoneValidationError" }
-
-// Error satisfies the builtin error interface
-func (e ZoneValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sZone.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = ZoneValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = ZoneValidationError{}
diff --git a/api/system/v1alpha1/zone.proto b/api/system/v1alpha1/zone.proto
index 22c35eeb4..b74d17f8d 100644
--- a/api/system/v1alpha1/zone.proto
+++ b/api/system/v1alpha1/zone.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.system.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/system/v1alpha1";
 
 // Zone defines the Zone configuration used at the Global Control Plane
 // within a distributed deployment
diff --git a/api/system/v1alpha1/zone_insight.pb.go b/api/system/v1alpha1/zone_insight.pb.go
index 01ee4eb03..a9ed62cb7 100644
--- a/api/system/v1alpha1/zone_insight.pb.go
+++ b/api/system/v1alpha1/zone_insight.pb.go
@@ -279,37 +279,38 @@ func init() {
 }
 
 var fileDescriptor_557f55c8870024f9 = []byte{
-	// 507 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x52, 0xdd, 0x6e, 0xd3, 0x30,
-	0x14, 0x96, 0xd3, 0x74, 0x74, 0x2e, 0xdb, 0x8a, 0xc5, 0x58, 0xd4, 0x1b, 0xaa, 0x4a, 0x93, 0x2a,
-	0x21, 0x52, 0x6d, 0xa8, 0x12, 0x82, 0x2b, 0xca, 0x10, 0xaa, 0x26, 0x6e, 0x5c, 0xb8, 0xe9, 0x05,
-	0x91, 0x9b, 0x1c, 0x32, 0xd3, 0xd4, 0x8e, 0x62, 0xa7, 0xa8, 0x3c, 0x02, 0x0f, 0xc1, 0x43, 0xf0,
-	0x00, 0xdc, 0xf1, 0x52, 0xbb, 0x42, 0xb6, 0x9b, 0xfe, 0xa0, 0x89, 0x6d, 0x57, 0x89, 0xfc, 0x7d,
-	0xdf, 0x39, 0xdf, 0x39, 0xe7, 0xc3, 0x5d, 0xb5, 0x54, 0x1a, 0xe6, 0xfd, 0xc5, 0x19, 0xcb, 0xf2,
-	0x2b, 0x76, 0xd6, 0xff, 0x2e, 0x05, 0x44, 0x5c, 0x28, 0x9e, 0x5e, 0xe9, 0x30, 0x2f, 0xa4, 0x96,
-	0xe4, 0xf1, 0xac, 0x9c, 0xb3, 0xd0, 0x11, 0xc3, 0x8a, 0xd8, 0x7e, 0x9a, 0x4a, 0x99, 0x66, 0xd0,
-	0xb7, 0x9c, 0x69, 0xf9, 0xa5, 0xaf, 0xf9, 0x1c, 0x94, 0x66, 0xf3, 0xdc, 0xc9, 0xda, 0x27, 0x0b,
-	0x96, 0xf1, 0x84, 0x69, 0xe8, 0x57, 0x3f, 0x0e, 0xe8, 0x4e, 0x70, 0x73, 0x22, 0x05, 0x8c, 0x5c,
-	0x13, 0x72, 0x89, 0x0f, 0x54, 0x39, 0x55, 0x71, 0xc1, 0x73, 0xcd, 0xa5, 0x50, 0x01, 0xea, 0xd4,
-	0x7a, 0xcd, 0xf3, 0xd3, 0xf0, 0xa6, 0xb6, 0xe1, 0xe5, 0xc5, 0x78, 0xbc, 0xc5, 0xa6, 0xbb, 0xda,
-	0xee, 0x6f, 0x0f, 0x1f, 0xfd, 0x43, 0x21, 0x27, 0xd8, 0xe3, 0x49, 0x80, 0x3a, 0xa8, 0xb7, 0x3f,
-	0x7c, 0x70, 0x3d, 0xf4, 0x0b, 0xaf, 0x85, 0xa8, 0xc7, 0x13, 0x32, 0xc0, 0x24, 0xcd, 0xe4, 0x94,
-	0x65, 0x66, 0x60, 0xcd, 0x44, 0x0c, 0x11, 0x4f, 0x02, 0x6f, 0x97, 0xd8, 0x72, 0x94, 0xd1, 0x8a,
-	0x31, 0x4a, 0xc8, 0x7b, 0xfc, 0x30, 0x96, 0x42, 0x40, 0xac, 0x23, 0x33, 0x73, 0x50, 0xeb, 0xa0,
-	0x5e, 0xf3, 0xbc, 0x1d, 0xba, 0x85, 0x84, 0xd5, 0x42, 0xc2, 0x8f, 0xd5, 0x42, 0x86, 0x8d, 0xeb,
-	0x61, 0xfd, 0x17, 0xf2, 0x1a, 0x88, 0x36, 0x57, 0x4a, 0x83, 0x91, 0xb7, 0xf8, 0x28, 0xe1, 0x6a,
-	0xa7, 0x96, 0x7f, 0x5b, 0x2d, 0x7a, 0xb8, 0x91, 0xd8, 0x22, 0x1f, 0xf0, 0x9e, 0xd2, 0x4c, 0x97,
-	0x2a, 0xa8, 0x5b, 0xed, 0xb3, 0x3b, 0xed, 0x6d, 0x6c, 0x25, 0xd6, 0xd8, 0x0f, 0x64, 0xc6, 0x5c,
-	0x15, 0xe9, 0xfe, 0xf1, 0xf0, 0xf1, 0x8d, 0x5c, 0x72, 0x81, 0x5b, 0x19, 0x53, 0x3a, 0x2a, 0x73,
-	0x73, 0x4b, 0x67, 0x17, 0xdd, 0x6e, 0xd7, 0x68, 0x3e, 0x59, 0x89, 0xb5, 0xfb, 0x1a, 0xd7, 0xb5,
-	0xd4, 0x2c, 0xb3, 0x6b, 0xfe, 0xef, 0x95, 0xa1, 0x58, 0xf0, 0x18, 0x4c, 0x73, 0x45, 0x9d, 0x86,
-	0x8c, 0xb0, 0x6f, 0x6c, 0x06, 0x35, 0x9b, 0x90, 0xc1, 0x3d, 0x26, 0x0d, 0xcd, 0xe7, 0x9d, 0xd0,
-	0xc5, 0x92, 0xda, 0x12, 0xed, 0xcf, 0x78, 0x7f, 0xfd, 0x44, 0x5a, 0xb8, 0x36, 0x83, 0xa5, 0x8b,
-	0x08, 0x35, 0xbf, 0xc6, 0xe6, 0x82, 0x65, 0x25, 0xdc, 0xd3, 0xa6, 0xd5, 0xbc, 0xf2, 0x5e, 0xa2,
-	0xee, 0x4f, 0xe4, 0x82, 0xb8, 0x05, 0x93, 0x53, 0x7c, 0x58, 0x80, 0xca, 0xa5, 0x50, 0xa0, 0x22,
-	0x05, 0x42, 0xdb, 0x8e, 0x3e, 0x3d, 0x58, 0xbf, 0x8e, 0x41, 0x68, 0x32, 0xc0, 0x4f, 0x36, 0x34,
-	0x16, 0xcf, 0x84, 0xfc, 0x96, 0x41, 0x92, 0x82, 0x8b, 0xa6, 0x4f, 0x8f, 0xd7, 0xe8, 0x9b, 0x2d,
-	0x90, 0x3c, 0xc7, 0x64, 0x23, 0x2b, 0xe0, 0x2b, 0xc4, 0x1a, 0x12, 0x1b, 0x4e, 0x9f, 0x3e, 0x5a,
-	0x23, 0x74, 0x05, 0x0c, 0xf1, 0xa4, 0x51, 0xcd, 0x31, 0xdd, 0xb3, 0x87, 0x7b, 0xf1, 0x37, 0x00,
-	0x00, 0xff, 0xff, 0xcf, 0xec, 0x33, 0x93, 0x0e, 0x04, 0x00, 0x00,
+	// 525 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xcb, 0x6e, 0x13, 0x31,
+	0x14, 0x95, 0x27, 0x93, 0xd2, 0x3a, 0xb4, 0x0d, 0x16, 0xa5, 0xa3, 0x6c, 0x88, 0x22, 0x55, 0x8a,
+	0x78, 0xcc, 0xa8, 0x45, 0x91, 0x10, 0xac, 0x08, 0x45, 0x28, 0xaa, 0xd8, 0x38, 0xb0, 0xc9, 0x82,
+	0xc8, 0x99, 0xb9, 0x4c, 0x4c, 0x26, 0xf6, 0x30, 0xf6, 0x04, 0x85, 0x4f, 0xe0, 0x23, 0xf8, 0x08,
+	0x3e, 0x80, 0x1d, 0x3f, 0xd5, 0x15, 0xb2, 0x9d, 0x67, 0x55, 0xd1, 0x76, 0x65, 0xcb, 0xe7, 0x9c,
+	0x7b, 0xcf, 0x7d, 0xc8, 0xb8, 0xa5, 0xe6, 0x4a, 0xc3, 0x34, 0x9a, 0x9d, 0xb2, 0x2c, 0x1f, 0xb3,
+	0xd3, 0xe8, 0x87, 0x14, 0x30, 0xe4, 0x42, 0xf1, 0x74, 0xac, 0xc3, 0xbc, 0x90, 0x5a, 0x92, 0x87,
+	0x93, 0x72, 0xca, 0x42, 0x47, 0x0c, 0x97, 0xc4, 0xc6, 0xe3, 0x54, 0xca, 0x34, 0x83, 0xc8, 0x72,
+	0x46, 0xe5, 0x97, 0x48, 0xf3, 0x29, 0x28, 0xcd, 0xa6, 0xb9, 0x93, 0x35, 0x8e, 0x67, 0x2c, 0xe3,
+	0x09, 0xd3, 0x10, 0x2d, 0x2f, 0x0e, 0x68, 0x0d, 0x70, 0x6d, 0x20, 0x05, 0xf4, 0x5c, 0x12, 0x72,
+	0x81, 0xf7, 0x55, 0x39, 0x52, 0x71, 0xc1, 0x73, 0xcd, 0xa5, 0x50, 0x01, 0x6a, 0x56, 0xda, 0xb5,
+	0xb3, 0x93, 0xf0, 0xba, 0xb4, 0xe1, 0xc5, 0x79, 0xbf, 0xbf, 0xc1, 0xa6, 0xdb, 0xda, 0xd6, 0x1f,
+	0x0f, 0x1f, 0x5e, 0xa1, 0x90, 0x63, 0xec, 0xf1, 0x24, 0x40, 0x4d, 0xd4, 0xde, 0xeb, 0xde, 0xbb,
+	0xec, 0xfa, 0x85, 0x57, 0x47, 0xd4, 0xe3, 0x09, 0xe9, 0x60, 0x92, 0x66, 0x72, 0xc4, 0x32, 0x53,
+	0xb0, 0x66, 0x22, 0x86, 0x21, 0x4f, 0x02, 0x6f, 0x9b, 0x58, 0x77, 0x94, 0xde, 0x82, 0xd1, 0x4b,
+	0xc8, 0x7b, 0x7c, 0x3f, 0x96, 0x42, 0x40, 0xac, 0x87, 0xa6, 0xe6, 0xa0, 0xd2, 0x44, 0xed, 0xda,
+	0x59, 0x23, 0x74, 0x0d, 0x09, 0x97, 0x0d, 0x09, 0x3f, 0x2e, 0x1b, 0xd2, 0xdd, 0xbd, 0xec, 0x56,
+	0x7f, 0x23, 0x6f, 0x17, 0xd1, 0xda, 0x42, 0x69, 0x30, 0xf2, 0x16, 0x1f, 0x26, 0x5c, 0x6d, 0xc5,
+	0xf2, 0x6f, 0x8a, 0x45, 0x0f, 0xd6, 0x12, 0x1b, 0xe4, 0x03, 0xde, 0x51, 0x9a, 0xe9, 0x52, 0x05,
+	0x55, 0xab, 0x7d, 0x7a, 0xab, 0xbe, 0xf5, 0xad, 0xc4, 0x1a, 0xfb, 0x89, 0x4c, 0x99, 0x8b, 0x20,
+	0xad, 0xbf, 0x1e, 0x3e, 0xba, 0x96, 0x4b, 0xce, 0x71, 0x3d, 0x63, 0x4a, 0x0f, 0xcb, 0xdc, 0xcc,
+	0xd2, 0xd9, 0x45, 0x37, 0xdb, 0x35, 0x9a, 0x4f, 0x56, 0x62, 0xed, 0xbe, 0xc6, 0x55, 0x2d, 0x35,
+	0xcb, 0x6c, 0x9b, 0xff, 0x3b, 0x65, 0x28, 0x66, 0x3c, 0x06, 0x93, 0x5c, 0x51, 0xa7, 0x21, 0x3d,
+	0xec, 0x1b, 0x9b, 0x41, 0xc5, 0x6e, 0x48, 0xe7, 0x0e, 0x95, 0x86, 0xe6, 0x78, 0x27, 0x74, 0x31,
+	0xa7, 0x36, 0x44, 0xe3, 0x33, 0xde, 0x5b, 0x3d, 0x91, 0x3a, 0xae, 0x4c, 0x60, 0xee, 0x56, 0x84,
+	0x9a, 0xab, 0xb1, 0x39, 0x63, 0x59, 0x09, 0x77, 0xb4, 0x69, 0x35, 0xaf, 0xbc, 0x97, 0xa8, 0xf5,
+	0x0b, 0xb9, 0x45, 0xdc, 0x80, 0xc9, 0x09, 0x3e, 0x28, 0x40, 0xe5, 0x52, 0x28, 0x50, 0x43, 0x05,
+	0x42, 0xdb, 0x8c, 0x3e, 0xdd, 0x5f, 0xbd, 0xf6, 0x41, 0x68, 0xd2, 0xc1, 0x8f, 0xd6, 0x34, 0x16,
+	0x4f, 0x84, 0xfc, 0x9e, 0x41, 0x92, 0x82, 0x5b, 0x4d, 0x9f, 0x1e, 0xad, 0xd0, 0x37, 0x1b, 0x20,
+	0x79, 0x8e, 0xc9, 0x5a, 0x56, 0xc0, 0x57, 0x88, 0x35, 0x24, 0x76, 0x39, 0x7d, 0xfa, 0x60, 0x85,
+	0xd0, 0x05, 0xd0, 0x7d, 0x36, 0x78, 0x92, 0x72, 0x3d, 0x2e, 0x47, 0x61, 0x2c, 0xa7, 0x91, 0x29,
+	0x6f, 0xfc, 0xcd, 0x1e, 0x11, 0xcb, 0x79, 0x74, 0xe5, 0x5b, 0x18, 0xed, 0xd8, 0xd1, 0xbe, 0xf8,
+	0x17, 0x00, 0x00, 0xff, 0xff, 0x50, 0xa3, 0x6b, 0x3f, 0x30, 0x04, 0x00, 0x00,
 }
diff --git a/api/system/v1alpha1/zone_insight.pb.validate.go b/api/system/v1alpha1/zone_insight.pb.validate.go
deleted file mode 100644
index 4b04486b7..000000000
--- a/api/system/v1alpha1/zone_insight.pb.validate.go
+++ /dev/null
@@ -1,405 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: system/v1alpha1/zone_insight.proto
-
-package v1alpha1
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"net"
-	"net/mail"
-	"net/url"
-	"regexp"
-	"strings"
-	"time"
-	"unicode/utf8"
-
-	"github.com/golang/protobuf/ptypes"
-)
-
-// ensure the imports are used
-var (
-	_ = bytes.MinRead
-	_ = errors.New("")
-	_ = fmt.Print
-	_ = utf8.UTFMax
-	_ = (*regexp.Regexp)(nil)
-	_ = (*strings.Reader)(nil)
-	_ = net.IPv4len
-	_ = time.Duration(0)
-	_ = (*url.URL)(nil)
-	_ = (*mail.Address)(nil)
-	_ = ptypes.DynamicAny{}
-)
-
-// define the regex for a UUID once up-front
-var _zone_insight_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")
-
-// Validate checks the field values on ZoneInsight with the rules defined in
-// the proto definition for this message. If any rules are violated, an error
-// is returned.
-func (m *ZoneInsight) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	for idx, item := range m.GetSubscriptions() {
-		_, _ = idx, item
-
-		if v, ok := interface{}(item).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return ZoneInsightValidationError{
-					field:  fmt.Sprintf("Subscriptions[%v]", idx),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	return nil
-}
-
-// ZoneInsightValidationError is the validation error returned by
-// ZoneInsight.Validate if the designated constraints aren't met.
-type ZoneInsightValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e ZoneInsightValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ZoneInsightValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ZoneInsightValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ZoneInsightValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ZoneInsightValidationError) ErrorName() string { return "ZoneInsightValidationError" }
-
-// Error satisfies the builtin error interface
-func (e ZoneInsightValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sZoneInsight.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = ZoneInsightValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = ZoneInsightValidationError{}
-
-// Validate checks the field values on KDSSubscription with the rules defined
-// in the proto definition for this message. If any rules are violated, an
-// error is returned.
-func (m *KDSSubscription) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if utf8.RuneCountInString(m.GetId()) < 1 {
-		return KDSSubscriptionValidationError{
-			field:  "Id",
-			reason: "value length must be at least 1 runes",
-		}
-	}
-
-	if utf8.RuneCountInString(m.GetGlobalInstanceId()) < 1 {
-		return KDSSubscriptionValidationError{
-			field:  "GlobalInstanceId",
-			reason: "value length must be at least 1 runes",
-		}
-	}
-
-	if m.GetConnectTime() == nil {
-		return KDSSubscriptionValidationError{
-			field:  "ConnectTime",
-			reason: "value is required",
-		}
-	}
-
-	if v, ok := interface{}(m.GetDisconnectTime()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return KDSSubscriptionValidationError{
-				field:  "DisconnectTime",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if m.GetStatus() == nil {
-		return KDSSubscriptionValidationError{
-			field:  "Status",
-			reason: "value is required",
-		}
-	}
-
-	if v, ok := interface{}(m.GetStatus()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return KDSSubscriptionValidationError{
-				field:  "Status",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// KDSSubscriptionValidationError is the validation error returned by
-// KDSSubscription.Validate if the designated constraints aren't met.
-type KDSSubscriptionValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e KDSSubscriptionValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e KDSSubscriptionValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e KDSSubscriptionValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e KDSSubscriptionValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e KDSSubscriptionValidationError) ErrorName() string { return "KDSSubscriptionValidationError" }
-
-// Error satisfies the builtin error interface
-func (e KDSSubscriptionValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sKDSSubscription.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = KDSSubscriptionValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = KDSSubscriptionValidationError{}
-
-// Validate checks the field values on KDSSubscriptionStatus with the rules
-// defined in the proto definition for this message. If any rules are
-// violated, an error is returned.
-func (m *KDSSubscriptionStatus) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if v, ok := interface{}(m.GetLastUpdateTime()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return KDSSubscriptionStatusValidationError{
-				field:  "LastUpdateTime",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if v, ok := interface{}(m.GetTotal()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return KDSSubscriptionStatusValidationError{
-				field:  "Total",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	for key, val := range m.GetStat() {
-		_ = val
-
-		// no validation rules for Stat[key]
-
-		if v, ok := interface{}(val).(interface{ Validate() error }); ok {
-			if err := v.Validate(); err != nil {
-				return KDSSubscriptionStatusValidationError{
-					field:  fmt.Sprintf("Stat[%v]", key),
-					reason: "embedded message failed validation",
-					cause:  err,
-				}
-			}
-		}
-
-	}
-
-	return nil
-}
-
-// KDSSubscriptionStatusValidationError is the validation error returned by
-// KDSSubscriptionStatus.Validate if the designated constraints aren't met.
-type KDSSubscriptionStatusValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e KDSSubscriptionStatusValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e KDSSubscriptionStatusValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e KDSSubscriptionStatusValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e KDSSubscriptionStatusValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e KDSSubscriptionStatusValidationError) ErrorName() string {
-	return "KDSSubscriptionStatusValidationError"
-}
-
-// Error satisfies the builtin error interface
-func (e KDSSubscriptionStatusValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sKDSSubscriptionStatus.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = KDSSubscriptionStatusValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = KDSSubscriptionStatusValidationError{}
-
-// Validate checks the field values on KDSServiceStats with the rules defined
-// in the proto definition for this message. If any rules are violated, an
-// error is returned.
-func (m *KDSServiceStats) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	// no validation rules for ResponsesSent
-
-	// no validation rules for ResponsesAcknowledged
-
-	// no validation rules for ResponsesRejected
-
-	return nil
-}
-
-// KDSServiceStatsValidationError is the validation error returned by
-// KDSServiceStats.Validate if the designated constraints aren't met.
-type KDSServiceStatsValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e KDSServiceStatsValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e KDSServiceStatsValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e KDSServiceStatsValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e KDSServiceStatsValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e KDSServiceStatsValidationError) ErrorName() string { return "KDSServiceStatsValidationError" }
-
-// Error satisfies the builtin error interface
-func (e KDSServiceStatsValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sKDSServiceStats.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = KDSServiceStatsValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = KDSServiceStatsValidationError{}
diff --git a/api/system/v1alpha1/zone_insight.proto b/api/system/v1alpha1/zone_insight.proto
index 4103b31a4..0071bb53f 100644
--- a/api/system/v1alpha1/zone_insight.proto
+++ b/api/system/v1alpha1/zone_insight.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.system.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/system/v1alpha1";
 
 import "google/protobuf/timestamp.proto";
 import "validate/validate.proto";
diff --git a/api/system/v1alpha1/zone_overview.pb.go b/api/system/v1alpha1/zone_overview.pb.go
index 418d2eeb0..12f36514b 100644
--- a/api/system/v1alpha1/zone_overview.pb.go
+++ b/api/system/v1alpha1/zone_overview.pb.go
@@ -77,7 +77,7 @@ func init() {
 }
 
 var fileDescriptor_c006e9e807e7456e = []byte{
-	// 161 bytes of a gzipped FileDescriptorProto
+	// 183 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2e, 0xae, 0x2c, 0x2e,
 	0x49, 0xcd, 0xd5, 0x2f, 0x33, 0x4c, 0xcc, 0x29, 0xc8, 0x48, 0x34, 0xd4, 0xaf, 0xca, 0xcf, 0x4b,
 	0x8d, 0xcf, 0x2f, 0x4b, 0x2d, 0x2a, 0xcb, 0x4c, 0x2d, 0xd7, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17,
@@ -86,7 +86,8 @@ var fileDescriptor_c006e9e807e7456e = []byte{
 	0x2d, 0x8c, 0x5c, 0x3c, 0x51, 0xf9, 0x79, 0xa9, 0xfe, 0x50, 0xcb, 0x84, 0xf4, 0xb8, 0x58, 0x40,
 	0xca, 0x24, 0x18, 0x15, 0x18, 0x35, 0xb8, 0x8d, 0xa4, 0xf4, 0xb0, 0xd9, 0xaa, 0x07, 0xd2, 0x11,
 	0x04, 0x56, 0x27, 0xe4, 0xc2, 0xc5, 0x83, 0x6c, 0xac, 0x04, 0x13, 0x58, 0x9f, 0x22, 0x6e, 0x7d,
-	0x9e, 0x10, 0x85, 0x41, 0xdc, 0x55, 0x08, 0x8e, 0x13, 0x57, 0x14, 0x07, 0x4c, 0x51, 0x12, 0x1b,
-	0xd8, 0x65, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc5, 0xba, 0xb2, 0x21, 0x16, 0x01, 0x00,
-	0x00,
+	0x9e, 0x10, 0x85, 0x41, 0xdc, 0x55, 0x08, 0x8e, 0x93, 0x4e, 0x94, 0x56, 0x7a, 0x66, 0x49, 0x46,
+	0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x3e, 0x48, 0x6f, 0x46, 0x21, 0x98, 0xd2, 0x4f, 0x2c, 0xc8,
+	0xd4, 0x47, 0xf3, 0x47, 0x12, 0x1b, 0xd8, 0xed, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa,
+	0xae, 0x3a, 0xc6, 0x38, 0x01, 0x00, 0x00,
 }
diff --git a/api/system/v1alpha1/zone_overview.pb.validate.go b/api/system/v1alpha1/zone_overview.pb.validate.go
deleted file mode 100644
index 64868515b..000000000
--- a/api/system/v1alpha1/zone_overview.pb.validate.go
+++ /dev/null
@@ -1,122 +0,0 @@
-// Code generated by protoc-gen-validate. DO NOT EDIT.
-// source: system/v1alpha1/zone_overview.proto
-
-package v1alpha1
-
-import (
-	"bytes"
-	"errors"
-	"fmt"
-	"net"
-	"net/mail"
-	"net/url"
-	"regexp"
-	"strings"
-	"time"
-	"unicode/utf8"
-
-	"github.com/golang/protobuf/ptypes"
-)
-
-// ensure the imports are used
-var (
-	_ = bytes.MinRead
-	_ = errors.New("")
-	_ = fmt.Print
-	_ = utf8.UTFMax
-	_ = (*regexp.Regexp)(nil)
-	_ = (*strings.Reader)(nil)
-	_ = net.IPv4len
-	_ = time.Duration(0)
-	_ = (*url.URL)(nil)
-	_ = (*mail.Address)(nil)
-	_ = ptypes.DynamicAny{}
-)
-
-// define the regex for a UUID once up-front
-var _zone_overview_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$")
-
-// Validate checks the field values on ZoneOverview with the rules defined in
-// the proto definition for this message. If any rules are violated, an error
-// is returned.
-func (m *ZoneOverview) Validate() error {
-	if m == nil {
-		return nil
-	}
-
-	if v, ok := interface{}(m.GetZone()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return ZoneOverviewValidationError{
-				field:  "Zone",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	if v, ok := interface{}(m.GetZoneInsight()).(interface{ Validate() error }); ok {
-		if err := v.Validate(); err != nil {
-			return ZoneOverviewValidationError{
-				field:  "ZoneInsight",
-				reason: "embedded message failed validation",
-				cause:  err,
-			}
-		}
-	}
-
-	return nil
-}
-
-// ZoneOverviewValidationError is the validation error returned by
-// ZoneOverview.Validate if the designated constraints aren't met.
-type ZoneOverviewValidationError struct {
-	field  string
-	reason string
-	cause  error
-	key    bool
-}
-
-// Field function returns field value.
-func (e ZoneOverviewValidationError) Field() string { return e.field }
-
-// Reason function returns reason value.
-func (e ZoneOverviewValidationError) Reason() string { return e.reason }
-
-// Cause function returns cause value.
-func (e ZoneOverviewValidationError) Cause() error { return e.cause }
-
-// Key function returns key value.
-func (e ZoneOverviewValidationError) Key() bool { return e.key }
-
-// ErrorName returns error name.
-func (e ZoneOverviewValidationError) ErrorName() string { return "ZoneOverviewValidationError" }
-
-// Error satisfies the builtin error interface
-func (e ZoneOverviewValidationError) Error() string {
-	cause := ""
-	if e.cause != nil {
-		cause = fmt.Sprintf(" | caused by: %v", e.cause)
-	}
-
-	key := ""
-	if e.key {
-		key = "key for "
-	}
-
-	return fmt.Sprintf(
-		"invalid %sZoneOverview.%s: %s%s",
-		key,
-		e.field,
-		e.reason,
-		cause)
-}
-
-var _ error = ZoneOverviewValidationError{}
-
-var _ interface {
-	Field() string
-	Reason() string
-	Key() bool
-	Cause() error
-	ErrorName() string
-} = ZoneOverviewValidationError{}
diff --git a/api/system/v1alpha1/zone_overview.proto b/api/system/v1alpha1/zone_overview.proto
index 7ea3c20a0..ee40399a6 100644
--- a/api/system/v1alpha1/zone_overview.proto
+++ b/api/system/v1alpha1/zone_overview.proto
@@ -2,7 +2,7 @@ syntax = "proto3";
 
 package kuma.system.v1alpha1;
 
-option go_package = "v1alpha1";
+option go_package = "github.com/kumahq/kuma/api/system/v1alpha1";
 
 import "system/v1alpha1/zone.proto";
 import "system/v1alpha1/zone_insight.proto";
diff --git a/pkg/xds/envoy/listeners/tcp_proxy_configurer.go b/pkg/xds/envoy/listeners/tcp_proxy_configurer.go
index eacde1842..97658bf3a 100644
--- a/pkg/xds/envoy/listeners/tcp_proxy_configurer.go
+++ b/pkg/xds/envoy/listeners/tcp_proxy_configurer.go
@@ -25,6 +25,9 @@ type TcpProxyConfigurer struct {
 }
 
 func (c *TcpProxyConfigurer) Configure(filterChain *envoy_listener.FilterChain) error {
+	if len(c.clusters) == 0 {
+		return nil
+	}
 	tcpProxy := c.tcpProxy()
 
 	pbst, err := proto.MarshalAnyDeterministic(tcpProxy)
diff --git a/pkg/xds/generator/outbound_proxy_generator.go b/pkg/xds/generator/outbound_proxy_generator.go
index e3e900d1f..8e046ece7 100644
--- a/pkg/xds/generator/outbound_proxy_generator.go
+++ b/pkg/xds/generator/outbound_proxy_generator.go
@@ -8,6 +8,7 @@ import (
 
 	"github.com/pkg/errors"
 
+	"github.com/kumahq/kuma/pkg/core"
 	"github.com/kumahq/kuma/pkg/core/validators"
 	envoy_names "github.com/kumahq/kuma/pkg/xds/envoy/names"
 
@@ -21,6 +22,8 @@ import (
 	envoy_listeners "github.com/kumahq/kuma/pkg/xds/envoy/listeners"
 )
 
+var outboundLog = core.Log.WithName("outbound-proxy-generator")
+
 // OriginOutbound is a marker to indicate by which ProxyGenerator resources were generated.
 const OriginOutbound = "outbound"
 
@@ -212,8 +215,9 @@ func (_ OutboundProxyGenerator) determineSubsets(proxy *model.Proxy, outbound *k
 	oface := proxy.Dataplane.Spec.Networking.ToOutboundInterface(outbound)
 
 	route := proxy.TrafficRoutes[oface]
-	if route == nil { // should not happen since we always generate default route if TrafficRoute is not found
-		return nil, errors.Errorf("no TrafficRoute for outbound %s", oface)
+	if route == nil {
+		outboundLog.Info("there is no selected TrafficRoute for the outbound interface, which means that the traffic won't be routed. Visit https://kuma.io/docs/latest/policies/traffic-route/ to check how to introduce the routing.", "dataplane", proxy.Dataplane.Meta.GetName(), "mesh", proxy.Dataplane.Meta.GetMesh(), "outbound", oface)
+		return nil, nil
 	}
 
 	for j, destination := range route.Spec.GetConf().GetSplit() {


Test patch:
diff --git a/api/mesh/v1alpha1/dataplane_test.go b/api/mesh/v1alpha1/dataplane_test.go
index 5b70c600d..5d6bde453 100644
--- a/api/mesh/v1alpha1/dataplane_test.go
+++ b/api/mesh/v1alpha1/dataplane_test.go
@@ -39,15 +39,7 @@ var _ = Describe("Dataplane", func() {
 		err := util_proto.FromYAML([]byte(input), dataplane)
 		// then
 		Expect(err).ToNot(HaveOccurred())
-
-		// when
-		err = dataplane.Validate()
-		// then
-		Expect(err).ToNot(HaveOccurred())
-
-		// and
 		Expect(dataplane.Networking.Address).To(Equal("1.1.1.1"))
-		// and
 		Expect(dataplane.Networking.Inbound).To(HaveLen(1))
 		Expect(dataplane.Networking.Inbound[0].Port).To(Equal(uint32(80)))
 		Expect(dataplane.Networking.Inbound[0].ServicePort).To(Equal(uint32(8080)))
@@ -56,7 +48,6 @@ var _ = Describe("Dataplane", func() {
 		Expect(dataplane.Networking.Inbound[0].Tags).To(HaveKeyWithValue("kuma.io/service", "mobile"))
 		Expect(dataplane.Networking.Inbound[0].Tags).To(HaveKeyWithValue("version", "0.1"))
 		Expect(dataplane.Networking.Inbound[0].Tags).To(HaveKeyWithValue("env", "production"))
-		// and
 		Expect(dataplane.Networking.Outbound).To(HaveLen(2))
 		Expect(dataplane.Networking.Outbound[0].Port).To(Equal(uint32(30000)))
 		Expect(dataplane.Networking.Outbound[0].Service).To(Equal("postgres"))
diff --git a/api/mesh/v1alpha1/traffic_route_test.go b/api/mesh/v1alpha1/traffic_route_test.go
deleted file mode 100644
index 74b6e2b40..000000000
--- a/api/mesh/v1alpha1/traffic_route_test.go
+++ /dev/null
@@ -1,129 +0,0 @@
-package v1alpha1_test
-
-import (
-	. "github.com/onsi/ginkgo"
-	. "github.com/onsi/ginkgo/extensions/table"
-	. "github.com/onsi/gomega"
-
-	. "github.com/kumahq/kuma/api/mesh/v1alpha1"
-
-	util_proto "github.com/kumahq/kuma/api/internal/util/proto"
-)
-
-var _ = Describe("TrafficRoute", func() {
-
-	Context("valid configurations", func() {
-		type testCase struct {
-			input string
-		}
-
-		DescribeTable("Validate() should return a nil",
-			func(given testCase) {
-				// setup
-				route := &TrafficRoute{}
-
-				// when
-				err := util_proto.FromYAML([]byte(given.input), route)
-				// then
-				Expect(err).ToNot(HaveOccurred())
-
-				// expect
-				Expect(route.Validate()).To(Succeed())
-			},
-			Entry("conf with 1 destination but no weight", testCase{
-				input: `
-                sources:
-                - match:
-                    service: web
-                destinations:
-                - match:
-                    service: backend
-                conf:
-                  split:
-                  - destination:
-                      service: backend
-`,
-			}),
-			Entry("conf with 2 destinations and weights", testCase{
-				input: `
-                sources:
-                - match:
-                    service: web
-                destinations:
-                - match:
-                    service: backend
-                conf:
-                  split:
-                  - destination:
-                      service: backend
-                      version: v1
-                  - weight: 99
-                    destination:
-                      service: backend
-                      version: v2
-`,
-			}),
-		)
-	})
-
-	Context("invalid configurations", func() {
-		type testCase struct {
-			input       string
-			expectedErr interface{}
-		}
-
-		DescribeTable("Validate() should return an error",
-			func(given testCase) {
-				// setup
-				route := &TrafficRoute{}
-
-				// when
-				err := util_proto.FromYAML([]byte(given.input), route)
-				// then
-				Expect(err).ToNot(HaveOccurred())
-
-				// when
-				err = route.Validate()
-				// then
-				Expect(err).To(MatchError(given.expectedErr))
-			},
-			Entry("0 sources", testCase{
-				input:       ``,
-				expectedErr: `invalid TrafficRoute.Sources: value must contain at least 1 item(s)`,
-			}),
-			Entry("0 destinations", testCase{
-				input: `
-                sources:
-                - match:
-                    service: web
-`,
-				expectedErr: `invalid TrafficRoute.Destinations: value must contain at least 1 item(s)`,
-			}),
-			Entry("no conf", testCase{
-				input: `
-                sources:
-                - match:
-                    service: web
-                destinations:
-                - match:
-                    service: backend
-`,
-				expectedErr: `invalid TrafficRoute.Conf: value is required`,
-			}),
-			Entry("conf with 1 weighted destination but not selector", testCase{
-				input: `
-                sources:
-                - match:
-                    service: web
-                destinations:
-                - match:
-                    service: backend
-                conf:
-                  split:
-                  - {}
-`,
-				expectedErr: `invalid TrafficRoute.Conf: embedded message failed validation | caused by: invalid TrafficRoute_Conf.Split[0]: embedded message failed validation | caused by: invalid TrafficRoute_Split.Destination: value must contain at least 1 pair(s)`,
-			}),
-		)
-	})
-})
diff --git a/api/observability/v1alpha1/mads_test.go b/api/observability/v1alpha1/mads_test.go
index 0ea1cfe53..3c5fa38c4 100644
--- a/api/observability/v1alpha1/mads_test.go
+++ b/api/observability/v1alpha1/mads_test.go
@@ -29,9 +29,6 @@ var _ = Describe("Monitoring Assignment Discovery Service", func() {
 				// then
 				Expect(err).ToNot(HaveOccurred())
 
-				By("validating")
-				Expect(ma.Validate()).To(Succeed())
-
 				By("serializing back to YAML")
 				// when
 				actual, err := util_proto.ToYAML(ma)
@@ -66,12 +63,5 @@ var _ = Describe("Monitoring Assignment Discovery Service", func() {
 `,
 			}),
 		)
-
-		It("should require a non-empty name", func() {
-			// given
-			ma := &MonitoringAssignment{}
-			// expect
-			Expect(ma.Validate()).To(HaveOccurred())
-		})
 	})
 })
diff --git a/pkg/xds/generator/outbound_proxy_generator_test.go b/pkg/xds/generator/outbound_proxy_generator_test.go
index 8cb1a0fdd..08d37d304 100644
--- a/pkg/xds/generator/outbound_proxy_generator_test.go
+++ b/pkg/xds/generator/outbound_proxy_generator_test.go
@@ -277,6 +277,10 @@ var _ = Describe("OutboundProxyGenerator", func() {
 							},
 						},
 					},
+					mesh_proto.OutboundInterface{
+						DataplaneIP:   "127.0.0.1",
+						DataplanePort: 4040,
+					}: nil,
 				},
 				OutboundSelectors: model.DestinationMap{
 					"api-http": model.TagSelectorSet{
@@ -457,6 +461,22 @@ var _ = Describe("OutboundProxyGenerator", func() {
 `,
 			expected: "06.envoy.golden.yaml",
 		}),
+		Entry("07. no TrafficRoute", testCase{
+			ctx: mtlsCtx,
+			dataplane: `
+            networking:
+              address: 10.0.0.1
+              inbound:
+              - port: 8080
+                tags:
+                  kuma.io/service: web
+              outbound:
+              - port: 4040
+                tags:
+                  kuma.io/service: service-without-traffic-route
+`,
+			expected: "07.envoy.golden.yaml",
+		}),
 	)
 
 	It("Add sanitized alternative cluster name for stats", func() {
diff --git a/pkg/xds/generator/testdata/outbound-proxy/07.envoy.golden.yaml b/pkg/xds/generator/testdata/outbound-proxy/07.envoy.golden.yaml
new file mode 100644
index 000000000..affdac5cb
--- /dev/null
+++ b/pkg/xds/generator/testdata/outbound-proxy/07.envoy.golden.yaml
@@ -0,0 +1,12 @@
+resources:
+  - name: outbound:127.0.0.1:4040
+    resource:
+      '@type': type.googleapis.com/envoy.api.v2.Listener
+      address:
+        socketAddress:
+          address: 127.0.0.1
+          portValue: 4040
+      filterChains:
+        - {}
+      name: outbound:127.0.0.1:4040
+      trafficDirection: OUTBOUND
diff --git a/test/e2e/externalservices_kubernetes_test.go b/test/e2e/externalservices_kubernetes_test.go
index aeeedec9a..c68f78554 100644
--- a/test/e2e/externalservices_kubernetes_test.go
+++ b/test/e2e/externalservices_kubernetes_test.go
@@ -174,7 +174,7 @@ metadata:
 			"curl", "-v", "-m", "3", "--fail", "http://external-service.mesh")
 		Expect(err).ToNot(HaveOccurred())
 		Expect(stderr).To(ContainSubstring("HTTP/1.1 200 OK"))
-		Expect(stdout).ToNot(ContainSubstring("HTTPS"))
+		Expect(stdout).ToNot(ContainSubstring("externalservice-https-server"))
 	})
 
 	It("should route to external-service over tls", func() {
@@ -185,7 +185,7 @@ metadata:
 			"curl", "-v", "-m", "3", "--fail", "http://external-service.mesh")
 		Expect(err).ToNot(HaveOccurred())
 		Expect(stderr).To(ContainSubstring("HTTP/1.1 200 OK"))
-		Expect(stdout).To(ContainSubstring("HTTPS"))
+		Expect(stdout).To(ContainSubstring("externalservice-https-server"))
 	})
 
 	It("should disable passthrough", func() {
diff --git a/test/e2e/testdata/externalservice-http-server.yaml b/test/e2e/testdata/externalservice-http-server.yaml
index 29ec3f0a7..1e1b4d647 100644
--- a/test/e2e/testdata/externalservice-http-server.yaml
+++ b/test/e2e/testdata/externalservice-http-server.yaml
@@ -36,7 +36,7 @@ spec:
     spec:
       containers:
         - name: echo-server
-          image: kuma-universal
+          image: mendhak/http-https-echo
           imagePullPolicy: IfNotPresent
           readinessProbe:
             httpGet:
@@ -46,13 +46,6 @@ spec:
             periodSeconds: 3
           ports:
             - containerPort: 80
-          command: [ "ncat" ]
-          args:
-            - -lk
-            - -p
-            - "80"
-            - --sh-exec
-            - '/usr/bin/printf "HTTP/1.1 200 OK\n\n Echo\n"'
           resources:
             limits:
               cpu: 50m
diff --git a/test/e2e/testdata/externalservice-https-server.yaml b/test/e2e/testdata/externalservice-https-server.yaml
index e3e06a692..4b75ff694 100644
--- a/test/e2e/testdata/externalservice-https-server.yaml
+++ b/test/e2e/testdata/externalservice-https-server.yaml
@@ -36,25 +36,16 @@ spec:
     spec:
       containers:
         - name: echo-server
-          image: kuma-universal
+          image: mendhak/http-https-echo
           imagePullPolicy: IfNotPresent
           readinessProbe:
             httpGet:
-              scheme: HTTPS
               path: /
-              port: 443
+              port: 80
             initialDelaySeconds: 3
             periodSeconds: 3
           ports:
             - containerPort: 443
-          command: [ "ncat" ]
-          args:
-            - -lk
-            - -p
-            - "443"
-            - --ssl
-            - --sh-exec
-            - '/usr/bin/printf "HTTP/1.1 200 OK\n\n HTTPS Echo\n"'
           resources:
             limits:
               cpu: 50m