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 独立集群的主要内容,如果未能解决你的问题,请参考以下文章

谷歌云平台上的 Cloud Foundry

IBM 发布Cloud Private:基于Kubernetes和Cloud Foundry

Cloud Foundry Session Affinity(Sticky Session)的实现

Spring Boot 微服务在 Pivotal Cloud Foundry 平台上部署时无法通过 Kerberos 身份验证

Cloud Foundry平台中国唯一云供应商,阿里云持续链接Cloud Foundry/Kuber

使用 PHP Cloud Foundry 应用程序连接到 IBM zOS 系统/DB2 表