Skip to content

Commit b497f58

Browse files
authored
Fix K8s scaling and deletion issue if firewall rule is for ALL ports (#12806)
1 parent 7cdcf57 commit b497f58

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.HashMap;
2626
import java.util.List;
2727
import java.util.Map;
28+
import java.util.Objects;
2829
import java.util.concurrent.ConcurrentHashMap;
2930
import java.util.stream.Collectors;
3031

@@ -517,7 +518,7 @@ protected FirewallRule removeSshFirewallRule(final IpAddress publicIp) {
517518
FirewallRule rule = null;
518519
List<FirewallRuleVO> firewallRules = firewallRulesDao.listByIpAndPurposeAndNotRevoked(publicIp.getId(), FirewallRule.Purpose.Firewall);
519520
for (FirewallRuleVO firewallRule : firewallRules) {
520-
if (firewallRule.getSourcePortStart() == CLUSTER_NODES_DEFAULT_START_SSH_PORT) {
521+
if (Objects.equals(firewallRule.getSourcePortStart(), CLUSTER_NODES_DEFAULT_START_SSH_PORT)) {
521522
rule = firewallRule;
522523
firewallService.revokeIngressFwRule(firewallRule.getId(), true);
523524
logger.debug("The SSH firewall rule [%s] with the id [%s] was revoked",firewallRule.getName(),firewallRule.getId());

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,14 @@ private void scaleKubernetesClusterIsolatedNetworkRules(final List<Long> cluster
124124

125125
// Remove existing SSH firewall rules
126126
FirewallRule firewallRule = removeSshFirewallRule(publicIp);
127+
int existingFirewallRuleSourcePortEnd;
127128
if (firewallRule == null) {
128-
throw new ManagementServerException("Firewall rule for node SSH access can't be provisioned");
129+
logger.warn("SSH firewall rule not found for Kubernetes cluster: {}. It may have been manually deleted or modified.", kubernetesCluster.getName());
130+
existingFirewallRuleSourcePortEnd = CLUSTER_NODES_DEFAULT_START_SSH_PORT + clusterVMIds.size() - 1;
131+
} else {
132+
existingFirewallRuleSourcePortEnd = firewallRule.getSourcePortEnd();
129133
}
130-
int existingFirewallRuleSourcePortEnd = firewallRule.getSourcePortEnd();
134+
131135
try {
132136
removePortForwardingRules(publicIp, network, owner, CLUSTER_NODES_DEFAULT_START_SSH_PORT, existingFirewallRuleSourcePortEnd);
133137
} catch (ResourceUnavailableException e) {

0 commit comments

Comments
 (0)