mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-25 21:54:10 -08:00
discovery/kubernetes: attach node labels when the endpoints TargetRef's kind are Node
Signed-off-by: Mickael Carl <mcarl@apple.com>
This commit is contained in:
parent
7c2de14b0b
commit
2f35619710
|
@ -305,7 +305,11 @@ func (e *Endpoints) buildEndpoints(eps *apiv1.Endpoints) *targetgroup.Group {
|
||||||
}
|
}
|
||||||
|
|
||||||
if e.withNodeMetadata {
|
if e.withNodeMetadata {
|
||||||
target = addNodeLabels(target, e.nodeInf, e.logger, addr.NodeName)
|
if addr.NodeName != nil {
|
||||||
|
target = addNodeLabels(target, e.nodeInf, e.logger, addr.NodeName)
|
||||||
|
} else if addr.TargetRef != nil && addr.TargetRef.Kind == "Node" {
|
||||||
|
target = addNodeLabels(target, e.nodeInf, e.logger, &addr.TargetRef.Name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pod := e.resolvePodRef(addr.TargetRef)
|
pod := e.resolvePodRef(addr.TargetRef)
|
||||||
|
@ -466,5 +470,6 @@ func addNodeLabels(tg model.LabelSet, nodeInf cache.SharedInformer, logger log.L
|
||||||
nodeLabelset[model.LabelName(nodeLabelPrefix+ln)] = lv(v)
|
nodeLabelset[model.LabelName(nodeLabelPrefix+ln)] = lv(v)
|
||||||
nodeLabelset[model.LabelName(nodeLabelPresentPrefix+ln)] = presentValue
|
nodeLabelset[model.LabelName(nodeLabelPresentPrefix+ln)] = presentValue
|
||||||
}
|
}
|
||||||
|
|
||||||
return tg.Merge(nodeLabelset)
|
return tg.Merge(nodeLabelset)
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,6 +69,24 @@ func makeEndpoints() *v1.Endpoints {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Addresses: []v1.EndpointAddress{
|
||||||
|
{
|
||||||
|
IP: "6.7.8.9",
|
||||||
|
TargetRef: &v1.ObjectReference{
|
||||||
|
Kind: "Node",
|
||||||
|
Name: "barbaz",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Ports: []v1.EndpointPort{
|
||||||
|
{
|
||||||
|
Name: "testport",
|
||||||
|
Port: 9002,
|
||||||
|
Protocol: v1.ProtocolTCP,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -106,6 +124,14 @@ func TestEndpointsDiscoveryBeforeRun(t *testing.T) {
|
||||||
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
"__meta_kubernetes_endpoint_ready": "false",
|
"__meta_kubernetes_endpoint_ready": "false",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "6.7.8.9:9002",
|
||||||
|
"__meta_kubernetes_endpoint_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpoint_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpoint_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
|
"__meta_kubernetes_endpoint_ready": "true",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_namespace": "default",
|
"__meta_kubernetes_namespace": "default",
|
||||||
|
@ -398,6 +424,14 @@ func TestEndpointsDiscoveryWithService(t *testing.T) {
|
||||||
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
"__meta_kubernetes_endpoint_ready": "false",
|
"__meta_kubernetes_endpoint_ready": "false",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "6.7.8.9:9002",
|
||||||
|
"__meta_kubernetes_endpoint_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpoint_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpoint_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
|
"__meta_kubernetes_endpoint_ready": "true",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_namespace": "default",
|
"__meta_kubernetes_namespace": "default",
|
||||||
|
@ -466,6 +500,14 @@ func TestEndpointsDiscoveryWithServiceUpdate(t *testing.T) {
|
||||||
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
"__meta_kubernetes_endpoint_ready": "false",
|
"__meta_kubernetes_endpoint_ready": "false",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "6.7.8.9:9002",
|
||||||
|
"__meta_kubernetes_endpoint_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpoint_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpoint_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
|
"__meta_kubernetes_endpoint_ready": "true",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_namespace": "default",
|
"__meta_kubernetes_namespace": "default",
|
||||||
|
@ -484,8 +526,10 @@ func TestEndpointsDiscoveryWithServiceUpdate(t *testing.T) {
|
||||||
|
|
||||||
func TestEndpointsDiscoveryWithNodeMetadata(t *testing.T) {
|
func TestEndpointsDiscoveryWithNodeMetadata(t *testing.T) {
|
||||||
metadataConfig := AttachMetadataConfig{Node: true}
|
metadataConfig := AttachMetadataConfig{Node: true}
|
||||||
nodeLabels := map[string]string{"az": "us-east1"}
|
nodeLabels1 := map[string]string{"az": "us-east1"}
|
||||||
node := makeNode("foobar", "", "", nodeLabels, nil)
|
nodeLabels2 := map[string]string{"az": "us-west2"}
|
||||||
|
node1 := makeNode("foobar", "", "", nodeLabels1, nil)
|
||||||
|
node2 := makeNode("barbaz", "", "", nodeLabels2, nil)
|
||||||
svc := &v1.Service{
|
svc := &v1.Service{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "testendpoints",
|
Name: "testendpoints",
|
||||||
|
@ -495,7 +539,7 @@ func TestEndpointsDiscoveryWithNodeMetadata(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
n, _ := makeDiscoveryWithMetadata(RoleEndpoint, NamespaceDiscovery{}, metadataConfig, makeEndpoints(), svc, node)
|
n, _ := makeDiscoveryWithMetadata(RoleEndpoint, NamespaceDiscovery{}, metadataConfig, makeEndpoints(), svc, node1, node2)
|
||||||
|
|
||||||
k8sDiscoveryTest{
|
k8sDiscoveryTest{
|
||||||
discovery: n,
|
discovery: n,
|
||||||
|
@ -526,6 +570,17 @@ func TestEndpointsDiscoveryWithNodeMetadata(t *testing.T) {
|
||||||
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
"__meta_kubernetes_endpoint_ready": "false",
|
"__meta_kubernetes_endpoint_ready": "false",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "6.7.8.9:9002",
|
||||||
|
"__meta_kubernetes_endpoint_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpoint_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpoint_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
|
"__meta_kubernetes_endpoint_ready": "true",
|
||||||
|
"__meta_kubernetes_node_label_az": "us-west2",
|
||||||
|
"__meta_kubernetes_node_labelpresent_az": "true",
|
||||||
|
"__meta_kubernetes_node_name": "barbaz",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_namespace": "default",
|
"__meta_kubernetes_namespace": "default",
|
||||||
|
@ -541,8 +596,10 @@ func TestEndpointsDiscoveryWithNodeMetadata(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEndpointsDiscoveryWithUpdatedNodeMetadata(t *testing.T) {
|
func TestEndpointsDiscoveryWithUpdatedNodeMetadata(t *testing.T) {
|
||||||
nodeLabels := map[string]string{"az": "us-east1"}
|
nodeLabels1 := map[string]string{"az": "us-east1"}
|
||||||
nodes := makeNode("foobar", "", "", nodeLabels, nil)
|
nodeLabels2 := map[string]string{"az": "us-west2"}
|
||||||
|
node1 := makeNode("foobar", "", "", nodeLabels1, nil)
|
||||||
|
node2 := makeNode("barbaz", "", "", nodeLabels2, nil)
|
||||||
metadataConfig := AttachMetadataConfig{Node: true}
|
metadataConfig := AttachMetadataConfig{Node: true}
|
||||||
svc := &v1.Service{
|
svc := &v1.Service{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
@ -553,13 +610,13 @@ func TestEndpointsDiscoveryWithUpdatedNodeMetadata(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
n, c := makeDiscoveryWithMetadata(RoleEndpoint, NamespaceDiscovery{}, metadataConfig, makeEndpoints(), nodes, svc)
|
n, c := makeDiscoveryWithMetadata(RoleEndpoint, NamespaceDiscovery{}, metadataConfig, makeEndpoints(), node1, node2, svc)
|
||||||
|
|
||||||
k8sDiscoveryTest{
|
k8sDiscoveryTest{
|
||||||
discovery: n,
|
discovery: n,
|
||||||
afterStart: func() {
|
afterStart: func() {
|
||||||
nodes.Labels["az"] = "eu-central1"
|
node1.Labels["az"] = "eu-central1"
|
||||||
c.CoreV1().Nodes().Update(context.Background(), nodes, metav1.UpdateOptions{})
|
c.CoreV1().Nodes().Update(context.Background(), node1, metav1.UpdateOptions{})
|
||||||
},
|
},
|
||||||
expectedMaxItems: 2,
|
expectedMaxItems: 2,
|
||||||
expectedRes: map[string]*targetgroup.Group{
|
expectedRes: map[string]*targetgroup.Group{
|
||||||
|
@ -572,7 +629,7 @@ func TestEndpointsDiscoveryWithUpdatedNodeMetadata(t *testing.T) {
|
||||||
"__meta_kubernetes_endpoint_port_name": "testport",
|
"__meta_kubernetes_endpoint_port_name": "testport",
|
||||||
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
"__meta_kubernetes_endpoint_ready": "true",
|
"__meta_kubernetes_endpoint_ready": "true",
|
||||||
"__meta_kubernetes_node_label_az": "eu-central1",
|
"__meta_kubernetes_node_label_az": "us-east1",
|
||||||
"__meta_kubernetes_node_labelpresent_az": "true",
|
"__meta_kubernetes_node_labelpresent_az": "true",
|
||||||
"__meta_kubernetes_node_name": "foobar",
|
"__meta_kubernetes_node_name": "foobar",
|
||||||
},
|
},
|
||||||
|
@ -588,6 +645,17 @@ func TestEndpointsDiscoveryWithUpdatedNodeMetadata(t *testing.T) {
|
||||||
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
"__meta_kubernetes_endpoint_ready": "false",
|
"__meta_kubernetes_endpoint_ready": "false",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "6.7.8.9:9002",
|
||||||
|
"__meta_kubernetes_endpoint_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpoint_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpoint_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
|
"__meta_kubernetes_endpoint_ready": "true",
|
||||||
|
"__meta_kubernetes_node_label_az": "us-west2",
|
||||||
|
"__meta_kubernetes_node_labelpresent_az": "true",
|
||||||
|
"__meta_kubernetes_node_name": "barbaz",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_namespace": "default",
|
"__meta_kubernetes_namespace": "default",
|
||||||
|
@ -699,6 +767,14 @@ func TestEndpointsDiscoveryNamespaces(t *testing.T) {
|
||||||
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
"__meta_kubernetes_endpoint_ready": "false",
|
"__meta_kubernetes_endpoint_ready": "false",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "6.7.8.9:9002",
|
||||||
|
"__meta_kubernetes_endpoint_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpoint_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpoint_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
|
"__meta_kubernetes_endpoint_ready": "true",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_namespace": "ns1",
|
"__meta_kubernetes_namespace": "ns1",
|
||||||
|
@ -815,6 +891,14 @@ func TestEndpointsDiscoveryOwnNamespace(t *testing.T) {
|
||||||
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
"__meta_kubernetes_endpoint_ready": "false",
|
"__meta_kubernetes_endpoint_ready": "false",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "6.7.8.9:9002",
|
||||||
|
"__meta_kubernetes_endpoint_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpoint_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpoint_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpoint_port_protocol": "TCP",
|
||||||
|
"__meta_kubernetes_endpoint_ready": "true",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_namespace": "own-ns",
|
"__meta_kubernetes_namespace": "own-ns",
|
||||||
|
|
|
@ -339,7 +339,11 @@ func (e *EndpointSlice) buildEndpointSlice(eps endpointSliceAdaptor) *targetgrou
|
||||||
}
|
}
|
||||||
|
|
||||||
if e.withNodeMetadata {
|
if e.withNodeMetadata {
|
||||||
target = addNodeLabels(target, e.nodeInf, e.logger, ep.nodename())
|
if ep.targetRef() != nil && ep.targetRef().Kind == "Node" {
|
||||||
|
target = addNodeLabels(target, e.nodeInf, e.logger, &ep.targetRef().Name)
|
||||||
|
} else {
|
||||||
|
target = addNodeLabels(target, e.nodeInf, e.logger, ep.nodename())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pod := e.resolvePodRef(ep.targetRef())
|
pod := e.resolvePodRef(ep.targetRef())
|
||||||
|
|
|
@ -90,6 +90,17 @@ func makeEndpointSliceV1() *v1.EndpointSlice {
|
||||||
Serving: boolptr(true),
|
Serving: boolptr(true),
|
||||||
Terminating: boolptr(true),
|
Terminating: boolptr(true),
|
||||||
},
|
},
|
||||||
|
}, {
|
||||||
|
Addresses: []string{"4.5.6.7"},
|
||||||
|
Conditions: v1.EndpointConditions{
|
||||||
|
Ready: boolptr(true),
|
||||||
|
Serving: boolptr(true),
|
||||||
|
Terminating: boolptr(false),
|
||||||
|
},
|
||||||
|
TargetRef: &corev1.ObjectReference{
|
||||||
|
Kind: "Node",
|
||||||
|
Name: "barbaz",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -130,6 +141,17 @@ func makeEndpointSliceV1beta1() *v1beta1.EndpointSlice {
|
||||||
Serving: boolptr(true),
|
Serving: boolptr(true),
|
||||||
Terminating: boolptr(true),
|
Terminating: boolptr(true),
|
||||||
},
|
},
|
||||||
|
}, {
|
||||||
|
Addresses: []string{"4.5.6.7"},
|
||||||
|
Conditions: v1beta1.EndpointConditions{
|
||||||
|
Ready: boolptr(true),
|
||||||
|
Serving: boolptr(true),
|
||||||
|
Terminating: boolptr(false),
|
||||||
|
},
|
||||||
|
TargetRef: &corev1.ObjectReference{
|
||||||
|
Kind: "Node",
|
||||||
|
Name: "barbaz",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -183,6 +205,18 @@ func TestEndpointSliceDiscoveryBeforeRun(t *testing.T) {
|
||||||
"__meta_kubernetes_endpointslice_port_name": "testport",
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "4.5.6.7:9000",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_ready": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_serving": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_terminating": "false",
|
||||||
|
"__meta_kubernetes_endpointslice_port": "9000",
|
||||||
|
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
||||||
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
||||||
|
@ -233,6 +267,17 @@ func TestEndpointSliceDiscoveryBeforeRunV1beta1(t *testing.T) {
|
||||||
"__meta_kubernetes_endpointslice_port_name": "testport",
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "4.5.6.7:9000",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_ready": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_serving": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_terminating": "false",
|
||||||
|
"__meta_kubernetes_endpointslice_port": "9000",
|
||||||
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
||||||
|
@ -419,6 +464,18 @@ func TestEndpointSliceDiscoveryDelete(t *testing.T) {
|
||||||
"__meta_kubernetes_endpointslice_port_name": "testport",
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "4.5.6.7:9000",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_ready": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_serving": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_terminating": "false",
|
||||||
|
"__meta_kubernetes_endpointslice_port": "9000",
|
||||||
|
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
||||||
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: map[model.LabelName]model.LabelValue{
|
Labels: map[model.LabelName]model.LabelValue{
|
||||||
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
||||||
|
@ -503,6 +560,18 @@ func TestEndpointSliceDiscoveryUpdate(t *testing.T) {
|
||||||
"__meta_kubernetes_endpointslice_port_name": "testport",
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "4.5.6.7:9000",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_ready": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_serving": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_terminating": "false",
|
||||||
|
"__meta_kubernetes_endpointslice_port": "9000",
|
||||||
|
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
||||||
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
||||||
|
@ -576,6 +645,18 @@ func TestEndpointSliceDiscoveryEmptyEndpoints(t *testing.T) {
|
||||||
"__meta_kubernetes_endpointslice_port_name": "testport",
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "4.5.6.7:9000",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_ready": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_serving": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_terminating": "false",
|
||||||
|
"__meta_kubernetes_endpointslice_port": "9000",
|
||||||
|
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
||||||
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
||||||
|
@ -644,6 +725,18 @@ func TestEndpointSliceDiscoveryWithService(t *testing.T) {
|
||||||
"__meta_kubernetes_endpointslice_port_name": "testport",
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "4.5.6.7:9000",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_ready": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_serving": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_terminating": "false",
|
||||||
|
"__meta_kubernetes_endpointslice_port": "9000",
|
||||||
|
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
||||||
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
||||||
|
@ -728,6 +821,18 @@ func TestEndpointSliceDiscoveryWithServiceUpdate(t *testing.T) {
|
||||||
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "4.5.6.7:9000",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_ready": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_serving": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_terminating": "false",
|
||||||
|
"__meta_kubernetes_endpointslice_port": "9000",
|
||||||
|
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
||||||
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
||||||
|
@ -747,7 +852,8 @@ func TestEndpointSliceDiscoveryWithServiceUpdate(t *testing.T) {
|
||||||
|
|
||||||
func TestEndpointsSlicesDiscoveryWithNodeMetadata(t *testing.T) {
|
func TestEndpointsSlicesDiscoveryWithNodeMetadata(t *testing.T) {
|
||||||
metadataConfig := AttachMetadataConfig{Node: true}
|
metadataConfig := AttachMetadataConfig{Node: true}
|
||||||
nodeLabels := map[string]string{"az": "us-east1"}
|
nodeLabels1 := map[string]string{"az": "us-east1"}
|
||||||
|
nodeLabels2 := map[string]string{"az": "us-west2"}
|
||||||
svc := &corev1.Service{
|
svc := &corev1.Service{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "testendpoints",
|
Name: "testendpoints",
|
||||||
|
@ -757,7 +863,7 @@ func TestEndpointsSlicesDiscoveryWithNodeMetadata(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
objs := []runtime.Object{makeEndpointSliceV1(), makeNode("foobar", "", "", nodeLabels, nil), svc}
|
objs := []runtime.Object{makeEndpointSliceV1(), makeNode("foobar", "", "", nodeLabels1, nil), makeNode("barbaz", "", "", nodeLabels2, nil), svc}
|
||||||
n, _ := makeDiscoveryWithMetadata(RoleEndpointSlice, NamespaceDiscovery{}, metadataConfig, objs...)
|
n, _ := makeDiscoveryWithMetadata(RoleEndpointSlice, NamespaceDiscovery{}, metadataConfig, objs...)
|
||||||
|
|
||||||
k8sDiscoveryTest{
|
k8sDiscoveryTest{
|
||||||
|
@ -804,6 +910,21 @@ func TestEndpointsSlicesDiscoveryWithNodeMetadata(t *testing.T) {
|
||||||
"__meta_kubernetes_endpointslice_port_name": "testport",
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "4.5.6.7:9000",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_ready": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_serving": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_terminating": "false",
|
||||||
|
"__meta_kubernetes_endpointslice_port": "9000",
|
||||||
|
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
||||||
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
|
"__meta_kubernetes_node_label_az": "us-west2",
|
||||||
|
"__meta_kubernetes_node_labelpresent_az": "true",
|
||||||
|
"__meta_kubernetes_node_name": "barbaz",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
||||||
|
@ -821,7 +942,8 @@ func TestEndpointsSlicesDiscoveryWithNodeMetadata(t *testing.T) {
|
||||||
|
|
||||||
func TestEndpointsSlicesDiscoveryWithUpdatedNodeMetadata(t *testing.T) {
|
func TestEndpointsSlicesDiscoveryWithUpdatedNodeMetadata(t *testing.T) {
|
||||||
metadataConfig := AttachMetadataConfig{Node: true}
|
metadataConfig := AttachMetadataConfig{Node: true}
|
||||||
nodeLabels := map[string]string{"az": "us-east1"}
|
nodeLabels1 := map[string]string{"az": "us-east1"}
|
||||||
|
nodeLabels2 := map[string]string{"az": "us-west2"}
|
||||||
svc := &corev1.Service{
|
svc := &corev1.Service{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "testendpoints",
|
Name: "testendpoints",
|
||||||
|
@ -831,16 +953,17 @@ func TestEndpointsSlicesDiscoveryWithUpdatedNodeMetadata(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
node := makeNode("foobar", "", "", nodeLabels, nil)
|
node1 := makeNode("foobar", "", "", nodeLabels1, nil)
|
||||||
objs := []runtime.Object{makeEndpointSliceV1(), node, svc}
|
node2 := makeNode("barbaz", "", "", nodeLabels2, nil)
|
||||||
|
objs := []runtime.Object{makeEndpointSliceV1(), node1, node2, svc}
|
||||||
n, c := makeDiscoveryWithMetadata(RoleEndpointSlice, NamespaceDiscovery{}, metadataConfig, objs...)
|
n, c := makeDiscoveryWithMetadata(RoleEndpointSlice, NamespaceDiscovery{}, metadataConfig, objs...)
|
||||||
|
|
||||||
k8sDiscoveryTest{
|
k8sDiscoveryTest{
|
||||||
discovery: n,
|
discovery: n,
|
||||||
expectedMaxItems: 2,
|
expectedMaxItems: 2,
|
||||||
afterStart: func() {
|
afterStart: func() {
|
||||||
node.Labels["az"] = "us-central1"
|
node1.Labels["az"] = "us-central1"
|
||||||
c.CoreV1().Nodes().Update(context.Background(), node, metav1.UpdateOptions{})
|
c.CoreV1().Nodes().Update(context.Background(), node1, metav1.UpdateOptions{})
|
||||||
},
|
},
|
||||||
expectedRes: map[string]*targetgroup.Group{
|
expectedRes: map[string]*targetgroup.Group{
|
||||||
"endpointslice/default/testendpoints": {
|
"endpointslice/default/testendpoints": {
|
||||||
|
@ -859,7 +982,7 @@ func TestEndpointsSlicesDiscoveryWithUpdatedNodeMetadata(t *testing.T) {
|
||||||
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
||||||
"__meta_kubernetes_endpointslice_port_name": "testport",
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
"__meta_kubernetes_node_label_az": "us-central1",
|
"__meta_kubernetes_node_label_az": "us-east1",
|
||||||
"__meta_kubernetes_node_labelpresent_az": "true",
|
"__meta_kubernetes_node_labelpresent_az": "true",
|
||||||
"__meta_kubernetes_node_name": "foobar",
|
"__meta_kubernetes_node_name": "foobar",
|
||||||
},
|
},
|
||||||
|
@ -883,6 +1006,21 @@ func TestEndpointsSlicesDiscoveryWithUpdatedNodeMetadata(t *testing.T) {
|
||||||
"__meta_kubernetes_endpointslice_port_name": "testport",
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "4.5.6.7:9000",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_ready": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_serving": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_terminating": "false",
|
||||||
|
"__meta_kubernetes_endpointslice_port": "9000",
|
||||||
|
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
||||||
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
|
"__meta_kubernetes_node_label_az": "us-west2",
|
||||||
|
"__meta_kubernetes_node_labelpresent_az": "true",
|
||||||
|
"__meta_kubernetes_node_name": "barbaz",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
||||||
|
@ -1007,6 +1145,18 @@ func TestEndpointSliceDiscoveryNamespaces(t *testing.T) {
|
||||||
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "4.5.6.7:9000",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_ready": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_serving": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_terminating": "false",
|
||||||
|
"__meta_kubernetes_endpointslice_port": "9000",
|
||||||
|
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
||||||
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
||||||
|
@ -1139,6 +1289,18 @@ func TestEndpointSliceDiscoveryOwnNamespace(t *testing.T) {
|
||||||
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"__address__": "4.5.6.7:9000",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_kind": "Node",
|
||||||
|
"__meta_kubernetes_endpointslice_address_target_name": "barbaz",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_ready": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_serving": "true",
|
||||||
|
"__meta_kubernetes_endpointslice_endpoint_conditions_terminating": "false",
|
||||||
|
"__meta_kubernetes_endpointslice_port": "9000",
|
||||||
|
"__meta_kubernetes_endpointslice_port_app_protocol": "http",
|
||||||
|
"__meta_kubernetes_endpointslice_port_name": "testport",
|
||||||
|
"__meta_kubernetes_endpointslice_port_protocol": "TCP",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Labels: model.LabelSet{
|
Labels: model.LabelSet{
|
||||||
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
"__meta_kubernetes_endpointslice_address_type": "IPv4",
|
||||||
|
|
|
@ -761,15 +761,21 @@ func (d *Discovery) newEndpointsByNodeInformer(plw *cache.ListWatch) cache.Share
|
||||||
indexers[nodeIndex] = func(obj interface{}) ([]string, error) {
|
indexers[nodeIndex] = func(obj interface{}) ([]string, error) {
|
||||||
e, ok := obj.(*apiv1.Endpoints)
|
e, ok := obj.(*apiv1.Endpoints)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("object is not a pod")
|
return nil, fmt.Errorf("object is not endpoints")
|
||||||
}
|
}
|
||||||
var nodes []string
|
var nodes []string
|
||||||
for _, target := range e.Subsets {
|
for _, target := range e.Subsets {
|
||||||
for _, addr := range target.Addresses {
|
for _, addr := range target.Addresses {
|
||||||
if addr.NodeName == nil {
|
if addr.TargetRef != nil {
|
||||||
continue
|
switch addr.TargetRef.Kind {
|
||||||
|
case "Pod":
|
||||||
|
if addr.NodeName != nil {
|
||||||
|
nodes = append(nodes, *addr.NodeName)
|
||||||
|
}
|
||||||
|
case "Node":
|
||||||
|
nodes = append(nodes, addr.TargetRef.Name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
nodes = append(nodes, *addr.NodeName)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nodes, nil
|
return nodes, nil
|
||||||
|
@ -789,17 +795,29 @@ func (d *Discovery) newEndpointSlicesByNodeInformer(plw *cache.ListWatch, object
|
||||||
switch e := obj.(type) {
|
switch e := obj.(type) {
|
||||||
case *disv1.EndpointSlice:
|
case *disv1.EndpointSlice:
|
||||||
for _, target := range e.Endpoints {
|
for _, target := range e.Endpoints {
|
||||||
if target.NodeName == nil {
|
if target.TargetRef != nil {
|
||||||
continue
|
switch target.TargetRef.Kind {
|
||||||
|
case "Pod":
|
||||||
|
if target.NodeName != nil {
|
||||||
|
nodes = append(nodes, *target.NodeName)
|
||||||
|
}
|
||||||
|
case "Node":
|
||||||
|
nodes = append(nodes, target.TargetRef.Name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
nodes = append(nodes, *target.NodeName)
|
|
||||||
}
|
}
|
||||||
case *disv1beta1.EndpointSlice:
|
case *disv1beta1.EndpointSlice:
|
||||||
for _, target := range e.Endpoints {
|
for _, target := range e.Endpoints {
|
||||||
if target.NodeName == nil {
|
if target.TargetRef != nil {
|
||||||
continue
|
switch target.TargetRef.Kind {
|
||||||
|
case "Pod":
|
||||||
|
if target.NodeName != nil {
|
||||||
|
nodes = append(nodes, *target.NodeName)
|
||||||
|
}
|
||||||
|
case "Node":
|
||||||
|
nodes = append(nodes, target.TargetRef.Name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
nodes = append(nodes, *target.NodeName)
|
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("object is not an endpointslice")
|
return nil, fmt.Errorf("object is not an endpointslice")
|
||||||
|
|
Loading…
Reference in a new issue