Skip to content

Commit

Permalink
Merge pull request #4380 from kubernetes-sigs/MartinForReal-patch-2
Browse files Browse the repository at this point in the history
Support for custom health probe port(not in spec)
  • Loading branch information
k8s-ci-robot committed Jul 31, 2023
2 parents ff1b125 + 36ef491 commit f212dbd
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 16 deletions.
32 changes: 16 additions & 16 deletions pkg/provider/azure_loadbalancer_healthprobe.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,37 +99,30 @@ func (az *Cloud) buildHealthProbeRulesForPort(serviceManifest *v1.Service, port
if s == nil {
return nil
}
//not a integer
for _, item := range serviceManifest.Spec.Ports {
if strings.EqualFold(item.Name, *s) {
//found the port
return nil
}
}
//nolint:gosec
port, err := strconv.Atoi(*s)
if err != nil {
//not a integer
for _, item := range serviceManifest.Spec.Ports {
if strings.EqualFold(item.Name, *s) {
//found the port
return nil
}
}
return fmt.Errorf("port %s not found in service", *s)
}
if port < 0 || port > 65535 {
return fmt.Errorf("port %d is out of range", port)
}
for _, item := range serviceManifest.Spec.Ports {
//nolint:gosec
if item.Port == int32(port) {
//found the port
return nil
}
}
return fmt.Errorf("port %s not found in service", *s)
return nil
})
if err != nil {
return nil, fmt.Errorf("failed to parse annotation %s: %w", consts.BuildHealthProbeAnnotationKeyForPort(port.Port, consts.HealthProbeParamsPort), err)
}

if probePort != nil {
//nolint:gosec
port, err := strconv.Atoi(*probePort)
port, err := strconv.ParseInt(*probePort, 10, 32)
if err != nil {
//not a integer
for _, item := range serviceManifest.Spec.Ports {
Expand All @@ -140,13 +133,20 @@ func (az *Cloud) buildHealthProbeRulesForPort(serviceManifest *v1.Service, port
}
} else {
// Not need to verify probePort is in correct range again.
var found bool
for _, item := range serviceManifest.Spec.Ports {
//nolint:gosec
if item.Port == int32(port) {
//found the port
properties.Port = pointer.Int32(item.NodePort)
found = true
break
}
}
if !found {
//nolint:gosec
properties.Port = pointer.Int32(int32(port))
}
}
}

Expand Down
26 changes: 26 additions & 0 deletions pkg/provider/azure_loadbalancer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2670,6 +2670,32 @@ func TestReconcileLoadBalancerRuleCommon(t *testing.T) {
},
},
},
{
desc: "getExpectedLBRules should support customize health probe port ",
service: getTestServiceDualStack("test1", v1.ProtocolTCP, map[string]string{
"service.beta.kubernetes.io/port_8000_health-probe_port": "5080",
}, 80, 8000),
expectedRules: map[bool][]network.LoadBalancingRule{
consts.IPVersionIPv4: {
getTestRule(false, 80, consts.IPVersionIPv4),
getTestRule(false, 8000, consts.IPVersionIPv4),
},
consts.IPVersionIPv6: {
getTestRule(false, 80, consts.IPVersionIPv6),
getTestRule(false, 8000, consts.IPVersionIPv6),
},
},
expectedProbes: map[bool][]network.Probe{
consts.IPVersionIPv4: {
getTestProbe("Tcp", "/", pointer.Int32(5), pointer.Int32(80), pointer.Int32(10080), pointer.Int32(2), consts.IPVersionIPv4),
getTestProbe("Tcp", "/", pointer.Int32(5), pointer.Int32(8000), pointer.Int32(5080), pointer.Int32(2), consts.IPVersionIPv4),
},
consts.IPVersionIPv6: {
getTestProbe("Tcp", "/", pointer.Int32(5), pointer.Int32(80), pointer.Int32(10080), pointer.Int32(2), consts.IPVersionIPv6),
getTestProbe("Tcp", "/", pointer.Int32(5), pointer.Int32(8000), pointer.Int32(5080), pointer.Int32(2), consts.IPVersionIPv6),
},
},
},
}
rulesDualStack := getDefaultTestRules(true)
for _, rules := range rulesDualStack {
Expand Down

0 comments on commit f212dbd

Please sign in to comment.