【问题标题】:Keycloak standalone cluster on Cloud FoundryCloud Foundry 上的 Keycloak 独立集群
【发布时间】: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"/>

【问题讨论】:

  • 它是否尝试使用多播?那可能是个问题。不使用多播可以配置吗?

标签: cloud-foundry keycloak


【解决方案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 中的值之后让它工作了。
猜你喜欢
  • 2019-12-02
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多