From a7c9c5212b6e42557d88cc18f755267c55a6c699 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Wed, 29 Jan 2020 11:26:29 +0000 Subject: [PATCH 1/2] vpc: set traffic type of private gateway IP to Public to fix keepalived misconfiguration --- .../cloud/network/vpc/dao/VpcGatewayDao.java | 2 ++ .../network/vpc/dao/VpcGatewayDaoImpl.java | 7 +++++++ .../com/cloud/network/NetworkModelImpl.java | 8 ++++++-- .../network/router/CommandSetupHelper.java | 20 ++++++++++++++++--- 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcGatewayDao.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcGatewayDao.java index e6a72c870b0e..4417dfad0a4d 100644 --- a/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcGatewayDao.java +++ b/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcGatewayDao.java @@ -32,4 +32,6 @@ public interface VpcGatewayDao extends GenericDao { List listByAclIdAndType(long aclId, VpcGateway.Type type); List listByVpcId(long vpcId); + + VpcGatewayVO getVpcGatewayByNetworkId(long networkId); } diff --git a/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcGatewayDaoImpl.java b/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcGatewayDaoImpl.java index 39d33192a093..7d1fa897d2a8 100644 --- a/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcGatewayDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/network/vpc/dao/VpcGatewayDaoImpl.java @@ -89,4 +89,11 @@ public List listByVpcId(long vpcId) { sc.setParameters("vpcId", vpcId); return listBy(sc); } + + @Override + public VpcGatewayVO getVpcGatewayByNetworkId(long networkId) { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setParameters("networkid", networkId); + return findOneBy(sc); + } } diff --git a/server/src/main/java/com/cloud/network/NetworkModelImpl.java b/server/src/main/java/com/cloud/network/NetworkModelImpl.java index b8bd2c38d0d9..031b84331657 100644 --- a/server/src/main/java/com/cloud/network/NetworkModelImpl.java +++ b/server/src/main/java/com/cloud/network/NetworkModelImpl.java @@ -94,7 +94,9 @@ import com.cloud.network.rules.FirewallRule.Purpose; import com.cloud.network.rules.FirewallRuleVO; import com.cloud.network.rules.dao.PortForwardingRulesDao; +import com.cloud.network.vpc.VpcGatewayVO; import com.cloud.network.vpc.dao.PrivateIpDao; +import com.cloud.network.vpc.dao.VpcGatewayDao; import com.cloud.offering.NetworkOffering; import com.cloud.offering.NetworkOffering.Detail; import com.cloud.offerings.NetworkOfferingServiceMapVO; @@ -158,6 +160,8 @@ public class NetworkModelImpl extends ManagerBase implements NetworkModel, Confi NicDao _nicDao = null; @Inject PodVlanMapDao _podVlanMapDao; + @Inject + VpcGatewayDao _vpcGatewayDao; private List networkElements; @@ -1780,8 +1784,8 @@ public List getPhysicalNtwksSupportingTrafficType(lon @Override public boolean isPrivateGateway(long ntwkId) { - Network network = getNetwork(ntwkId); - if (network.getTrafficType() != TrafficType.Guest || network.getNetworkOfferingId() != s_privateOfferingId.longValue()) { + final VpcGatewayVO gateway = _vpcGatewayDao.getVpcGatewayByNetworkId(ntwkId); + if (gateway == null) { return false; } return true; diff --git a/server/src/main/java/com/cloud/network/router/CommandSetupHelper.java b/server/src/main/java/com/cloud/network/router/CommandSetupHelper.java index f9ffeb99d67c..1c20d0fddd3d 100644 --- a/server/src/main/java/com/cloud/network/router/CommandSetupHelper.java +++ b/server/src/main/java/com/cloud/network/router/CommandSetupHelper.java @@ -104,7 +104,9 @@ import com.cloud.network.vpc.StaticRouteProfile; import com.cloud.network.vpc.Vpc; import com.cloud.network.vpc.VpcGateway; +import com.cloud.network.vpc.VpcGatewayVO; import com.cloud.network.vpc.dao.VpcDao; +import com.cloud.network.vpc.dao.VpcGatewayDao; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; @@ -170,6 +172,8 @@ public class CommandSetupHelper { @Inject private VpcDao _vpcDao; @Inject + private VpcGatewayDao _vpcGatewayDao; + @Inject private VlanDao _vlanDao; @Inject private IPAddressDao _ipAddressDao; @@ -707,7 +711,7 @@ public int compare(final PublicIpAddress o1, final PublicIpAddress o2) { final IpAddressTO ip = new IpAddressTO(ipAddr.getAccountId(), ipAddr.getAddress().addr(), add, firstIP, sourceNat, BroadcastDomainType.fromString(ipAddr.getVlanTag()).toString(), ipAddr.getGateway(), ipAddr.getNetmask(), macAddress, networkRate, ipAddr.isOneToOneNat()); - ip.setTrafficType(network.getTrafficType()); + ip.setTrafficType(getNetworkTrafficType(network)); ip.setNetworkName(_networkModel.getNetworkTag(router.getHypervisorType(), network)); ipsToSend[i++] = ip; if (ipAddr.isSourceNat()) { @@ -823,7 +827,7 @@ public int compare(final PublicIpAddress o1, final PublicIpAddress o2) { final IpAddressTO ip = new IpAddressTO(ipAddr.getAccountId(), ipAddr.getAddress().addr(), add, firstIP, sourceNat, vlanId, vlanGateway, vlanNetmask, vifMacAddress, networkRate, ipAddr.isOneToOneNat()); - ip.setTrafficType(network.getTrafficType()); + ip.setTrafficType(getNetworkTrafficType(network)); ip.setNetworkName(_networkModel.getNetworkTag(router.getHypervisorType(), network)); ipsToSend[i++] = ip; /* @@ -948,7 +952,7 @@ public void createVpcAssociatePrivateIPCommands(final VirtualRouter router, fina final IpAddressTO ip = new IpAddressTO(Account.ACCOUNT_ID_SYSTEM, ipAddr.getIpAddress(), add, false, ipAddr.getSourceNat(), ipAddr.getBroadcastUri(), ipAddr.getGateway(), ipAddr.getNetmask(), ipAddr.getMacAddress(), null, false); - ip.setTrafficType(network.getTrafficType()); + ip.setTrafficType(getNetworkTrafficType(network)); ip.setNetworkName(_networkModel.getNetworkTag(router.getHypervisorType(), network)); ipsToSend[i++] = ip; @@ -1101,4 +1105,14 @@ protected String getGuestDhcpRange(final NicProfile guestNic, final Network gues } return dhcpRange; } + + private TrafficType getNetworkTrafficType(Network network) { + final VpcGatewayVO gateway = _vpcGatewayDao.getVpcGatewayByNetworkId(network.getId()); + if (gateway != null) { + s_logger.debug("network " + network.getId() + " is a vpc private gateway, set traffic type to Public"); + return TrafficType.Public; + } else { + return network.getTrafficType(); + } + } } From 15ed0d94a9274ef0143f6b93950d39ed0e671c59 Mon Sep 17 00:00:00 2001 From: Wei Zhou Date: Thu, 30 Jan 2020 19:48:37 +0000 Subject: [PATCH 2/2] Add network name in debugging log --- .../main/java/com/cloud/network/router/CommandSetupHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/com/cloud/network/router/CommandSetupHelper.java b/server/src/main/java/com/cloud/network/router/CommandSetupHelper.java index 1c20d0fddd3d..0fe9dc32c8b5 100644 --- a/server/src/main/java/com/cloud/network/router/CommandSetupHelper.java +++ b/server/src/main/java/com/cloud/network/router/CommandSetupHelper.java @@ -1109,7 +1109,7 @@ protected String getGuestDhcpRange(final NicProfile guestNic, final Network gues private TrafficType getNetworkTrafficType(Network network) { final VpcGatewayVO gateway = _vpcGatewayDao.getVpcGatewayByNetworkId(network.getId()); if (gateway != null) { - s_logger.debug("network " + network.getId() + " is a vpc private gateway, set traffic type to Public"); + s_logger.debug("network " + network.getId() + " (name: " + network.getName() + " ) is a vpc private gateway, set traffic type to Public"); return TrafficType.Public; } else { return network.getTrafficType();