mirror of https://github.com/status-im/consul.git
Check if an upstream is implicit from either intentions or peered services
This commit is contained in:
parent
02cff2394d
commit
f56810132f
|
@ -170,6 +170,12 @@ func (c *configSnapshotConnectProxy) isEmpty() bool {
|
||||||
len(c.PeerUpstreamEndpointsUseHostnames) == 0
|
len(c.PeerUpstreamEndpointsUseHostnames) == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *configSnapshotConnectProxy) IsImplicitUpstream(uid UpstreamID) bool {
|
||||||
|
_, intentionImplicit := c.IntentionUpstreams[uid]
|
||||||
|
_, peeringImplicit := c.PeeredUpstreams[uid]
|
||||||
|
return intentionImplicit || peeringImplicit
|
||||||
|
}
|
||||||
|
|
||||||
type configSnapshotTerminatingGateway struct {
|
type configSnapshotTerminatingGateway struct {
|
||||||
MeshConfig *structs.MeshConfigEntry
|
MeshConfig *structs.MeshConfigEntry
|
||||||
MeshConfigSet bool
|
MeshConfigSet bool
|
||||||
|
|
|
@ -71,7 +71,8 @@ func (s *handlerUpstreams) handleUpdateUpstreams(ctx context.Context, u UpdateEv
|
||||||
|
|
||||||
case structs.ServiceKindConnectProxy:
|
case structs.ServiceKindConnectProxy:
|
||||||
explicit := snap.ConnectProxy.UpstreamConfig[uid].HasLocalPortOrSocket()
|
explicit := snap.ConnectProxy.UpstreamConfig[uid].HasLocalPortOrSocket()
|
||||||
if _, implicit := snap.ConnectProxy.IntentionUpstreams[uid]; !implicit && !explicit {
|
implicit := snap.ConnectProxy.IsImplicitUpstream(uid)
|
||||||
|
if !implicit && !explicit {
|
||||||
// Discovery chain is not associated with a known explicit or implicit upstream so it is purged/skipped.
|
// Discovery chain is not associated with a known explicit or implicit upstream so it is purged/skipped.
|
||||||
// The associated watch was likely cancelled.
|
// The associated watch was likely cancelled.
|
||||||
delete(upstreamsSnapshot.DiscoveryChain, uid)
|
delete(upstreamsSnapshot.DiscoveryChain, uid)
|
||||||
|
|
|
@ -98,7 +98,8 @@ func (s *ResourceGenerator) clustersFromSnapshotConnectProxy(cfgSnap *proxycfg.C
|
||||||
upstream := cfgSnap.ConnectProxy.UpstreamConfig[uid]
|
upstream := cfgSnap.ConnectProxy.UpstreamConfig[uid]
|
||||||
|
|
||||||
explicit := upstream.HasLocalPortOrSocket()
|
explicit := upstream.HasLocalPortOrSocket()
|
||||||
if _, implicit := cfgSnap.ConnectProxy.IntentionUpstreams[uid]; !implicit && !explicit {
|
implicit := cfgSnap.ConnectProxy.IsImplicitUpstream(uid)
|
||||||
|
if !implicit && !explicit {
|
||||||
// Discovery chain is not associated with a known explicit or implicit upstream so it is skipped.
|
// Discovery chain is not associated with a known explicit or implicit upstream so it is skipped.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -129,13 +130,12 @@ func (s *ResourceGenerator) clustersFromSnapshotConnectProxy(cfgSnap *proxycfg.C
|
||||||
// NOTE: Any time we skip an upstream below we MUST also skip that same
|
// NOTE: Any time we skip an upstream below we MUST also skip that same
|
||||||
// upstream in endpoints.go so that the sets of endpoints generated matches
|
// upstream in endpoints.go so that the sets of endpoints generated matches
|
||||||
// the sets of clusters.
|
// the sets of clusters.
|
||||||
//
|
|
||||||
// TODO(peering): make this work for tproxy
|
|
||||||
for _, uid := range cfgSnap.ConnectProxy.PeeredUpstreamIDs() {
|
for _, uid := range cfgSnap.ConnectProxy.PeeredUpstreamIDs() {
|
||||||
upstreamCfg := cfgSnap.ConnectProxy.UpstreamConfig[uid]
|
upstreamCfg := cfgSnap.ConnectProxy.UpstreamConfig[uid]
|
||||||
|
|
||||||
explicit := upstreamCfg.HasLocalPortOrSocket()
|
explicit := upstreamCfg.HasLocalPortOrSocket()
|
||||||
if _, implicit := cfgSnap.ConnectProxy.IntentionUpstreams[uid]; !implicit && !explicit {
|
implicit := cfgSnap.ConnectProxy.IsImplicitUpstream(uid)
|
||||||
|
if !implicit && !explicit {
|
||||||
// Not associated with a known explicit or implicit upstream so it is skipped.
|
// Not associated with a known explicit or implicit upstream so it is skipped.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,8 @@ func (s *ResourceGenerator) endpointsFromSnapshotConnectProxy(cfgSnap *proxycfg.
|
||||||
upstream := cfgSnap.ConnectProxy.UpstreamConfig[uid]
|
upstream := cfgSnap.ConnectProxy.UpstreamConfig[uid]
|
||||||
|
|
||||||
explicit := upstream.HasLocalPortOrSocket()
|
explicit := upstream.HasLocalPortOrSocket()
|
||||||
if _, implicit := cfgSnap.ConnectProxy.IntentionUpstreams[uid]; !implicit && !explicit {
|
implicit := cfgSnap.ConnectProxy.IsImplicitUpstream(uid)
|
||||||
|
if !implicit && !explicit {
|
||||||
// Discovery chain is not associated with a known explicit or implicit upstream so it is skipped.
|
// Discovery chain is not associated with a known explicit or implicit upstream so it is skipped.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -84,13 +85,12 @@ func (s *ResourceGenerator) endpointsFromSnapshotConnectProxy(cfgSnap *proxycfg.
|
||||||
// NOTE: Any time we skip an upstream below we MUST also skip that same
|
// NOTE: Any time we skip an upstream below we MUST also skip that same
|
||||||
// upstream in clusters.go so that the sets of endpoints generated matches
|
// upstream in clusters.go so that the sets of endpoints generated matches
|
||||||
// the sets of clusters.
|
// the sets of clusters.
|
||||||
//
|
|
||||||
// TODO(peering): make this work for tproxy
|
|
||||||
for _, uid := range cfgSnap.ConnectProxy.PeeredUpstreamIDs() {
|
for _, uid := range cfgSnap.ConnectProxy.PeeredUpstreamIDs() {
|
||||||
upstreamCfg := cfgSnap.ConnectProxy.UpstreamConfig[uid]
|
upstreamCfg := cfgSnap.ConnectProxy.UpstreamConfig[uid]
|
||||||
|
|
||||||
explicit := upstreamCfg.HasLocalPortOrSocket()
|
explicit := upstreamCfg.HasLocalPortOrSocket()
|
||||||
if _, implicit := cfgSnap.ConnectProxy.IntentionUpstreams[uid]; !implicit && !explicit {
|
implicit := cfgSnap.ConnectProxy.IsImplicitUpstream(uid)
|
||||||
|
if !implicit && !explicit {
|
||||||
// Not associated with a known explicit or implicit upstream so it is skipped.
|
// Not associated with a known explicit or implicit upstream so it is skipped.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,7 +110,8 @@ func (s *ResourceGenerator) listenersFromSnapshotConnectProxy(cfgSnap *proxycfg.
|
||||||
upstreamCfg := cfgSnap.ConnectProxy.UpstreamConfig[uid]
|
upstreamCfg := cfgSnap.ConnectProxy.UpstreamConfig[uid]
|
||||||
|
|
||||||
explicit := upstreamCfg.HasLocalPortOrSocket()
|
explicit := upstreamCfg.HasLocalPortOrSocket()
|
||||||
if _, implicit := cfgSnap.ConnectProxy.IntentionUpstreams[uid]; !implicit && !explicit {
|
implicit := cfgSnap.ConnectProxy.IsImplicitUpstream(uid)
|
||||||
|
if !implicit && !explicit {
|
||||||
// Discovery chain is not associated with a known explicit or implicit upstream so it is skipped.
|
// Discovery chain is not associated with a known explicit or implicit upstream so it is skipped.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -228,13 +229,12 @@ func (s *ResourceGenerator) listenersFromSnapshotConnectProxy(cfgSnap *proxycfg.
|
||||||
|
|
||||||
// Looping over explicit upstreams is only needed for cross-peer because
|
// Looping over explicit upstreams is only needed for cross-peer because
|
||||||
// they do not have discovery chains.
|
// they do not have discovery chains.
|
||||||
//
|
|
||||||
// TODO(peering): make this work for tproxy
|
|
||||||
for _, uid := range cfgSnap.ConnectProxy.PeeredUpstreamIDs() {
|
for _, uid := range cfgSnap.ConnectProxy.PeeredUpstreamIDs() {
|
||||||
upstreamCfg := cfgSnap.ConnectProxy.UpstreamConfig[uid]
|
upstreamCfg := cfgSnap.ConnectProxy.UpstreamConfig[uid]
|
||||||
|
|
||||||
explicit := upstreamCfg.HasLocalPortOrSocket()
|
explicit := upstreamCfg.HasLocalPortOrSocket()
|
||||||
if _, implicit := cfgSnap.ConnectProxy.IntentionUpstreams[uid]; !implicit && !explicit {
|
implicit := cfgSnap.ConnectProxy.IsImplicitUpstream(uid)
|
||||||
|
if !implicit && !explicit {
|
||||||
// Not associated with a known explicit or implicit upstream so it is skipped.
|
// Not associated with a known explicit or implicit upstream so it is skipped.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,8 @@ func (s *ResourceGenerator) routesForConnectProxy(cfgSnap *proxycfg.ConfigSnapsh
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit := cfgSnap.ConnectProxy.UpstreamConfig[uid].HasLocalPortOrSocket()
|
explicit := cfgSnap.ConnectProxy.UpstreamConfig[uid].HasLocalPortOrSocket()
|
||||||
if _, implicit := cfgSnap.ConnectProxy.IntentionUpstreams[uid]; !implicit && !explicit {
|
implicit := cfgSnap.ConnectProxy.IsImplicitUpstream(uid)
|
||||||
|
if !implicit && !explicit {
|
||||||
// Discovery chain is not associated with a known explicit or implicit upstream so it is skipped.
|
// Discovery chain is not associated with a known explicit or implicit upstream so it is skipped.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue