@@ -57,20 +57,20 @@ func updateTelemetriesCounters(sourceType SourceType, intent model.Intent) {
57
57
}
58
58
}
59
59
60
- func (r * Resolver ) resolveDestIdentity (ctx context.Context , dest model.Destination , lastSeen time.Time ) (model.OtterizeServiceIdentity , bool , error ) {
61
- destSvc , foundSvc , err := r .kubeFinder .ResolveIPToService (ctx , dest .Destination )
60
+ func (r * Resolver ) resolveDestIdentityTCP (ctx context.Context , dest model.Destination , lastSeen time.Time ) (model.OtterizeServiceIdentity , bool , error ) {
61
+ destSvc , isTargetService , err := r .kubeFinder .ResolveIPToService (ctx , dest .Destination )
62
62
if err != nil {
63
63
return model.OtterizeServiceIdentity {}, false , errors .Wrap (err )
64
64
}
65
- if foundSvc {
65
+ if isTargetService {
66
66
dstSvcIdentity , ok , err := r .kubeFinder .ResolveOtterizeIdentityForService (ctx , destSvc , lastSeen )
67
67
if err != nil {
68
68
return model.OtterizeServiceIdentity {}, false , errors .Wrap (err )
69
69
}
70
70
if ok {
71
71
dstSvcIdentity .ResolutionData .Host = lo .ToPtr (dest .Destination )
72
72
dstSvcIdentity .ResolutionData .Port = dest .DestinationPort
73
- dstSvcIdentity .ResolutionData .ExtraInfo = lo .ToPtr ("resolveDestIdentity " )
73
+ dstSvcIdentity .ResolutionData .ExtraInfo = lo .ToPtr ("resolveDestIdentityTCP " )
74
74
return dstSvcIdentity , true , nil
75
75
}
76
76
}
@@ -95,6 +95,13 @@ func (r *Resolver) resolveDestIdentity(ctx context.Context, dest model.Destinati
95
95
return model.OtterizeServiceIdentity {}, false , nil
96
96
}
97
97
98
+ // If the mapper runs on AWS - pod ip addresses can be reused. In this case we ignore the traffic if service is not at least 5 minutes old.
99
+ fiveMinutesAgo := dest .LastSeen .Add (- viper .GetDuration (config .TimeServerHasToLiveBeforeWeTrustItKey ))
100
+ if destPod .CreationTimestamp .Time .After (fiveMinutesAgo ) {
101
+ logrus .Debugf ("Pod %s is not up at least %d minutes, ignoring" , destPod .Name , int (viper .GetDuration (config .TimeServerHasToLiveBeforeWeTrustItKey ).Minutes ()))
102
+ return model.OtterizeServiceIdentity {}, false , nil
103
+ }
104
+
98
105
dstService , err := r .serviceIdResolver .ResolvePodToServiceIdentity (ctx , destPod )
99
106
if err != nil {
100
107
logrus .WithError (err ).Debugf ("Could not resolve pod %s to identity" , destPod .Name )
@@ -110,7 +117,7 @@ func (r *Resolver) resolveDestIdentity(ctx context.Context, dest model.Destinati
110
117
PodHostname : lo .ToPtr (destPod .Name ),
111
118
Port : dest .DestinationPort ,
112
119
IsService : lo .ToPtr (false ),
113
- ExtraInfo : lo .ToPtr ("resolveDestIdentity " ),
120
+ ExtraInfo : lo .ToPtr ("resolveDestIdentityTCP " ),
114
121
LastSeen : lo .ToPtr (dest .LastSeen .String ()),
115
122
Uptime : lo .ToPtr (time .Since (destPod .CreationTimestamp .Time ).String ()),
116
123
HasLinkerdSidecar : lo .ToPtr (hasLinkerdSidecar (destPod )),
@@ -523,7 +530,7 @@ func (r *Resolver) reportIncomingInternetTraffic(ctx context.Context, srcIP stri
523
530
524
531
func (r * Resolver ) handleInternalTrafficTCPResult (ctx context.Context , srcIdentity model.OtterizeServiceIdentity , dest model.Destination ) {
525
532
lastSeen := dest .LastSeen
526
- destIdentity , ok , err := r .resolveDestIdentity (ctx , dest , lastSeen )
533
+ destIdentity , ok , err := r .resolveDestIdentityTCP (ctx , dest , lastSeen )
527
534
if err != nil {
528
535
logrus .WithError (err ).Error ("could not resolve destination identity" )
529
536
return
0 commit comments