Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 22 additions & 1 deletion internal/controller/nodedeployment/networking.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,32 @@ func generateExternalService(group *seiv1alpha1.SeiNodeDeployment) *corev1.Servi
Spec: corev1.ServiceSpec{
Type: corev1.ServiceTypeClusterIP,
Selector: groupSelector(group),
Ports: portsForMode(groupMode(group)),
Ports: externalPortsForMode(groupMode(group)),
},
}
}

// externalPortsForMode returns the public-facing port set — portsForMode
// minus the `metrics` port, which belongs only on the per-pod headless
// Services. Including it on the external Service made ServiceMonitor
// selectors match both, so each pod was scraped twice.
//
// TODO(sei-protocol/sei-config#7): replace with seiconfig.ExternalServicePorts
// once that helper lands upstream. Keeping the filter local to the controller
// is a workaround; the "which ports belong on a public Service" rule should
// live next to the port definitions in sei-config.
func externalPortsForMode(mode seiconfig.NodeMode) []corev1.ServicePort {
all := portsForMode(mode)
out := make([]corev1.ServicePort, 0, len(all))
for _, p := range all {
if p.Name == "metrics" {
continue
}
out = append(out, p)
}
return out
}

func groupMode(group *seiv1alpha1.SeiNodeDeployment) seiconfig.NodeMode {
spec := group.Spec.Template.Spec
switch {
Expand Down
9 changes: 5 additions & 4 deletions internal/controller/nodedeployment/networking_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,14 @@ func TestGenerateExternalService_AllPortsForFullMode(t *testing.T) {
group.Spec.Networking = &seiv1alpha1.NetworkingConfig{}

svc := generateExternalService(group)
g.Expect(svc.Spec.Ports).To(HaveLen(7))
g.Expect(svc.Spec.Ports).To(HaveLen(6))

portNames := make([]string, len(svc.Spec.Ports))
for i, p := range svc.Spec.Ports {
portNames[i] = p.Name
}
g.Expect(portNames).To(ConsistOf("evm-rpc", "evm-ws", "grpc", "rest", "p2p", "rpc", "metrics"))
g.Expect(portNames).To(ConsistOf("evm-rpc", "evm-ws", "grpc", "rest", "p2p", "rpc"))
g.Expect(portNames).NotTo(ContainElement("metrics"))
}

func TestGenerateExternalService_ValidatorModePorts(t *testing.T) {
Expand All @@ -47,13 +48,13 @@ func TestGenerateExternalService_ValidatorModePorts(t *testing.T) {
group.Spec.Networking = &seiv1alpha1.NetworkingConfig{}

svc := generateExternalService(group)
g.Expect(svc.Spec.Ports).To(HaveLen(2))
g.Expect(svc.Spec.Ports).To(HaveLen(1))

portNames := make([]string, len(svc.Spec.Ports))
for i, p := range svc.Spec.Ports {
portNames[i] = p.Name
}
g.Expect(portNames).To(ConsistOf("p2p", "metrics"))
g.Expect(portNames).To(ConsistOf("p2p"))
}

func TestGenerateExternalService_GRPCAppProtocol(t *testing.T) {
Expand Down
Loading