Repository: kumahq/kuma
Pull request #3463 (2021-12-09 18:08:29)

perf(*): update Mesh and ServiceInsights only when really needed
### Summary

We were updating `ServiceInsights` and `MeshInsights` even if nothing changed because of `last_sync` field.
Last Sync field was used to protect us from updating Insights too often or not often enough.
It was really unnecessary to store it in the resource itself because it is only run on leader, so we can just keep it in memory.

Another thing that results in this behavior is that we were synchronizing ServiceInsights over KDS because of `last_sync` change.

Since we are now storing just an insights without Last Sync, I added a check to avoid Updates to a database if nothing changed.

### Issues resolved

No issues reported on this.

### Documentation

- [X] No docs. Internal changes only.

### Testing

- [X] Unit tests
- [X] E2E tests
- [X] Manual testing on Universal
- [ ] Manual testing on Kubernetes

### Backwards compatibility

- [X] No UPGRADE path
- [X] Add `backport-to-stable` label if the code is backwards compatible. Otherwise, list breaking changes.


codecov-commenter: # [Codecov](https://codecov.io/gh/kumahq/kuma/pull/3463?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq) Report
> Merging [#3463](https://codecov.io/gh/kumahq/kuma/pull/3463?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq) (b5e7431) into [master](https://codecov.io/gh/kumahq/kuma/commit/d265972b0174636ef0e30afa98ba57e9da1c45f1?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq) (d265972) will **increase** coverage by `0.04%`.
> The diff coverage is `58.92%`.

[![Impacted file tree graph](https://codecov.io/gh/kumahq/kuma/pull/3463/graphs/tree.svg?width=650&height=150&src=pr&token=D7Yvqs6rwV&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq)](https://codecov.io/gh/kumahq/kuma/pull/3463?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq)

```diff
@@            Coverage Diff             @@
##           master    #3463      +/-   ##
==========================================
+ Coverage   52.29%   52.33%   +0.04%     
==========================================
  Files         940      941       +1     
  Lines       54445    54473      +28     
==========================================
+ Hits        28472    28510      +38     
+ Misses      23755    23734      -21     
- Partials     2218     2229      +11     
```


| [Impacted Files](https://codecov.io/gh/kumahq/kuma/pull/3463?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq) | Coverage Δ | |
|---|---|---|
| [api/mesh/v1alpha1/mesh\_insight.pb.go](https://codecov.io/gh/kumahq/kuma/pull/3463/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq#diff-YXBpL21lc2gvdjFhbHBoYTEvbWVzaF9pbnNpZ2h0LnBiLmdv) | `32.79% <ø> (+0.41%)` | :arrow_up: |
| [api/mesh/v1alpha1/service\_insight.pb.go](https://codecov.io/gh/kumahq/kuma/pull/3463/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq#diff-YXBpL21lc2gvdjFhbHBoYTEvc2VydmljZV9pbnNpZ2h0LnBiLmdv) | `27.84% <ø> (+0.68%)` | :arrow_up: |
| [pkg/xds/sync/dataplane\_proxy\_builder.go](https://codecov.io/gh/kumahq/kuma/pull/3463/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq#diff-cGtnL3hkcy9zeW5jL2RhdGFwbGFuZV9wcm94eV9idWlsZGVyLmdv) | `51.61% <0.00%> (+0.41%)` | :arrow_up: |
| [pkg/util/proto/hash.go](https://codecov.io/gh/kumahq/kuma/pull/3463/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq#diff-cGtnL3V0aWwvcHJvdG8vaGFzaC5nbw==) | `55.55% <55.55%> (ø)` | |
| [pkg/insights/resyncer.go](https://codecov.io/gh/kumahq/kuma/pull/3463/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq#diff-cGtnL2luc2lnaHRzL3Jlc3luY2VyLmdv) | `70.03% <60.00%> (+2.80%)` | :arrow_up: |
| [pkg/api-server/service\_insight\_endpoints.go](https://codecov.io/gh/kumahq/kuma/pull/3463/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq#diff-cGtnL2FwaS1zZXJ2ZXIvc2VydmljZV9pbnNpZ2h0X2VuZHBvaW50cy5nbw==) | `71.05% <100.00%> (ø)` | |
| [pkg/plugins/runtime/gateway/route/sorter.go](https://codecov.io/gh/kumahq/kuma/pull/3463/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq#diff-cGtnL3BsdWdpbnMvcnVudGltZS9nYXRld2F5L3JvdXRlL3NvcnRlci5nbw==) | `66.66% <0.00%> (-5.13%)` | :arrow_down: |
| [pkg/core/resources/model/rest/resource.go](https://codecov.io/gh/kumahq/kuma/pull/3463/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq#diff-cGtnL2NvcmUvcmVzb3VyY2VzL21vZGVsL3Jlc3QvcmVzb3VyY2UuZ28=) | `67.94% <0.00%> (-1.29%)` | :arrow_down: |
| [pkg/xds/generator/direct\_access\_proxy\_generator.go](https://codecov.io/gh/kumahq/kuma/pull/3463/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq#diff-cGtnL3hkcy9nZW5lcmF0b3IvZGlyZWN0X2FjY2Vzc19wcm94eV9nZW5lcmF0b3IuZ28=) | `84.70% <0.00%> (-1.18%)` | :arrow_down: |
| ... and [3 more](https://codecov.io/gh/kumahq/kuma/pull/3463/diff?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/kumahq/kuma/pull/3463?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/kumahq/kuma/pull/3463?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq). Last update [d265972...b5e7431](https://codecov.io/gh/kumahq/kuma/pull/3463?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=kumahq).


Patch:
diff --git a/api/mesh/v1alpha1/dataplane_helpers.go b/api/mesh/v1alpha1/dataplane_helpers.go
index 11172e35d..c7e685d7c 100644
--- a/api/mesh/v1alpha1/dataplane_helpers.go
+++ b/api/mesh/v1alpha1/dataplane_helpers.go
@@ -29,6 +29,9 @@ const (
 	// External service tag
 	ExternalServiceTag = "kuma.io/external-service-name"
 
+	// Listener tag is used to select Gateway listeners
+	ListenerTag = "gateways.kuma.io/listener-name"
+
 	// Used for Service-less dataplanes
 	TCPPortReserved = 49151 // IANA Reserved
 )
diff --git a/api/mesh/v1alpha1/mesh_insight.pb.go b/api/mesh/v1alpha1/mesh_insight.pb.go
index 3d9ef81b3..cfe85bdd6 100644
--- a/api/mesh/v1alpha1/mesh_insight.pb.go
+++ b/api/mesh/v1alpha1/mesh_insight.pb.go
@@ -10,7 +10,7 @@ import (
 	_ "github.com/kumahq/kuma/api/mesh"
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
+	_ "google.golang.org/protobuf/types/known/timestamppb"
 	reflect "reflect"
 	sync "sync"
 )
@@ -28,8 +28,6 @@ type MeshInsight struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	// last_sync is a time of the last synchronization
-	LastSync   *timestamppb.Timestamp             `protobuf:"bytes,1,opt,name=last_sync,json=lastSync,proto3" json:"last_sync,omitempty"`
 	Dataplanes *MeshInsight_DataplaneStat         `protobuf:"bytes,2,opt,name=dataplanes,proto3" json:"dataplanes,omitempty"`
 	Policies   map[string]*MeshInsight_PolicyStat `protobuf:"bytes,3,rep,name=policies,proto3" json:"policies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
 	DpVersions *MeshInsight_DpVersions            `protobuf:"bytes,4,opt,name=dpVersions,proto3" json:"dpVersions,omitempty"`
@@ -71,13 +69,6 @@ func (*MeshInsight) Descriptor() ([]byte, []int) {
 	return file_mesh_v1alpha1_mesh_insight_proto_rawDescGZIP(), []int{0}
 }
 
-func (x *MeshInsight) GetLastSync() *timestamppb.Timestamp {
-	if x != nil {
-		return x.LastSync
-	}
-	return nil
-}
-
 func (x *MeshInsight) GetDataplanes() *MeshInsight_DataplaneStat {
 	if x != nil {
 		return x.Dataplanes
@@ -484,136 +475,132 @@ var file_mesh_v1alpha1_mesh_insight_proto_rawDesc = []byte{
 	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x12, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x6f, 0x70, 0x74,
 	0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67,
 	0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65,
-	0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd1, 0x0f, 0x0a, 0x0b,
-	0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x12, 0x37, 0x0a, 0x09, 0x6c,
-	0x61, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
-	0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
-	0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74,
-	0x53, 0x79, 0x6e, 0x63, 0x12, 0x4d, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e,
-	0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e,
-	0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65,
-	0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c,
-	0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61,
-	0x6e, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18,
-	0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73,
-	0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49,
-	0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x45,
-	0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x4a,
-	0x0a, 0x0a, 0x64, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01,
-	0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76,
-	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69,
-	0x67, 0x68, 0x74, 0x2e, 0x44, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a,
-	0x64, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x0a, 0x04, 0x6d, 0x54,
-	0x4c, 0x53, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e,
-	0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65,
-	0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x4d, 0x54, 0x4c, 0x53, 0x52, 0x04,
-	0x6d, 0x54, 0x4c, 0x53, 0x12, 0x47, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
-	0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65,
-	0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68,
-	0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53,
-	0x74, 0x61, 0x74, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x5c, 0x0a,
-	0x10, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x42, 0x79, 0x54, 0x79, 0x70,
-	0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d,
-	0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73,
-	0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61,
-	0x6e, 0x65, 0x73, 0x42, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x10, 0x64, 0x61, 0x74, 0x61, 0x70,
-	0x6c, 0x61, 0x6e, 0x65, 0x73, 0x42, 0x79, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x86, 0x01, 0x0a, 0x0d,
-	0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x12, 0x14, 0x0a,
-	0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x74, 0x6f,
-	0x74, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f,
-	0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6f, 0x66,
-	0x66, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c,
-	0x6c, 0x79, 0x5f, 0x64, 0x65, 0x67, 0x72, 0x61, 0x64, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
-	0x0d, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x44, 0x65, 0x67, 0x72,
-	0x61, 0x64, 0x65, 0x64, 0x1a, 0x22, 0x0a, 0x0a, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x74,
-	0x61, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x0d, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x1a, 0x67, 0x0a, 0x0d, 0x50, 0x6f, 0x6c, 0x69,
-	0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
-	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x40, 0x0a, 0x05, 0x76,
-	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6b, 0x75, 0x6d,
-	0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
-	0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69,
-	0x63, 0x79, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
-	0x01, 0x1a, 0xfc, 0x02, 0x0a, 0x0a, 0x44, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73,
-	0x12, 0x4e, 0x0a, 0x06, 0x6b, 0x75, 0x6d, 0x61, 0x44, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
-	0x32, 0x36, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61,
-	0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68,
-	0x74, 0x2e, 0x44, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4b, 0x75, 0x6d,
-	0x61, 0x44, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6b, 0x75, 0x6d, 0x61, 0x44, 0x70,
-	0x12, 0x4b, 0x0a, 0x05, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x35, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+	0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9e, 0x0f, 0x0a, 0x0b,
+	0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x12, 0x4d, 0x0a, 0x0a, 0x64,
+	0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c,
 	0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74,
-	0x2e, 0x44, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x76, 0x6f,
-	0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x1a, 0x68, 0x0a,
-	0x0b, 0x4b, 0x75, 0x6d, 0x61, 0x44, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
+	0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x52, 0x0a,
+	0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x08, 0x70, 0x6f,
+	0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b,
+	0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
+	0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x50, 0x6f,
+	0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x70, 0x6f, 0x6c,
+	0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x0a, 0x64, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69,
+	0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6b, 0x75, 0x6d, 0x61,
+	0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d,
+	0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x70, 0x56, 0x65, 0x72,
+	0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x64, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
+	0x73, 0x12, 0x38, 0x0a, 0x04, 0x6d, 0x54, 0x4c, 0x53, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x24, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+	0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74,
+	0x2e, 0x4d, 0x54, 0x4c, 0x53, 0x52, 0x04, 0x6d, 0x54, 0x4c, 0x53, 0x12, 0x47, 0x0a, 0x08, 0x73,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e,
+	0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
+	0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76,
+	0x69, 0x63, 0x65, 0x73, 0x12, 0x5c, 0x0a, 0x10, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e,
+	0x65, 0x73, 0x42, 0x79, 0x54, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30,
+	0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
+	0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e,
+	0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x42, 0x79, 0x54, 0x79, 0x70, 0x65,
+	0x52, 0x10, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x42, 0x79, 0x54, 0x79,
+	0x70, 0x65, 0x1a, 0x86, 0x01, 0x0a, 0x0d, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65,
+	0x53, 0x74, 0x61, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0d, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e,
+	0x6c, 0x69, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69,
+	0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x0d, 0x52, 0x07, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x2d, 0x0a, 0x12,
+	0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x64, 0x65, 0x67, 0x72, 0x61, 0x64,
+	0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61,
+	0x6c, 0x6c, 0x79, 0x44, 0x65, 0x67, 0x72, 0x61, 0x64, 0x65, 0x64, 0x1a, 0x22, 0x0a, 0x0a, 0x50,
+	0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74,
+	0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x1a,
+	0x67, 0x0a, 0x0d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
+	0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
+	0x65, 0x79, 0x12, 0x40, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x2a, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
+	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67,
+	0x68, 0x74, 0x2e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xfc, 0x02, 0x0a, 0x0a, 0x44, 0x70, 0x56,
+	0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4e, 0x0a, 0x06, 0x6b, 0x75, 0x6d, 0x61, 0x44,
+	0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d,
+	0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73,
+	0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69,
+	0x6f, 0x6e, 0x73, 0x2e, 0x4b, 0x75, 0x6d, 0x61, 0x44, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
+	0x06, 0x6b, 0x75, 0x6d, 0x61, 0x44, 0x70, 0x12, 0x4b, 0x0a, 0x05, 0x65, 0x6e, 0x76, 0x6f, 0x79,
+	0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65,
+	0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68,
+	0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
+	0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x65,
+	0x6e, 0x76, 0x6f, 0x79, 0x1a, 0x68, 0x0a, 0x0b, 0x4b, 0x75, 0x6d, 0x61, 0x44, 0x70, 0x45, 0x6e,
+	0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68,
+	0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e,
+	0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53,
+	0x74, 0x61, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67,
+	0x0a, 0x0a, 0x45, 0x6e, 0x76, 0x6f, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
 	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x43,
 	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e,
 	0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
 	0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44,
 	0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x76, 0x61,
-	0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x0a, 0x45, 0x6e, 0x76, 0x6f, 0x79,
-	0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
-	0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65,
-	0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68,
-	0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e,
-	0x65, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
-	0x1a, 0xba, 0x03, 0x0a, 0x04, 0x4d, 0x54, 0x4c, 0x53, 0x12, 0x60, 0x0a, 0x0e, 0x69, 0x73, 0x73,
-	0x75, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x38, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
-	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67,
-	0x68, 0x74, 0x2e, 0x4d, 0x54, 0x4c, 0x53, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x42, 0x61,
-	0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x69, 0x73, 0x73,
-	0x75, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x12, 0x69, 0x0a, 0x11, 0x73,
-	0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73,
-	0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65,
-	0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68,
-	0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x4d, 0x54, 0x4c, 0x53, 0x2e, 0x53, 0x75, 0x70,
-	0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x45, 0x6e,
-	0x74, 0x72, 0x79, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x42, 0x61,
-	0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x1a, 0x70, 0x0a, 0x13, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64,
-	0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
-	0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
-	0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d,
-	0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70,
-	0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e,
-	0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x76,
-	0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x16, 0x53, 0x75, 0x70, 0x70,
-	0x6f, 0x72, 0x74, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74,
-	0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
-	0x03, 0x6b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
-	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73,
-	0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74,
-	0x61, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a,
-	0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x12, 0x14, 0x0a, 0x05,
-	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x74, 0x6f, 0x74,
-	0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x02,
-	0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x1a,
-	0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d,
-	0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x1a, 0xa6, 0x01, 0x0a, 0x10, 0x44,
-	0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x42, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12,
-	0x49, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
-	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67,
-	0x68, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74,
-	0x52, 0x08, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x12, 0x47, 0x0a, 0x07, 0x67, 0x61,
-	0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75,
-	0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
-	0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x61, 0x74,
-	0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x52, 0x07, 0x67, 0x61, 0x74, 0x65,
-	0x77, 0x61, 0x79, 0x3a, 0x6a, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x15, 0x0a, 0x13, 0x4d, 0x65, 0x73,
-	0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
-	0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0d, 0x12, 0x0b, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69,
-	0x67, 0x68, 0x74, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x18, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01,
-	0x06, 0x22, 0x04, 0x6d, 0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x28, 0x01, 0xaa,
-	0x8c, 0x89, 0xa6, 0x01, 0x10, 0x3a, 0x0e, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x68, 0x2d, 0x69, 0x6e,
-	0x73, 0x69, 0x67, 0x68, 0x74, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x3a, 0x02, 0x18, 0x01, 0x42,
-	0x2a, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75,
-	0x6d, 0x61, 0x68, 0x71, 0x2f, 0x6b, 0x75, 0x6d, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65,
-	0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f,
-	0x74, 0x6f, 0x33,
+	0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xba, 0x03, 0x0a, 0x04, 0x4d, 0x54, 0x4c, 0x53,
+	0x12, 0x60, 0x0a, 0x0e, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e,
+	0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e,
+	0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65,
+	0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x4d, 0x54, 0x4c, 0x53, 0x2e, 0x49,
+	0x73, 0x73, 0x75, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74,
+	0x72, 0x79, 0x52, 0x0e, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e,
+	0x64, 0x73, 0x12, 0x69, 0x0a, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x42,
+	0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e,
+	0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
+	0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x4d,
+	0x54, 0x4c, 0x53, 0x2e, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x42, 0x61, 0x63,
+	0x6b, 0x65, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70,
+	0x6f, 0x72, 0x74, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x1a, 0x70, 0x0a,
+	0x13, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x45,
+	0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73,
+	0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49,
+	0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65,
+	0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
+	0x73, 0x0a, 0x16, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b,
+	0x65, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x43, 0x0a, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d,
+	0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
+	0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61,
+	0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53,
+	0x74, 0x61, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01,
+	0x28, 0x0d, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74,
+	0x65, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x69, 0x6e, 0x74,
+	0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61,
+	0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61,
+	0x6c, 0x1a, 0xa6, 0x01, 0x0a, 0x10, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73,
+	0x42, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x49, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61,
+	0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e,
+	0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65,
+	0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c,
+	0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x52, 0x08, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72,
+	0x64, 0x12, 0x47, 0x0a, 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76,
+	0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69,
+	0x67, 0x68, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61,
+	0x74, 0x52, 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x3a, 0x6a, 0xaa, 0x8c, 0x89, 0xa6,
+	0x01, 0x15, 0x0a, 0x13, 0x4d, 0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x52,
+	0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x0d, 0x12, 0x0b, 0x4d,
+	0x65, 0x73, 0x68, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02,
+	0x18, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x06, 0x22, 0x04, 0x6d, 0x65, 0x73, 0x68, 0xaa, 0x8c,
+	0x89, 0xa6, 0x01, 0x02, 0x28, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x10, 0x3a, 0x0e, 0x0a, 0x0c,
+	0x6d, 0x65, 0x73, 0x68, 0x2d, 0x69, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0xaa, 0x8c, 0x89, 0xa6,
+	0x01, 0x04, 0x3a, 0x02, 0x18, 0x01, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x42, 0x2a, 0x5a, 0x28,
+	0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x6d, 0x61, 0x68,
+	0x71, 0x2f, 0x6b, 0x75, 0x6d, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f,
+	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -642,32 +629,30 @@ var file_mesh_v1alpha1_mesh_insight_proto_goTypes = []interface{}{
 	nil,                                  // 9: kuma.mesh.v1alpha1.MeshInsight.DpVersions.EnvoyEntry
 	nil,                                  // 10: kuma.mesh.v1alpha1.MeshInsight.MTLS.IssuedBackendsEntry
 	nil,                                  // 11: kuma.mesh.v1alpha1.MeshInsight.MTLS.SupportedBackendsEntry
-	(*timestamppb.Timestamp)(nil),        // 12: google.protobuf.Timestamp
 }
 var file_mesh_v1alpha1_mesh_insight_proto_depIdxs = []int32{
-	12, // 0: kuma.mesh.v1alpha1.MeshInsight.last_sync:type_name -> google.protobuf.Timestamp
-	1,  // 1: kuma.mesh.v1alpha1.MeshInsight.dataplanes:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplaneStat
-	3,  // 2: kuma.mesh.v1alpha1.MeshInsight.policies:type_name -> kuma.mesh.v1alpha1.MeshInsight.PoliciesEntry
-	4,  // 3: kuma.mesh.v1alpha1.MeshInsight.dpVersions:type_name -> kuma.mesh.v1alpha1.MeshInsight.DpVersions
-	5,  // 4: kuma.mesh.v1alpha1.MeshInsight.mTLS:type_name -> kuma.mesh.v1alpha1.MeshInsight.MTLS
-	6,  // 5: kuma.mesh.v1alpha1.MeshInsight.services:type_name -> kuma.mesh.v1alpha1.MeshInsight.ServiceStat
-	7,  // 6: kuma.mesh.v1alpha1.MeshInsight.dataplanesByType:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplanesByType
-	2,  // 7: kuma.mesh.v1alpha1.MeshInsight.PoliciesEntry.value:type_name -> kuma.mesh.v1alpha1.MeshInsight.PolicyStat
-	8,  // 8: kuma.mesh.v1alpha1.MeshInsight.DpVersions.kumaDp:type_name -> kuma.mesh.v1alpha1.MeshInsight.DpVersions.KumaDpEntry
-	9,  // 9: kuma.mesh.v1alpha1.MeshInsight.DpVersions.envoy:type_name -> kuma.mesh.v1alpha1.MeshInsight.DpVersions.EnvoyEntry
-	10, // 10: kuma.mesh.v1alpha1.MeshInsight.MTLS.issuedBackends:type_name -> kuma.mesh.v1alpha1.MeshInsight.MTLS.IssuedBackendsEntry
-	11, // 11: kuma.mesh.v1alpha1.MeshInsight.MTLS.supportedBackends:type_name -> kuma.mesh.v1alpha1.MeshInsight.MTLS.SupportedBackendsEntry
-	1,  // 12: kuma.mesh.v1alpha1.MeshInsight.DataplanesByType.standard:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplaneStat
-	1,  // 13: kuma.mesh.v1alpha1.MeshInsight.DataplanesByType.gateway:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplaneStat
-	1,  // 14: kuma.mesh.v1alpha1.MeshInsight.DpVersions.KumaDpEntry.value:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplaneStat
-	1,  // 15: kuma.mesh.v1alpha1.MeshInsight.DpVersions.EnvoyEntry.value:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplaneStat
-	1,  // 16: kuma.mesh.v1alpha1.MeshInsight.MTLS.IssuedBackendsEntry.value:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplaneStat
-	1,  // 17: kuma.mesh.v1alpha1.MeshInsight.MTLS.SupportedBackendsEntry.value:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplaneStat
-	18, // [18:18] is the sub-list for method output_type
-	18, // [18:18] is the sub-list for method input_type
-	18, // [18:18] is the sub-list for extension type_name
-	18, // [18:18] is the sub-list for extension extendee
-	0,  // [0:18] is the sub-list for field type_name
+	1,  // 0: kuma.mesh.v1alpha1.MeshInsight.dataplanes:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplaneStat
+	3,  // 1: kuma.mesh.v1alpha1.MeshInsight.policies:type_name -> kuma.mesh.v1alpha1.MeshInsight.PoliciesEntry
+	4,  // 2: kuma.mesh.v1alpha1.MeshInsight.dpVersions:type_name -> kuma.mesh.v1alpha1.MeshInsight.DpVersions
+	5,  // 3: kuma.mesh.v1alpha1.MeshInsight.mTLS:type_name -> kuma.mesh.v1alpha1.MeshInsight.MTLS
+	6,  // 4: kuma.mesh.v1alpha1.MeshInsight.services:type_name -> kuma.mesh.v1alpha1.MeshInsight.ServiceStat
+	7,  // 5: kuma.mesh.v1alpha1.MeshInsight.dataplanesByType:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplanesByType
+	2,  // 6: kuma.mesh.v1alpha1.MeshInsight.PoliciesEntry.value:type_name -> kuma.mesh.v1alpha1.MeshInsight.PolicyStat
+	8,  // 7: kuma.mesh.v1alpha1.MeshInsight.DpVersions.kumaDp:type_name -> kuma.mesh.v1alpha1.MeshInsight.DpVersions.KumaDpEntry
+	9,  // 8: kuma.mesh.v1alpha1.MeshInsight.DpVersions.envoy:type_name -> kuma.mesh.v1alpha1.MeshInsight.DpVersions.EnvoyEntry
+	10, // 9: kuma.mesh.v1alpha1.MeshInsight.MTLS.issuedBackends:type_name -> kuma.mesh.v1alpha1.MeshInsight.MTLS.IssuedBackendsEntry
+	11, // 10: kuma.mesh.v1alpha1.MeshInsight.MTLS.supportedBackends:type_name -> kuma.mesh.v1alpha1.MeshInsight.MTLS.SupportedBackendsEntry
+	1,  // 11: kuma.mesh.v1alpha1.MeshInsight.DataplanesByType.standard:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplaneStat
+	1,  // 12: kuma.mesh.v1alpha1.MeshInsight.DataplanesByType.gateway:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplaneStat
+	1,  // 13: kuma.mesh.v1alpha1.MeshInsight.DpVersions.KumaDpEntry.value:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplaneStat
+	1,  // 14: kuma.mesh.v1alpha1.MeshInsight.DpVersions.EnvoyEntry.value:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplaneStat
+	1,  // 15: kuma.mesh.v1alpha1.MeshInsight.MTLS.IssuedBackendsEntry.value:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplaneStat
+	1,  // 16: kuma.mesh.v1alpha1.MeshInsight.MTLS.SupportedBackendsEntry.value:type_name -> kuma.mesh.v1alpha1.MeshInsight.DataplaneStat
+	17, // [17:17] is the sub-list for method output_type
+	17, // [17:17] is the sub-list for method input_type
+	17, // [17:17] is the sub-list for extension type_name
+	17, // [17:17] is the sub-list for extension extendee
+	0,  // [0:17] is the sub-list for field type_name
 }
 
 func init() { file_mesh_v1alpha1_mesh_insight_proto_init() }
diff --git a/api/mesh/v1alpha1/mesh_insight.proto b/api/mesh/v1alpha1/mesh_insight.proto
index 6952ba466..331c63df4 100644
--- a/api/mesh/v1alpha1/mesh_insight.proto
+++ b/api/mesh/v1alpha1/mesh_insight.proto
@@ -18,8 +18,7 @@ message MeshInsight {
   option (kuma.mesh.resource).ws.name = "mesh-insight";
   option (kuma.mesh.resource).ws.read_only = true;
 
-  // last_sync is a time of the last synchronization
-  google.protobuf.Timestamp last_sync = 1;
+  reserved 1; // formerly last_sync
 
   // DataplaneStat defines statistic specifically for Dataplane
   message DataplaneStat {
diff --git a/api/mesh/v1alpha1/service_insight.pb.go b/api/mesh/v1alpha1/service_insight.pb.go
index ae29adb19..3eefdb29b 100644
--- a/api/mesh/v1alpha1/service_insight.pb.go
+++ b/api/mesh/v1alpha1/service_insight.pb.go
@@ -10,7 +10,7 @@ import (
 	_ "github.com/kumahq/kuma/api/mesh"
 	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
 	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
-	timestamppb "google.golang.org/protobuf/types/known/timestamppb"
+	_ "google.golang.org/protobuf/types/known/timestamppb"
 	reflect "reflect"
 	sync "sync"
 )
@@ -79,7 +79,6 @@ type ServiceInsight struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	LastSync *timestamppb.Timestamp             `protobuf:"bytes,1,opt,name=last_sync,json=lastSync,proto3" json:"last_sync,omitempty"`
 	Services map[string]*ServiceInsight_Service `protobuf:"bytes,2,rep,name=services,proto3" json:"services,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
 }
 
@@ -115,13 +114,6 @@ func (*ServiceInsight) Descriptor() ([]byte, []int) {
 	return file_mesh_v1alpha1_service_insight_proto_rawDescGZIP(), []int{0}
 }
 
-func (x *ServiceInsight) GetLastSync() *timestamppb.Timestamp {
-	if x != nil {
-		return x.LastSync
-	}
-	return nil
-}
-
 func (x *ServiceInsight) GetServices() map[string]*ServiceInsight_Service {
 	if x != nil {
 		return x.Services
@@ -264,71 +256,68 @@ var file_mesh_v1alpha1_service_insight_proto_rawDesc = []byte{
 	0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x1a, 0x12, 0x6d, 0x65, 0x73, 0x68, 0x2f,
 	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67,
 	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74,
-	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc5,
+	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x92,
 	0x07, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68,
-	0x74, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
-	0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
-	0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x4c, 0x0a, 0x08, 0x73, 0x65,
-	0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6b,
-	0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61,
-	0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74,
-	0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08,
-	0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a, 0xcb, 0x04, 0x0a, 0x07, 0x53, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68,
-	0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
-	0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
-	0x58, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
+	0x74, 0x12, 0x4c, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e,
 	0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
-	0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e,
-	0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x52, 0x0a, 0x64,
-	0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73, 0x12, 0x66, 0x0a, 0x0e, 0x69, 0x73, 0x73,
-	0x75, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28,
-	0x0b, 0x32, 0x3e, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31,
-	0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e,
-	0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x49, 0x73,
-	0x73, 0x75, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72,
-	0x79, 0x52, 0x0e, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64,
-	0x73, 0x1a, 0x57, 0x0a, 0x0d, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74,
-	0x61, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28,
-	0x0d, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69,
-	0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65,
-	0x12, 0x18, 0x0a, 0x07, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
-	0x0d, 0x52, 0x07, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x1a, 0x41, 0x0a, 0x13, 0x49, 0x73,
-	0x73, 0x75, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72,
-	0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
-	0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
-	0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x43, 0x0a,
-	0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x08, 0x0a, 0x04, 0x6e, 0x6f, 0x6e, 0x65, 0x10,
-	0x00, 0x12, 0x0b, 0x0a, 0x07, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x10, 0x01, 0x12, 0x16,
-	0x0a, 0x12, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x64, 0x65, 0x67, 0x72,
-	0x61, 0x64, 0x65, 0x64, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65,
-	0x10, 0x03, 0x3a, 0x52, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x19, 0x0a, 0x17, 0x53, 0x65, 0x72, 0x76,
-	0x69, 0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x6f, 0x75,
-	0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x11, 0x12, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x69,
-	0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65, 0x77, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x06,
-	0x22, 0x04, 0x6d, 0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x30, 0x01, 0xaa, 0x8c,
-	0x89, 0xa6, 0x01, 0x02, 0x28, 0x01, 0x1a, 0x67, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
-	0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x40, 0x0a, 0x05, 0x76, 0x61, 0x6c,
-	0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e,
+	0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x1a,
+	0xcb, 0x04, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x73,
+	0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x6b, 0x75,
+	0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31,
+	0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06,
+	0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x58, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c,
+	0x61, 0x6e, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x6b, 0x75, 0x6d,
+	0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53,
+	0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65,
+	0x53, 0x74, 0x61, 0x74, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x73,
+	0x12, 0x66, 0x0a, 0x0e, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e,
+	0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e,
 	0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65,
 	0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a,
-	0x75, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x18, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
-	0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa,
-	0x8c, 0x89, 0xa6, 0x01, 0x10, 0x12, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e,
-	0x73, 0x69, 0x67, 0x68, 0x74, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x06, 0x22, 0x04, 0x6d, 0x65, 0x73,
-	0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x28, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52,
-	0x02, 0x10, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x13, 0x3a, 0x11, 0x0a, 0x0f, 0x73, 0x65, 0x72,
-	0x76, 0x69, 0x63, 0x65, 0x2d, 0x69, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0xaa, 0x8c, 0x89, 0xa6,
-	0x01, 0x04, 0x3a, 0x02, 0x18, 0x01, 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
-	0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x6d, 0x61, 0x68, 0x71, 0x2f, 0x6b, 0x75, 0x6d, 0x61,
-	0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68,
-	0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x76, 0x69, 0x63, 0x65, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65,
+	0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64,
+	0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x1a, 0x57, 0x0a, 0x0d, 0x44, 0x61, 0x74, 0x61,
+	0x70, 0x6c, 0x61, 0x6e, 0x65, 0x53, 0x74, 0x61, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74,
+	0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12,
+	0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52,
+	0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x66, 0x66, 0x6c, 0x69,
+	0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6f, 0x66, 0x66, 0x6c, 0x69, 0x6e,
+	0x65, 0x1a, 0x41, 0x0a, 0x13, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x42, 0x61, 0x63, 0x6b, 0x65,
+	0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
+	0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+	0x3a, 0x02, 0x38, 0x01, 0x22, 0x43, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x08,
+	0x0a, 0x04, 0x6e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x6f, 0x66, 0x66, 0x6c,
+	0x69, 0x6e, 0x65, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c,
+	0x6c, 0x79, 0x5f, 0x64, 0x65, 0x67, 0x72, 0x61, 0x64, 0x65, 0x64, 0x10, 0x02, 0x12, 0x0a, 0x0a,
+	0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x10, 0x03, 0x3a, 0x52, 0xaa, 0x8c, 0x89, 0xa6, 0x01,
+	0x19, 0x0a, 0x17, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69,
+	0x65, 0x77, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x11,
+	0x12, 0x0f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x76, 0x69, 0x65,
+	0x77, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x06, 0x22, 0x04, 0x6d, 0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89,
+	0xa6, 0x01, 0x02, 0x30, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x28, 0x01, 0x1a, 0x67, 0x0a,
+	0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
+	0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
+	0x12, 0x40, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x2a, 0x2e, 0x6b, 0x75, 0x6d, 0x61, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c,
+	0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x69,
+	0x67, 0x68, 0x74, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c,
+	0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x75, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x18, 0x0a, 0x16,
+	0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65,
+	0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x10, 0x12, 0x0e, 0x53, 0x65,
+	0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0xaa, 0x8c, 0x89, 0xa6,
+	0x01, 0x06, 0x22, 0x04, 0x6d, 0x65, 0x73, 0x68, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x02, 0x28, 0x01,
+	0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x52, 0x02, 0x10, 0x01, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x13,
+	0x3a, 0x11, 0x0a, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x69, 0x6e, 0x73, 0x69,
+	0x67, 0x68, 0x74, 0xaa, 0x8c, 0x89, 0xa6, 0x01, 0x04, 0x3a, 0x02, 0x18, 0x01, 0x4a, 0x04, 0x08,
+	0x01, 0x10, 0x02, 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f,
+	0x6d, 0x2f, 0x6b, 0x75, 0x6d, 0x61, 0x68, 0x71, 0x2f, 0x6b, 0x75, 0x6d, 0x61, 0x2f, 0x61, 0x70,
+	0x69, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x62,
+	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -351,21 +340,19 @@ var file_mesh_v1alpha1_service_insight_proto_goTypes = []interface{}{
 	(*ServiceInsight_Service)(nil),     // 2: kuma.mesh.v1alpha1.ServiceInsight.Service
 	nil,                                // 3: kuma.mesh.v1alpha1.ServiceInsight.ServicesEntry
 	(*ServiceInsight_Service_DataplaneStat)(nil), // 4: kuma.mesh.v1alpha1.ServiceInsight.Service.DataplaneStat
-	nil,                           // 5: kuma.mesh.v1alpha1.ServiceInsight.Service.IssuedBackendsEntry
-	(*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp
+	nil, // 5: kuma.mesh.v1alpha1.ServiceInsight.Service.IssuedBackendsEntry
 }
 var file_mesh_v1alpha1_service_insight_proto_depIdxs = []int32{
-	6, // 0: kuma.mesh.v1alpha1.ServiceInsight.last_sync:type_name -> google.protobuf.Timestamp
-	3, // 1: kuma.mesh.v1alpha1.ServiceInsight.services:type_name -> kuma.mesh.v1alpha1.ServiceInsight.ServicesEntry
-	0, // 2: kuma.mesh.v1alpha1.ServiceInsight.Service.status:type_name -> kuma.mesh.v1alpha1.ServiceInsight.Service.Status
-	4, // 3: kuma.mesh.v1alpha1.ServiceInsight.Service.dataplanes:type_name -> kuma.mesh.v1alpha1.ServiceInsight.Service.DataplaneStat
-	5, // 4: kuma.mesh.v1alpha1.ServiceInsight.Service.issuedBackends:type_name -> kuma.mesh.v1alpha1.ServiceInsight.Service.IssuedBackendsEntry
-	2, // 5: kuma.mesh.v1alpha1.ServiceInsight.ServicesEntry.value:type_name -> kuma.mesh.v1alpha1.ServiceInsight.Service
-	6, // [6:6] is the sub-list for method output_type
-	6, // [6:6] is the sub-list for method input_type
-	6, // [6:6] is the sub-list for extension type_name
-	6, // [6:6] is the sub-list for extension extendee
-	0, // [0:6] is the sub-list for field type_name
+	3, // 0: kuma.mesh.v1alpha1.ServiceInsight.services:type_name -> kuma.mesh.v1alpha1.ServiceInsight.ServicesEntry
+	0, // 1: kuma.mesh.v1alpha1.ServiceInsight.Service.status:type_name -> kuma.mesh.v1alpha1.ServiceInsight.Service.Status
+	4, // 2: kuma.mesh.v1alpha1.ServiceInsight.Service.dataplanes:type_name -> kuma.mesh.v1alpha1.ServiceInsight.Service.DataplaneStat
+	5, // 3: kuma.mesh.v1alpha1.ServiceInsight.Service.issuedBackends:type_name -> kuma.mesh.v1alpha1.ServiceInsight.Service.IssuedBackendsEntry
+	2, // 4: kuma.mesh.v1alpha1.ServiceInsight.ServicesEntry.value:type_name -> kuma.mesh.v1alpha1.ServiceInsight.Service
+	5, // [5:5] is the sub-list for method output_type
+	5, // [5:5] is the sub-list for method input_type
+	5, // [5:5] is the sub-list for extension type_name
+	5, // [5:5] is the sub-list for extension extendee
+	0, // [0:5] is the sub-list for field type_name
 }
 
 func init() { file_mesh_v1alpha1_service_insight_proto_init() }
diff --git a/api/mesh/v1alpha1/service_insight.proto b/api/mesh/v1alpha1/service_insight.proto
index 8ff8fb9c9..df3943246 100644
--- a/api/mesh/v1alpha1/service_insight.proto
+++ b/api/mesh/v1alpha1/service_insight.proto
@@ -17,7 +17,7 @@ message ServiceInsight {
   option (kuma.mesh.resource).ws.name = "service-insight";
   option (kuma.mesh.resource).ws.read_only = true;
 
-  google.protobuf.Timestamp last_sync = 1;
+  reserved 1; // formerly last_sync
 
   message Service {
     option (kuma.mesh.resource).name = "ServiceOverviewResource";
diff --git a/deployments/charts/kuma/templates/cp-rbac.yaml b/deployments/charts/kuma/templates/cp-rbac.yaml
index 9370bc9bd..5d4b5f1ac 100644
--- a/deployments/charts/kuma/templates/cp-rbac.yaml
+++ b/deployments/charts/kuma/templates/cp-rbac.yaml
@@ -24,6 +24,41 @@ rules:
       - get
       - list
       - watch
+  - apiGroups:
+      - "apps"
+    resources:
+      - deployments
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gatewayclasses
+      - gateways
+      - referencepolicies
+      - httproutes
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gateways/status
+    verbs:
+      - get
+      - patch
+      - update
   - apiGroups:
       - coordination.k8s.io
     resources:
diff --git a/go.mod b/go.mod
index d9770a313..476232dd5 100644
--- a/go.mod
+++ b/go.mod
@@ -65,6 +65,7 @@ require (
 	k8s.io/utils v0.0.0-20210820185131-d34e5cb4466e
 	sigs.k8s.io/controller-runtime v0.10.3
 	sigs.k8s.io/controller-tools v0.7.0
+	sigs.k8s.io/gateway-api v0.4.0
 	sigs.k8s.io/testing_frameworks v0.1.2
 )
 
@@ -188,7 +189,7 @@ require (
 	gopkg.in/warnings.v0 v0.1.2 // indirect
 	gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
 	k8s.io/component-base v0.22.4 // indirect
-	k8s.io/klog/v2 v2.9.0 // indirect
+	k8s.io/klog/v2 v2.10.0 // indirect
 	k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c // indirect
 	sigs.k8s.io/structured-merge-diff/v4 v4.1.2 // indirect
 	sigs.k8s.io/yaml v1.2.0 // indirect
diff --git a/go.sum b/go.sum
index f674b9587..365514796 100644
--- a/go.sum
+++ b/go.sum
@@ -175,6 +175,7 @@ github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ
 github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
 github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
 github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
+github.com/ahmetb/gen-crd-api-reference-docs v0.3.0/go.mod h1:TdjdkYhlOifCQWPs1UdTma97kQQMozf5h26hTuG70u8=
 github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
@@ -1702,6 +1703,7 @@ go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
 go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
 go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
 go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
+go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
 go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
 go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI=
 go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
@@ -2420,11 +2422,13 @@ k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
 k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ=
 k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8=
 k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s=
+k8s.io/api v0.21.3/go.mod h1:hUgeYHUbBp23Ue4qdX9tR8/ANi/g3ehylAqDn9NWVOg=
 k8s.io/api v0.22.1/go.mod h1:bh13rkTp3F1XEaLGykbyRD2QaTTzPm0e/BMd8ptFONY=
 k8s.io/api v0.22.2/go.mod h1:y3ydYpLJAaDI+BbSe2xmGcqxiWHmWjkEeIbiwHvnPR8=
 k8s.io/api v0.22.4 h1:UvyHW0ezB2oIgHAxlYoo6UJQObYXU7awuNarwoHEOjw=
 k8s.io/api v0.22.4/go.mod h1:Rgs+9gIGYC5laXQSZZ9JqT5NevNgoGiOdVWi1BAB3qk=
 k8s.io/apiextensions-apiserver v0.21.1/go.mod h1:KESQFCGjqVcVsZ9g0xX5bacMjyX5emuWcS2arzdEouA=
+k8s.io/apiextensions-apiserver v0.21.3/go.mod h1:kl6dap3Gd45+21Jnh6utCx8Z2xxLm8LGDkprcd+KbsE=
 k8s.io/apiextensions-apiserver v0.22.1/go.mod h1:HeGmorjtRmRLE+Q8dJu6AYRoZccvCMsghwS8XTUYb2c=
 k8s.io/apiextensions-apiserver v0.22.2/go.mod h1:2E0Ve/isxNl7tWLSUDgi6+cmwHi5fQRdwGVCxbC+KFA=
 k8s.io/apiextensions-apiserver v0.22.4 h1:2iGpcVyw4MnAyyXVJU2Xg6ZsbIxAOfRHo0LF5A5J0RA=
@@ -2433,6 +2437,7 @@ k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRp
 k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
 k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc=
 k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY=
+k8s.io/apimachinery v0.21.3/go.mod h1:H/IM+5vH9kZRNJ4l3x/fXP/5bOPJaVP/guptnZPeCFI=
 k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0=
 k8s.io/apimachinery v0.22.2/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0=
 k8s.io/apimachinery v0.22.4 h1:9uwcvPpukBw/Ri0EUmWz+49cnFtaoiyEhQTK+xOe7Ck=
@@ -2441,6 +2446,7 @@ k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU=
 k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM=
 k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q=
 k8s.io/apiserver v0.21.1/go.mod h1:nLLYZvMWn35glJ4/FZRhzLG/3MPxAaZTgV4FJZdr+tY=
+k8s.io/apiserver v0.21.3/go.mod h1:eDPWlZG6/cCCMj/JBcEpDoK+I+6i3r9GsChYBHSbAzU=
 k8s.io/apiserver v0.22.1/go.mod h1:2mcM6dzSt+XndzVQJX21Gx0/Klo7Aen7i0Ai6tIa400=
 k8s.io/apiserver v0.22.2/go.mod h1:vrpMmbyjWrgdyOvZTSpsusQq5iigKNWv9o9KlDAbBHI=
 k8s.io/apiserver v0.22.4/go.mod h1:38WmcUZiiy41A7Aty8/VorWRa8vDGqoUzDf2XYlku0E=
@@ -2449,11 +2455,14 @@ k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
 k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k=
 k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0=
 k8s.io/client-go v0.21.1/go.mod h1:/kEw4RgW+3xnBGzvp9IWxKSNA+lXn3A7AuH3gdOAzLs=
+k8s.io/client-go v0.21.3/go.mod h1:+VPhCgTsaFmGILxR/7E1N0S+ryO010QBeNCv5JwRGYU=
 k8s.io/client-go v0.22.1/go.mod h1:BquC5A4UOo4qVDUtoc04/+Nxp1MeHcVc1HJm1KmG8kk=
 k8s.io/client-go v0.22.2/go.mod h1:sAlhrkVDf50ZHx6z4K0S40wISNTarf1r800F+RlCF6U=
 k8s.io/client-go v0.22.4 h1:aAQ1Wk+I3bjCNk35YWUqbaueqrIonkfDPJSPDDe8Kfg=
 k8s.io/client-go v0.22.4/go.mod h1:Yzw4e5e7h1LNHA4uqnMVrpEpUs1hJOiuBsJKIlRCHDA=
 k8s.io/code-generator v0.21.1/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q=
+k8s.io/code-generator v0.21.3/go.mod h1:K3y0Bv9Cz2cOW2vXUrNZlFbflhuPvuadW6JdnN6gGKo=
+k8s.io/code-generator v0.22.0/go.mod h1:eV77Y09IopzeXOJzndrDyCI88UBok2h6WxAlBwpxa+o=
 k8s.io/code-generator v0.22.1/go.mod h1:eV77Y09IopzeXOJzndrDyCI88UBok2h6WxAlBwpxa+o=
 k8s.io/code-generator v0.22.2/go.mod h1:eV77Y09IopzeXOJzndrDyCI88UBok2h6WxAlBwpxa+o=
 k8s.io/code-generator v0.22.4/go.mod h1:qjYl54pQ/emhkT0UxbufbREYJMWsHNNV/jSVwhYZQGw=
@@ -2461,6 +2470,7 @@ k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeY
 k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI=
 k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM=
 k8s.io/component-base v0.21.1/go.mod h1:NgzFZ2qu4m1juby4TnrmpR8adRk6ka62YdH5DkIIyKA=
+k8s.io/component-base v0.21.3/go.mod h1:kkuhtfEHeZM6LkX0saqSK8PbdO7A0HigUngmhhrwfGQ=
 k8s.io/component-base v0.22.1/go.mod h1:0D+Bl8rrnsPN9v0dyYvkqFfBeAd4u7n77ze+p8CMiPo=
 k8s.io/component-base v0.22.2/go.mod h1:5Br2QhI9OTe79p+TzPe9JKNQYvEKbq9rTJDWllunGug=
 k8s.io/component-base v0.22.4 h1:7qwLJnua2ppGNZrRGDQ0vhsFebI39VGbZ4zdR5ArViI=
@@ -2471,13 +2481,17 @@ k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
 k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
 k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc=
 k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+k8s.io/gengo v0.0.0-20201203183100-97869a43a9d9/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
 k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
+k8s.io/klog v0.2.0 h1:0ElL0OHzF3N+OhoJTL0uca20SxtYt4X4+bzHeqrB83c=
+k8s.io/klog v0.2.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
 k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
 k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
 k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
 k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
-k8s.io/klog/v2 v2.9.0 h1:D7HV+n1V57XeZ0m6tdRkfknthUaM06VFbWldOFh8kzM=
 k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
+k8s.io/klog/v2 v2.10.0 h1:R2HDMDJsHVTHA2n4RjwbeYXdOcBymXdX/JRb1v0VGhE=
+k8s.io/klog/v2 v2.10.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
 k8s.io/kube-aggregator v0.22.2/go.mod h1:hsd0LEmVQSvMc0UzAwmcm/Gk3HzLp50mq/o6cu1ky2A=
 k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
 k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
@@ -2490,6 +2504,7 @@ k8s.io/metrics v0.22.1/go.mod h1:i/ZNap89UkV1gLa26dn7fhKAdheJaKy+moOqJbiif7E=
 k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20210527160623-6fdb442a123b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20210707171843-4b05e18ac7d9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
+k8s.io/utils v0.0.0-20210722164352-7f3ee0f31471/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20210820185131-d34e5cb4466e h1:ldQh+neBabomh7+89dTpiFAB8tGdfVmuIzAHbvtl+9I=
 k8s.io/utils v0.0.0-20210820185131-d34e5cb4466e/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
@@ -2527,14 +2542,19 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
 rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
+sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.19/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
 sigs.k8s.io/controller-runtime v0.9.0/go.mod h1:TgkfvrhhEw3PlI0BRL/5xM+89y3/yc0ZDfdbTl84si8=
+sigs.k8s.io/controller-runtime v0.9.6/go.mod h1:q6PpkM5vqQubEKUKOM6qr06oXGzOBcCby1DA9FbyZeA=
 sigs.k8s.io/controller-runtime v0.10.2/go.mod h1:CQp8eyUQZ/Q7PJvnIrB6/hgfTC1kBkGylwsLgOQi1WY=
 sigs.k8s.io/controller-runtime v0.10.3 h1:s5Ttmw/B4AuIbwrXD3sfBkXwnPMMWrqpVj4WRt1dano=
 sigs.k8s.io/controller-runtime v0.10.3/go.mod h1:CQp8eyUQZ/Q7PJvnIrB6/hgfTC1kBkGylwsLgOQi1WY=
 sigs.k8s.io/controller-tools v0.6.0/go.mod h1:baRMVPrctU77F+rfAuH2uPqW93k6yQnZA2dhUOr7ihc=
+sigs.k8s.io/controller-tools v0.6.2/go.mod h1:oaeGpjXn6+ZSEIQkUe/+3I40PNiDYp9aeawbt3xTgJ8=
 sigs.k8s.io/controller-tools v0.7.0 h1:iZIz1vEcavyEfxjcTLs1WH/MPf4vhPCtTKhoHqV8/G0=
 sigs.k8s.io/controller-tools v0.7.0/go.mod h1:bpBAo0VcSDDLuWt47evLhMLPxRPxMDInTEH/YbdeMK0=
+sigs.k8s.io/gateway-api v0.4.0 h1:07IJkTt21NetZTHtPKJk2I4XIgDN4BAlTIq1wK7V11o=
+sigs.k8s.io/gateway-api v0.4.0/go.mod h1:r3eiNP+0el+NTLwaTfOrCNXy8TukC+dIM3ggc+fbNWk=
 sigs.k8s.io/kustomize/api v0.8.11/go.mod h1:a77Ls36JdfCWojpUqR6m60pdGY1AYFix4AH83nJtY1g=
 sigs.k8s.io/kustomize/cmd/config v0.9.13/go.mod h1:7547FLF8W/lTaDf0BDqFTbZxM9zqwEJqCKN9sSR0xSs=
 sigs.k8s.io/kustomize/kustomize/v4 v4.2.0/go.mod h1:MOkR6fmhwG7hEDRXBYELTi5GSFcLwfqwzTRHW3kv5go=
diff --git a/pkg/api-server/service_insight_endpoints.go b/pkg/api-server/service_insight_endpoints.go
index 69a9d92b3..4fba153d0 100644
--- a/pkg/api-server/service_insight_endpoints.go
+++ b/pkg/api-server/service_insight_endpoints.go
@@ -33,7 +33,7 @@ func (s *serviceInsightEndpoints) findResource(request *restful.Request, respons
 	meshName := s.meshFromRequest(request)
 
 	serviceInsight := mesh.NewServiceInsightResource()
-	err := s.resManager.Get(request.Request.Context(), serviceInsight, store.GetByKey(insights.ServiceInsightName(meshName), meshName))
+	err := s.resManager.Get(request.Request.Context(), serviceInsight, store.GetBy(insights.ServiceInsightKey(meshName)))
 	if err != nil {
 		rest_errors.HandleError(response, err, "Could not retrieve a resource")
 	} else {
diff --git a/pkg/core/resources/apis/mesh/dataplane_overview_helpers.go b/pkg/core/resources/apis/mesh/dataplane_overview_helpers.go
index ae43957c6..e00332d47 100644
--- a/pkg/core/resources/apis/mesh/dataplane_overview_helpers.go
+++ b/pkg/core/resources/apis/mesh/dataplane_overview_helpers.go
@@ -31,7 +31,8 @@ func (t *DataplaneOverviewResource) GetStatus() (Status, []string) {
 
 	allInboundsOffline := len(errs) == len(t.Spec.Dataplane.Networking.Inbound)
 	allInboundsOnline := len(errs) == 0
-	if t.Spec.Dataplane.IsDelegatedGateway() {
+
+	if t.Spec.Dataplane.GetNetworking().GetGateway() != nil {
 		allInboundsOffline = false
 		allInboundsOnline = true
 	}
diff --git a/pkg/insights/resyncer.go b/pkg/insights/resyncer.go
index 93f7482ac..17ca14d13 100644
--- a/pkg/insights/resyncer.go
+++ b/pkg/insights/resyncer.go
@@ -6,8 +6,8 @@ import (
 	"sync"
 	"time"
 
-	"github.com/pkg/errors"
 	"golang.org/x/time/rate"
+	"google.golang.org/protobuf/proto"
 
 	mesh_proto "github.com/kumahq/kuma/api/mesh/v1alpha1"
 	"github.com/kumahq/kuma/pkg/core"
@@ -18,15 +18,24 @@ import (
 	"github.com/kumahq/kuma/pkg/core/resources/store"
 	"github.com/kumahq/kuma/pkg/core/runtime/component"
 	"github.com/kumahq/kuma/pkg/events"
-	"github.com/kumahq/kuma/pkg/util/proto"
 )
 
 var (
 	log = core.Log.WithName("mesh-insight-resyncer")
 )
 
-func ServiceInsightName(mesh string) string {
-	return fmt.Sprintf("all-services-%s", mesh)
+func ServiceInsightKey(mesh string) model.ResourceKey {
+	return model.ResourceKey{
+		Name: fmt.Sprintf("all-services-%s", mesh),
+		Mesh: mesh,
+	}
+}
+
+func MeshInsightKey(mesh string) model.ResourceKey {
+	return model.ResourceKey{
+		Name: mesh,
+		Mesh: model.NoMesh,
+	}
 }
 
 type Config struct {
@@ -49,7 +58,18 @@ type resyncer struct {
 	meshInsightMux     sync.Mutex
 	serviceInsightMux  sync.Mutex
 	rateLimiters       map[string]*rate.Limiter
-	registry           registry.TypeRegistry
+	// info provides an information about the last sync for both ServiceInsight and MeshInsight
+	// Previously this data was stored in the Resource itself, but since resyncer runs only on leader
+	// we can just save this in memory and save requests to the DB.
+	infos    map[model.ResourceKey]syncInfo
+	infosMux sync.RWMutex
+
+	registry registry.TypeRegistry
+}
+
+type syncInfo struct {
+	resource proto.Message
+	lastSync time.Time
 }
 
 // NewResyncer creates a new Component that periodically updates insights
@@ -68,6 +88,7 @@ func NewResyncer(config *Config) component.Component {
 		rm:                 config.ResourceManager,
 		rateLimiterFactory: config.RateLimiterFactory,
 		rateLimiters:       map[string]*rate.Limiter{},
+		infos:              map[model.ResourceKey]syncInfo{},
 		registry:           config.Registry,
 	}
 
@@ -80,6 +101,7 @@ func NewResyncer(config *Config) component.Component {
 }
 
 func (r *resyncer) Start(stop <-chan struct{}) error {
+	r.clearInfos() // clear the map if component is restarted
 	go func(stop <-chan struct{}) {
 		ticker := r.tick(r.maxResyncTimeout - r.minResyncTimeout)
 		for {
@@ -161,7 +183,7 @@ func (r *resyncer) createOrUpdateServiceInsights() error {
 		return err
 	}
 	for _, mesh := range meshes.Items {
-		if need, err := r.needResyncServiceInsight(mesh.GetMeta().GetName()); err != nil || !need {
+		if need := r.needResyncServiceInsight(mesh.GetMeta().GetName()); !need {
 			continue
 		}
 		err := r.createOrUpdateServiceInsight(mesh.GetMeta().GetName())
@@ -249,8 +271,16 @@ func (r *resyncer) createOrUpdateServiceInsight(mesh string) error {
 		}
 	}
 
-	err := manager.Upsert(r.rm, model.ResourceKey{Mesh: mesh, Name: ServiceInsightName(mesh)}, core_mesh.NewServiceInsightResource(), func(resource model.Resource) error {
-		insight.LastSync = proto.MustTimestampProto(core.Now())
+	key := ServiceInsightKey(mesh)
+	info, _ := r.getInfo(key)
+	if proto.Equal(info.resource, insight) {
+		log.V(1).Info("no need to update ServiceInsight because the resource is the same")
+		info.lastSync = core.Now()
+		r.setInfo(key, info)
+		return nil
+	}
+
+	err := manager.Upsert(r.rm, key, core_mesh.NewServiceInsightResource(), func(resource model.Resource) error {
 		return resource.SetSpec(insight)
 	})
 	if err != nil {
@@ -266,6 +296,11 @@ func (r *resyncer) createOrUpdateServiceInsight(mesh string) error {
 		}
 		return err
 	}
+	log.V(1).Info("ServiceInsights updated")
+	r.setInfo(key, syncInfo{
+		resource: insight,
+		lastSync: core.Now(),
+	})
 	return nil
 }
 
@@ -275,7 +310,7 @@ func (r *resyncer) createOrUpdateMeshInsights() error {
 		return err
 	}
 	for _, mesh := range meshes.Items {
-		if need, err := r.needResyncMeshInsight(mesh.GetMeta().GetName()); err != nil || !need {
+		if need := r.needResyncMeshInsight(mesh.GetMeta().GetName()); !need {
 			continue
 		}
 		err := r.createOrUpdateMeshInsight(mesh.GetMeta().GetName())
@@ -399,8 +434,16 @@ func (r *resyncer) createOrUpdateMeshInsight(mesh string) error {
 		}
 	}
 
+	key := MeshInsightKey(mesh)
+	info, _ := r.getInfo(key)
+	if proto.Equal(info.resource, insight) {
+		log.V(1).Info("no need to update MeshInsight because the resource is the same")
+		info.lastSync = core.Now()
+		r.setInfo(key, info)
+		return nil
+	}
+
 	err := manager.Upsert(r.rm, model.ResourceKey{Mesh: model.NoMesh, Name: mesh}, core_mesh.NewMeshInsightResource(), func(resource model.Resource) error {
-		insight.LastSync = proto.MustTimestampProto(core.Now())
 		return resource.SetSpec(insight)
 	})
 	if err != nil {
@@ -416,6 +459,11 @@ func (r *resyncer) createOrUpdateMeshInsight(mesh string) error {
 		}
 		return err
 	}
+	log.V(1).Info("MeshInsight updated")
+	r.setInfo(key, syncInfo{
+		resource: insight,
+		lastSync: core.Now(),
+	})
 	return nil
 }
 
@@ -476,38 +524,33 @@ func getOrDefault(version string) string {
 	return version
 }
 
-func (r *resyncer) needResyncServiceInsight(mesh string) (bool, error) {
-	serviceInsight := core_mesh.NewServiceInsightResource()
-	if err := r.rm.Get(context.Background(), serviceInsight, store.GetByKey(ServiceInsightName(mesh), mesh)); err != nil {
-		if !store.IsResourceNotFound(err) {
-			return false, errors.Wrap(err, "failed to get ServiceInsight")
-		}
-		return true, nil
-	}
-	if err := serviceInsight.Spec.LastSync.CheckValid(); err != nil {
-		return false, errors.Wrapf(err, "lastSync has wrong value: %s", serviceInsight.Spec.LastSync)
-	}
-	if core.Now().Sub(serviceInsight.Spec.LastSync.AsTime()) < r.minResyncTimeout {
-		return false, nil
-	}
-	return true, nil
+func (r *resyncer) needResyncServiceInsight(mesh string) bool {
+	info, exist := r.getInfo(ServiceInsightKey(mesh))
+	return !exist || core.Now().Sub(info.lastSync) > r.minResyncTimeout
 }
 
-func (r *resyncer) needResyncMeshInsight(mesh string) (bool, error) {
-	meshInsight := core_mesh.NewMeshInsightResource()
-	if err := r.rm.Get(context.Background(), meshInsight, store.GetByKey(mesh, model.NoMesh)); err != nil {
-		if !store.IsResourceNotFound(err) {
-			return false, errors.Wrap(err, "failed to get MeshInsight")
-		}
-		return true, nil
-	}
-	if err := meshInsight.Spec.LastSync.CheckValid(); err != nil {
-		return false, errors.Wrapf(err, "lastSync has wrong value: %s", meshInsight.Spec.LastSync)
-	}
-	if core.Now().Sub(meshInsight.Spec.LastSync.AsTime()) < r.minResyncTimeout {
-		return false, nil
-	}
-	return true, nil
+func (r *resyncer) needResyncMeshInsight(mesh string) bool {
+	info, exist := r.getInfo(MeshInsightKey(mesh))
+	return !exist || core.Now().Sub(info.lastSync) > r.minResyncTimeout
+}
+
+func (r *resyncer) getInfo(key model.ResourceKey) (syncInfo, bool) {
+	r.infosMux.RLock()
+	defer r.infosMux.RUnlock()
+	info, ok := r.infos[key]
+	return info, ok
+}
+
+func (r *resyncer) setInfo(key model.ResourceKey, info syncInfo) {
+	r.infosMux.Lock()
+	r.infos[key] = info
+	r.infosMux.Unlock()
+}
+
+func (r *resyncer) clearInfos() {
+	r.infosMux.Lock()
+	r.infos = map[model.ResourceKey]syncInfo{}
+	r.infosMux.Unlock()
 }
 
 func (r *resyncer) NeedLeaderElection() bool {
diff --git a/pkg/plugins/bootstrap/k8s/scheme.go b/pkg/plugins/bootstrap/k8s/scheme.go
index ce11975f1..d6b08fa60 100644
--- a/pkg/plugins/bootstrap/k8s/scheme.go
+++ b/pkg/plugins/bootstrap/k8s/scheme.go
@@ -5,6 +5,7 @@ import (
 	apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
 	kube_runtime "k8s.io/apimachinery/pkg/runtime"
 	kube_client_scheme "k8s.io/client-go/kubernetes/scheme"
+	gatewayapi "sigs.k8s.io/gateway-api/apis/v1alpha2"
 
 	mesh_k8s "github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/api/v1alpha1"
 	k8scnicncfio "github.com/kumahq/kuma/pkg/plugins/runtime/k8s/apis/k8s.cni.cncf.io"
@@ -25,5 +26,8 @@ func NewScheme() (*kube_runtime.Scheme, error) {
 	if err := apiextensionsv1.AddToScheme(s); err != nil {
 		return nil, errors.Wrapf(err, "could not add %q to scheme", apiextensionsv1.SchemeGroupVersion)
 	}
+	if err := gatewayapi.Install(s); err != nil {
+		return nil, errors.Wrapf(err, "could not add %q to scheme", gatewayapi.SchemeGroupVersion)
+	}
 	return s, nil
 }
diff --git a/pkg/plugins/runtime/gateway/route_table_generator.go b/pkg/plugins/runtime/gateway/route_table_generator.go
index b8ea2b277..ea40d4261 100644
--- a/pkg/plugins/runtime/gateway/route_table_generator.go
+++ b/pkg/plugins/runtime/gateway/route_table_generator.go
@@ -10,7 +10,6 @@ import (
 	"github.com/kumahq/kuma/pkg/plugins/runtime/gateway/match"
 	"github.com/kumahq/kuma/pkg/plugins/runtime/gateway/route"
 	xds_context "github.com/kumahq/kuma/pkg/xds/context"
-	envoy_names "github.com/kumahq/kuma/pkg/xds/envoy/names"
 	envoy_routes "github.com/kumahq/kuma/pkg/xds/envoy/routes"
 )
 
@@ -28,7 +27,7 @@ func (r *RouteTableGenerator) GenerateHost(ctx xds_context.Context, info *Gatewa
 	resources := ResourceAggregator{}
 
 	vh := envoy_routes.NewVirtualHostBuilder(info.Proxy.APIVersion).Configure(
-		envoy_routes.CommonVirtualHost(envoy_names.Join(info.Listener.ResourceName, info.Host.Hostname)),
+		envoy_routes.CommonVirtualHost(info.Host.Hostname),
 		envoy_routes.DomainNames(info.Host.Hostname),
 	)
 
diff --git a/pkg/plugins/runtime/k8s/controllers/gatewayapi/condition.go b/pkg/plugins/runtime/k8s/controllers/gatewayapi/condition.go
new file mode 100644
index 000000000..6c6e00f45
--- /dev/null
+++ b/pkg/plugins/runtime/k8s/controllers/gatewayapi/condition.go
@@ -0,0 +1,51 @@
+package gatewayapi
+
+import (
+	kube_apps "k8s.io/api/apps/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	kube_client "sigs.k8s.io/controller-runtime/pkg/client"
+	gatewayapi "sigs.k8s.io/gateway-api/apis/v1alpha2"
+)
+
+func conditionOn(
+	obj kube_client.Object, typ gatewayapi.GatewayConditionType, status metav1.ConditionStatus, reason gatewayapi.GatewayConditionReason,
+) metav1.Condition {
+	return metav1.Condition{
+		Type: string(typ), Status: status, Reason: string(reason), LastTransitionTime: metav1.Now(), ObservedGeneration: obj.GetGeneration(),
+	}
+}
+
+func getCondition(deployment *kube_apps.Deployment, typ kube_apps.DeploymentConditionType) *metav1.ConditionStatus {
+	for _, c := range deployment.Status.Conditions {
+		if c.Type == typ {
+			status := metav1.ConditionStatus(c.Status)
+			return &status
+		}
+	}
+
+	return nil
+}
+
+func setConditions(gateway *gatewayapi.Gateway, deployment *kube_apps.Deployment) {
+	conditions := []metav1.Condition{
+		conditionOn(gateway, gatewayapi.GatewayConditionScheduled, metav1.ConditionTrue, gatewayapi.GatewayReasonScheduled),
+	}
+
+	// TODO(michaelbeaumont) it'd be nice to get more up to date info from the
+	// kuma-dp instance to tell whether listeners are _really_ ready
+	if len(gateway.Status.Addresses) == 0 {
+		conditions = append(conditions,
+			conditionOn(gateway, gatewayapi.GatewayConditionReady, metav1.ConditionFalse, gatewayapi.GatewayReasonAddressNotAssigned),
+		)
+	} else if condition := getCondition(deployment, kube_apps.DeploymentAvailable); condition == nil || *condition != metav1.ConditionTrue {
+		conditions = append(conditions,
+			conditionOn(gateway, gatewayapi.GatewayConditionReady, metav1.ConditionFalse, gatewayapi.GatewayReasonListenersNotReady),
+		)
+	} else {
+		conditions = append(conditions,
+			conditionOn(gateway, gatewayapi.GatewayConditionReady, metav1.ConditionTrue, gatewayapi.GatewayReasonReady),
+		)
+	}
+
+	gateway.Status.Conditions = conditions
+}
diff --git a/pkg/plugins/runtime/k8s/controllers/gatewayapi/converter.go b/pkg/plugins/runtime/k8s/controllers/gatewayapi/converter.go
new file mode 100644
index 000000000..4d94affdc
--- /dev/null
+++ b/pkg/plugins/runtime/k8s/controllers/gatewayapi/converter.go
@@ -0,0 +1,196 @@
+package gatewayapi
+
+import (
+	"context"
+	"errors"
+	"fmt"
+
+	gatewayapi "sigs.k8s.io/gateway-api/apis/v1alpha2"
+
+	mesh_proto "github.com/kumahq/kuma/api/mesh/v1alpha1"
+	core_mesh "github.com/kumahq/kuma/pkg/core/resources/apis/mesh"
+	"github.com/kumahq/kuma/pkg/core/resources/store"
+	util_proto "github.com/kumahq/kuma/pkg/util/proto"
+)
+
+func k8sToKumaHeader(header gatewayapi.HTTPHeader) *mesh_proto.GatewayRoute_HttpRoute_Filter_RequestHeader_Header {
+	return &mesh_proto.GatewayRoute_HttpRoute_Filter_RequestHeader_Header{
+		Name:  string(header.Name),
+		Value: header.Value,
+	}
+}
+
+func (r *HTTPRouteReconciler) gapiToKumaRef(ctx context.Context, mesh string, objectNamespace string, ref gatewayapi.BackendObjectReference) (map[string]string, error) {
+	// References to Services are required by GAPI to include a port
+	// TODO remove when https://github.com/kubernetes-sigs/gateway-api/pull/944
+	// is in master
+	if ref.Port == nil {
+		return nil, errors.New("backend reference must include port")
+	}
+
+	switch *ref.Kind {
+	case "Service":
+		namespace := objectNamespace
+		if ref.Namespace != nil {
+			namespace = string(*ref.Namespace)
+		}
+
+		return map[string]string{
+			mesh_proto.ServiceTag: fmt.Sprintf("%s_%s_svc_%d", ref.Name, namespace, *ref.Port),
+		}, nil
+	case "ExternalService":
+		if *ref.Group != "kuma.io" {
+			break
+		}
+
+		name := string(ref.Name)
+
+		resource := core_mesh.NewExternalServiceResource()
+		if err := r.ResourceManager.Get(ctx, resource, store.GetByKey(name, mesh)); err != nil {
+			// TODO this shouldn't be a fatal error
+			return nil, fmt.Errorf("backend reference references a non-existent ExternalService %s", name)
+		}
+
+		service := resource.Spec.GetService()
+
+		return map[string]string{
+			mesh_proto.ServiceTag: service,
+		}, nil
+	}
+
+	return nil, errors.New("backend reference must be a Service or an externalservice.kuma.io") // TODO setappropriate status on gateway
+}
+
+func gapiToKumaMatch(match gatewayapi.HTTPRouteMatch) (*mesh_proto.GatewayRoute_HttpRoute_Match, error) {
+	kumaMatch := &mesh_proto.GatewayRoute_HttpRoute_Match{}
+
+	if m := match.Method; m != nil {
+		if kumaMethod, ok := mesh_proto.HttpMethod_value[string(*m)]; ok {
+			kumaMatch.Method = mesh_proto.HttpMethod(kumaMethod)
+		} else if *m != "" {
+			return nil, fmt.Errorf("unexpected HTTP method %s", *m)
+		}
+	}
+
+	if p := match.Path; p != nil {
+		path := &mesh_proto.GatewayRoute_HttpRoute_Match_Path{
+			Value: *p.Value,
+		}
+
+		switch *p.Type {
+		case gatewayapi.PathMatchExact:
+			path.Match = mesh_proto.GatewayRoute_HttpRoute_Match_Path_EXACT
+		case gatewayapi.PathMatchPathPrefix:
+			path.Match = mesh_proto.GatewayRoute_HttpRoute_Match_Path_PREFIX
+		case gatewayapi.PathMatchRegularExpression:
+			path.Match = mesh_proto.GatewayRoute_HttpRoute_Match_Path_REGEX
+		}
+
+		kumaMatch.Path = path
+	}
+
+	for _, header := range match.Headers {
+		kumaHeader := &mesh_proto.GatewayRoute_HttpRoute_Match_Header{
+			Name:  string(header.Name),
+			Value: header.Value,
+		}
+
+		switch *header.Type {
+		case gatewayapi.HeaderMatchExact:
+			kumaHeader.Match = mesh_proto.GatewayRoute_HttpRoute_Match_Header_EXACT
+		case gatewayapi.HeaderMatchRegularExpression:
+			kumaHeader.Match = mesh_proto.GatewayRoute_HttpRoute_Match_Header_REGEX
+		}
+
+		kumaMatch.Headers = append(kumaMatch.Headers, kumaHeader)
+	}
+
+	for _, query := range match.QueryParams {
+		kumaQuery := &mesh_proto.GatewayRoute_HttpRoute_Match_Query{
+			Name:  query.Name,
+			Value: query.Value,
+		}
+
+		switch *query.Type {
+		case gatewayapi.QueryParamMatchExact:
+			kumaQuery.Match = mesh_proto.GatewayRoute_HttpRoute_Match_Query_EXACT
+		case gatewayapi.QueryParamMatchRegularExpression:
+			kumaQuery.Match = mesh_proto.GatewayRoute_HttpRoute_Match_Query_REGEX
+		}
+
+		kumaMatch.QueryParameters = append(kumaMatch.QueryParameters, kumaQuery)
+	}
+
+	return kumaMatch, nil
+}
+
+func (r *HTTPRouteReconciler) gapiToKumaFilter(ctx context.Context, mesh string, namespace string, filter gatewayapi.HTTPRouteFilter) (*mesh_proto.GatewayRoute_HttpRoute_Filter, error) {
+	var kumaFilter mesh_proto.GatewayRoute_HttpRoute_Filter
+
+	switch filter.Type {
+	case gatewayapi.HTTPRouteFilterRequestHeaderModifier:
+		filter := filter.RequestHeaderModifier
+
+		var kumaInnerFilter mesh_proto.GatewayRoute_HttpRoute_Filter_RequestHeader
+
+		for _, set := range filter.Set {
+			kumaInnerFilter.Set = append(kumaInnerFilter.Set, k8sToKumaHeader(set))
+		}
+
+		for _, add := range filter.Add {
+			kumaInnerFilter.Add = append(kumaInnerFilter.Add, k8sToKumaHeader(add))
+		}
+
+		kumaInnerFilter.Remove = filter.Remove
+
+		kumaFilter.Filter = &mesh_proto.GatewayRoute_HttpRoute_Filter_RequestHeader_{
+			RequestHeader: &kumaInnerFilter,
+		}
+	case gatewayapi.HTTPRouteFilterRequestMirror:
+		filter := filter.RequestMirror
+
+		destinationRef, err := r.gapiToKumaRef(ctx, mesh, namespace, filter.BackendRef)
+		if err != nil {
+			return nil, err
+		}
+
+		kumaInnerFilter := mesh_proto.GatewayRoute_HttpRoute_Filter_Mirror{
+			Backend: &mesh_proto.GatewayRoute_Backend{
+				Destination: destinationRef,
+			},
+			Percentage: util_proto.Double(100),
+		}
+
+		kumaFilter.Filter = &mesh_proto.GatewayRoute_HttpRoute_Filter_Mirror_{
+			Mirror: &kumaInnerFilter,
+		}
+	case gatewayapi.HTTPRouteFilterRequestRedirect:
+		filter := filter.RequestRedirect
+
+		kumaInnerFilter := mesh_proto.GatewayRoute_HttpRoute_Filter_Redirect{}
+
+		if s := filter.Scheme; s != nil {
+			kumaInnerFilter.Scheme = *s
+		}
+
+		if h := filter.Hostname; h != nil {
+			kumaInnerFilter.Hostname = string(*h)
+		}
+
+		if p := filter.Port; p != nil {
+			kumaInnerFilter.Port = uint32(*p)
+		}
+
+		if sc := filter.StatusCode; sc != nil {
+			kumaInnerFilter.StatusCode = uint32(*sc)
+		}
+
+		kumaFilter.Filter = &mesh_proto.GatewayRoute_HttpRoute_Filter_Redirect_{
+			Redirect: &kumaInnerFilter,
+		}
+	default:
+		return nil, fmt.Errorf("unsupported filter type %v", filter.Type)
+	}
+
+	return &kumaFilter, nil
+}
diff --git a/pkg/plugins/runtime/k8s/controllers/gatewayapi/deployment.go b/pkg/plugins/runtime/k8s/controllers/gatewayapi/deployment.go
new file mode 100644
index 000000000..a45966a23
--- /dev/null
+++ b/pkg/plugins/runtime/k8s/controllers/gatewayapi/deployment.go
@@ -0,0 +1,134 @@
+package gatewayapi
+
+import (
+	"context"
+	"fmt"
+	"strconv"
+
+	"github.com/pkg/errors"
+	kube_apps "k8s.io/api/apps/v1"
+	kube_core "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	kube_types "k8s.io/apimachinery/pkg/types"
+	kube_controllerutil "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
+	gatewayapi "sigs.k8s.io/gateway-api/apis/v1alpha2"
+
+	core_mesh "github.com/kumahq/kuma/pkg/core/resources/apis/mesh"
+	"github.com/kumahq/kuma/pkg/core/resources/model"
+	"github.com/kumahq/kuma/pkg/plugins/runtime/k8s/metadata"
+	util_k8s "github.com/kumahq/kuma/pkg/plugins/runtime/k8s/util"
+)
+
+func k8sResourceName(name string) string {
+	return fmt.Sprintf("%s-kuma-gateway", name)
+}
+
+func k8sSelector(name string) map[string]string {
+	return map[string]string{"app": k8sResourceName(name)}
+}
+
+func (r *GatewayReconciler) createOrUpdateService(
+	ctx context.Context,
+	gateway *core_mesh.GatewayResource,
+	k8sGateway *gatewayapi.Gateway,
+) (*kube_core.Service, error) {
+	service := &kube_core.Service{
+		ObjectMeta: metav1.ObjectMeta{
+			Namespace: k8sGateway.Namespace,
+			Name:      k8sResourceName(k8sGateway.Name),
+		},
+	}
+
+	ns := kube_core.Namespace{}
+	if err := r.Client.Get(ctx, kube_types.NamespacedName{Name: k8sGateway.Namespace}, &ns); err != nil {
+		return nil, errors.Wrap(err, "unable to get Namespace for gateway")
+	}
+
+	if _, err := kube_controllerutil.CreateOrUpdate(ctx, r.Client, service, func() error {
+		var ports []kube_core.ServicePort
+
+		for _, listener := range gateway.Spec.GetConf().GetListeners() {
+			ports = append(ports, kube_core.ServicePort{
+				Name:     strconv.Itoa(int(listener.Port)),
+				Protocol: kube_core.ProtocolTCP,
+				Port:     int32(listener.Port),
+			})
+		}
+
+		service.Spec = kube_core.ServiceSpec{
+			Selector: k8sSelector(k8sGateway.Name),
+			Ports:    ports,
+			Type:     kube_core.ServiceTypeLoadBalancer,
+		}
+
+		err := kube_controllerutil.SetControllerReference(k8sGateway, service, r.Scheme)
+		return errors.Wrap(err, "unable to set Service's controller reference to Gateway")
+	}); err != nil {
+		return nil, errors.Wrap(err, "unable to create or update Service for Gateway")
+	}
+
+	return service, nil
+}
+
+func (r *GatewayReconciler) createOrUpdateDeployment(
+	ctx context.Context,
+	gateway *core_mesh.GatewayResource,
+	k8sGateway *gatewayapi.Gateway,
+) (*kube_apps.Deployment, error) {
+	ns := kube_core.Namespace{}
+	if err := r.Client.Get(ctx, kube_types.NamespacedName{Name: k8sGateway.Namespace}, &ns); err != nil {
+		return nil, errors.Wrap(err, "unable to get Namespace for gateway")
+	}
+
+	deployment := &kube_apps.Deployment{
+		ObjectMeta: metav1.ObjectMeta{
+			Namespace: k8sGateway.GetNamespace(),
+			Name:      k8sResourceName(k8sGateway.GetName()),
+		},
+	}
+
+	if _, err := kube_controllerutil.CreateOrUpdate(ctx, r.Client, deployment, func() error {
+		// TODO(michaelbeaumont) fix the resource limits ro fit use as a gateway
+		// proxy
+		container, err := r.ProxyFactory.NewContainer(k8sGateway.Annotations, &ns)
+		if err != nil {
+			return errors.Wrap(err, "unable to create Gateway container")
+		}
+
+		container.Name = util_k8s.KumaGatewayContainerName
+
+		podSpec := kube_core.PodSpec{
+			Containers: []kube_core.Container{container},
+		}
+
+		annotations := map[string]string{
+			metadata.KumaGatewayAnnotation:          metadata.AnnotationBuiltin,
+			metadata.KumaSidecarInjectionAnnotation: metadata.AnnotationDisabled,
+		}
+
+		if mesh := util_k8s.MeshFor(k8sGateway); mesh != model.DefaultMesh {
+			annotations[metadata.KumaMeshAnnotation] = mesh
+		}
+
+		var replicas int32 = 1
+
+		deployment.Spec.Replicas = &replicas
+		deployment.Spec.Selector = &metav1.LabelSelector{
+			MatchLabels: k8sSelector(k8sGateway.Name),
+		}
+		deployment.Spec.Template = kube_core.PodTemplateSpec{
+			ObjectMeta: metav1.ObjectMeta{
+				Labels:      k8sSelector(k8sGateway.Name),
+				Annotations: annotations,
+			},
+			Spec: podSpec,
+		}
+
+		err = kube_controllerutil.SetControllerReference(k8sGateway, deployment, r.Scheme)
+		return errors.Wrap(err, "unable to set Deployments's controller reference to Gateway")
+	}); err != nil {
+		return nil, errors.Wrap(err, "unable to create or update Deployment for Gateway")
+	}
+
+	return deployment, nil
+}
diff --git a/pkg/plugins/runtime/k8s/controllers/gatewayapi/gateway_controller.go b/pkg/plugins/runtime/k8s/controllers/gatewayapi/gateway_controller.go
new file mode 100644
index 000000000..b575be3d0
--- /dev/null
+++ b/pkg/plugins/runtime/k8s/controllers/gatewayapi/gateway_controller.go
@@ -0,0 +1,182 @@
+package gatewayapi
+
+import (
+	"context"
+	"fmt"
+
+	"github.com/go-logr/logr"
+	"github.com/pkg/errors"
+	kube_apps "k8s.io/api/apps/v1"
+	kube_core "k8s.io/api/core/v1"
+	kube_apierrs "k8s.io/apimachinery/pkg/api/errors"
+	kube_runtime "k8s.io/apimachinery/pkg/runtime"
+	kube_types "k8s.io/apimachinery/pkg/types"
+	kube_ctrl "sigs.k8s.io/controller-runtime"
+	kube_client "sigs.k8s.io/controller-runtime/pkg/client"
+	gatewayapi "sigs.k8s.io/gateway-api/apis/v1alpha2"
+
+	mesh_proto "github.com/kumahq/kuma/api/mesh/v1alpha1"
+	core_mesh "github.com/kumahq/kuma/pkg/core/resources/apis/mesh"
+	"github.com/kumahq/kuma/pkg/core/resources/manager"
+	"github.com/kumahq/kuma/pkg/core/resources/model"
+	k8s_common "github.com/kumahq/kuma/pkg/plugins/common/k8s"
+	mesh_k8s "github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/api/v1alpha1"
+	"github.com/kumahq/kuma/pkg/plugins/runtime/k8s/containers"
+	k8s_util "github.com/kumahq/kuma/pkg/plugins/runtime/k8s/util"
+	util_k8s "github.com/kumahq/kuma/pkg/util/k8s"
+)
+
+const controllerName = "gateways.kuma.io/controller"
+
+// GatewayReconciler reconciles a GatewayAPI Gateway object.
+type GatewayReconciler struct {
+	kube_client.Client
+	Reader kube_client.Reader
+	Log    logr.Logger
+
+	Scheme          *kube_runtime.Scheme
+	Converter       k8s_common.Converter
+	SystemNamespace string
+	ProxyFactory    containers.DataplaneProxyFactory
+	ResourceManager manager.ResourceManager
+}
+
+// Reconcile handles transforming a gateway-api Gateway into a Kuma Gateway and
+// managing the status of the gateway-api objects.
+func (r *GatewayReconciler) Reconcile(ctx context.Context, req kube_ctrl.Request) (kube_ctrl.Result, error) {
+	gateway := &gatewayapi.Gateway{}
+	if err := r.Get(ctx, req.NamespacedName, gateway); err != nil {
+		if kube_apierrs.IsNotFound(err) {
+			return kube_ctrl.Result{}, nil
+		}
+
+		return kube_ctrl.Result{}, err
+	}
+
+	class, err := r.getGatewayClass(ctx, gateway.Spec.GatewayClassName)
+	if err != nil {
+		return kube_ctrl.Result{}, errors.Wrap(err, "unable to retrieve GatewayClass referenced by Gateway")
+	} else if class == nil {
+		return kube_ctrl.Result{}, nil
+	}
+
+	coreName := util_k8s.K8sNamespacedNameToCoreName(gateway.Name, gateway.Namespace)
+	mesh := k8s_util.MeshFor(gateway)
+
+	resource := core_mesh.NewGatewayResource()
+
+	if err := manager.Upsert(r.ResourceManager, model.ResourceKey{Mesh: mesh, Name: coreName}, resource, func(resource model.Resource) error {
+		gatewaySpec, err := r.gapiToKumaGateway(gateway)
+		if err != nil {
+			return errors.Wrap(err, "could not create Kuma Gateway spec")
+		}
+
+		return resource.SetSpec(gatewaySpec)
+	}); err != nil {
+		return kube_ctrl.Result{}, errors.Wrap(err, "could not upsert Gateway")
+	}
+
+	deployment, err := r.createOrUpdateDeployment(ctx, resource, gateway)
+	if err != nil {
+		return kube_ctrl.Result{}, errors.Wrap(err, "unable to create Deployment for Gateway")
+	}
+
+	svc, err := r.createOrUpdateService(ctx, resource, gateway)
+	if err != nil {
+		return kube_ctrl.Result{}, errors.Wrap(err, "unable to create Service for Gateway")
+	}
+
+	r.updateStatus(gateway, svc, deployment)
+
+	if err := r.Client.Status().Update(ctx, gateway); err != nil {
+		return kube_ctrl.Result{}, errors.Wrap(err, "unable to update Gateway status")
+	}
+
+	return kube_ctrl.Result{}, nil
+}
+
+func (r *GatewayReconciler) getGatewayClass(ctx context.Context, name gatewayapi.ObjectName) (*gatewayapi.GatewayClass, error) {
+	class := &gatewayapi.GatewayClass{}
+	classObjectKey := kube_types.NamespacedName{Name: string(name)}
+
+	if err := r.Client.Get(ctx, classObjectKey, class); err != nil {
+		if kube_apierrs.IsNotFound(err) {
+			return nil, nil
+		}
+
+		return nil, errors.Wrapf(err, "failed to get GatewayClass %s", classObjectKey)
+	}
+
+	if class.Spec.ControllerName != controllerName {
+		return nil, nil
+	}
+
+	return class, nil
+}
+
+func (r *GatewayReconciler) gapiToKumaGateway(gateway *gatewayapi.Gateway) (*mesh_proto.Gateway, error) {
+	var listeners []*mesh_proto.Gateway_Listener
+
+	for _, l := range gateway.Spec.Listeners {
+		listener := &mesh_proto.Gateway_Listener{
+			Port: uint32(l.Port),
+			Tags: map[string]string{
+				// gateway-api routes are configured using direct references to
+				// Gateways, so just create a tag specifically for this listener
+				mesh_proto.ListenerTag: string(l.Name),
+			},
+		}
+
+		if protocol, ok := mesh_proto.Gateway_Listener_Protocol_value[string(l.Protocol)]; ok {
+			listener.Protocol = mesh_proto.Gateway_Listener_Protocol(protocol)
+		} else if l.Protocol != "" {
+			return nil, errors.Errorf("unexpected protocol %s", l.Protocol)
+		}
+
+		listener.Hostname = "*"
+		if l.Hostname != nil {
+			listener.Hostname = string(*l.Hostname)
+		}
+
+		listeners = append(listeners, listener)
+	}
+
+	match := map[string]string{
+		mesh_proto.ServiceTag: fmt.Sprintf("%s-kuma-gateway_%s_svc", gateway.Name, gateway.Namespace),
+	}
+
+	return &mesh_proto.Gateway{
+		Selectors: []*mesh_proto.Selector{
+			{Match: match},
+		},
+		Conf: &mesh_proto.Gateway_Conf{
+			Listeners: listeners,
+		},
+	}, nil
+}
+
+func (r *GatewayReconciler) updateStatus(gateway *gatewayapi.Gateway, svc *kube_core.Service, deployment *kube_apps.Deployment) {
+	ipType := gatewayapi.IPAddressType
+
+	var addrs []gatewayapi.GatewayAddress
+
+	for _, addr := range svc.Status.LoadBalancer.Ingress {
+		addrs = append(addrs, gatewayapi.GatewayAddress{
+			Type:  &ipType,
+			Value: addr.IP,
+		})
+	}
+
+	gateway.Status.Addresses = addrs
+
+	setConditions(gateway, deployment)
+}
+
+func (r *GatewayReconciler) SetupWithManager(mgr kube_ctrl.Manager) error {
+	return kube_ctrl.NewControllerManagedBy(mgr).
+		For(&gatewayapi.Gateway{}).
+		Owns(&mesh_k8s.Gateway{}).
+		Owns(&kube_core.Service{}).
+		Owns(&kube_apps.Deployment{}).
+		Complete(r)
+}
diff --git a/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_controller.go b/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_controller.go
new file mode 100644
index 000000000..5ddd81d3e
--- /dev/null
+++ b/pkg/plugins/runtime/k8s/controllers/gatewayapi/http_route_controller.go
@@ -0,0 +1,175 @@
+package gatewayapi
+
+import (
+	"context"
+	"fmt"
+
+	"github.com/go-logr/logr"
+	"github.com/pkg/errors"
+	kube_apierrs "k8s.io/apimachinery/pkg/api/errors"
+	kube_runtime "k8s.io/apimachinery/pkg/runtime"
+	kube_ctrl "sigs.k8s.io/controller-runtime"
+	kube_client "sigs.k8s.io/controller-runtime/pkg/client"
+	gatewayapi "sigs.k8s.io/gateway-api/apis/v1alpha2"
+
+	mesh_proto "github.com/kumahq/kuma/api/mesh/v1alpha1"
+	"github.com/kumahq/kuma/pkg/core"
+	core_mesh "github.com/kumahq/kuma/pkg/core/resources/apis/mesh"
+	"github.com/kumahq/kuma/pkg/core/resources/manager"
+	"github.com/kumahq/kuma/pkg/core/resources/model"
+	"github.com/kumahq/kuma/pkg/core/resources/store"
+	k8s_common "github.com/kumahq/kuma/pkg/plugins/common/k8s"
+	k8s_util "github.com/kumahq/kuma/pkg/plugins/runtime/k8s/util"
+	util_k8s "github.com/kumahq/kuma/pkg/util/k8s"
+)
+
+// HTTPRouteReconciler reconciles a GatewayAPI object into Kuma-native objects
+type HTTPRouteReconciler struct {
+	kube_client.Client
+	Reader kube_client.Reader
+	Log    logr.Logger
+
+	Scheme          *kube_runtime.Scheme
+	Converter       k8s_common.Converter
+	SystemNamespace string
+	ResourceManager manager.ResourceManager
+}
+
+// Reconcile handles transforming a gateway-api HTTPRoute into a Kuma
+// GatewayRoute and managing the status of the gateway-api objects.
+func (r *HTTPRouteReconciler) Reconcile(ctx context.Context, req kube_ctrl.Request) (kube_ctrl.Result, error) {
+	httpRoute := &gatewayapi.HTTPRoute{}
+	if err := r.Get(ctx, req.NamespacedName, httpRoute); err != nil {
+		if kube_apierrs.IsNotFound(err) {
+			return kube_ctrl.Result{}, nil
+		}
+
+		return kube_ctrl.Result{}, err
+	}
+
+	// TODO check that gateways exist etc
+	// TODO set status on gapi resources
+
+	coreName := util_k8s.K8sNamespacedNameToCoreName(httpRoute.Name, httpRoute.Namespace)
+	mesh := k8s_util.MeshFor(httpRoute)
+
+	resource := core_mesh.NewGatewayRouteResource()
+
+	if err := manager.Upsert(r.ResourceManager, model.ResourceKey{Mesh: mesh, Name: coreName}, resource, func(resource model.Resource) error {
+		spec, err := r.gapiToKumaRoute(ctx, mesh, httpRoute.Namespace, httpRoute)
+		if err != nil {
+			return errors.Wrap(err, "error generating GatewayRoute")
+		}
+
+		return resource.SetSpec(spec)
+	}); err != nil {
+		return kube_ctrl.Result{}, errors.Wrap(err, "could not upsert GatewayRoute")
+	}
+
+	var err error
+
+	resource.Spec, err = r.gapiToKumaRoute(ctx, mesh, httpRoute.Namespace, httpRoute)
+	if err != nil {
+		return kube_ctrl.Result{}, err
+	}
+
+	err = r.ResourceManager.Update(ctx, resource, store.ModifiedAt(core.Now()))
+
+	return kube_ctrl.Result{}, errors.Wrap(err, "could not update GatewayRoute resource")
+}
+
+func (r *HTTPRouteReconciler) gapiToKumaRoute(ctx context.Context, mesh string, namespace string, route *gatewayapi.HTTPRoute) (*mesh_proto.GatewayRoute, error) {
+	var selectors []*mesh_proto.Selector
+
+	// Convert GAPI parent refs into Kuma tag matchers
+	for _, ref := range route.Spec.ParentRefs {
+		namespace := route.Namespace
+		if ns := ref.Namespace; ns != nil {
+			namespace = string(*ns)
+		}
+
+		match := map[string]string{
+			mesh_proto.ServiceTag: fmt.Sprintf("%s-kuma-gateway_%s_svc", string(ref.Name), namespace),
+		}
+		if ref.SectionName != nil {
+			match[mesh_proto.ListenerTag] = string(*ref.SectionName)
+		}
+
+		selectors = append(selectors, &mesh_proto.Selector{
+			Match: match,
+		})
+	}
+
+	var hostnames []string
+
+	for _, hn := range route.Spec.Hostnames {
+		hostnames = append(hostnames, string(hn))
+	}
+
+	var rules []*mesh_proto.GatewayRoute_HttpRoute_Rule
+
+	for _, rule := range route.Spec.Rules {
+		var backends []*mesh_proto.GatewayRoute_Backend
+
+		for _, backend := range rule.BackendRefs {
+			ref := backend.BackendObjectReference
+
+			destination, err := r.gapiToKumaRef(ctx, mesh, namespace, ref)
+			if err != nil {
+				return nil, err
+			}
+
+			backends = append(backends, &mesh_proto.GatewayRoute_Backend{
+				// Weight has a default of 1
+				Weight:      uint32(*backend.Weight),
+				Destination: destination,
+			})
+		}
+
+		var matches []*mesh_proto.GatewayRoute_HttpRoute_Match
+
+		for _, match := range rule.Matches {
+			kumaMatch, err := gapiToKumaMatch(match)
+			if err != nil {
+				return nil, errors.Wrap(err, "couldn't convert match")
+			}
+
+			matches = append(matches, kumaMatch)
+		}
+
+		var filters []*mesh_proto.GatewayRoute_HttpRoute_Filter
+
+		for _, filter := range rule.Filters {
+			kumaFilter, err := r.gapiToKumaFilter(ctx, mesh, namespace, filter)
+			if err != nil {
+				return nil, err
+			}
+
+			filters = append(filters, kumaFilter)
+		}
+
+		rules = append(rules, &mesh_proto.GatewayRoute_HttpRoute_Rule{
+			Matches:  matches,
+			Filters:  filters,
+			Backends: backends,
+		})
+	}
+
+	return &mesh_proto.GatewayRoute{
+		Selectors: selectors,
+		Conf: &mesh_proto.GatewayRoute_Conf{
+			Route: &mesh_proto.GatewayRoute_Conf_Http{
+				Http: &mesh_proto.GatewayRoute_HttpRoute{
+					Hostnames: hostnames,
+					Rules:     rules,
+				},
+			},
+		},
+	}, nil
+}
+
+func (r *HTTPRouteReconciler) SetupWithManager(mgr kube_ctrl.Manager) error {
+	return kube_ctrl.NewControllerManagedBy(mgr).
+		For(&gatewayapi.HTTPRoute{}).
+		Complete(r)
+}
diff --git a/pkg/plugins/runtime/k8s/plugin.go b/pkg/plugins/runtime/k8s/plugin.go
index 5ee5b46de..c82771307 100644
--- a/pkg/plugins/runtime/k8s/plugin.go
+++ b/pkg/plugins/runtime/k8s/plugin.go
@@ -87,6 +87,9 @@ func addControllers(mgr kube_ctrl.Manager, rt core_runtime.Runtime, converter k8
 	if err := addMeshReconciler(mgr, rt, converter); err != nil {
 		return err
 	}
+	if err := addGatewayReconciler(mgr, rt, converter); err != nil {
+		return err
+	}
 	if err := addPodReconciler(mgr, rt, converter); err != nil {
 		return err
 	}
diff --git a/pkg/plugins/runtime/k8s/plugin_gateway.go b/pkg/plugins/runtime/k8s/plugin_gateway.go
new file mode 100644
index 000000000..0f0298a6b
--- /dev/null
+++ b/pkg/plugins/runtime/k8s/plugin_gateway.go
@@ -0,0 +1,99 @@
+package k8s
+
+import (
+	"fmt"
+	"os"
+
+	"github.com/pkg/errors"
+	"k8s.io/apimachinery/pkg/runtime/schema"
+	kube_ctrl "sigs.k8s.io/controller-runtime"
+	gatewayapi "sigs.k8s.io/gateway-api/apis/v1alpha2"
+
+	mesh_proto "github.com/kumahq/kuma/api/mesh/v1alpha1"
+	"github.com/kumahq/kuma/pkg/core"
+	core_runtime "github.com/kumahq/kuma/pkg/core/runtime"
+	k8s_common "github.com/kumahq/kuma/pkg/plugins/common/k8s"
+	"github.com/kumahq/kuma/pkg/plugins/resources/k8s/native/pkg/registry"
+	"github.com/kumahq/kuma/pkg/plugins/runtime/k8s/containers"
+	gatewayapi_controllers "github.com/kumahq/kuma/pkg/plugins/runtime/k8s/controllers/gatewayapi"
+)
+
+func crdsPresent(mgr kube_ctrl.Manager) bool {
+	gk := schema.GroupKind{
+		Group: gatewayapi.SchemeGroupVersion.Group,
+		Kind:  "Gateway",
+	}
+
+	mappings, _ := mgr.GetClient().RESTMapper().RESTMappings(
+		gk,
+		gatewayapi.SchemeGroupVersion.Version,
+	)
+
+	return len(mappings) > 0
+}
+
+func addGatewayReconciler(mgr kube_ctrl.Manager, rt core_runtime.Runtime, converter k8s_common.Converter) error {
+	// If we haven't registered our type, we're not reconciling gatewayapi
+	// objects.
+	if _, err := registry.Global().NewObject(&mesh_proto.Gateway{}); err != nil {
+		var unknownTypeError *registry.UnknownTypeError
+		if errors.As(err, &unknownTypeError) {
+			return nil
+		}
+	}
+
+	if !crdsPresent(mgr) {
+		log.Info("Gateway API CRDs not registered")
+		return nil
+	}
+
+	cpURL := fmt.Sprintf("https://%s.%s:%d", rt.Config().Runtime.Kubernetes.ControlPlaneServiceName, rt.Config().Store.Kubernetes.SystemNamespace, rt.Config().DpServer.Port)
+
+	// TODO don't use injector config
+	cfg := rt.Config().Runtime.Kubernetes.Injector
+
+	var caCert string
+	if cfg.CaCertFile != "" {
+		bytes, err := os.ReadFile(cfg.CaCertFile)
+		if err != nil {
+			return errors.Wrapf(err, "could not read provided CA cert file %s", cfg.CaCertFile)
+		}
+		caCert = string(bytes)
+	}
+
+	proxyFactory := containers.DataplaneProxyFactory{
+		ControlPlaneURL:    cpURL,
+		ControlPlaneCACert: caCert,
+		ContainerConfig:    cfg.SidecarContainer.DataplaneContainer,
+		BuiltinDNS:         cfg.BuiltinDNS,
+	}
+
+	gatewayAPIGatewayReconciler := &gatewayapi_controllers.GatewayReconciler{
+		Client:          mgr.GetClient(),
+		Reader:          mgr.GetAPIReader(),
+		Log:             core.Log.WithName("controllers").WithName("gatewayapi").WithName("Gateway"),
+		Scheme:          mgr.GetScheme(),
+		Converter:       converter,
+		SystemNamespace: rt.Config().Store.Kubernetes.SystemNamespace,
+		ProxyFactory:    proxyFactory,
+		ResourceManager: rt.ResourceManager(),
+	}
+	if err := gatewayAPIGatewayReconciler.SetupWithManager(mgr); err != nil {
+		return errors.Wrap(err, "could not setup Gateway API Gateway reconciler")
+	}
+
+	gatewayAPIHTTPRouteReconciler := &gatewayapi_controllers.HTTPRouteReconciler{
+		Client:          mgr.GetClient(),
+		Reader:          mgr.GetAPIReader(),
+		Log:             core.Log.WithName("controllers").WithName("gatewayapi").WithName("HTTPRoute"),
+		Scheme:          mgr.GetScheme(),
+		Converter:       converter,
+		SystemNamespace: rt.Config().Store.Kubernetes.SystemNamespace,
+		ResourceManager: rt.ResourceManager(),
+	}
+	if err := gatewayAPIHTTPRouteReconciler.SetupWithManager(mgr); err != nil {
+		return errors.Wrap(err, "could not setup Gateway API HTTPRoute reconciler")
+	}
+
+	return nil
+}
diff --git a/pkg/xds/sync/dataplane_proxy_builder.go b/pkg/xds/sync/dataplane_proxy_builder.go
index 8a28c49e5..4e01d3cce 100644
--- a/pkg/xds/sync/dataplane_proxy_builder.go
+++ b/pkg/xds/sync/dataplane_proxy_builder.go
@@ -240,8 +240,7 @@ func (p *DataplaneProxyBuilder) resolveTLSReadiness(
 	}
 
 	serviceInsight := core_mesh.NewServiceInsightResource()
-	insightName := insights.ServiceInsightName(key.Mesh)
-	if err := p.CachingResManager.Get(ctx, serviceInsight, core_store.GetByKey(insightName, key.Mesh)); err != nil {
+	if err := p.CachingResManager.Get(ctx, serviceInsight, core_store.GetBy(insights.ServiceInsightKey(key.Mesh))); err != nil {
 		if core_store.IsResourceNotFound(err) {
 			// Nothing about the TLS readiness has been reported yet
 			syncLog.Info("could not determine service TLS readiness", "error", err)


Test patch:
diff --git a/app/kumactl/cmd/install/testdata/install-control-plane.cni-enabled.golden.yaml b/app/kumactl/cmd/install/testdata/install-control-plane.cni-enabled.golden.yaml
index 83a8cb397..5debf3b23 100644
--- a/app/kumactl/cmd/install/testdata/install-control-plane.cni-enabled.golden.yaml
+++ b/app/kumactl/cmd/install/testdata/install-control-plane.cni-enabled.golden.yaml
@@ -723,6 +723,41 @@ rules:
       - get
       - list
       - watch
+  - apiGroups:
+      - "apps"
+    resources:
+      - deployments
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gatewayclasses
+      - gateways
+      - referencepolicies
+      - httproutes
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gateways/status
+    verbs:
+      - get
+      - patch
+      - update
   - apiGroups:
       - coordination.k8s.io
     resources:
diff --git a/app/kumactl/cmd/install/testdata/install-control-plane.defaults.golden.yaml b/app/kumactl/cmd/install/testdata/install-control-plane.defaults.golden.yaml
index 9113fa8ee..e51756343 100644
--- a/app/kumactl/cmd/install/testdata/install-control-plane.defaults.golden.yaml
+++ b/app/kumactl/cmd/install/testdata/install-control-plane.defaults.golden.yaml
@@ -670,6 +670,41 @@ rules:
       - get
       - list
       - watch
+  - apiGroups:
+      - "apps"
+    resources:
+      - deployments
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gatewayclasses
+      - gateways
+      - referencepolicies
+      - httproutes
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gateways/status
+    verbs:
+      - get
+      - patch
+      - update
   - apiGroups:
       - coordination.k8s.io
     resources:
diff --git a/app/kumactl/cmd/install/testdata/install-control-plane.global.golden.yaml b/app/kumactl/cmd/install/testdata/install-control-plane.global.golden.yaml
index c968e53f3..bf21b715c 100644
--- a/app/kumactl/cmd/install/testdata/install-control-plane.global.golden.yaml
+++ b/app/kumactl/cmd/install/testdata/install-control-plane.global.golden.yaml
@@ -670,6 +670,41 @@ rules:
       - get
       - list
       - watch
+  - apiGroups:
+      - "apps"
+    resources:
+      - deployments
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gatewayclasses
+      - gateways
+      - referencepolicies
+      - httproutes
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gateways/status
+    verbs:
+      - get
+      - patch
+      - update
   - apiGroups:
       - coordination.k8s.io
     resources:
diff --git a/app/kumactl/cmd/install/testdata/install-control-plane.override-env-vars.golden.yaml b/app/kumactl/cmd/install/testdata/install-control-plane.override-env-vars.golden.yaml
index 4cae99241..e0d238455 100644
--- a/app/kumactl/cmd/install/testdata/install-control-plane.override-env-vars.golden.yaml
+++ b/app/kumactl/cmd/install/testdata/install-control-plane.override-env-vars.golden.yaml
@@ -670,6 +670,41 @@ rules:
       - get
       - list
       - watch
+  - apiGroups:
+      - "apps"
+    resources:
+      - deployments
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gatewayclasses
+      - gateways
+      - referencepolicies
+      - httproutes
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gateways/status
+    verbs:
+      - get
+      - patch
+      - update
   - apiGroups:
       - coordination.k8s.io
     resources:
diff --git a/app/kumactl/cmd/install/testdata/install-control-plane.overrides.golden.yaml b/app/kumactl/cmd/install/testdata/install-control-plane.overrides.golden.yaml
index 9bdf750d7..a3fd7b79d 100644
--- a/app/kumactl/cmd/install/testdata/install-control-plane.overrides.golden.yaml
+++ b/app/kumactl/cmd/install/testdata/install-control-plane.overrides.golden.yaml
@@ -670,6 +670,41 @@ rules:
       - get
       - list
       - watch
+  - apiGroups:
+      - "apps"
+    resources:
+      - deployments
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gatewayclasses
+      - gateways
+      - referencepolicies
+      - httproutes
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gateways/status
+    verbs:
+      - get
+      - patch
+      - update
   - apiGroups:
       - coordination.k8s.io
     resources:
diff --git a/app/kumactl/cmd/install/testdata/install-control-plane.with-ingress.golden.yaml b/app/kumactl/cmd/install/testdata/install-control-plane.with-ingress.golden.yaml
index 8e2f827f4..b122623e1 100644
--- a/app/kumactl/cmd/install/testdata/install-control-plane.with-ingress.golden.yaml
+++ b/app/kumactl/cmd/install/testdata/install-control-plane.with-ingress.golden.yaml
@@ -679,6 +679,41 @@ rules:
       - get
       - list
       - watch
+  - apiGroups:
+      - "apps"
+    resources:
+      - deployments
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gatewayclasses
+      - gateways
+      - referencepolicies
+      - httproutes
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gateways/status
+    verbs:
+      - get
+      - patch
+      - update
   - apiGroups:
       - coordination.k8s.io
     resources:
diff --git a/app/kumactl/cmd/install/testdata/install-control-plane.zone.golden.yaml b/app/kumactl/cmd/install/testdata/install-control-plane.zone.golden.yaml
index 358dc7e34..f410d5373 100644
--- a/app/kumactl/cmd/install/testdata/install-control-plane.zone.golden.yaml
+++ b/app/kumactl/cmd/install/testdata/install-control-plane.zone.golden.yaml
@@ -670,6 +670,41 @@ rules:
       - get
       - list
       - watch
+  - apiGroups:
+      - "apps"
+    resources:
+      - deployments
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gatewayclasses
+      - gateways
+      - referencepolicies
+      - httproutes
+    verbs:
+      - create
+      - delete
+      - get
+      - list
+      - patch
+      - update
+      - watch
+  - apiGroups:
+      - gateway.networking.k8s.io
+    resources:
+      - gateways/status
+    verbs:
+      - get
+      - patch
+      - update
   - apiGroups:
       - coordination.k8s.io
     resources:
diff --git a/pkg/insights/resyncer_test.go b/pkg/insights/resyncer_test.go
index ad98c86da..c124a8e6c 100644
--- a/pkg/insights/resyncer_test.go
+++ b/pkg/insights/resyncer_test.go
@@ -22,8 +22,6 @@ import (
 	test_insights "github.com/kumahq/kuma/pkg/insights/test"
 	"github.com/kumahq/kuma/pkg/plugins/resources/memory"
 	"github.com/kumahq/kuma/pkg/test/kds/samples"
-	. "github.com/kumahq/kuma/pkg/test/matchers"
-	"github.com/kumahq/kuma/pkg/util/proto"
 )
 
 var _ = Describe("Insight Persistence", func() {
@@ -93,7 +91,6 @@ var _ = Describe("Insight Persistence", func() {
 			return rm.Get(context.Background(), insight, store.GetByKey("mesh-1", model.NoMesh))
 		}, "10s", "100ms").Should(BeNil())
 		Expect(insight.Spec.Policies[string(core_mesh.TrafficPermissionType)].Total).To(Equal(uint32(1)))
-		Expect(insight.Spec.LastSync).To(MatchProto(proto.MustTimestampProto(now)))
 	})
 
 	It("should count dataplanes by version", func() {
@@ -336,7 +333,6 @@ var _ = Describe("Insight Persistence", func() {
 		}, "10s", "100ms").Should(BeNil())
 		Expect(insight.Spec.Policies[string(core_mesh.DataplaneType)]).To(BeNil())
 		Expect(insight.Spec.Dataplanes.Total).To(Equal(uint32(1)))
-		Expect(insight.Spec.LastSync).To(MatchProto(proto.MustTimestampProto(now)))
 	})
 
 	It("should return correct statuses in service insights", func() {
@@ -955,7 +951,7 @@ var _ = Describe("Insight Persistence", func() {
 
 		serviceInsight := core_mesh.NewServiceInsightResource()
 		Eventually(func() error {
-			return rm.Get(context.Background(), serviceInsight, store.GetByKey(insights.ServiceInsightName("mesh-1"), "mesh-1"))
+			return rm.Get(context.Background(), serviceInsight, store.GetBy(insights.ServiceInsightKey("mesh-1")))
 		}, "10s", "100ms").Should(BeNil())
 
 		Expect(serviceInsight.Spec.Services).To(HaveKey("gateway"))
diff --git a/pkg/plugins/runtime/gateway/testdata/http/01-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/01-gateway-route.yaml
index c4d0ba424..29d0cbfbb 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/01-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/01-gateway-route.yaml
@@ -106,7 +106,7 @@ Routes:
       virtualHosts:
       - domains:
         - foo.example.com
-        name: edge-gateway:HTTP:8080:foo.example.com
+        name: foo.example.com
         routes:
         - match:
             path: /
@@ -126,7 +126,7 @@ Routes:
               totalWeight: 1
       - domains:
         - bar.example.com
-        name: edge-gateway:HTTP:8080:bar.example.com
+        name: bar.example.com
         routes:
         - match:
             path: /
@@ -146,7 +146,7 @@ Routes:
               totalWeight: 1
       - domains:
         - '*.example.com'
-        name: edge-gateway:HTTP:8080:*.example.com
+        name: '*.example.com'
         routes:
         - match:
             path: /
@@ -166,7 +166,7 @@ Routes:
               totalWeight: 1
       - domains:
         - '*'
-        name: edge-gateway:HTTP:8080:*
+        name: '*'
 Runtimes:
   Resources: {}
 Secrets:
diff --git a/pkg/plugins/runtime/gateway/testdata/http/02-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/02-gateway-route.yaml
index f9ee36b04..fb16bedf1 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/02-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/02-gateway-route.yaml
@@ -106,7 +106,7 @@ Routes:
       virtualHosts:
       - domains:
         - extra.example.com
-        name: edge-gateway:HTTP:8080:extra.example.com
+        name: extra.example.com
         routes:
         - match:
             path: /
@@ -126,7 +126,7 @@ Routes:
               totalWeight: 1
       - domains:
         - '*'
-        name: edge-gateway:HTTP:8080:*
+        name: '*'
         routes:
         - match:
             path: /
diff --git a/pkg/plugins/runtime/gateway/testdata/http/03-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/03-gateway-route.yaml
index fad4f03c1..889ce7ac8 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/03-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/03-gateway-route.yaml
@@ -106,7 +106,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             path: /service/echo
diff --git a/pkg/plugins/runtime/gateway/testdata/http/04-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/04-gateway-route.yaml
index 50267ad8e..f72f96b2a 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/04-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/04-gateway-route.yaml
@@ -135,7 +135,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             path: /
diff --git a/pkg/plugins/runtime/gateway/testdata/http/05-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/05-gateway-route.yaml
index 2521d2e28..511d006c7 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/05-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/05-gateway-route.yaml
@@ -63,7 +63,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             path: /
diff --git a/pkg/plugins/runtime/gateway/testdata/http/06-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/06-gateway-route.yaml
index 2a155fc4e..605e413b4 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/06-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/06-gateway-route.yaml
@@ -135,7 +135,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             path: /
diff --git a/pkg/plugins/runtime/gateway/testdata/http/07-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/07-gateway-route.yaml
index dabb63eac..febc6f737 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/07-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/07-gateway-route.yaml
@@ -106,7 +106,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             path: /api
diff --git a/pkg/plugins/runtime/gateway/testdata/http/08-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/08-gateway-route.yaml
index 6c10e9dfb..89357d0ff 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/08-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/08-gateway-route.yaml
@@ -149,7 +149,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             path: /api
diff --git a/pkg/plugins/runtime/gateway/testdata/http/09-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/09-gateway-route.yaml
index 1cbe31ac8..10c64c768 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/09-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/09-gateway-route.yaml
@@ -106,7 +106,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             safeRegex:
diff --git a/pkg/plugins/runtime/gateway/testdata/http/10-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/10-gateway-route.yaml
index 225b7877e..b8be4d163 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/10-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/10-gateway-route.yaml
@@ -149,7 +149,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             headers:
diff --git a/pkg/plugins/runtime/gateway/testdata/http/11-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/11-gateway-route.yaml
index 27276f548..1b895f251 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/11-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/11-gateway-route.yaml
@@ -149,7 +149,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             prefix: /
diff --git a/pkg/plugins/runtime/gateway/testdata/http/12-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/12-gateway-route.yaml
index d091b4532..d0aff03dc 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/12-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/12-gateway-route.yaml
@@ -106,7 +106,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             headers:
diff --git a/pkg/plugins/runtime/gateway/testdata/http/13-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/13-gateway-route.yaml
index 77959062b..3c64f6f29 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/13-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/13-gateway-route.yaml
@@ -192,7 +192,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             path: /match/bar
diff --git a/pkg/plugins/runtime/gateway/testdata/http/14-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/14-gateway-route.yaml
index 933eec700..d87b16aa1 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/14-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/14-gateway-route.yaml
@@ -106,7 +106,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             headers:
diff --git a/pkg/plugins/runtime/gateway/testdata/http/15-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/15-gateway-route.yaml
index 76887fb56..2b2c444d3 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/15-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/15-gateway-route.yaml
@@ -192,7 +192,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             path: /api
diff --git a/pkg/plugins/runtime/gateway/testdata/http/16-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/16-gateway-route.yaml
index bca507fd5..88bc9207b 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/16-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/16-gateway-route.yaml
@@ -189,7 +189,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             path: /api
diff --git a/pkg/plugins/runtime/gateway/testdata/http/17-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/17-gateway-route.yaml
index 6537295cd..e50195693 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/17-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/17-gateway-route.yaml
@@ -210,7 +210,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             path: /api
diff --git a/pkg/plugins/runtime/gateway/testdata/http/18-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/18-gateway-route.yaml
index d6926207d..4bae31c91 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/18-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/18-gateway-route.yaml
@@ -103,7 +103,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             prefix: /
diff --git a/pkg/plugins/runtime/gateway/testdata/http/19-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/19-gateway-route.yaml
index e39b0f450..23641c810 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/19-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/19-gateway-route.yaml
@@ -115,7 +115,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTP:8080:echo.example.com
+        name: echo.example.com
         routes:
         - match:
             prefix: /
diff --git a/pkg/plugins/runtime/gateway/testdata/http/20-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/http/20-gateway-route.yaml
index 80e0a8f8f..680550a29 100644
--- a/pkg/plugins/runtime/gateway/testdata/http/20-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/http/20-gateway-route.yaml
@@ -192,7 +192,7 @@ Routes:
       virtualHosts:
       - domains:
         - two.example.com
-        name: gateway-multihost:HTTP:9080:two.example.com
+        name: two.example.com
         routes:
         - match:
             prefix: /
@@ -212,7 +212,7 @@ Routes:
               totalWeight: 1
       - domains:
         - three.example.com
-        name: gateway-multihost:HTTP:9080:three.example.com
+        name: three.example.com
         routes:
         - match:
             prefix: /
@@ -232,7 +232,7 @@ Routes:
               totalWeight: 1
       - domains:
         - one.example.com
-        name: gateway-multihost:HTTP:9080:one.example.com
+        name: one.example.com
         routes:
         - match:
             prefix: /
diff --git a/pkg/plugins/runtime/gateway/testdata/https/01-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/01-gateway-route.yaml
index c4d0ba424..29d0cbfbb 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/01-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/01-gateway-route.yaml
@@ -106,7 +106,7 @@ Routes:
       virtualHosts:
       - domains:
         - foo.example.com
-        name: edge-gateway:HTTP:8080:foo.example.com
+        name: foo.example.com
         routes:
         - match:
             path: /
@@ -126,7 +126,7 @@ Routes:
               totalWeight: 1
       - domains:
         - bar.example.com
-        name: edge-gateway:HTTP:8080:bar.example.com
+        name: bar.example.com
         routes:
         - match:
             path: /
@@ -146,7 +146,7 @@ Routes:
               totalWeight: 1
       - domains:
         - '*.example.com'
-        name: edge-gateway:HTTP:8080:*.example.com
+        name: '*.example.com'
         routes:
         - match:
             path: /
@@ -166,7 +166,7 @@ Routes:
               totalWeight: 1
       - domains:
         - '*'
-        name: edge-gateway:HTTP:8080:*
+        name: '*'
 Runtimes:
   Resources: {}
 Secrets:
diff --git a/pkg/plugins/runtime/gateway/testdata/https/02-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/02-gateway-route.yaml
index f9ee36b04..fb16bedf1 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/02-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/02-gateway-route.yaml
@@ -106,7 +106,7 @@ Routes:
       virtualHosts:
       - domains:
         - extra.example.com
-        name: edge-gateway:HTTP:8080:extra.example.com
+        name: extra.example.com
         routes:
         - match:
             path: /
@@ -126,7 +126,7 @@ Routes:
               totalWeight: 1
       - domains:
         - '*'
-        name: edge-gateway:HTTP:8080:*
+        name: '*'
         routes:
         - match:
             path: /
diff --git a/pkg/plugins/runtime/gateway/testdata/https/03-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/03-gateway-route.yaml
index ee3359ba6..c5b46e9a8 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/03-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/03-gateway-route.yaml
@@ -129,7 +129,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/04-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/04-gateway-route.yaml
index bbe8346dc..6829df652 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/04-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/04-gateway-route.yaml
@@ -158,7 +158,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/05-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/05-gateway-route.yaml
index 081dd541b..9c8343d3b 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/05-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/05-gateway-route.yaml
@@ -86,7 +86,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/06-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/06-gateway-route.yaml
index ab5b4f427..15234cbe5 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/06-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/06-gateway-route.yaml
@@ -158,7 +158,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/07-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/07-gateway-route.yaml
index eb5686cd9..bab0a4fda 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/07-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/07-gateway-route.yaml
@@ -129,7 +129,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/08-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/08-gateway-route.yaml
index 86368dff0..b9cd4f990 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/08-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/08-gateway-route.yaml
@@ -172,7 +172,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/09-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/09-gateway-route.yaml
index 27de18905..71f1d0307 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/09-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/09-gateway-route.yaml
@@ -129,7 +129,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/10-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/10-gateway-route.yaml
index c077be98e..0caca0ae4 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/10-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/10-gateway-route.yaml
@@ -172,7 +172,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/11-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/11-gateway-route.yaml
index 7a3c3bac8..02882c32d 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/11-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/11-gateway-route.yaml
@@ -172,7 +172,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/12-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/12-gateway-route.yaml
index 83f20e51d..53b4abfe1 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/12-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/12-gateway-route.yaml
@@ -129,7 +129,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/13-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/13-gateway-route.yaml
index 18ec710e4..273f06d36 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/13-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/13-gateway-route.yaml
@@ -215,7 +215,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/14-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/14-gateway-route.yaml
index 92b054c41..d8c2ddccb 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/14-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/14-gateway-route.yaml
@@ -129,7 +129,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/15-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/15-gateway-route.yaml
index b8922f9f6..584f709bd 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/15-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/15-gateway-route.yaml
@@ -215,7 +215,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/16-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/16-gateway-route.yaml
index 9eeb28655..ac0f35b77 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/16-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/16-gateway-route.yaml
@@ -212,7 +212,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/17-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/17-gateway-route.yaml
index 6fe7ffbbd..d2ca41475 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/17-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/17-gateway-route.yaml
@@ -233,7 +233,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/18-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/18-gateway-route.yaml
index aa61b19c4..552488b4f 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/18-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/18-gateway-route.yaml
@@ -126,7 +126,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/19-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/19-gateway-route.yaml
index 05dc3438a..f58e69ed6 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/19-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/19-gateway-route.yaml
@@ -138,7 +138,7 @@ Routes:
       virtualHosts:
       - domains:
         - echo.example.com
-        name: edge-gateway:HTTPS:8080:echo.example.com
+        name: echo.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
diff --git a/pkg/plugins/runtime/gateway/testdata/https/20-gateway-route.yaml b/pkg/plugins/runtime/gateway/testdata/https/20-gateway-route.yaml
index b0380b1f8..39f84facf 100644
--- a/pkg/plugins/runtime/gateway/testdata/https/20-gateway-route.yaml
+++ b/pkg/plugins/runtime/gateway/testdata/https/20-gateway-route.yaml
@@ -331,7 +331,7 @@ Routes:
       virtualHosts:
       - domains:
         - two.example.com
-        name: gateway-multihost:HTTPS:9443:two.example.com
+        name: two.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
@@ -357,7 +357,7 @@ Routes:
               totalWeight: 1
       - domains:
         - three.example.com
-        name: gateway-multihost:HTTPS:9443:three.example.com
+        name: three.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false
@@ -383,7 +383,7 @@ Routes:
               totalWeight: 1
       - domains:
         - one.example.com
-        name: gateway-multihost:HTTPS:9443:one.example.com
+        name: one.example.com
         requireTls: ALL
         responseHeadersToAdd:
         - append: false