Cloud Foundry 上的 Keycloak 独立集群
Posted
技术标签:
【中文标题】Cloud Foundry 上的 Keycloak 独立集群【英文标题】:Keycloak standalone cluster on Cloud Foundry 【发布时间】:2019-09-15 00:46:14 【问题描述】:如何在 Cloud Foundry 上配置 Keycloak 独立集群?
我尝试使用带有内部路由的 docker image 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"/>
【问题讨论】:
它是否尝试使用多播?那可能是个问题。不使用多播可以配置吗? 【参考方案1】:我终于找到了自己问题的答案。
如果您正在寻找快速解决方案,请访问此 keycloak4cf 存储库。
我不得不面对的主要问题:
Keycloak 最小版本
使用jboss/keycloak:5.0.0
或更新/最新
hardcoded.svc.cluster.local
DNS 查询后缀被删除,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
【讨论】:
你知道keycloak中绑定地址是怎么解决的吗?我在我的堆栈中使用 Infinispan+JGroups 和硬编码地址到127.0.0.1
不允许来自外部的连接(显然 ^^')。
@lucasvc 内部路由/BOSH DNS - github.com/i6e/keycloak4cf/blob/master/…
我在 JGroups 配置集 TCP bind_addr=
BOSH 环境变量 CF_INSTANCE_INTERNAL_IP
中的值之后让它工作了。以上是关于Cloud Foundry 上的 Keycloak 独立集群的主要内容,如果未能解决你的问题,请参考以下文章
IBM 发布Cloud Private:基于Kubernetes和Cloud Foundry
Cloud Foundry Session Affinity(Sticky Session)的实现
Spring Boot 微服务在 Pivotal Cloud Foundry 平台上部署时无法通过 Kerberos 身份验证