mirror of
https://github.com/keycloak/keycloak.git
synced 2026-01-10 15:32:05 -03:30
Patch kubernetes stack with port_range=0
Fixes #39023 Fixes #39454 Signed-off-by: Pedro Ruivo <pruivo@redhat.com>
This commit is contained in:
parent
36ef5c0959
commit
55998367d8
@ -19,6 +19,7 @@ package org.keycloak.quarkus.runtime.storage.infinispan.jgroups;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import org.infinispan.configuration.parsing.ConfigurationBuilderHolder;
|
||||
import org.keycloak.config.CachingOptions;
|
||||
@ -29,6 +30,9 @@ import org.keycloak.quarkus.runtime.storage.infinispan.CacheManagerFactory;
|
||||
import org.keycloak.quarkus.runtime.storage.infinispan.jgroups.impl.FileJGroupsTlsConfigurator;
|
||||
import org.keycloak.quarkus.runtime.storage.infinispan.jgroups.impl.JGroupsJdbcPingStackConfigurator;
|
||||
import org.keycloak.quarkus.runtime.storage.infinispan.jgroups.impl.JpaJGroupsTlsConfigurator;
|
||||
import org.keycloak.quarkus.runtime.storage.infinispan.jgroups.impl.KubernetesPatchConfigurator;
|
||||
|
||||
import static org.keycloak.quarkus.runtime.storage.infinispan.jgroups.JGroupsUtil.transportStackOf;
|
||||
|
||||
/**
|
||||
* Configures the JGroups stacks before starting Infinispan.
|
||||
@ -76,6 +80,19 @@ public class JGroupsConfigurator {
|
||||
configurator.add(FileJGroupsTlsConfigurator.INSTANCE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Patch for <a href="https://github.com/keycloak/keycloak/issues/39023">GHI#39023</a> and <a
|
||||
* href="https://github.com/keycloak/keycloak/issues/39454">GHI#39454</a>
|
||||
*/
|
||||
private static void createKubernetesPatchConfigurator(ConfigurationBuilderHolder holder, List<JGroupsStackConfigurator> configurator) {
|
||||
var stackXmlAttribute = transportStackOf(holder);
|
||||
if (!Objects.equals(KubernetesPatchConfigurator.KUBERNETES_STACK, stackXmlAttribute.get())) {
|
||||
// not the kubernetes stack
|
||||
return;
|
||||
}
|
||||
configurator.add(KubernetesPatchConfigurator.INSTANCE);
|
||||
}
|
||||
|
||||
private static boolean isLocal(ConfigurationBuilderHolder holder) {
|
||||
return JGroupsUtil.transportOf(holder) == null;
|
||||
}
|
||||
@ -87,9 +104,10 @@ public class JGroupsConfigurator {
|
||||
}
|
||||
// Configure stack from CLI options to Global Configuration
|
||||
Configuration.getOptionalKcValue(CachingOptions.CACHE_STACK).ifPresent(JGroupsUtil.transportOf(holder)::stack);
|
||||
var configurator = new ArrayList<JGroupsStackConfigurator>(2);
|
||||
var configurator = new ArrayList<JGroupsStackConfigurator>(3);
|
||||
createJdbcPingConfigurator(holder, configurator);
|
||||
createTlsConfigurator(configurator);
|
||||
createKubernetesPatchConfigurator(holder, configurator);
|
||||
return new JGroupsConfigurator(holder, List.copyOf(configurator));
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,40 @@
|
||||
package org.keycloak.quarkus.runtime.storage.infinispan.jgroups.impl;
|
||||
|
||||
import org.infinispan.configuration.parsing.ConfigurationBuilderHolder;
|
||||
import org.infinispan.remoting.transport.jgroups.EmbeddedJGroupsChannelConfigurator;
|
||||
import org.jgroups.conf.ProtocolConfiguration;
|
||||
import org.keycloak.models.KeycloakSession;
|
||||
import org.keycloak.quarkus.runtime.storage.infinispan.CacheManagerFactory;
|
||||
import org.keycloak.quarkus.runtime.storage.infinispan.jgroups.JGroupsStackConfigurator;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.keycloak.quarkus.runtime.storage.infinispan.jgroups.JGroupsUtil.transportOf;
|
||||
|
||||
/**
|
||||
* Patch for <a href="https://github.com/keycloak/keycloak/issues/39023">GHI#39023</a> and <a
|
||||
* href="https://github.com/keycloak/keycloak/issues/39454">GHI#39454</a>
|
||||
*/
|
||||
public class KubernetesPatchConfigurator implements JGroupsStackConfigurator {
|
||||
|
||||
public static final String KUBERNETES_STACK = "kubernetes";
|
||||
private static final String KUBERNETES_PATCHED_STACK = "kubernetes-patched";
|
||||
|
||||
public static final KubernetesPatchConfigurator INSTANCE = new KubernetesPatchConfigurator();
|
||||
|
||||
@Override
|
||||
public boolean requiresKeycloakSession() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void configure(ConfigurationBuilderHolder holder, KeycloakSession session) {
|
||||
CacheManagerFactory.logger.info("[PATCH] Patching kubernetes stack.");
|
||||
// patch port range
|
||||
var attributes = Map.of("port_range", "0");
|
||||
var patch = List.of(new ProtocolConfiguration("TCP", attributes));
|
||||
holder.addJGroupsStack(new EmbeddedJGroupsChannelConfigurator(KUBERNETES_PATCHED_STACK, patch, null), KUBERNETES_STACK);
|
||||
transportOf(holder).stack(KUBERNETES_PATCHED_STACK);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user