@@ -32,6 +32,7 @@ import (
32
32
"k8s.io/apimachinery/pkg/types"
33
33
utilsets "k8s.io/apimachinery/pkg/util/sets"
34
34
"k8s.io/apiserver/pkg/audit"
35
+ "k8s.io/apiserver/pkg/authentication/user"
35
36
"k8s.io/apiserver/pkg/endpoints/request"
36
37
"k8s.io/apiserver/pkg/features"
37
38
utilfeature "k8s.io/apiserver/pkg/util/feature"
@@ -185,6 +186,16 @@ var (
185
186
},
186
187
[]string {"verb" , "group" , "version" , "resource" , "subresource" , "scope" , "component" , "code" },
187
188
)
189
+
190
+ apiSelfRequestCounter = compbasemetrics .NewCounterVec (
191
+ & compbasemetrics.CounterOpts {
192
+ Name : "apiserver_selfrequest_total" ,
193
+ Help : "Counter of apiserver self-requests broken out for each verb, API resource and subresource." ,
194
+ StabilityLevel : compbasemetrics .ALPHA ,
195
+ },
196
+ []string {"verb" , "resource" , "subresource" },
197
+ )
198
+
188
199
kubectlExeRegexp = regexp .MustCompile (`^.*((?i:kubectl\.exe))` )
189
200
190
201
metrics = []resettableCollector {
@@ -201,6 +212,7 @@ var (
201
212
currentInflightRequests ,
202
213
currentInqueueRequests ,
203
214
requestTerminationsTotal ,
215
+ apiSelfRequestCounter ,
204
216
}
205
217
206
218
// these are the known (e.g. whitelisted/known) content types which we will report for
@@ -351,6 +363,11 @@ func MonitorRequest(req *http.Request, verb, group, version, resource, subresour
351
363
elapsedSeconds := elapsed .Seconds ()
352
364
cleanContentType := cleanContentType (contentType )
353
365
requestCounter .WithLabelValues (reportedVerb , dryRun , group , version , resource , subresource , scope , component , cleanContentType , codeToString (httpCode )).Inc ()
366
+ // MonitorRequest happens after authentication, so we can trust the username given by the request
367
+ info , ok := request .UserFrom (req .Context ())
368
+ if ok && info .GetName () == user .APIServerUser {
369
+ apiSelfRequestCounter .WithLabelValues (reportedVerb , resource , subresource ).Inc ()
370
+ }
354
371
if deprecated {
355
372
deprecatedRequestGauge .WithLabelValues (group , version , resource , subresource , removedRelease ).Set (1 )
356
373
audit .AddAuditAnnotation (req .Context (), deprecatedAnnotationKey , "true" )
0 commit comments