Skip to content

Commit a5508ac

Browse files
server: fix haproxy misconfiguration after VPC VR start (#8881)
1 parent 7a9985b commit a5508ac

File tree

2 files changed

+56
-19
lines changed

2 files changed

+56
-19
lines changed

Diff for: server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java

+30-19
Original file line numberDiff line numberDiff line change
@@ -2578,25 +2578,7 @@ protected void finalizeNetworkRulesForNetwork(final Commands cmds, final DomainR
25782578
}
25792579
}
25802580

2581-
final List<LoadBalancerVO> lbs = _loadBalancerDao.listByNetworkIdAndScheme(guestNetworkId, Scheme.Public);
2582-
final List<LoadBalancingRule> lbRules = new ArrayList<LoadBalancingRule>();
2583-
if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Lb, provider)) {
2584-
// Re-apply load balancing rules
2585-
for (final LoadBalancerVO lb : lbs) {
2586-
final List<LbDestination> dstList = _lbMgr.getExistingDestinations(lb.getId());
2587-
final List<LbStickinessPolicy> policyList = _lbMgr.getStickinessPolicies(lb.getId());
2588-
final List<LbHealthCheckPolicy> hcPolicyList = _lbMgr.getHealthCheckPolicies(lb.getId());
2589-
final Ip sourceIp = _networkModel.getPublicIpAddress(lb.getSourceIpAddressId()).getAddress();
2590-
final LbSslCert sslCert = _lbMgr.getLbSslCert(lb.getId());
2591-
final LoadBalancingRule loadBalancing = new LoadBalancingRule(lb, dstList, policyList, hcPolicyList, sourceIp, sslCert, lb.getLbProtocol());
2592-
lbRules.add(loadBalancing);
2593-
}
2594-
}
2595-
2596-
s_logger.debug("Found " + lbRules.size() + " load balancing rule(s) to apply as a part of domR " + router + " start.");
2597-
if (!lbRules.isEmpty()) {
2598-
_commandSetupHelper.createApplyLoadBalancingRulesCommands(lbRules, router, cmds, guestNetworkId);
2599-
}
2581+
createApplyLoadBalancingRulesCommands(cmds, router, provider, guestNetworkId);
26002582
}
26012583
// Reapply dhcp and dns configuration.
26022584
final Network guestNetwork = _networkDao.findById(guestNetworkId);
@@ -2623,6 +2605,35 @@ protected void finalizeNetworkRulesForNetwork(final Commands cmds, final DomainR
26232605
}
26242606
}
26252607

2608+
private void createApplyLoadBalancingRulesCommands(final Commands cmds, final DomainRouterVO router, final Provider provider, final Long guestNetworkId) {
2609+
if (router.getVpcId() != null) {
2610+
return;
2611+
}
2612+
final List<LoadBalancerVO> lbs = _loadBalancerDao.listByNetworkIdAndScheme(guestNetworkId, Scheme.Public);
2613+
final List<LoadBalancingRule> lbRules = new ArrayList<LoadBalancingRule>();
2614+
if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Lb, provider)) {
2615+
// Re-apply load balancing rules
2616+
createLoadBalancingRulesList(lbRules, lbs);
2617+
}
2618+
2619+
s_logger.debug("Found " + lbRules.size() + " load balancing rule(s) to apply as a part of domR " + router + " start.");
2620+
if (!lbRules.isEmpty()) {
2621+
_commandSetupHelper.createApplyLoadBalancingRulesCommands(lbRules, router, cmds, guestNetworkId);
2622+
}
2623+
}
2624+
2625+
protected void createLoadBalancingRulesList(List<LoadBalancingRule> lbRules, final List<LoadBalancerVO> lbs) {
2626+
for (final LoadBalancerVO lb : lbs) {
2627+
final List<LbDestination> dstList = _lbMgr.getExistingDestinations(lb.getId());
2628+
final List<LbStickinessPolicy> policyList = _lbMgr.getStickinessPolicies(lb.getId());
2629+
final List<LbHealthCheckPolicy> hcPolicyList = _lbMgr.getHealthCheckPolicies(lb.getId());
2630+
final Ip sourceIp = _networkModel.getPublicIpAddress(lb.getSourceIpAddressId()).getAddress();
2631+
final LbSslCert sslCert = _lbMgr.getLbSslCert(lb.getId());
2632+
final LoadBalancingRule loadBalancing = new LoadBalancingRule(lb, dstList, policyList, hcPolicyList, sourceIp, sslCert, lb.getLbProtocol());
2633+
lbRules.add(loadBalancing);
2634+
}
2635+
}
2636+
26262637
private void createDefaultEgressFirewallRule(final List<FirewallRule> rules, final long networkId) {
26272638
final NetworkVO network = _networkDao.findById(networkId);
26282639
final NetworkOfferingVO offering = _networkOfferingDao.findById(network.getNetworkOfferingId());

Diff for: server/src/main/java/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java

+26
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,14 @@
6464
import com.cloud.network.VirtualRouterProvider;
6565
import com.cloud.network.addr.PublicIp;
6666
import com.cloud.network.dao.IPAddressVO;
67+
import com.cloud.network.dao.LoadBalancerDao;
68+
import com.cloud.network.dao.LoadBalancerVO;
6769
import com.cloud.network.dao.MonitoringServiceVO;
6870
import com.cloud.network.dao.NetworkVO;
6971
import com.cloud.network.dao.RemoteAccessVpnVO;
7072
import com.cloud.network.dao.Site2SiteVpnConnectionVO;
73+
import com.cloud.network.lb.LoadBalancingRule;
74+
import com.cloud.network.rules.LoadBalancerContainer.Scheme;
7175
import com.cloud.network.vpc.NetworkACLItemDao;
7276
import com.cloud.network.vpc.NetworkACLItemVO;
7377
import com.cloud.network.vpc.NetworkACLManager;
@@ -129,6 +133,8 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
129133
private EntityManager _entityMgr;
130134
@Inject
131135
protected HypervisorGuruManager _hvGuruMgr;
136+
@Inject
137+
private LoadBalancerDao loadBalancerDao;
132138

133139
@Override
134140
public boolean configure(final String name, final Map<String, Object> params) throws ConfigurationException {
@@ -522,12 +528,32 @@ public boolean finalizeCommandsOnStart(final Commands cmds, final VirtualMachine
522528
cmds.addCommand(finishCmd);
523529
}
524530

531+
createApplyLoadBalancingRulesCommandsForVpc(cmds, domainRouterVO, provider, guestNics);
532+
525533
// Add network usage commands
526534
cmds.addCommands(usageCmds);
527535
}
528536
return true;
529537
}
530538

539+
private void createApplyLoadBalancingRulesCommandsForVpc(final Commands cmds, DomainRouterVO domainRouterVO, Provider provider,
540+
List<Pair<Nic, Network>> guestNics) {
541+
final List<LoadBalancerVO> lbs = loadBalancerDao.listByVpcIdAndScheme(domainRouterVO.getVpcId(), Scheme.Public);
542+
final List<LoadBalancingRule> lbRules = new ArrayList<>();
543+
createLoadBalancingRulesList(lbRules, lbs);
544+
s_logger.debug("Found " + lbRules.size() + " load balancing rule(s) to apply as a part of VPC VR " + domainRouterVO + " start.");
545+
if (!lbRules.isEmpty()) {
546+
for (final Pair<Nic, Network> nicNtwk : guestNics) {
547+
final Nic guestNic = nicNtwk.first();
548+
final long guestNetworkId = guestNic.getNetworkId();
549+
if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Lb, provider)) {
550+
_commandSetupHelper.createApplyLoadBalancingRulesCommands(lbRules, domainRouterVO, cmds, guestNetworkId);
551+
break;
552+
}
553+
}
554+
}
555+
}
556+
531557
@Override
532558
protected List<MonitoringServiceVO> getDefaultServicesToMonitor(NetworkVO network) {
533559
if (network.getTrafficType() == TrafficType.Public) {

0 commit comments

Comments
 (0)