Skip to content

Commit 24495c1

Browse files
committed
NSX: Add CKS Support
1 parent 514e4e6 commit 24495c1

File tree

6 files changed

+61
-28
lines changed

6 files changed

+61
-28
lines changed

api/src/main/java/org/apache/cloudstack/api/command/admin/network/CreateNetworkOfferingCmd.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import static com.cloud.network.Network.Service.PortForwarding;
6060
import static com.cloud.network.Network.Service.NetworkACL;
6161
import static com.cloud.network.Network.Service.UserData;
62+
import static com.cloud.network.Network.Service.Firewall;
6263

6364
@APICommand(name = "createNetworkOffering", description = "Creates a network offering.", responseObject = NetworkOfferingResponse.class, since = "3.0.0",
6465
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
@@ -250,7 +251,8 @@ public List<String> getSupportedServices() {
250251
));
251252
if (Boolean.TRUE.equals(forVpc)) {
252253
services.add(NetworkACL.getName());
253-
return services;
254+
} else {
255+
services.add(Firewall.getName());
254256
}
255257
return services;
256258
}
@@ -337,10 +339,15 @@ public Map<String, List<String>> getServiceProviders() {
337339
private void getServiceProviderMapForNsx(Map<String, List<String>> serviceProviderMap) {
338340
String routerProvider = Boolean.TRUE.equals(getForVpc()) ? VirtualRouterProvider.Type.VPCVirtualRouter.name() :
339341
VirtualRouterProvider.Type.VirtualRouter.name();
340-
List<String> unsupportedServices = List.of("Vpn", "SecurityGroup", "Connectivity",
341-
"Gateway", "Firewall", "BaremetalPxeService");
342+
List<String> unsupportedServices = new ArrayList<>(List.of("Vpn", "SecurityGroup", "Connectivity",
343+
"Gateway", "BaremetalPxeService"));
342344
List<String> routerSupported = List.of("Dhcp", "Dns", "UserData");
343345
List<String> allServices = Service.listAllServices().stream().map(Service::getName).collect(Collectors.toList());
346+
if (routerProvider.equals(VirtualRouterProvider.Type.VPCVirtualRouter.name())) {
347+
unsupportedServices.add("Firewall");
348+
} else {
349+
unsupportedServices.add("NetworkACL");
350+
}
344351
for (String service : allServices) {
345352
if (unsupportedServices.contains(service))
346353
continue;

plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ public class KubernetesClusterManagerImpl extends ManagerBase implements Kuberne
183183

184184
private static final Logger LOGGER = Logger.getLogger(KubernetesClusterManagerImpl.class);
185185
private static final String DEFAULT_NETWORK_OFFERING_FOR_KUBERNETES_SERVICE_NAME = "DefaultNetworkOfferingforKubernetesService";
186+
private static final String DEFAULT_NETWORK_OFFERING_FOR_KUBERNETES_SERVICE_DISPLAY_TEXT = "Network Offering used for CloudStack Kubernetes service";
187+
private static final String DEFAULT_NSX_NETWORK_OFFERING_FOR_KUBERNETES_SERVICE_NAME = "DefaultNSXNetworkOfferingforKubernetesService";
188+
private static final String DEFAULT_NSX_NETWORK_OFFERING_FOR_KUBERNETES_SERVICE_DISPLAY_TEXT = "NSX Network Offering used for CloudStack Kubernetes service";
186189

187190
protected StateMachine2<KubernetesCluster.State, KubernetesCluster.Event, KubernetesCluster> _stateMachine = KubernetesCluster.State.getStateMachine();
188191

@@ -1875,21 +1878,37 @@ boolean isClusterVMsInDesiredState(KubernetesCluster kubernetesCluster, VirtualM
18751878

18761879
@Override
18771880
public boolean start() {
1881+
createNetworkOfferingForKubernetes(DEFAULT_NETWORK_OFFERING_FOR_KUBERNETES_SERVICE_NAME,
1882+
DEFAULT_NETWORK_OFFERING_FOR_KUBERNETES_SERVICE_DISPLAY_TEXT, false);
1883+
1884+
createNetworkOfferingForKubernetes(DEFAULT_NSX_NETWORK_OFFERING_FOR_KUBERNETES_SERVICE_NAME,
1885+
DEFAULT_NSX_NETWORK_OFFERING_FOR_KUBERNETES_SERVICE_DISPLAY_TEXT, true);
1886+
1887+
_gcExecutor.scheduleWithFixedDelay(new KubernetesClusterGarbageCollector(), 300, 300, TimeUnit.SECONDS);
1888+
_stateScanner.scheduleWithFixedDelay(new KubernetesClusterStatusScanner(), 300, 30, TimeUnit.SECONDS);
1889+
1890+
return true;
1891+
}
1892+
1893+
private void createNetworkOfferingForKubernetes(String offeringName, String offeringDesc, boolean forNsx) {
18781894
final Map<Network.Service, Network.Provider> defaultKubernetesServiceNetworkOfferingProviders = new HashMap<Service, Network.Provider>();
18791895
defaultKubernetesServiceNetworkOfferingProviders.put(Service.Dhcp, Network.Provider.VirtualRouter);
18801896
defaultKubernetesServiceNetworkOfferingProviders.put(Service.Dns, Network.Provider.VirtualRouter);
18811897
defaultKubernetesServiceNetworkOfferingProviders.put(Service.UserData, Network.Provider.VirtualRouter);
1882-
defaultKubernetesServiceNetworkOfferingProviders.put(Service.Firewall, Network.Provider.VirtualRouter);
1883-
defaultKubernetesServiceNetworkOfferingProviders.put(Service.Gateway, Network.Provider.VirtualRouter);
1884-
defaultKubernetesServiceNetworkOfferingProviders.put(Service.Lb, Network.Provider.VirtualRouter);
1885-
defaultKubernetesServiceNetworkOfferingProviders.put(Service.SourceNat, Network.Provider.VirtualRouter);
1886-
defaultKubernetesServiceNetworkOfferingProviders.put(Service.StaticNat, Network.Provider.VirtualRouter);
1887-
defaultKubernetesServiceNetworkOfferingProviders.put(Service.PortForwarding, Network.Provider.VirtualRouter);
1888-
defaultKubernetesServiceNetworkOfferingProviders.put(Service.Vpn, Network.Provider.VirtualRouter);
1898+
defaultKubernetesServiceNetworkOfferingProviders.put(Service.Firewall, forNsx ? Network.Provider.Nsx : Network.Provider.VirtualRouter);
1899+
defaultKubernetesServiceNetworkOfferingProviders.put(Service.Lb, forNsx ? Network.Provider.Nsx : Network.Provider.VirtualRouter);
1900+
defaultKubernetesServiceNetworkOfferingProviders.put(Service.SourceNat, forNsx ? Network.Provider.Nsx : Network.Provider.VirtualRouter);
1901+
defaultKubernetesServiceNetworkOfferingProviders.put(Service.StaticNat, forNsx ? Network.Provider.Nsx : Network.Provider.VirtualRouter);
1902+
defaultKubernetesServiceNetworkOfferingProviders.put(Service.PortForwarding, forNsx ? Network.Provider.Nsx : Network.Provider.VirtualRouter);
1903+
defaultKubernetesServiceNetworkOfferingProviders.put(Service.Vpn, forNsx ? Network.Provider.Nsx : Network.Provider.VirtualRouter);
1904+
1905+
if (!forNsx) {
1906+
defaultKubernetesServiceNetworkOfferingProviders.put(Service.Gateway, Network.Provider.VirtualRouter);
1907+
}
18891908

18901909
NetworkOfferingVO defaultKubernetesServiceNetworkOffering =
1891-
new NetworkOfferingVO(DEFAULT_NETWORK_OFFERING_FOR_KUBERNETES_SERVICE_NAME,
1892-
"Network Offering used for CloudStack Kubernetes service", Networks.TrafficType.Guest,
1910+
new NetworkOfferingVO(offeringName,
1911+
offeringDesc, Networks.TrafficType.Guest,
18931912
false, false, null, null, true,
18941913
NetworkOffering.Availability.Required, null, Network.GuestType.Isolated, true,
18951914
true, false, false, false, false,
@@ -1906,11 +1925,6 @@ public boolean start() {
19061925
networkOfferingServiceMapDao.persist(offService);
19071926
LOGGER.trace("Added service for the network offering: " + offService);
19081927
}
1909-
1910-
_gcExecutor.scheduleWithFixedDelay(new KubernetesClusterGarbageCollector(), 300, 300, TimeUnit.SECONDS);
1911-
_stateScanner.scheduleWithFixedDelay(new KubernetesClusterStatusScanner(), 300, 30, TimeUnit.SECONDS);
1912-
1913-
return true;
19141928
}
19151929

19161930
@Override

plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxElement.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ private static Map<Network.Service, Map<Network.Capability, String>> initCapabil
159159
capabilities.put(Network.Service.Lb, null);
160160
capabilities.put(Network.Service.PortForwarding, null);
161161
capabilities.put(Network.Service.NetworkACL, null);
162+
capabilities.put(Network.Service.Firewall, null);
162163
Map<Network.Capability, String> sourceNatCapabilities = new HashMap<>();
163164
sourceNatCapabilities.put(Network.Capability.RedundantRouter, "true");
164165
sourceNatCapabilities.put(Network.Capability.SupportedSourceNatTypes, "peraccount");

server/src/main/java/com/cloud/network/NetworkModelImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -491,7 +491,7 @@ Map<Provider, Set<Service>> getProviderServicesMap(long networkId) {
491491
@Override
492492
public Map<Provider, ArrayList<PublicIpAddress>> getProviderToIpList(Network network, Map<PublicIpAddress, Set<Service>> ipToServices) {
493493
NetworkOffering offering = _networkOfferingDao.findById(network.getNetworkOfferingId());
494-
if (!offering.isConserveMode()) {
494+
if (!offering.isConserveMode() && !offering.isForNsx()) {
495495
for (PublicIpAddress ip : ipToServices.keySet()) {
496496
Set<Service> services = new HashSet<Service>();
497497
services.addAll(ipToServices.get(ip));
@@ -1617,7 +1617,7 @@ public boolean checkIpForService(IpAddress userIp, Service service, Long network
16171617
if (!canIpUsedForService(publicIp, service, networkId)) {
16181618
return false;
16191619
}
1620-
if (!offering.isConserveMode()) {
1620+
if (!offering.isConserveMode() && !offering.isForNsx()) {
16211621
return canIpUsedForNonConserveService(publicIp, service);
16221622
}
16231623
return true;

ui/public/locales/en.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -889,6 +889,7 @@
889889
"label.forgedtransmits": "Forged transmits",
890890
"label.format": "Format",
891891
"label.fornsx": "NSX",
892+
"label.forvpc": "VPC",
892893
"label.free": "Free",
893894
"label.french.azerty.keyboard": "French AZERTY keyboard",
894895
"label.friday": "Friday",
@@ -1402,7 +1403,7 @@
14021403
"label.not.suitable": "Not suitable",
14031404
"label.notifications": "Notifications",
14041405
"label.nsx": "NSX",
1405-
"label.nsx.mode": "NSX Mode",
1406+
"label.nsxmode": "NSX Mode",
14061407
"label.nsx.provider": "NSX Provider",
14071408
"label.nsx.provider.name": "NSX provider name",
14081409
"label.nsx.provider.hostname": "NSX provider hostname",

ui/src/views/offering/AddNetworkOffering.vue

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@
131131
</a-row>
132132
<a-form-item name="nsxmode" ref="nsxmode" v-if="forNsx">
133133
<template #label>
134-
<tooltip-label :title="$t('label.nsx.mode')" :tooltip="apiParams.nsxmode.description"/>
134+
<tooltip-label :title="$t('label.nsxmode')" :tooltip="apiParams.nsxmode.description"/>
135135
</template>
136136
<a-select
137137
v-if="showMode"
@@ -548,6 +548,7 @@ export default {
548548
lbType: 'publicLb',
549549
macLearningValue: '',
550550
supportedServices: [],
551+
supportedSvcs: [],
551552
supportedServiceLoading: false,
552553
isVirtualRouterForAtLeastOneService: false,
553554
isVpcVirtualRouterForAtLeastOneService: false,
@@ -841,17 +842,16 @@ export default {
841842
}
842843
})
843844
setTimeout(() => {
845+
self.supportedSvcs = self.supportedServices
844846
self.supportedServices = supportedServices
845847
self.supportedServiceLoading = false
846848
}, 50)
847849
} else {
850+
supportedServices = this.supportedSvcs
848851
supportedServices = supportedServices.filter(svc => {
849852
return Object.keys(this.nsxSupportedServicesMap).includes(svc.name)
850853
})
851-
supportedServices.forEach(function (svc, index) {
852-
svc.provider = [self.nsxSupportedServicesMap[svc.name]]
853-
supportedServices[index] = svc
854-
})
854+
self.supportedSvcs = self.supportedServices
855855
self.supportedServices = supportedServices
856856
self.supportedServiceLoading = false
857857
}
@@ -863,19 +863,29 @@ export default {
863863
Dhcp: this.forVpc ? this.VPCVR : this.VR,
864864
Dns: this.forVpc ? this.VPCVR : this.VR,
865865
UserData: this.forVpc ? this.VPCVR : this.VR,
866-
SourceNat: this.NSX
866+
SourceNat: this.NSX,
867+
StaticNat: this.NSX,
868+
PortForwarding: this.NSX,
869+
Lb: this.NSX,
870+
...(forVpc && { NetworkACL: this.NSX }),
871+
...(!forVpc && { Firewall: this.NSX })
867872
}
868873
}
869874
this.updateSupportedServices()
870875
},
871-
async handleForNsxChange (forNsx) {
876+
handleForNsxChange (forNsx) {
872877
this.forNsx = forNsx
873878
this.showMode = forNsx
874879
this.nsxSupportedServicesMap = {
875880
Dhcp: this.forVpc ? this.VPCVR : this.VR,
876881
Dns: this.forVpc ? this.VPCVR : this.VR,
877882
UserData: this.forVpc ? this.VPCVR : this.VR,
878-
SourceNat: this.NSX
883+
SourceNat: this.NSX,
884+
StaticNat: this.NSX,
885+
PortForwarding: this.NSX,
886+
Lb: this.NSX,
887+
...(this.forVpc && { NetworkACL: this.NSX }),
888+
...(!this.forVpc && { Firewall: this.NSX })
879889
}
880890
this.fetchSupportedServiceData()
881891
},

0 commit comments

Comments
 (0)