Keycloak автономный кластер на Cloud Foundry - PullRequest
0 голосов
/ 25 апреля 2019

Как настроить автономный кластер Keycloak на Cloud Foundry?

Я пытался использовать образ докера jboss/keycloak:4.5.0.Final с внутренней маршрутизацией:

  • ENV:
    • 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 Ответ

1 голос
/ 01 мая 2019

Я наконец нашел ответ на свой вопрос.

Перейдите к этому keycloak4cf репо, если вы ищете быстрое решение.


Основные проблемы, с которыми мне пришлось столкнуться:

Keycloak минимальная версия

Используйте jboss/keycloak:5.0.0 или новее / последний

Существует жестко закодированный .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 вместо многоадресной передачи 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
...