@@ -22,6 +22,7 @@ import (
22
22
23
23
v1 "k8s.io/api/core/v1"
24
24
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
25
+ "k8s.io/apimachinery/pkg/util/intstr"
25
26
26
27
generator "k8s.io/kube-state-metrics/v2/pkg/metric_generator"
27
28
)
@@ -44,6 +45,8 @@ func TestServiceStore(t *testing.T) {
44
45
# TYPE kube_service_spec_external_ip gauge
45
46
# HELP kube_service_status_load_balancer_ingress [STABLE] Service load balancer ingress status
46
47
# TYPE kube_service_status_load_balancer_ingress gauge
48
+ # HELP kube_service_ports Metric providing details about the ports exposed by services.
49
+ # TYPE kube_service_ports gauge
47
50
# HELP kube_service_deletion_timestamp Unix deletion timestamp
48
51
# TYPE kube_service_deletion_timestamp gauge
49
52
`
@@ -70,11 +73,13 @@ func TestServiceStore(t *testing.T) {
70
73
# HELP kube_service_info [STABLE] Information about service.
71
74
# HELP kube_service_labels [STABLE] Kubernetes labels converted to Prometheus labels.
72
75
# HELP kube_service_spec_type [STABLE] Type about service.
76
+ # HELP kube_service_ports Metric providing details about the ports exposed by services.
73
77
# TYPE kube_service_annotations gauge
74
78
# TYPE kube_service_created gauge
75
79
# TYPE kube_service_info gauge
76
80
# TYPE kube_service_labels gauge
77
81
# TYPE kube_service_spec_type gauge
82
+ # TYPE kube_service_ports gauge
78
83
kube_service_created{namespace="default",service="test-service1",uid="uid1"} 1.5e+09
79
84
kube_service_info{cluster_ip="1.2.3.4",external_name="",external_traffic_policy="",load_balancer_ip="",namespace="default",service="test-service1",uid="uid1"} 1
80
85
kube_service_spec_type{namespace="default",service="test-service1",type="ClusterIP",uid="uid1"} 1
@@ -85,6 +90,7 @@ func TestServiceStore(t *testing.T) {
85
90
"kube_service_info" ,
86
91
"kube_service_labels" ,
87
92
"kube_service_spec_type" ,
93
+ "kube_service_ports" ,
88
94
},
89
95
},
90
96
{
@@ -261,6 +267,35 @@ func TestServiceStore(t *testing.T) {
261
267
kube_service_spec_type{namespace="default",service="test-service8",uid="uid8",type="LoadBalancer"} 1
262
268
` ,
263
269
},
270
+
271
+ {
272
+ Obj : & v1.Service {
273
+ ObjectMeta : metav1.ObjectMeta {
274
+ Name : "test-service9" ,
275
+ CreationTimestamp : metav1.Time {Time : time .Unix (1500000000 , 0 )},
276
+ Namespace : "default" ,
277
+ UID : "uid9" ,
278
+ Labels : map [string ]string {
279
+ "app" : "example9" ,
280
+ },
281
+ },
282
+ Spec : v1.ServiceSpec {
283
+ ClusterIP : "1.2.3.14" ,
284
+ LoadBalancerIP : "1.2.3.15" ,
285
+ Type : v1 .ServiceTypeLoadBalancer ,
286
+ ExternalTrafficPolicy : "Local" ,
287
+ Ports : []v1.ServicePort {
288
+ {Port : 80 , Protocol : v1 .ProtocolTCP , TargetPort : intstr .FromInt (8080 ), Name : "http" , NodePort : 65000 , AppProtocol : func (s string ) * string { return & s }("grpc" )},
289
+ },
290
+ },
291
+ },
292
+ Want : metadata + `
293
+ kube_service_created{namespace="default",service="test-service9",uid="uid9"} 1.5e+09
294
+ kube_service_info{cluster_ip="1.2.3.14",external_name="",external_traffic_policy="Local",load_balancer_ip="1.2.3.15",namespace="default",service="test-service9",uid="uid9"} 1
295
+ kube_service_spec_type{namespace="default",service="test-service9",uid="uid9",type="LoadBalancer"} 1
296
+ kube_service_ports{namespace="default",port_app_protocol="grpc",port_name="http",port_node_number="65000",port_number="80",port_protocol="TCP",port_target="8080",service="test-service9",uid="uid9"} 1
297
+ ` ,
298
+ },
264
299
{
265
300
Obj : & v1.Service {
266
301
ObjectMeta : metav1.ObjectMeta {
0 commit comments