Cloud Foundry 上的 Keycloak 独立集群
Keycloak standalone cluster on Cloud Foundry
如何在 Cloud Foundry 上配置 Keycloak 独立集群?
我尝试将 docker 图像 jboss/keycloak:4.5.0.Final
与内部路由一起使用:
- 环境:
JGROUPS_DISCOVERY_PROTOCOL: dns.DNS_PING
JGROUPS_DISCOVERY_PROPERTIES: dns_query=keycloak-cluster-poc.apps.internal
- 打开应用程序实例之间的所有 udp 和 tcp 端口:
cf add-network-policy keycloak-cluster-poc --destination-app keycloak-cluster-poc --protocol tcp/udp --port 1-65535
它不起作用。我应该公开额外的端口吗?
<socket-binding name="jgroups-mping" interface="private" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/>
<socket-binding name="jgroups-tcp" interface="private" port="7600"/>
<socket-binding name="jgroups-tcp-fd" interface="private" port="57600"/>
<socket-binding name="jgroups-udp" interface="private" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/>
<socket-binding name="jgroups-udp-fd" interface="private" port="54200"/>
<socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/>
我终于找到了自己问题的答案。
如果您正在寻找快速解决方案,请转到此 keycloak4cf 存储库。
我不得不面对的主要问题:
Keycloak 最小版本
使用jboss/keycloak:5.0.0
或newer/latest
有hardcoded .svc.cluster.local
DNS query suffix removed with JGRP-2295.
此修复已在 JGroups 4.0.15.Final
中发布,在 Infinispan Core 9.4.0.Final.
中使用,随 Keycloak 5.0.0
一起发布(包括 inifnispan-core 9.4.3.Final
)。
聚类
集群必须使用 TCP 而不是 multicast UDP(Cloud Foundry 上没有多播 - 谢谢@DanielMikusa 的提示)。
要更改此配置,请使用 dns.DNS_PING.cli
:
embed-server --server-config=standalone-ha.xml --std-out=echo
batch
/subsystem=jgroups:write-attribute(name=default-stack,value=tcp)
/subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcp)
/subsystem=jgroups/stack=udp/protocol=PING:remove()
/subsystem=jgroups/stack=udp/protocol=$keycloak_jgroups_discovery_protocol:add(add-index=0, properties=$keycloak_jgroups_discovery_protocol_properties)
/subsystem=jgroups/stack=tcp/protocol=MPING:remove()
/subsystem=jgroups/stack=tcp/protocol=$keycloak_jgroups_discovery_protocol:add(add-index=0, properties=$keycloak_jgroups_discovery_protocol_properties)
run-batch
stop-embedded-server
添加网络策略以允许集群节点之间的连接:
cf add-network-policy keycloak-cluster-poc --destination-app keycloak-cluster-poc --protocol tcp --port 7600
如何在 Cloud Foundry 上配置 Keycloak 独立集群?
我尝试将 docker 图像 jboss/keycloak:4.5.0.Final
与内部路由一起使用:
- 环境:
JGROUPS_DISCOVERY_PROTOCOL: dns.DNS_PING
JGROUPS_DISCOVERY_PROPERTIES: dns_query=keycloak-cluster-poc.apps.internal
- 打开应用程序实例之间的所有 udp 和 tcp 端口:
cf add-network-policy keycloak-cluster-poc --destination-app keycloak-cluster-poc --protocol tcp/udp --port 1-65535
它不起作用。我应该公开额外的端口吗?
<socket-binding name="jgroups-mping" interface="private" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/>
<socket-binding name="jgroups-tcp" interface="private" port="7600"/>
<socket-binding name="jgroups-tcp-fd" interface="private" port="57600"/>
<socket-binding name="jgroups-udp" interface="private" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/>
<socket-binding name="jgroups-udp-fd" interface="private" port="54200"/>
<socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/>
我终于找到了自己问题的答案。
如果您正在寻找快速解决方案,请转到此 keycloak4cf 存储库。
我不得不面对的主要问题:
Keycloak 最小版本
使用jboss/keycloak:5.0.0
或newer/latest
有hardcoded .svc.cluster.local
DNS query suffix removed with JGRP-2295.
此修复已在 JGroups 4.0.15.Final
中发布,在 Infinispan Core 9.4.0.Final.
中使用,随 Keycloak 5.0.0
一起发布(包括 inifnispan-core 9.4.3.Final
)。
聚类
集群必须使用 TCP 而不是 multicast UDP(Cloud Foundry 上没有多播 - 谢谢@DanielMikusa 的提示)。
要更改此配置,请使用 dns.DNS_PING.cli
:
embed-server --server-config=standalone-ha.xml --std-out=echo
batch
/subsystem=jgroups:write-attribute(name=default-stack,value=tcp)
/subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcp)
/subsystem=jgroups/stack=udp/protocol=PING:remove()
/subsystem=jgroups/stack=udp/protocol=$keycloak_jgroups_discovery_protocol:add(add-index=0, properties=$keycloak_jgroups_discovery_protocol_properties)
/subsystem=jgroups/stack=tcp/protocol=MPING:remove()
/subsystem=jgroups/stack=tcp/protocol=$keycloak_jgroups_discovery_protocol:add(add-index=0, properties=$keycloak_jgroups_discovery_protocol_properties)
run-batch
stop-embedded-server
添加网络策略以允许集群节点之间的连接:
cf add-network-policy keycloak-cluster-poc --destination-app keycloak-cluster-poc --protocol tcp --port 7600