fos*_*ose 1 high-availability kubernetes keycloak kubernetes-helm
我们想在 Kubernetes 上建立一个高可用的 Keycloak 集群(使用 ldap 作为用户联盟)。我们决定使用codecentrics helm charts,因为我们正在尝试将它们用于单个 Keycloak 实例设置并且效果很好。对于集群,我们在尝试正确设置所有内容时遇到了一些问题,但没有在广泛的互联网上找到最佳资源。因此,我决定写一个简短的总结,我们的主要问题在哪里以及我们如何解决这些问题。
本网站(除其他外)上描述的我们问题的解决方案,但描述的内容非常简短,感觉部分不完整。
我们在以下方面遇到的问题:
jgroups.discoveryProtocoldiscoveryPropertiesvalues.yaml额外问题(我们已经面临单实例设置):
如果由于代码中心更新他们的掌舵图而发生变化,我将尝试更新它。
感谢 codecentrics 顺便提供了 helm charts!
免责声明:
这是我们设置它的方式 - 我希望这是有帮助的,但我不对配置错误和由此产生的安全漏洞负责。此外,我们在互联网上浏览了许多不同的资源,很抱歉,我不能对所有这些资源都表示感谢,但是已经过了几天了,我再也无法将它们聚集在一起了……
主要问题:
1. 选择正确的 jgroups.discoveryProtocol:
我不会在这里解释,但对我们来说,使用的正确协议是org.jgroups.protocols.JDBC_PING. 在此处了解有关协议(和一般集群设置)的更多信息。
discoveryProtocol: org.jgroups.protocols.JDBC_PING
Run Code Online (Sandbox Code Playgroud)
使用 JDBC_PING jgroups 将管理实例发现。因此,为了缓存用户会话,为 keycloak 提供的数据库将使用额外的表进行增强,例如JGROUPSPING.
2.设置discoveryProperties: 这个需要设置为
discoveryProperties: >
"datasource_jndi_name=java:jboss/datasources/KeycloakDS"
Run Code Online (Sandbox Code Playgroud)
避免出现以下错误:
java.lang.IllegalStateException: java.lang.IllegalArgumentException:
Either the 4 configuration properties starting with 'connection_' or
the datasource_jndi_name must be set
Run Code Online (Sandbox Code Playgroud)
3.其他需要设置的部分(主要在codecentrics github的readme和github中values.yaml的注释中都有描述):
clusterDomain根据您的集群replicas大于 1的数量以启用集群service.type:我们采用了ClusterIP但它也可以与其他设置一起使用,例如LoadBalancer取决于您的设置maxUnavailable或minAvailable始终有足够的 Pod。 ingress:
enabled: true
path: /
annotations: {
kubernetes.io/ingress.class: nginx
}
hosts:
- your.host.org
Run Code Online (Sandbox Code Playgroud)
奖金问题:
1. 信任库:
为了让 Keycloak 通过 ldaps 与 ldap 通信,我们必须建立一个信任库,其中包含我们的 ldap 证书:
从 ldap 接收证书并将其保存在某处:
discoveryProtocol: org.jgroups.protocols.JDBC_PING
Run Code Online (Sandbox Code Playgroud)
创建一个新的密钥库:
discoveryProperties: >
"datasource_jndi_name=java:jboss/datasources/KeycloakDS"
Run Code Online (Sandbox Code Playgroud)
将下载的证书添加到密钥库:
java.lang.IllegalStateException: java.lang.IllegalArgumentException:
Either the 4 configuration properties starting with 'connection_' or
the datasource_jndi_name must be set
Run Code Online (Sandbox Code Playgroud)
输入所需的密码:use_the_same_password。
通过键入“是”来信任证书。
在配置映射中提供密钥库:
ingress:
enabled: true
path: /
annotations: {
kubernetes.io/ingress.class: nginx
}
hosts:
- your.host.org
Run Code Online (Sandbox Code Playgroud)
为信任库增强您的 values.yaml:
添加并挂载配置映射:
extraVolumes: |
- name: cert-keystore
configMap:
name: cert-keystore
extraVolumeMounts: |
- name: cert-keystore
mountPath: "/keystore/"
readOnly: true
Run Code Online (Sandbox Code Playgroud)
告诉java你使用它:
javaToolOptions: >-
-[maybe some other settings of yours]
-Djavax.net.ssl.trustStore=/keystore/keystore.jks
-Djavax.net.ssl.trustStorePassword=<<keystore_password>>
Run Code Online (Sandbox Code Playgroud)
由于我们没有要上传的密钥库密码与git我们增加了一个步骤,我们的管道那里得到sed入values.yaml,替换<<keystore_password>>。
2. 添加自定义主题:
主要是我们提供了一个带有自定义主题的 docker 容器:
extraInitContainers: |
- name: theme-provider
image: docker_repo_url/themeContainer:version
imagePullPolicy: IfNotPresent
command:
- sh
args:
- -c
- |
echo "Copying theme..."
cp -R /custom-theme/* /theme
volumeMounts:
- name: theme
mountPath: /theme
Run Code Online (Sandbox Code Playgroud)
添加并挂载主题:
extraVolumes: |
- name: theme
emptyDir: {}
extraVolumeMounts: |
- name: theme
mountPath: /opt/jboss/keycloak/themes/custom-theme
Run Code Online (Sandbox Code Playgroud)
您现在应该能够在 Keycloak 管理 UI 中通过 选择自定义主题Realm Settings -> Themes。
1. 集群
我们仍然使用 JDBC_PING,因为我们在使用 DNS_PING 时遇到了问题,如 Codecentric Repo 自述文件中所述:
extraEnv: |
## KEYCLOAK CONFIG
- name: PROXY_ADDRESS_FORWARDING
value: "true"
### CLUSTERING
- name: JGROUPS_DISCOVERY_PROTOCOL
value: org.jgroups.protocols.JDBC_PING
- name: JGROUPS_DISCOVERY_PROPERTIES
value: 'datasource_jndi_name=java:jboss/datasources/KeycloakDS'
- name: CACHE_OWNERS_COUNT
value: "2"
- name: CACHE_OWNERS_AUTH_SESSIONS_COUNT
value: "2"
Run Code Online (Sandbox Code Playgroud)
将服务设置为 ClusterIP:
service:
annotations: {}
labels: {}
type: ClusterIP
loadBalancerIP: ""
httpPort: 80
httpNodePort: null
httpsPort: 8443
httpsNodePort: null
httpManagementPort: 9990
httpManagementNodePort: null
extraPorts: []
Run Code Online (Sandbox Code Playgroud)
2. 502 错误入口问题
我们在 Codecentrics 图表 9.xx 中遇到了 502 错误,修复需要一段时间才能弄清楚。这里也描述了一个解决方案,我们从中汲取了灵感,但对我们来说,以下入口设置就足够了:
ingress:
enabled: true
servicePort: http
# Ingress annotations
annotations: {
kubernetes.io/ingress.class: nginx,
nginx.ingress.kubernetes.io/proxy-buffer-size: 128k,
}
Run Code Online (Sandbox Code Playgroud)
更新到 9.5.0 需要测试。特别是如果需要使用 KUBE_PING 甚至自动缩放。如果发生重大变化,我会在测试后更新。
| 归档时间: |
|
| 查看次数: |
1447 次 |
| 最近记录: |