@@ -1177,8 +1177,8 @@ func (lbaas *LbaasV2) ensureOctaviaHealthMonitor(lbID string, name string, pool
1177
1177
return err
1178
1178
}
1179
1179
//Recreate health monitor with correct protocol if externalTrafficPolicy was changed
1180
- if (svcConf . healthCheckNodePort > 0 && monitor . Type != "HTTP" ) ||
1181
- ( svcConf . healthCheckNodePort == 0 && monitor .Type == "HTTP" ) {
1180
+ createOpts := lbaas . buildMonitorCreateOpts (svcConf , port )
1181
+ if createOpts . Type != monitor .Type {
1182
1182
klog .InfoS ("Recreating health monitor for the pool" , "pool" , pool .ID , "oldMonitor" , monitorID )
1183
1183
if err := openstackutil .DeleteHealthMonitor (lbaas .lb , monitorID , lbID ); err != nil {
1184
1184
return err
@@ -1221,6 +1221,18 @@ func (lbaas *LbaasV2) ensureOctaviaHealthMonitor(lbID string, name string, pool
1221
1221
return nil
1222
1222
}
1223
1223
1224
+ func (lbaas * LbaasV2 ) canUseHTTPMonitor (port corev1.ServicePort ) bool {
1225
+ if lbaas .opts .LBProvider == "ovn" {
1226
+ // ovn-octavia-provider doesn't support HTTP monitors at all. We got to avoid creating it with ovn.
1227
+ return false
1228
+ } else if port .Protocol == corev1 .ProtocolUDP {
1229
+ // Older Octavia versions or OVN provider doesn't support HTTP monitors on UDP pools. We got to check if that's the case.
1230
+ return openstackutil .IsOctaviaFeatureSupported (lbaas .lb , openstackutil .OctaviaFeatureHTTPMonitorsOnUDP , lbaas .opts .LBProvider )
1231
+ }
1232
+
1233
+ return true
1234
+ }
1235
+
1224
1236
// buildMonitorCreateOpts returns a v2monitors.CreateOpts without PoolID for consumption of both, fully popuplated Loadbalancers and Monitors.
1225
1237
func (lbaas * LbaasV2 ) buildMonitorCreateOpts (svcConf * serviceConfig , port corev1.ServicePort ) v2monitors.CreateOpts {
1226
1238
opts := v2monitors.CreateOpts {
@@ -1232,22 +1244,11 @@ func (lbaas *LbaasV2) buildMonitorCreateOpts(svcConf *serviceConfig, port corev1
1232
1244
if port .Protocol == corev1 .ProtocolUDP {
1233
1245
opts .Type = "UDP-CONNECT"
1234
1246
}
1235
- if svcConf .healthCheckNodePort > 0 {
1236
- setHTTPHealthMonitor := true
1237
- if lbaas .opts .LBProvider == "ovn" {
1238
- // ovn-octavia-provider doesn't support HTTP monitors at all. We got to avoid creating it with ovn.
1239
- setHTTPHealthMonitor = false
1240
- } else if opts .Type == "UDP-CONNECT" {
1241
- // Older Octavia versions or OVN provider doesn't support HTTP monitors on UDP pools. We got to check if that's the case.
1242
- setHTTPHealthMonitor = openstackutil .IsOctaviaFeatureSupported (lbaas .lb , openstackutil .OctaviaFeatureHTTPMonitorsOnUDP , lbaas .opts .LBProvider )
1243
- }
1244
-
1245
- if setHTTPHealthMonitor {
1246
- opts .Type = "HTTP"
1247
- opts .URLPath = "/healthz"
1248
- opts .HTTPMethod = "GET"
1249
- opts .ExpectedCodes = "200"
1250
- }
1247
+ if svcConf .healthCheckNodePort > 0 && lbaas .canUseHTTPMonitor (port ) {
1248
+ opts .Type = "HTTP"
1249
+ opts .URLPath = "/healthz"
1250
+ opts .HTTPMethod = "GET"
1251
+ opts .ExpectedCodes = "200"
1251
1252
}
1252
1253
return opts
1253
1254
}
@@ -1373,20 +1374,8 @@ func (lbaas *LbaasV2) buildBatchUpdateMemberOpts(port corev1.ServicePort, nodes
1373
1374
Name : & node .Name ,
1374
1375
SubnetID : & svcConf .lbMemberSubnetID ,
1375
1376
}
1376
- if svcConf .healthCheckNodePort > 0 {
1377
- useHealthCheckNodePort := true
1378
- if lbaas .opts .LBProvider == "ovn" {
1379
- // ovn-octavia-provider doesn't support HTTP monitors at all, if we have it we got to rely on NodePort
1380
- // and UDP-CONNECT health monitor.
1381
- useHealthCheckNodePort = false
1382
- } else if port .Protocol == "UDP" {
1383
- // Older Octavia versions doesn't support HTTP monitors on UDP pools. If we have one like that, we got
1384
- // to rely on checking the NodePort instead.
1385
- useHealthCheckNodePort = openstackutil .IsOctaviaFeatureSupported (lbaas .lb , openstackutil .OctaviaFeatureHTTPMonitorsOnUDP , lbaas .opts .LBProvider )
1386
- }
1387
- if useHealthCheckNodePort {
1388
- member .MonitorPort = & svcConf .healthCheckNodePort
1389
- }
1377
+ if svcConf .healthCheckNodePort > 0 && lbaas .canUseHTTPMonitor (port ) {
1378
+ member .MonitorPort = & svcConf .healthCheckNodePort
1390
1379
}
1391
1380
members = append (members , member )
1392
1381
newMembers .Insert (fmt .Sprintf ("%s-%s-%d-%d" , node .Name , addr , member .ProtocolPort , svcConf .healthCheckNodePort ))
0 commit comments