Skip to content

Commit

Permalink
fix(MeshCircuitBreaker): apply to real resource targeted policies wit…
Browse files Browse the repository at this point in the history
…h MeshGateway

Signed-off-by: Mike Beaumont <[email protected]>
  • Loading branch information
michaelbeaumont committed Sep 25, 2024
1 parent c079555 commit 1d9379b
Showing 1 changed file with 52 additions and 16 deletions.
68 changes: 52 additions & 16 deletions pkg/plugins/policies/meshcircuitbreaker/plugin/v1alpha1/plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
core_plugins "github.com/kumahq/kuma/pkg/core/plugins"
core_mesh "github.com/kumahq/kuma/pkg/core/resources/apis/mesh"
meshexternalservice_api "github.com/kumahq/kuma/pkg/core/resources/apis/meshexternalservice/api/v1alpha1"
core_model "github.com/kumahq/kuma/pkg/core/resources/model"
core_xds "github.com/kumahq/kuma/pkg/core/xds"
xds_types "github.com/kumahq/kuma/pkg/core/xds/types"
"github.com/kumahq/kuma/pkg/plugins/policies/core/matchers"
Expand Down Expand Up @@ -63,11 +64,11 @@ func (p plugin) Apply(
return err
}

if err := applyToGateways(policies.GatewayRules, clusters.Gateway, proxy); err != nil {
if err := applyToGateways(ctx.Mesh, proxy, rs, policies.GatewayRules, clusters.Gateway); err != nil {
return err
}

if err := applyToRealResources(rs, policies.ToRules.ResourceRules, ctx.Mesh); err != nil {
if err := applyToRealResources(ctx.Mesh, rs, policies.ToRules.ResourceRules); err != nil {
return err
}

Expand Down Expand Up @@ -127,10 +128,14 @@ func applyToOutbounds(
}

func applyToGateways(
meshCtx xds_context.MeshContext,
proxy *core_xds.Proxy,
rs *core_xds.ResourceSet,
gatewayRules core_rules.GatewayRules,
gatewayClusters map[string]*envoy_cluster.Cluster,
proxy *core_xds.Proxy,
) error {
resourcesByOrigin := rs.IndexByOrigin(core_xds.NonMeshExternalService)

for _, listenerInfo := range gateway.ExtractGatewayListeners(proxy) {
rules, ok := gatewayRules.ToRules.ByListener[core_rules.InboundListener{
Address: proxy.Dataplane.Spec.GetNetworking().Address,
Expand Down Expand Up @@ -161,6 +166,21 @@ func applyToGateways(
); err != nil {
return err
}

if dest.BackendRef == nil {
continue
}
if realRef := dest.BackendRef.ResourceOrNil(); realRef != nil {
resources := resourcesByOrigin[*realRef]
if err := applyToRealResource(
meshCtx,
rules.ResourceRules,
*realRef,
resources,
); err != nil {
return err
}
}
}
}
}
Expand Down Expand Up @@ -216,26 +236,42 @@ func applyToEgressRealResources(rs *core_xds.ResourceSet, proxy *core_xds.Proxy)
return nil
}

func applyToRealResources(rs *core_xds.ResourceSet, rules core_rules.ResourceRules, meshCtx xds_context.MeshContext) error {
for uri, resType := range rs.IndexByOrigin(core_xds.NonMeshExternalService) {
conf := rules.Compute(uri, meshCtx.Resources)
if conf == nil {
continue
}
func applyToRealResource(
meshCtx xds_context.MeshContext,
rules core_rules.ResourceRules,
uri core_model.TypedResourceIdentifier,
resourcesByType core_xds.ResourcesByType,
) error {
conf := rules.Compute(uri, meshCtx.Resources)
if conf == nil {
return nil
}

for typ, resources := range resType {
switch typ {
case envoy_resource.ClusterType:
err := configureClusters(resources, conf.Conf[0].(api.Conf))
if err != nil {
return err
}
for typ, resources := range resourcesByType {
switch typ {
case envoy_resource.ClusterType:
err := configureClusters(resources, conf.Conf[0].(api.Conf))
if err != nil {
return err
}
}
}
return nil
}

func applyToRealResources(
meshCtx xds_context.MeshContext,
rs *core_xds.ResourceSet,
rules core_rules.ResourceRules,
) error {
for uri, resType := range rs.IndexByOrigin(core_xds.NonMeshExternalService) {
if err := applyToRealResource(meshCtx, rules, uri, resType); err != nil {
return err
}
}
return nil
}

func configureClusters(resources []*core_xds.Resource, conf api.Conf) error {
for _, resource := range resources {
configurer := plugin_xds.Configurer{
Expand Down

0 comments on commit 1d9379b

Please sign in to comment.