Red Hat Single Sign-On for OpenShift


Red Hat Single Sign-On 7.5

用于 Red Hat Single Sign-On 7.5

摘要

本指南包括基本信息和说明,以开始使用 Red Hat Single Sign-On 7.5 for OpenShift

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。如需了解更多详细信息,请参阅 CTO Chris Wright 信息 . :leveloffset: +0

第 1 章 Red Hat Single Sign-On for OpenShift 简介

1.1. 什么是 Red Hat Single Sign-On?

Red Hat Single Sign-On 是一个集成式登录解决方案,可作为红帽 JBoss 中间件用于 OpenShift 容器化镜像。Red Hat Single Sign-On for OpenShift 镜像为用户提供了一个身份验证服务器,供用户集中管理、注销、注册和管理 Web 应用、移动应用和 RESTful Web 服务的用户帐户。

Red Hat Single Sign-On for OpenShift 在以下平台上提供:x86_64、IBM Z 和 IBM Power Systems。

1.2. 用于这个软件的模板

红帽使用 Red Hat Single Sign-On for OpenShift 镜像版本号 7.5.3 提供多个 OpenShift 应用程序模板。这些模板定义开发基于 Red Hat Single Sign-On 7.5.3 服务器部署所需的资源。模板主要被分成两类:直通模板和再加密模板。还存在其他一些模板。

1.2.1. passthrough 模板

这些模板要求事先存在 HTTPS、JGroups 密钥存储以及 Red Hat Single Sign-On 服务器的信任存储。它们使用 passthrough TLS 终止保护 TLS 通信。

  • sso75-https :同一 pod 上由内部 H2 数据库支持的 Red Hat Single Sign-On 7.5.3。
  • sso75-postgresql :红帽 Single Sign-On 7.5.3,由单独 pod 上的临时 PostgreSQL 数据库支持。
  • sso75-postgresql-persistent: Red Hat Single Sign-On 7.5.3,由单独 pod 上的持久 PostgreSQL 数据库支持。
注意

Red Hat Single Sign-On with MySQL / MariaDB 数据库的模板已被删除,且在 Red Hat Single Sign-On 版本 7.4 后不可用。

1.2.2. 重新加密模板

这些模板使用 OpenShift 的内部服务 服务 x509 证书 secret,自动创建用于提供安全内容的 HTTPS 密钥存储。JGroups 集群流量使用 AUTH 协议进行身份验证,并使用 ASYM_ENCRYPT 协议加密。Red Hat Single Sign-On 服务器信任存储也自动创建,其中包含 /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt CA 证书文件,用于为 HTTPS 密钥存储签名。

此外,Red Hat Single Sign-On 服务器的信任存储会预先填充 Java 系统路径中所有已知的可信 CA 证书文件。这些模板使用再加密 TLS 终止来保护 TLS 通信。

  • sso75-x509-https :红帽单点登录 7.5.3 (带有自动生成的 HTTPS 密钥存储)和红帽单点登录信任存储(由内部 H2 数据库支持)。ASYM_ENCRYPT JGroups 协议用于加密集群流量。
  • sso75-x509-postgresql-persistent: Red Hat Single Sign-On 7.5.3 (带有自动生成的 HTTPS 密钥存储)和红帽单点登录信任存储(由持久 PostgreSQL 数据库支持)。ASYM_ENCRYPT JGroups 协议用于加密集群流量。

1.2.3. 其他模板

另外还提供了与 Red Hat Single Sign-On 集成的其他模板:

  • eap64-sso-s2i :启用了红帽 JBoss 企业应用平台 6.4 的单点登录。
  • eap71-sso-s2i :启用了红帽 JBoss 企业应用平台 7.1 的单点登录。
  • datavirt63-secure-s2i :启用了红帽 JBoss 数据虚拟化 6.3 的单点登录.

这些模板包含特定于 Red Hat Single Sign-On 的环境变量,用于在部署时自动 Red Hat Single Sign-On 客户端注册。

1.3. 版本兼容性和支持

有关 OpenShift 镜像版本兼容性的详情,请查看 支持的配置 页面。

注意

7.0 和 7.3 之间的 OpenShift 镜像版本号的 Red Hat Single Sign-On 已被弃用,它们将不再接收镜像和应用程序模板的更新。

要部署新应用,请使用 Red Hat Single Sign-On for OpenShift 镜像的版本 7.4 或 7.5.3,以及特定于这些镜像版本的应用模板。

从安全 Red Hat Registry: registry.redhat.io 需要身份验证时,会按需拉取用于 OpenShift 镜像的 Red Hat JBoss Middleware。要检索内容,您需要使用红帽帐户登录 registry。

要在 OpenShift 等共享环境中使用 registry.redhat.io 中的容器镜像,建议管理员使用 Registry 服务帐户(也称为身份验证令牌)来代替个人的红帽客户门户网站凭证。

流程

  1. 要创建 Registry Service Account,请导航到 Registry Service Account Management Application,并在需要时登录。
  2. Registry Service Accounts 页面中,点 Create Service Account
  3. 为服务帐户提供名称,如 registry.redhat.io-sa。它将以固定、随机字符串开头。

    1. 为服务帐户输入描述,例如使用 registry.redhat.io 中的容器镜像
    2. Create
  4. 创建服务帐户后,点 Registry Service Accounts 页面中的" 帐户名称" 列中的 registry.redhat.io-sa 链接。
  5. 最后,单击 OpenShift Secret 选项卡,然后执行该页面中列出的所有步骤。

如需更多信息,请参阅 Red Hat Container Registry 身份验证 文章。

流程

  1. 确保您已作为集群管理员或具有全局 openshift 项目的项目管理员访问权限的用户身份登录:
  2. 根据您的 OpenShift Container Platform 版本选择命令。

    1. 如果您在 master 主机(一些)上运行基于 OpenShift Container Platform v3 的集群实例,请执行以下操作:

      $ oc login -u system:admin
      Copy to Clipboard Toggle word wrap
    2. 如果您正在运行基于 OpenShift Container Platform v4 的集群实例,以 kubeadmin 用户身份登录 CLI

      $ oc login -u kubeadmin -p password https://openshift.example.com:6443
      Copy to Clipboard Toggle word wrap
  3. 运行以下命令更新 openshift 项目中的 OpenShift 的 Red Hat Single Sign-On 7.5.3 资源集:

    $ for resource in sso75-image-stream.json \
      sso75-https.json \
      sso75-postgresql.json \
      sso75-postgresql-persistent.json \
      sso75-x509-https.json \
      sso75-x509-postgresql-persistent.json
    do
      oc replace -n openshift --force -f \
      https://raw.githubusercontent.com/jboss-container-images/redhat-sso-7-openshift-image/sso75-dev/templates/${resource}
    done
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令,在 openshift 项目中安装 Red Hat Single Sign-On 7.5.3 OpenShift 镜像流:

    $ oc -n openshift import-image rh-sso-7/sso75-openshift-rhel8:7.5 --from=registry.redhat.io/rh-sso-7/sso75-openshift-rhel8:7.5 --confirm
    Copy to Clipboard Toggle word wrap

2.2. 部署 Red Hat Single Sign-On 镜像

2.2.1. 准备部署

流程

  1. 使用包含 cluster:admin 角色的用户登录 OpenShift CLI。
  2. 创建一个新项目:

    $ oc new-project sso-app-demo
    Copy to Clipboard Toggle word wrap
  3. view 角色添加到 default 服务帐户。这可让服务帐户查看 sso-app-demo 命名空间中的所有资源,这是管理集群所必需的。

    $ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
    Copy to Clipboard Toggle word wrap

您可以使用以下接口之一部署模板:

2.2.2.1. 使用 OpenShift CLI 部署模板

流程

  1. 列出可用的 Red Hat Single Sign-On 应用程序模板:

    $ oc get templates -n openshift -o name | grep -o 'sso75.\+'
    sso75-https
    sso75-postgresql
    sso75-postgresql-persistent
    sso75-x509-https
    sso75-x509-postgresql-persistent
    Copy to Clipboard Toggle word wrap
  2. 部署所选对象:

    $ oc new-app --template=sso75-x509-https
    --> Deploying template "openshift/sso75-x509-https" to project sso-app-demo
    
         Red Hat Single Sign-On 7.5 (Ephemeral)
         ---------
         An example Red Hat Single Sign-On 7 application. For more information about using this template, see <link xlink:href="https://github.com/jboss-openshift/application-templates">https://github.com/jboss-openshift/application-templates</link>.
    
         A new Red Hat Single Sign-On service has been created in your project. The admin username/password for accessing the master realm using the Red Hat Single Sign-On console is IACfQO8v/nR7llVSVb4Dye3TNRbXoXhRpAKTmiCRc. The HTTPS keystore used for serving secure content, the JGroups keystore used for securing JGroups communications, and server truststore used for securing Red Hat Single Sign-On requests were automatically created using OpenShift's service serving x509 certificate secrets.
    
         * With parameters:
            * Application Name=sso
            * JGroups Cluster Password=jg0Rssom0gmHBnooDF3Ww7V4Mu5RymmB # generated
            * Datasource Minimum Pool Size=
            * Datasource Maximum Pool Size=
            * Datasource Transaction Isolation=
            * ImageStream Namespace=openshift
            * Red Hat Single Sign-On Administrator Username=IACfQO8v # generated
            * Red Hat Single Sign-On Administrator Password=nR7llVSVb4Dye3TNRbXoXhRpAKTmiCRc # generated
            * Red Hat Single Sign-On Realm=
            * Red Hat Single Sign-On Service Username=
            * Red Hat Single Sign-On Service Password=
            * Container Memory Limit=1Gi
    
    --> Creating resources ...
        service "sso" created
        service "secure-sso" created
        service "sso-ping" created
        route "sso" created
        route "secure-sso" created
        deploymentconfig "sso" created
    --> Success
        Run 'oc status' to view your app.
    Copy to Clipboard Toggle word wrap
2.2.2.2. 使用 OpenShift 3.x Web 控制台部署模板

流程

  1. 登录 OpenShift Web 控制台并选择 sso-app-demo 项目空间。
  2. 单击 Add to Project,然后 Browse Catalog 列出默认镜像流和模板。
  3. 使用 Filter by Keyword 搜索栏,将列表限制为与 sso 匹配的列表。您可能需要单击 Middleware,然后 集成 以显示所需的应用程序模板。
  4. 选择 Red Hat Single Sign-On 应用程序模板。这个示例使用 Red Hat Single Sign-On 7.5 (Ephemeral)
  5. 信息 步骤中点 Next
  6. Add to Project 下拉菜单中选择 sso-app-demo 项目空间。然后单击"下一步"
  7. 绑定 步骤中 ,选择 Do not bind 按钮。点 Create 继续。
  8. 结果 步骤中,单击 Continue to the project overview 链接,以验证部署的状态。
2.2.2.3. 使用 OpenShift 4.x Web 控制台部署模板

流程

  1. 登录 OpenShift Web 控制台并选择 sso-app-demo 项目空间。
  2. 在左侧边栏中,点 Administrator 选项卡,然后点 < /> Developer

    choose developer role

  3. 单击 From Catalog

    add from catalog

  4. 搜索 sso

    sso keyword

  5. 选择 OpenJDK (Ephemeral)上的 Red Hat Single Sign-On 7.5 等模板。

    choose template

  6. Instantiate Template

    instantiate template

  7. 如果需要,调整模板参数,然后单击 创建
  8. 验证 OpenShift 镜像的 Red Hat Single Sign-On 已部署。

    verify deployment

流程

  1. 部署模板后,标识可用的路由。

    $ oc get routes
    NAME     HOST/PORT
    sso      sso-sso-app-demo.openshift.example.com
    Copy to Clipboard Toggle word wrap
  2. 访问红帽单点登录管理控制台。

    https://sso-sso-app-demo.openshift.example.com/auth/admin
    Copy to Clipboard Toggle word wrap
  3. 提供 管理员帐户的登录凭据

第 3 章 执行高级步骤

本章论述了高级流程,如为 Red Hat Single Sign-On 服务器设置密钥存储和信任存储,以及创建管理员帐户,以及可用的红帽单点登录客户端方法概述,以及有关配置集群的指导。

3.1. 部署 passthrough TLS 终止模板

您可以使用这些模板进行部署。它们要求 HTTPS、JGroups 密钥存储和 Red Hat Single Sign-On 服务器信任存储已经存在,因此可用于使用自定义 HTTPS、JGroup 密钥存储和红帽单点登录服务器信任存储实例化 Red Hat Single Sign-On server pod。

3.1.1. 准备部署

流程

  1. 使用包含 cluster:admin 角色的用户登录 OpenShift CLI。
  2. 创建一个新项目:

    $ oc new-project sso-app-demo
    Copy to Clipboard Toggle word wrap
  3. view 角色添加到 default 服务帐户。这可让服务帐户查看 sso-app-demo 命名空间中的所有资源,这是管理集群所必需的。

    $ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
    Copy to Clipboard Toggle word wrap

在这一流程中,openssl 工具包用于生成 HTTPS 密钥存储的 CA 证书,并为 Red Hat Single Sign-On 服务器创建信任存储。keytoolJava Development Kit 中包含的软件包,然后用于生成这些密钥存储的自签名证书。

使用重新加密 TLS 终止的 红帽单点登录应用模板 不需要期望 HTTPS 和 JGroups 密钥存储以及 Red Hat Single Sign-On server truststore 在手前准备。

注意

如果要使用现有的 HTTPS / JGroups 密钥存储来调配 Red Hat Single Sign-On 服务器,请使用一些直通模板。

再加密模板使用 OpenShift 的内部服务 服务 x509 证书机密 来自动创建 HTTPS 和 JGroups 密钥存储。

Red Hat Single Sign-On 服务器信任存储也会自动创建,其中包含 /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt CA 证书文件,用于创建这些集群证书。此外,Red Hat Single Sign-On 服务器的信任存储会预先填充 Java 系统路径中所有已知的可信 CA 证书文件。

前提条件

使用 passthrough TLS 终止的 Red Hat Single Sign-On 应用程序模板需要部署以下内容:

注意

对于生产环境,红帽建议您使用通过已验证的证书颁发机构(CA)为 SSL 加密连接(HTTPS)购买的 SSL 证书。

如需有关如何使用自签名或购买的 SSL 证书创建密钥存储的更多信息,请参阅 JBoss 企业应用平台安全指南

创建 HTTPS 密钥存储:

流程

  1. 生成 CA 证书。选择 并记得密码。提供相同的密码,当使用以下 CA 证书为证书签名请求进行签名 时:

    $ openssl req -new -newkey rsa:4096 -x509 -keyout xpaas.key -out xpaas.crt -days 365 -subj "/CN=xpaas-sso-demo.ca"
    Copy to Clipboard Toggle word wrap
  2. 为 HTTPS 密钥存储生成私钥。提供 mykeystorepass 作为密钥存储密码:

    $ keytool -genkeypair -keyalg RSA -keysize 2048 -dname "CN=secure-sso-sso-app-demo.openshift.example.com" -alias jboss -keystore keystore.jks
    Copy to Clipboard Toggle word wrap
  3. 为 HTTPS 密钥存储生成证书签名请求。提供 mykeystorepass 作为密钥存储密码:

    $ keytool -certreq -keyalg rsa -alias jboss -keystore keystore.jks -file sso.csr
    Copy to Clipboard Toggle word wrap
  1. 使用 CA 证书为证书签名请求签名。提供 用于生成 CA 证书的 相同密码:

    $ openssl x509 -req <(printf "subjectAltName=DNS:secure-sso-sso-app-demo.openshift.example.com") -CA xpaas.crt -CAkey xpaas.key -in sso.csr -out sso.crt -days 365 -CAcreateserial
    Copy to Clipboard Toggle word wrap
    注意

    要使上述命令在一行上工作,该命令包含进程替换(<()语法)。确保您的当前 shell 环境支持此类语法。否则,您可能会在 意外令牌 '(' 消息旁边遇到语法错误

  2. 将 CA 证书导入到 HTTPS 密钥存储中。提供 mykeystorepass 作为密钥存储密码。回复 yes to Trust this certificate? [no]: question:

    $ keytool -import -file xpaas.crt -alias xpaas.ca -keystore keystore.jks
    Copy to Clipboard Toggle word wrap
  3. 将签名的证书签名请求导入到 HTTPS 密钥存储。提供 mykeystorepass 作为密钥存储密码:

    $ keytool -import -file sso.crt -alias jboss -keystore keystore.jks
    Copy to Clipboard Toggle word wrap

为 JGroups 密钥存储生成安全密钥:

提供密码 作为密钥存储密码:

$ keytool -genseckey -alias secret-key -storetype JCEKS -keystore jgroups.jceks
Copy to Clipboard Toggle word wrap

将 CA 证书导入到新的 Red Hat Single Sign-On 服务器信任存储中:

提供 mykeystorepass 作为信任存储密码。回复 yes to Trust this certificate? [no]: question:

$ keytool -import -file xpaas.crt -alias xpaas.ca -keystore truststore.jks
Copy to Clipboard Toggle word wrap

3.1.3. 创建 secret

流程

您要创建名为机密的对象,供 OpenShift 用于存放敏感信息,如密码或密钥存储。

  1. 为 HTTPS 和 JGroups 密钥存储创建机密,以及红帽单点登录服务器信任存储( 在上一节中 生成)。

    $ oc create secret generic sso-app-secret --from-file=keystore.jks --from-file=jgroups.jceks --from-file=truststore.jks
    Copy to Clipboard Toggle word wrap
  2. 将这些 secret 链接到用于运行 Red Hat Single Sign-On Pod 的默认服务帐户。

    $ oc secrets link default sso-app-secret
    Copy to Clipboard Toggle word wrap

3.1.4. 使用 OpenShift CLI 部署 Passthrough TLS 模板

创建密钥存储 和机密后,使用 oc 命令部署直通 TLS 终止模板。???

3.1.4.1. oc 命令指南

在以下 oc 命令中,SSO_ADMIN_USERNAMESSO_ADMIN_PASSWORDHTTPS_PASSWORDJGROUPS_ENCRYPT_PASSWORDSSO_TRUSTSTORE_PASSWORD 变量的值与 sso75-https 红帽 Single Sign-On 应用程序模板中的默认值匹配。

对于生产环境,红帽建议您咨询组织的上门策略,以获取为 Red Hat Single Sign-On 服务器的管理员用户帐户生成强用户名和密码的说明,以及用于 HTTPS 和 JGroups 密钥存储的密码,以及红帽单点登录服务器的信任存储。

此外,当您创建模板时,使密码与创建密钥存储时提供的密码匹配。如果您使用了不同的用户名或密码,请修改模板中参数的值以匹配您的环境。

注意

您可以使用以下 keytool 命令确定与证书关联的别名名称。keytool 是 Java Development Kit 中包含的软件包。

$ keytool -v -list -keystore keystore.jks | grep Alias
Enter keystore password:  mykeystorepass
Alias name: xpaas.ca
Alias name: jboss
Copy to Clipboard Toggle word wrap
$ keytool -v -list -keystore jgroups.jceks -storetype jceks | grep Alias
Enter keystore password:  password
Alias name: secret-key
Copy to Clipboard Toggle word wrap

以下命令中的 SSO_ADMIN_USERNAMESSO_ADMIN_PASSWORDSSO_REALM 模板参数是可选的。

3.1.4.2. oc 命令示例
$ oc new-app --template=sso75-https \
 -p HTTPS_SECRET="sso-app-secret" \
 -p HTTPS_KEYSTORE="keystore.jks" \
 -p HTTPS_NAME="jboss" \
 -p HTTPS_PASSWORD="mykeystorepass" \
 -p JGROUPS_ENCRYPT_SECRET="sso-app-secret" \
 -p JGROUPS_ENCRYPT_KEYSTORE="jgroups.jceks" \
 -p JGROUPS_ENCRYPT_NAME="secret-key" \
 -p JGROUPS_ENCRYPT_PASSWORD="password" \
 -p SSO_ADMIN_USERNAME="admin" \
 -p SSO_ADMIN_PASSWORD="redhat" \
 -p SSO_REALM="demorealm" \
 -p SSO_TRUSTSTORE="truststore.jks" \
 -p SSO_TRUSTSTORE_PASSWORD="mykeystorepass" \
 -p SSO_TRUSTSTORE_SECRET="sso-app-secret"
--> Deploying template "openshift/sso75-https" to project sso-app-demo

     Red Hat Single Sign-On 7.5.3 (Ephemeral with passthrough TLS)
     ---------
     An example Red Hat Single Sign-On 7 application. For more information about using this template, see https://github.com/jboss-openshift/application-templates.

     A new Red Hat Single Sign-On service has been created in your project. The admin username/password for accessing the master realm via the Red Hat Single Sign-On console is admin/redhat. Please be sure to create the following secrets: "sso-app-secret" containing the keystore.jks file used for serving secure content; "sso-app-secret" containing the jgroups.jceks file used for securing JGroups communications; "sso-app-secret" containing the truststore.jks file used for securing Red Hat Single Sign-On requests.

     * With parameters:
        * Application Name=sso
        * Custom http Route Hostname=
        * Custom https Route Hostname=
        * Server Keystore Secret Name=sso-app-secret
        * Server Keystore Filename=keystore.jks
        * Server Keystore Type=
        * Server Certificate Name=jboss
        * Server Keystore Password=mykeystorepass
        * Datasource Minimum Pool Size=
        * Datasource Maximum Pool Size=
        * Datasource Transaction Isolation=
        * JGroups Secret Name=sso-app-secret
        * JGroups Keystore Filename=jgroups.jceks
        * JGroups Certificate Name=secret-key
        * JGroups Keystore Password=password
        * JGroups Cluster Password=yeSppLfp # generated
        * ImageStream Namespace=openshift
        * Red Hat Single Sign-On Administrator Username=admin
        * Red Hat Single Sign-On Administrator Password=redhat
        * Red Hat Single Sign-On Realm=demorealm
        * Red Hat Single Sign-On Service Username=
        * Red Hat Single Sign-On Service Password=
        * Red Hat Single Sign-On Trust Store=truststore.jks
        * Red Hat Single Sign-On Trust Store Password=mykeystorepass
        * Red Hat Single Sign-On Trust Store Secret=sso-app-secret
        * Container Memory Limit=1Gi

--> Creating resources ...
    service "sso" created
    service "secure-sso" created
    service "sso-ping" created
    route "sso" created
    route "secure-sso" created
    deploymentconfig "sso" created
--> Success
    Run 'oc status' to view your app.
Copy to Clipboard Toggle word wrap

3.2. 为 Red Hat Single Sign-On 服务器自定义主机名

hostname SPI 引入了为 Red Hat Single Sign-On 服务器配置主机名的灵活方法。默认主机名供应商 1 是默认的。这个供应商比 原始请求 供应商提供改进的功能,该供应商现已弃用。如果没有额外的设置,它将使用请求标头来确定与原始请求供应商类似的主机名。

有关 默认 供应商的配置选项,请参阅 服务器安装和配置指南frontendUrl 选项可以通过 SSO_FRONTEND_URL 环境变量进行配置。

注意

为向后兼容,如果同时设置了 SSO_HOSTNAME,则 SSO_FRONTEND_URL 设置将被忽略。

主机名提供程序的另一个选项 是固定的,它允许配置固定主机名。后者可确保只能使用有效主机名,并允许内部应用程序通过备选 URL 调用红帽单点登录服务器。

流程

运行以下命令为 Red Hat Single Sign-On 服务器设置 固定的 主机名 SPI 供应商:

  1. 使用 SSO_HOSTNAME 环境变量(设为 Red Hat Single Sign-On 服务器)将 Red Hat Single Sign-On for OpenShift 镜像部署 Red Hat Single Sign-On。

    $ oc new-app --template=sso75-x509-https \
      -p SSO_HOSTNAME="rh-sso-server.openshift.example.com"
    Copy to Clipboard Toggle word wrap
  2. 识别红帽单点登录服务的路由名称。

    $ oc get routes
    NAME     HOST/PORT
    sso      sso-sso-app-demo.openshift.example.com
    Copy to Clipboard Toggle word wrap
  3. 更改 host: 字段,使其与上方 SSO_HOSTNAME 环境变量的值指定的主机名匹配。

    注意

    根据需要,在以下命令中调整 rh-sso-server.openshift.example.com 值。

    $ oc patch route/sso --type=json -p '[{"op": "replace", "path": "/spec/host", "value": "rh-sso-server.openshift.example.com"}]'
    Copy to Clipboard Toggle word wrap

    如果成功,上一个命令会返回以下输出:

    route "sso" patched
    Copy to Clipboard Toggle word wrap

3.3. 连接到外部数据库

Red Hat Single Sign-On 可以被配置为连接到外部(至 OpenShift 集群)数据库。为了达到此目的,您需要修改 sso-{database name} Endpoints 对象以指向正确的地址。该过程在 OpenShift 手册 中介绍

最简单的入门方式是从模板部署 Red Hat Single Sign-On,然后修改 Endpoints 对象。您可能还需要更新 DeploymentConfig 中的一些数据源配置变量。完成后,只需推出新的部署即可。

3.4. 使用自定义 JDBC 驱动程序

要连接到任何数据库,必须存在该数据库的 JDBC 驱动程序,并且正确配置了 Red Hat Single Sign-On。目前,镜像中唯一可用的 JDBC 驱动程序是 PostgreSQL JDBC 驱动程序。对于任何其他数据库,您需要使用自定义 JDBC 驱动程序和 CLI 脚本扩展 Red Hat Single Sign-On 镜像,以注册并设置连接属性。以下步骤演示了如何进行此操作,将 MariaDB 驱动程序作为示例。相应地更新其他数据库驱动程序的示例。

流程

  1. 创建一个空目录。
  2. 将 JDBC 驱动程序二进制文件下载到这个目录中。
  3. 在此目录中创建一个新的 Dockerfile 文件,其内容如下:对于其他数据库,将 mariadb-java-client-2.5.4.jar 替换为对应驱动程序的文件名:

    FROM rh-sso-7/sso75-openshift-rhel8:latest
    
    COPY sso-extensions.cli /opt/eap/extensions/
    COPY mariadb-java-client-2.5.4.jar /opt/eap/extensions/jdbc-driver.jar
    Copy to Clipboard Toggle word wrap
  4. 在这个目录中创建一个新的 sso-extensions.cli 文件,其内容如下:根据部署需求,更新它中的变量的值:

    batch
    
    set DB_DRIVER_NAME=mariadb
    set DB_USERNAME=username
    set DB_PASSWORD=password
    set DB_DRIVER=org.mariadb.jdbc.Driver
    set DB_XA_DRIVER=org.mariadb.jdbc.MariaDbDataSource
    set DB_JDBC_URL=jdbc:mariadb://jdbc-host/keycloak
    set DB_EAP_MODULE=org.mariadb
    
    set FILE=/opt/eap/extensions/jdbc-driver.jar
    
    module add --name=$DB_EAP_MODULE --resources=$FILE --dependencies=javax.api,javax.resource.api
    /subsystem=datasources/jdbc-driver=$DB_DRIVER_NAME:add( \
      driver-name=$DB_DRIVER_NAME, \
      driver-module-name=$DB_EAP_MODULE, \
      driver-class-name=$DB_DRIVER, \
      driver-xa-datasource-class-name=$DB_XA_DRIVER \
    )
    /subsystem=datasources/data-source=KeycloakDS:remove()
    /subsystem=datasources/data-source=KeycloakDS:add( \
      jndi-name=java:jboss/datasources/KeycloakDS, \
      enabled=true, \
      use-java-context=true, \
      connection-url=$DB_JDBC_URL, \
      driver-name=$DB_DRIVER_NAME, \
      user-name=$DB_USERNAME, \
      password=$DB_PASSWORD \
    )
    
    run-batch
    Copy to Clipboard Toggle word wrap
  5. 在这个目录中,通过输入以下命令来构建您的镜像,将 project/name:tag 替换为任意名称。Docker 可以替代 podman

    $ podman build -t docker-registry-default/project/name:tag .
    Copy to Clipboard Toggle word wrap
  6. 构建完成后,将镜像推送到 OpenShift 用于部署镜像的 registry。详情请参阅 OpenShift 指南
  7. 如果要将此镜像与您在上一步中构建的自定义 JDBC 驱动程序一起使用,且现有红帽单点登录 OpenShift DeploymentConfig 之前由一些 Red Hat Single Sign-On OpenShift 模板创建,您需要修补 DeploymentConfig 定义。输入以下命令:

    $ oc patch dc/sso --type=json -p '[{"op": "replace", "path": "/spec/triggers/0/imageChangeParams/from/name", "value": "sso75-openshift-rhel8-image-with-custom-jdbc-driver:latest"}]'
    "sso" patched
    Copy to Clipboard Toggle word wrap

    此命令假定红帽单点登录镜像与自定义 JDBC 驱动程序的镜像流名称和标签组合为"sso75-openshift-rhel8-image-with-custom-jdbc-driver:latest"。

Red Hat Single Sign-On 没有提供任何预先配置的管理帐户。需要此管理员帐户登录 主域 管理控制台并执行服务器维护操作,如创建域或用户或注册由红帽单点登录保护的应用程序。

可以创建管理员帐户:

注意

Red Hat Single Sign-On 允许由 Welcome Page Web 表单创建初始管理员帐户,但只有从 localhost 访问 Welcome Page 时,这种管理员帐户创建方法不适用于 OpenShift 镜像。

3.5.1. 使用模板参数创建管理员帐户

在部署 Red Hat Single Sign-On 应用程序模板时,SSO_ADMIN_USERNAMESSO_ADMIN_PASSWORD 参数表示要为 master 域创建 Red Hat Single Sign-On 服务器的用户名和密码。

这两个参数都是必需的。如果没有指定,它们在模板实例化时自动生成并显示为 OpenShift 说明消息。

Red Hat Single Sign-On 服务器的管理员帐户的寿命取决于用于存储 Red Hat Single Sign-On 服务器的数据库的存储类型:

  • 对于内存数据库模式(sso75-httpssso75-x509-https 模板),该帐户存在于特定 Red Hat Single Sign-On pod 的生命周期中(存储的帐户数据在 pod 销毁时丢失),
  • 对于临时数据库模式 sso75-postgresql 模板,该帐户存在于数据库 Pod 的生命周期中。即使 Red Hat Single Sign-On pod 被销毁,存储在的帐户数据也会保留,假设数据库 pod 仍在运行,
  • 对于持久数据库模式(sso75-postgresql-persistentsso75-x509-postgresql-persistent 模板),该帐户存在于用于存放数据库数据的持久性卷生命周期中。这意味着,即使在 Red Hat Single Sign-On 和数据库 pod 都被销毁时,存储的帐户数据也会保留。

部署 Red Hat Single Sign-On 应用程序模板是一种常见做法,以便为应用程序获取对应的 OpenShift 部署配置,然后多次重复利用该部署配置(只要需要实例化新的红帽单点登录应用程序)。

如果是 临时或持久数据库模式,在创建 RH_SSO 服务器管理员帐户后,请在部署新的红帽单点登录应用程序前从部署配置中删除 SSO_ADMIN_USERNAMESSO_ADMIN_PASSWORD 变量。

流程

运行以下命令,以准备以前创建的 Red Hat Single Sign-On 应用程序的部署配置,以便在创建管理员帐户后重复使用:

  1. 识别 Red Hat Single Sign-On 应用的部署配置。

    $ oc get dc -o name
    deploymentconfig/sso
    deploymentconfig/sso-postgresql
    Copy to Clipboard Toggle word wrap
  2. 清除 SSO_ADMIN_USERNAMESSO_ADMIN_PASSWORD 变量设置。

    $ oc set env dc/sso \
      -e SSO_ADMIN_USERNAME="" \
      -e SSO_ADMIN_PASSWORD=""
    Copy to Clipboard Toggle word wrap

在不使用模板的情况下,您可以使用下列命令为 Red Hat Single Sign-On 服务器的主域创建管理员帐户,而无需使用模板。

前提条件

  • Red Hat Single Sign-On 应用 pod 已经启动。

流程

  1. 识别 Red Hat Single Sign-On 应用容器集。

    $ oc get pods
    NAME                     READY     STATUS    RESTARTS   AGE
    sso-12-pt93n             1/1       Running   0          1m
    sso-postgresql-6-d97pf   1/1       Running   0          2m
    Copy to Clipboard Toggle word wrap
  2. 打开远程 shell 会话,连接到适用于 OpenShift 容器的 Red Hat Single Sign-On。

    $ oc rsh sso-12-pt93n
    sh-4.2$
    Copy to Clipboard Toggle word wrap
  3. 使用 add-user-keycloak.sh 脚本,在命令行中为 master 域创建 Red Hat Single Sign-On 服务器管理员帐户。

    sh-4.2$ cd /opt/eap/bin/
    sh-4.2$ ./add-user-keycloak.sh \
            -r master \
            -u sso_admin \
            -p sso_password
    Added 'sso_admin' to '/opt/eap/standalone/configuration/keycloak-add-user.json', restart server to load user
    Copy to Clipboard Toggle word wrap
    注意

    上例中的 'sso_admin' / 'sso_password' 凭证仅用于演示目的。有关如何创建安全用户名和密码的指导,请参考您所在机构中的密码策略。

  4. 重新启动底层 JBoss EAP 服务器实例,以加载新添加的用户帐户。等待服务器正确重启。

    sh-4.2$ ./jboss-cli.sh --connect ':reload'
    {
        "outcome" => "success",
        "result" => undefined
    }
    Copy to Clipboard Toggle word wrap
    警告

    在重启服务器时,只需在运行的 Red Hat Single Sign-On 容器中而非整个容器内重新启动 JBoss EAP 进程。这是因为重启整个容器会从头开始重新创建,而不考虑 master 域的红帽单点登录服务器管理帐户。

  5. 使用上述步骤中创建的凭据,登录 Red Hat Single Sign-On 服务器的 master realm 的管理控制台。在浏览器中,导航到 http://sso-<project-name>.<hostname>/auth/admin for the Red Hat Single Sign-On web 服务器,或导航到 https://secure-sso-<project-name>.<hostname>/auth/admin for the encrypted Red Hat Single Sign-On web 服务器,并指定用于创建管理员用户的用户名和密码。

3.6. 自定义 Red Hat Single Sign-On 镜像的默认行为

您可以更改 Red Hat Single Sign-On 镜像的默认行为,如 enable TechPreview 功能或启用调试。本节论述了如何使用 JAVA_OPTS_APPEND 变量进行此更改。

前提条件

此流程假设之前使用以下模板 部署了 Red Hat Single Sign-On for OpenShift 镜像:

  • sso75-postgresql
  • sso75-postgresql-persistent
  • sso75-x509-postgresql-persistent

流程

您可以使用 OpenShift Web 控制台或 CLI 更改默认行为。

如果使用 OpenShift Web 控制台,请将 JAVA_OPTS_APPEND 变量添加到 sso 部署配置中。例如,要启用 TechPreview 功能,您可以按照如下所示设置 变量:

JAVA_OPTS_APPEND="-Dkeycloak.profile=preview"
Copy to Clipboard Toggle word wrap

如果使用 CLI,则使用以下命令启用 TechPreview 功能,当使用先决条件下提到的模板部署了 Red Hat Single Sign-On pod。

  1. 缩减 Red Hat Single Sign-On pod:

    $ oc get dc -o name
    deploymentconfig/sso
    deploymentconfig/sso-postgresql
    
    $ oc scale --replicas=0 dc sso
    deploymentconfig "sso" scaled
    Copy to Clipboard Toggle word wrap
    注意

    在前面的命令中,将显示 sso-postgresql,因为 PostgreSQL 模板用于部署用于 OpenShift 镜像的 Red Hat Single Sign-On。

  2. 编辑部署配置,以设置 JAVA_OPTS_APPEND 变量。例如,要启用 TechPreview 功能,您可以按照如下所示设置 变量:

    $ oc env dc/sso -e "JAVA_OPTS_APPEND=-Dkeycloak.profile=preview"
    Copy to Clipboard Toggle word wrap
  3. 扩展 Red Hat Single Sign-On pod:

    $ oc scale --replicas=1 dc sso
    deploymentconfig "sso" scaled
    Copy to Clipboard Toggle word wrap
  4. 测试您选择的 TechPreview 功能。

3.7. 部署过程

部署之后,sso75-httpssso75-x509-https 模板创建一个 pod,其中包含数据库和 Red Hat Single Sign-On 服务器。sso75-postgresqlsso75-postgresql-persistentsso75-x509-postgresql-persistent 模板创建两个 pod,一个用于数据库服务器,另一个用于红帽单点登录 Web 服务器。

启动 Red Hat Single Sign-On Web 服务器 pod 后,可在自定义配置的主机名或默认主机名访问它:

  • http://sso-<project-name& gt; . <hostname> /auth/admin: 用于 Red Hat Single Sign-On web 服务器,以及
  • https://secure-sso-<project-name& gt; . <hostname> /auth/admin: 用于加密的 Red Hat Single Sign-On web 服务器。

使用 管理员用户凭据,登录 域的管理控制台。

3.8. Red Hat Single Sign-On 客户端

客户端是请求用户身份验证的红帽单点登录实体。客户端可以是请求 Red Hat Single Sign-On 的应用程序来提供用户身份验证,或者可以发出访问令牌的请求来代表经过身份验证的用户启动服务。如需更多信息,请参阅 Red Hat Single Sign-On 文档中的管理客户端一章

Red Hat Single Sign-On 提供 OpenID-ConnectSAML 客户端协议。

OpenID-Connect 是首选协议,使用三种不同的访问类型:

  • 公共 :对于直接在浏览器中运行的 JavaScript 应用程序,无需服务器配置。
  • 机密 :用于服务器端客户端(如 EAP Web 应用)需要执行浏览器登录。
  • 仅限 bearer-only :对允许 bearer 令牌请求的后端服务使用。

需要在应用程序 web.xml 文件的 &lt ;auth-method > 键中指定客户端类型。此文件在部署时由镜像读取。将 < auth-method> 元素的值设置为:

  • 适用于 OpenID Connect 客户端的 KEYCLOAK
  • KEYCLOAK-SAML 用于 SAML 客户端。

以下是用来配置 OIDC 客户端的应用程序 web.xml 的示例片段:

...
<login-config>
        <auth-method>KEYCLOAK</auth-method>
</login-config>
...
Copy to Clipboard Toggle word wrap

客户端应用程序可使用特定于 eap64-sso-s2ieap71-sso-s2i、Datavirt63-secure-s2i 和 datavirt63-secure-s2i 的变量传递的凭证自动注册到 Red Hat Single Sign-On 域。

另外,您可以通过配置和导出 Red Hat Single Sign-On 客户端适配器来手动注册客户端应用程序,并将其包括在客户端应用程序配置中。

3.8.1.1. 自动 Red Hat Single Sign-On 客户端注册

自动 Red Hat Single Sign-On 客户端注册是由特定于 eap64-sso-s2i、 eap71-sso-s2i datavirt63-secure-s2i 模板的单点登录环境变量来确定。然后,模板中提供的 Red Hat Single Sign-On 凭证用于在部署客户端应用程序期间将客户端注册到 Red Hat Sign-On realm。

Red Hat Single Sign-On 环境变量包括在 eap64-sso-s2ieap71-sso-s2idatavirt63-secure-s2i 模板有:

Expand
变量Description

HOSTNAME_HTTP

http 服务路由的自定义主机名。保留 <application-name>.<project>.<default-domain-suffix> 的默认主机名的空白

HOSTNAME_HTTPS

https 服务路由的自定义主机名。保留 <application-name>.<project>.<default-domain-suffix> 的默认主机名的空白

SSO_URL

Red Hat Single Sign-On web 服务器身份验证地址:https://secure-sso- <project-name> . &lt;hostname>/auth

SSO_REALM

为此流程创建的 Red Hat Single Sign-On 域。

SSO_USERNAME

realm 管理用户 的名称。

SSO_PASSWORD

用户的密码。

SSO_PUBLIC_KEY

域生成的公钥。它位于 Red Hat Single Sign-On 控制台的 Realm SettingsKeys 选项卡中。

SSO_BEARER_ONLY

如果设置为 true,则 OpenID Connect 客户端以 bearer-only 的形式注册。

SSO_ENABLE_CORS

如果设置为 true,则 Red Hat Single Sign-On adapter 启用 Cross-Origin Resource Sharing (CORS)。

如果 Red Hat Single Sign-On 客户端使用 SAML 协议,则需要配置以下附加变量:

Expand
变量Description

SSO_SAML_KEYSTORE_SECRET

用于访问 SAML 密钥存储的机密。默认值为 sso-app-secret

SSO_SAML_KEYSTORE

SAML 密钥存储机密中的密钥存储文件名.默认为 keystore.jks

SSO_SAML_KEYSTORE_PASSWORD

SAML 的密钥存储密码。默认为 mykeystorepass

SSO_SAML_CERTIFICATE_NAME

用于 SAML 的键/证书的别名。默认值为 jboss

请参阅 工作流示例:在 Red Hat Single Sign-On with OpenID-Connect Client 的 Red Hat Single Sign-On 中自动注册 EAP 应用程序,以获取使用 OpenID-Connect 客户端自动客户端注册方法的端到端示例。

3.8.1.2. 手动 Red Hat Single Sign-On 客户端注册

手动 Red Hat Single Sign-On 客户端注册是通过客户端应用程序 ... /configuration/ 目录中是否存在部署文件来确定。这些文件从 Red Hat Single Sign-On Web 控制台中的客户端适配器导出。此文件的名称与 OpenID-Connect 和 SAML 客户端不同:

OpenID-Connect

../configuration/secure-deployments

SAML

../configuration/secure-saml-deployments

在部署应用程序时,这些文件被复制到 standalone-openshift.xml 中的 Red Hat Single Sign-On 适配器配置部分。

有两种将 Red Hat Single Sign-On 适配器配置传递给客户端应用程序的方法:

  • 修改部署文件,使其包含 Red Hat Single Sign-On 适配器配置,以便在部署时将其包含在 standalone-openshift.xml 文件中,或者
  • 在客户端应用程序的 ../WEB-INF 目录中,手动包含 OpenID-Connect keycloak.json 文件,或将 SAML keycloak-saml.xml 文件包含。

请参阅 工作流示例: 手动配置应用程序以使用 Red Hat Single Sign-On 身份验证,使用 SAML 客户端作为手动红帽单点登录客户端注册方法的端到端示例。

Red Hat Single Sign-On 管理支持中的多个字段从外部密码库获取 secret 值,请参阅 服务器管理指南。以下示例演示了如何在 OpenShift 中设置基于文件的纯文本 vault,并将其设置为用于获取 SMTP 密码。

流程

  1. 使用 SSO_VAULT_DIR 环境变量为 vault 指定目录。您可以在部署配置的环境中直接引入 SSO_VAULT_DIR 环境变量。也可以通过在模板中适当位置添加以下代码片段,将其包含在模板中:

    "parameters": [
        ...
        {
            "displayName": "RH-SSO Vault Secret directory",
            "description": "Path to the RH-SSO Vault directory.",
            "name": "SSO_VAULT_DIR",
            "value": "",
            "required": false
        }
        ...
    ]
    
    env: [
        ...
        {
            "name": "SSO_VAULT_DIR",
            "value": "${SSO_VAULT_DIR}"
        }
        ...
    ]
    Copy to Clipboard Toggle word wrap
    注意

    只有在设置了 SSO_VAULT_DIR 环境变量时,才会配置文件 plaintext vault 供应商。

  2. 在 OpenShift 集群中创建 secret:

    $ oc create secret generic rhsso-vault-secrets --from-literal=master_smtp-password=mySMTPPsswd
    Copy to Clipboard Toggle word wrap
  3. 使用 ${SSO_VAULT_DIR} 作为路径将卷挂载到部署配置。对于已在运行的部署:

    $ oc set volume dc/sso --add --mount-path=${SSO_VAULT_DIR} --secret-name=rhsso-vault-secrets
    Copy to Clipboard Toggle word wrap
  4. 创建 pod 后,您可以使用 Red Hat Single Sign-On 配置中的自定义字符串来引用该 secret。例如,要使用本教程中创建的 mySMTPPswd secret,您可以使用 smtp 密码配置中的 master realm 中的 ${vault.smtp-password},在使用时,它将被 mySMTPPsswd 替换。

3.10. 限制

OpenShift 目前不接受来自外部提供程序的 OpenShift 角色映射。如果 Red Hat Single Sign-On 用作 OpenShift 的身份验证网关,在 Red Hat Single Sign-On 中创建的用户必须使用 OpenShift Administrator oc adm policy 命令添加的角色。

例如,允许 Red Hat Single Sign-On-created 用户在 OpenShift 中查看项目命名空间:

$ oc adm policy add-role-to-user view <user-name> -n <project-name>
Copy to Clipboard Toggle word wrap

第 4 章 教程

本章的教程假定您有一个与执行 OpenShift Container Platform 集群安装相同的 OpenShift 实例。

请注意,以下与更新相关:

  • 从早期版本的 Red Hat Single Sign-On for OpenShift 的滚动更新改为版本 7.5.3,因为数据库和缓存不向后兼容。
  • 用于 OpenShift 7.5.3 的红帽单点登录需要 PostgreSQL 服务器版本 13.5。如果您有一个过时的 PostgreSQL 版本,请在更新数据库前更新 PostgreSQL 版本。
  • 从 Red Hat Single Sign-On for OpenShift 版本中的实例在升级前无法运行。它们不能对同一数据库同时运行。
  • 预生成的脚本不可用。它们会根据数据库动态生成。

您有三种更新数据库的选择:

注意

默认情况下,当您首次启动 Red Hat Single Sign-On 7.5.3 时,数据库会自动迁移。

4.1.1. PostgreSQL 版本升级和数据库迁移

Red Hat Single Sign-On 7.5.3 模板中提供的 PostgreSQL 服务器可能与之前使用的版本不同。例如,请考虑这种情况:

  • 您使用 PostgreSQL 服务器的版本 10,运行带有 PostgreSQL 容器集的 Red Hat Single Sign-On for OpenShift 容器镜像。
  • Red Hat Single Sign-On 7.5.3 容器镜像需要 PostgreSQL pod 使用 PostgreSQL 服务器的版本 13.5。

以下流程描述了如何将 PostgreSQL 版本升级到 13.5,然后迁移数据库。

流程

  1. 首先执行数据库级别备份。

    $ oc rsh <POSTGRE-SQL-POD> pg_dump -C <DATABASE> rhsso_db.bak
    Copy to Clipboard Toggle word wrap
  2. 缩减 sso 容器集。

    $ oc scale dc/sso --replicas=0
    Copy to Clipboard Toggle word wrap
  3. 编辑 dc/sso-postgresql.

    $ oc edit dc/sso-postgresql
    Copy to Clipboard Toggle word wrap

    ImageStreamTag 切换到 :postgresql:13-el8

    - imageChangeParams:
          automatic: true
          containerNames:
          - sso-postgresql
          from:
            kind: ImageStreamTag
            name: postgresql:13-el8
            namespace: openshift
    Copy to Clipboard Toggle word wrap
  4. 再次等待 sso-postgresql pod 正在运行并稳定。
  5. 确保 pod sso-postgresql 具有正确的版本。

    $ oc rsh dc/sso-postgresql /bin/bash -c "psql --version"
    psql (PostgreSQL) 13.5
    Copy to Clipboard Toggle word wrap
  6. 取消设置变量 POSTGRESQL_UPGRADE,并再次部署 sso-postgresql pod。

    $ oc set env dc/sso-postgresql POSTGRESQL_UPGRADE-
    Copy to Clipboard Toggle word wrap
  7. 确认 Pod sso-posgresql 正在运行的最后一个时间。
  8. 运行以下命令更新 openshift 项目中的 OpenShift 的 Red Hat Single Sign-On 7.5.3 资源集:

    $ for resource in sso75-image-stream.json \
      sso75-https.json \
      sso75-postgresql.json \
      sso75-postgresql-persistent.json \
      sso75-x509-https.json \
      sso75-x509-postgresql-persistent.json
    do
      oc replace -n openshift --force -f \
      https://raw.githubusercontent.com/jboss-container-images/redhat-sso-7-openshift-image/sso75-dev/templates/${resource}
    done
    Copy to Clipboard Toggle word wrap
  9. 运行以下命令,在 openshift 项目中安装 Red Hat Single Sign-On 7.5.3 OpenShift 镜像流:

    $ oc -n openshift import-image rh-sso-7/sso75-openshift-rhel8:7.5 --from=registry.redhat.io/rh-sso-7/sso75-openshift-rhel8:7.5 --confirm
    Copy to Clipboard Toggle word wrap
  10. 更新现有部署配置中的镜像更改触发器,以引用 Red Hat Single Sign-On 7.5.3 镜像。

    $ oc patch dc/sso --type=json -p '[{"op": "replace", "path": "/spec/triggers/0/imageChangeParams/from/name", "value": "sso75-openshift-rhel8:7.5"}]'
    "sso" patched
    Copy to Clipboard Toggle word wrap
  11. 开始根据镜像更改触发器中定义的最新镜像推出新的 Red Hat Single Sign-On 7.5.3 镜像。

    $ oc rollout latest dc/sso
    Copy to Clipboard Toggle word wrap
  12. sso pod 扩展至一个副本。

    注意

    您可能希望从 dc/sso 中暂时增加存活和就绪度探测阈值和值(以秒为单位)。此步骤在第一次引导时执行数据库升级,这可能需要一些时间。

    $ oc scale --replicas=1 dc/sso
    Copy to Clipboard Toggle word wrap
    注意

    如果您有多个副本,请考虑扩展至一个副本。在 Red Hat Single Sign-On 启动后,您可以将 缩减回原始副本数。

4.1.2. 自动数据库迁移

此流程假设您正在运行一个早期版本的 Red Hat Single Sign-On for OpenShift 镜像,由在一个单独的 pod 中运行的 PostgreSQL 数据库(以临时或持久模式部署)支持。

前提条件

流程

使用以下步骤自动迁移数据库架构:

  1. 识别用于部署容器的部署配置,该配置运行了 OpenShift 镜像的红帽单点登录版本。

    $ oc get dc -o name --selector=application=sso
    deploymentconfig/sso
    deploymentconfig/sso-postgresql
    Copy to Clipboard Toggle word wrap
  2. 停止当前命名空间中为 OpenShift 镜像运行之前版本的 Red Hat Single Sign-On 的所有 pod。它们不能对同一数据库同时运行。

    $ oc scale --replicas=0 dc/sso
    deploymentconfig "sso" scaled
    Copy to Clipboard Toggle word wrap
  3. 更新现有部署配置中的镜像更改触发器,以引用 Red Hat Single Sign-On 7.5.3 镜像。

    $ oc patch dc/sso --type=json -p '[{"op": "replace", "path": "/spec/triggers/0/imageChangeParams/from/name", "value": "sso75-openshift-rhel8:7.5"}]'
    "sso" patched
    Copy to Clipboard Toggle word wrap
  4. 开始根据镜像更改触发器中定义的最新镜像推出新的 Red Hat Single Sign-On 7.5.3 镜像。

    $ oc rollout latest dc/sso
    deploymentconfig "sso" rolled out
    Copy to Clipboard Toggle word wrap
  5. 使用修改后的部署配置部署红帽 Single Sign-On 7.5.3 容器。

    $ oc scale --replicas=1 dc/sso
    deploymentconfig "sso" scaled
    Copy to Clipboard Toggle word wrap
  6. (可选)验证数据库是否已成功更新。

    $ oc get pods --selector=application=sso
    NAME                     READY     STATUS    RESTARTS   AGE
    sso-4-vg21r              1/1       Running   0          1h
    sso-postgresql-1-t871r   1/1       Running   0          2h
    Copy to Clipboard Toggle word wrap
    $ oc logs sso-4-vg21r | grep 'Updating'
    11:23:45,160 INFO  [org.keycloak.connections.jpa.updater.liquibase.LiquibaseJpaUpdaterProvider] (ServerService Thread Pool -- 58) Updating database. Using changelog META-INF/jpa-changelog-master.xml
    Copy to Clipboard Toggle word wrap

4.1.3. 手动数据库迁移

数据库迁移过程更新数据架构,并执行数据操作。在动态生成 SQL 迁移文件之前,这个过程还会停止运行之前版本的 Red Hat Single Sign-On for OpenShift 镜像的所有 pod。

注意

此流程假设您正在运行一个早期版本的 Red Hat Single Sign-On for OpenShift 镜像,该镜像由 PostgreSQL 数据库(以临时或持久模式部署)支持,并在单独的 pod 上运行。

流程

为脚本生成准备环境。

  1. 使用正确的数据源配置 Red Hat Single Sign-On 7.5.3,
  2. standalone-openshift.xml 文件中设置以下配置选项:

    1. initializeEmpty=false,
    2. migrationStrategy=manual, 和
    3. migrationExport to the pod 文件系统中的位置,应存储输出 SQL 迁移文件(例如,migrationExport="${jboss.home.dir}/keycloak-database-update.sql)。

流程

执行以下步骤为数据库生成 SQL 迁移文件:

  1. 准备 OpenShift 数据库迁移作业模板,以生成 SQL 文件。

    $ cat job-to-migrate-db-to-sso75.yaml.orig
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-to-migrate-db-to-sso75
    spec:
      autoSelector: true
      parallelism: 0
      completions: 1
      template:
        metadata:
          name: job-to-migrate-db-to-sso75
        spec:
          containers:
          - env:
            - name: DB_SERVICE_PREFIX_MAPPING
              value: <<DB_SERVICE_PREFIX_MAPPING_VALUE>>
            - name: <<PREFIX>>_JNDI
              value: <<PREFIX_JNDI_VALUE>>
            - name: <<PREFIX>>_USERNAME
              value: <<PREFIX_USERNAME_VALUE>>
            - name: <<PREFIX>>_PASSWORD
              value: <<PREFIX_PASSWORD_VALUE>>
            - name: <<PREFIX>>_DATABASE
              value: <<PREFIX_DATABASE_VALUE>>
            - name: TX_DATABASE_PREFIX_MAPPING
              value: <<TX_DATABASE_PREFIX_MAPPING_VALUE>>
            - name: <<SERVICE_HOST>>
              value: <<SERVICE_HOST_VALUE>>
            - name: <<SERVICE_PORT>>
              value: <<SERVICE_PORT_VALUE>>
            image: <<SSO_IMAGE_VALUE>>
            imagePullPolicy: Always
            name: job-to-migrate-db-to-sso75
            # Keep the pod running after the SQL migration
            # file was generated, so we can retrieve it
            command:
              - "/bin/bash"
              - "-c"
              - "/opt/eap/bin/openshift-launch.sh || sleep 600"
          restartPolicy: Never
    Copy to Clipboard Toggle word wrap
    $ cp job-to-migrate-db-to-sso75.yaml.orig \
         job-to-migrate-db-to-sso75.yaml
    Copy to Clipboard Toggle word wrap
  2. 从用于运行 OpenShift 镜像的 Red Hat Single Sign-On 版本的部署配置中,复制数据源定义和数据库访问凭据,使其适合数据库迁移作业模板的位置。

    使用以下脚本复制 DB_SERVICE_PREFIX_MAPPINGTX_DATABASE_PREFIX_MAPPING 变量值,以及特定于特定数据源的环境变量的值( <PREFIX>_JNDI、<PREFIX>_ USERNAME、<PREFIX &gt;_PASSWORD<PREFIX>_) DATABASE),从名为 sso 的部署配置到名为 job-to-migrate-db-to-sso75.yaml 的数据库作业模板。

    注意

    虽然 DB_SERVICE_PREFIX_MAPPING 环境变量允许 以逗号分隔的 < name>-<database_type>=<PREFIX > triplets 列表 作为其值,本例脚本只接受一个数据源行程序定义用于演示目的。您可以修改 脚本来处理多个数据源定义。

    $ cat mirror_sso_dc_db_vars.sh
    #!/bin/bash
    
    # IMPORTANT:
    #
    # If the name of the SSO deployment config differs from 'sso'
    # or if the file name of the YAML definition of the migration
    # job is different, update the following two variables
    SSO_DC_NAME="sso"
    JOB_MIGRATION_YAML="job-to-migrate-db-to-sso75.yaml"
    
    # Get existing variables of the $SSO_DC_NAME deployment config
    # in an array
    declare -a SSO_DC_VARS=( \
      $(oc set env dc/${SSO_DC_NAME} --list \
      | sed '/^#/d') \
    )
    
    # Get the PREFIX used in the names of environment variables
    PREFIX=$( \
      grep -oP 'DB_SERVICE_PREFIX_MAPPING=[^ ]+' \
      <<< "${SSO_DC_VARS[@]}" \
    )
    PREFIX=${PREFIX##*=}
    
    # Substitute:
    # * <<PREFIX>> with actual $PREFIX value and
    # * <<PREFIX with "<<$PREFIX" value
    # The order in which these replacements are made is important!
    sed -i "s#<<PREFIX>>#${PREFIX}#g" ${JOB_MIGRATION_YAML}
    sed -i "s#<<PREFIX#<<${PREFIX}#g" ${JOB_MIGRATION_YAML}
    
    # Construct the array of environment variables
    # specific to the datasource
    declare -a DB_VARS=(JNDI USERNAME PASSWORD DATABASE)
    
    # Prepend $PREFIX to each item of the datasource array
    DB_VARS=( "${DB_VARS[@]/#/${PREFIX}_}" )
    
    # Add DB_SERVICE_PREFIX_MAPPING and TX_DATABASE_PREFIX_MAPPING
    # variables to datasource array
    DB_VARS=( \
      "${DB_VARS[@]}" \
      DB_SERVICE_PREFIX_MAPPING \
      TX_DATABASE_PREFIX_MAPPING \
    )
    
    # Construct the SERVICE from DB_SERVICE_PREFIX_MAPPING
    SERVICE=$( \
      grep -oP 'DB_SERVICE_PREFIX_MAPPING=[^ ]' \
      <<< "${SSO_DC_VARS[@]}" \
    )
    SERVICE=${SERVICE#*=}
    SERVICE=${SERVICE%=*}
    SERVICE=${SERVICE^^}
    SERVICE=${SERVICE//-/_}
    
    # If the deployment config contains <<SERVICE>>_SERVICE_HOST
    # and <<SERVICE>>_SERVICE_PORT variables, add them to the
    # datasource array. Their values also need to be propagated into
    # yaml definition of the migration job.
    HOST_PATTERN="${SERVICE}_SERVICE_HOST=[^ ]"
    PORT_PATTERN="${SERVICE}_SERVICE_PORT=[^ ]"
    if
      grep -Pq "${HOST_PATTERN}" <<< "${SSO_DC_VARS[@]}" &&
      grep -Pq "${PORT_PATTERN}" <<< "${SSO_DC_VARS[@]}"
    then
      DB_VARS=( \
        "${DB_VARS[@]}" \
        "${SERVICE}_SERVICE_HOST" \
        "${SERVICE}_SERVICE_PORT" \
      )
    # If they are not defined, delete their placeholder rows in
    # yaml definition file (since if not defined they are not
    # expanded which make the yaml definition invalid).
    else
      for KEY in "HOST" "PORT"
      do
        sed -i "/SERVICE_${KEY}/d" ${JOB_MIGRATION_YAML}
      done
    fi
    
    # Substitute:
    # * <<SERVICE_HOST>> with ${SERVICE}_SERVICE_HOST and
    # * <<SERVICE_HOST_VALUE>> with <<${SERVICE}_SERVICE_HOST_VALUE>>
    # The order in which replacements are made is important!
    # Do this for both "HOST" and "PORT"
    for KEY in "HOST" "PORT"
    do
      PATTERN_1="<<SERVICE_${KEY}>>"
      REPL_1="${SERVICE}_SERVICE_${KEY}"
      sed -i "s#${PATTERN_1}#${REPL_1}#g" ${JOB_MIGRATION_YAML}
      PATTERN_2="<<SERVICE_${KEY}_VALUE>>"
      REPL_2="<<${SERVICE}_SERVICE_${KEY}_VALUE>>"
      sed -i "s#${PATTERN_2}#${REPL_2}#g" ${JOB_MIGRATION_YAML}
    done
    
    # Propagate the values of the datasource array items into
    # yaml definition of the migration job
    for VAR in "${SSO_DC_VARS[@]}"
    do
      IFS=$'=' read KEY VALUE <<< $VAR
      if grep -q $KEY <<< ${DB_VARS[@]}
      then
        KEY+="_VALUE"
        # Enwrap integer port value with double quotes
        if [[ ${KEY} =~ ${SERVICE}_SERVICE_PORT_VALUE ]]
        then
          sed -i "s#<<${KEY}>>#\"${VALUE}\"#g" ${JOB_MIGRATION_YAML}
        # Character values do not need quotes
        else
          sed -i "s#<<${KEY}>>#${VALUE}#g" ${JOB_MIGRATION_YAML}
        fi
        # Verify that the value has been successfully propagated.
        if
          grep -q '(JNDI|USERNAME|PASSWORD|DATABASE)' <<< "${KEY}" &&
          grep -q "<<PREFIX${KEY#${PREFIX}}" ${JOB_MIGRATION_YAML} ||
          grep -q "<<${KEY}>>" ${JOB_MIGRATION_YAML}
        then
          echo "Failed to update value of ${KEY%_VALUE}! Aborting."
          exit 1
        else
          printf '%-60s%-40s\n' \
                 "Successfully updated ${KEY%_VALUE} to:" \
                 "$VALUE"
        fi
      fi
    done
    Copy to Clipboard Toggle word wrap

    运行脚本。

    $ chmod +x ./mirror_sso_dc_db_vars.sh
    $ ./mirror_sso_dc_db_vars.sh
    Successfully updated DB_SERVICE_PREFIX_MAPPING to:          sso-postgresql=DB
    Successfully updated DB_JNDI to:                            java:jboss/datasources/KeycloakDS
    Successfully updated DB_USERNAME to:                        userxOp
    Successfully updated DB_PASSWORD to:                        tsWNhQHK
    Successfully updated DB_DATABASE to:                        root
    Successfully updated TX_DATABASE_PREFIX_MAPPING to:         sso-postgresql=DB
    Copy to Clipboard Toggle word wrap
  3. 使用 预先配置的来源构建 Red Hat Single Sign- On 7.5.3 数据库迁移镜像,并等待构建完成。

    $ oc get is -n openshift | grep sso75 | cut -d ' ' -f1
    sso75-openshift-rhel8
    Copy to Clipboard Toggle word wrap
    $ oc new-build sso75-openshift-rhel8:7.5~https://github.com/iankko/openshift-examples.git#KEYCLOAK-8500 \
      --context-dir=sso-manual-db-migration \
      --name=sso75-db-migration-image
    --> Found image bf45ac2 (7 days old) in image stream "openshift/sso75-openshift-rhel8" under tag "7.5" for "sso75-openshift-rhel8:7.5"
    
        Red Hat SSO 7.5.3
        ---------------
        Platform for running Red Hat SSO
    
        Tags: sso, sso7, keycloak
    
        * A source build using source code from https://github.com/iankko/openshift-examples.git#KEYCLOAK-8500 will be created
          * The resulting image will be pushed to image stream "sso75-db-migration-image:latest"
          * Use 'start-build' to trigger a new build
    
    --> Creating resources with label build=sso75-db-migration-image ...
        imagestream "sso75-db-migration-image" created
        buildconfig "sso75-db-migration-image" created
    --> Success
        Build configuration "sso75-db-migration-image" created and build triggered.
        Run 'oc logs -f bc/sso75-db-migration-image' to stream the build progress.
    Copy to Clipboard Toggle word wrap
    $ oc logs -f bc/sso75-db-migration-image --follow
    Cloning "https://github.com/iankko/openshift-examples.git#KEYCLOAK-8500" ...
    ...
    Push successful
    Copy to Clipboard Toggle word wrap
  4. 通过引用内置的 sso75-db-migration-image 镜像,更新数据库迁移作业(job-to-migrate-db-to-sso75.yaml)的模板。

    1. 获取镜像的 docker pull 引用。

      $ PULL_REF=$(oc get istag -n $(oc project -q) --no-headers | grep sso75-db-migration-image | tr -s ' ' | cut -d ' ' -f 2)
      Copy to Clipboard Toggle word wrap
    2. 将作业模板的 <<SSO_IMAGE_VALUE>> 字段替换为 pull 规格。

      $ sed -i "s#<<SSO_IMAGE_VALUE>>#$PULL_REF#g" job-to-migrate-db-to-sso75.yaml
      Copy to Clipboard Toggle word wrap
    3. 验证字段是否已更新。
  5. 从作业模板实例化数据库迁移作业。

    $ oc create -f job-to-migrate-db-to-sso75.yaml
    job "job-to-migrate-db-to-sso75" created
    Copy to Clipboard Toggle word wrap
    重要

    数据库迁移过程处理数据 schema 更新并执行相关的数据,因此在动态生成 SQL 迁移文件前,停止所有运行 Red Hat Single Sign-On for OpenShift 镜像的 pod。

  6. 识别用于部署容器的部署配置,该配置运行了 OpenShift 镜像的红帽单点登录版本。

    $ oc get dc -o name --selector=application=sso
    deploymentconfig/sso
    deploymentconfig/sso-postgresql
    Copy to Clipboard Toggle word wrap
  7. 停止当前命名空间中为 OpenShift 镜像运行之前版本的 Red Hat Single Sign-On 的所有 pod。

    $ oc scale --replicas=0 dc/sso
    deploymentconfig "sso" scaled
    Copy to Clipboard Toggle word wrap
  8. 运行数据库迁移作业,并等待 pod 正确运行。

    $ oc get jobs
    NAME                            DESIRED   SUCCESSFUL   AGE
    job-to-migrate-db-to-sso75   1         0            3m
    Copy to Clipboard Toggle word wrap
    $ oc scale --replicas=1 job/job-to-migrate-db-to-sso75
    job "job-to-migrate-db-to-sso75" scaled
    Copy to Clipboard Toggle word wrap
    $ oc get pods
    NAME                                  READY     STATUS      RESTARTS   AGE
    sso-postgresql-1-n5p16                1/1       Running     1          19h
    job-to-migrate-db-to-sso75-b87bb   1/1       Running     0          1m
    sso75-db-migration-image-1-build      0/1       Completed   0          27m
    Copy to Clipboard Toggle word wrap
    注意

    默认情况下,数据库迁移作业在生成迁移文件后在 600 秒后自动 终止。您可以调整这个时间段。

  9. 从 pod 获取动态生成的 SQL 数据库迁移文件。

    $ mkdir -p ./db-update
    $ oc rsync job-to-migrate-db-to-sso75-b87bb:/opt/eap/keycloak-database-update.sql ./db-update
    receiving incremental file list
    keycloak-database-update.sql
    
    sent 30 bytes  received 29,726 bytes  59,512.00 bytes/sec
    total size is 29,621  speedup is 1.00
    Copy to Clipboard Toggle word wrap
  10. 检查 keycloak-database-update.sql 文件,以便在手动数据库更新过程中对 Red Hat Single Sign-On 7.5.3 版本进行的更改。
  11. 手动应用数据库更新。

    • 如果运行一些之前版本的 Red Hat Single Sign-On for OpenShift 镜像,则由以临时或持久模式部署的 PostgreSQL 数据库支持,请在单独的 pod 上运行:

      1. 将生成的 SQL 迁移文件复制到 PostgreSQL pod。

        $ oc rsync --no-perms=true ./db-update/ sso-postgresql-1-n5p16:/tmp
        sending incremental file list
        
        sent 77 bytes  received 11 bytes  176.00 bytes/sec
        total size is 26,333  speedup is 299.24
        Copy to Clipboard Toggle word wrap
      2. 启动连接到 PostgreSQL pod 的 shell 会话。

        $ oc rsh sso-postgresql-1-n5p16
        sh-4.2$
        Copy to Clipboard Toggle word wrap
      3. 使用 psql 工具手动应用数据库更新。

        sh-4.2$ alias psql="/opt/rh/rh-postgresql95/root/bin/psql"
        sh-4.2$ psql --version
        psql (PostgreSQL) 9.5.4
        sh-4.2$ psql -U <PREFIX>_USERNAME -d <PREFIX>_DATABASE -W -f /tmp/keycloak-database-update.sql
        Password for user <PREFIX>_USERNAME:
        INSERT 0 1
        INSERT 0 1
        ...
        Copy to Clipboard Toggle word wrap
        重要

        <PREFIX>_USERNAME<PREFIX>_DATABASE 替换为 上一节中 检索到的实际数据库凭证。另外,在提示时使用 & lt;PREFIX>_PASSWORD 作为数据库的密码。

      4. 关闭与 PostgreSQL pod 的 shell 会话。继续 更新镜像更改触发器步骤
  1. 更新现有部署配置中的镜像更改触发器,以引用 Red Hat Single Sign-On 7.5.3 镜像。

    $ oc patch dc/sso --type=json -p '[{"op": "replace", "path": "/spec/triggers/0/imageChangeParams/from/name", "value": "sso75-openshift-rhel8:7.5"}]'
    "sso" patched
    Copy to Clipboard Toggle word wrap
  2. 开始根据镜像更改触发器中定义的最新镜像推出新的 Red Hat Single Sign-On 7.5.3 镜像。

    $ oc rollout latest dc/sso
    deploymentconfig "sso" rolled out
    Copy to Clipboard Toggle word wrap
  3. 使用修改后的部署配置部署红帽 Single Sign-On 7.5.3 容器。

    $ oc scale --replicas=1 dc/sso
    deploymentconfig "sso" scaled
    Copy to Clipboard Toggle word wrap

4.2. 跨环境迁移红帽单点登录服务器数据库

本教程重点介绍将 Red Hat Single Sign-On 服务器数据库从一个环境迁移到另一个环境或迁移到其他数据库。

在 Red Hat Single Sign-On 7.5.3 数据库引导中触发了 Red Hat Single Sign-On 7.5.3 数据库的导出和导入,并通过 Java 系统属性传递其参数。这意味着在一个 Red Hat Single Sign-On 服务器引导时,只执行可能的迁移操作之一、导出导入

前提条件

流程

  1. 登录 OpenShift Web 控制台并选择 sso-app-demo 项目空间。
  2. Add to project 列出默认镜像流和模板。
  3. 使用 Filter by keyword 搜索栏,将列表限制为与 sso 匹配的列表。您可能需要点击 See all 以显示所需的应用程序模板。
  4. 选择 sso75-postgresql Red Hat Single Sign-On 应用程序模板。在部署模板时,请确保 保持 SSO_REALM 变量未设置 (默认值)。

    警告

    当在 Red Hat Single Sign-On for OpenShift 镜像上设置了 SSO_REALM 配置变量时,将执行数据库导入,以创建 变量中请求的 Red Hat Single Sign-On 服务器域。要使数据库导出正确执行,无法在此类镜像上同时定义 SSO_REALM 配置变量。

  5. 单击 Create 以部署应用模板并启动 pod 部署。这可能需要几分钟时间。

    然后,使用 管理员帐户 访问 Red Hat Single Sign-On Web 控制台 https://secure-sso- &lt;sso-app-demo& gt; . <openshift32.example.com> /auth/admin

    注意

    这个示例工作流使用自生成的 CA 为演示目的提供端到端工作流。访问 Red Hat Single Sign-On Web 控制台将会显示不安全的连接警告。
    对于生产环境,红帽建议您使用从验证的证书颁发机构购买的 SSL 证书。

4.2.2. (可选)创建要导出的额外域和用户

在执行 Red Hat Single Sign-On 7.5.3 服务器数据库导出时,只会导出数据库中当前的域和用户。如果导出的 JSON 文件还应包含额外的红帽单点登录域和用户,则需要创建它们。使用这些步骤。

创建数据库后,可以导出数据库。

前提条件

  • 创建新的域和用户。

流程

  1. 获取 Red Hat Single Sign-On 部署配置,并将它缩减为零。

    $ oc get dc -o name
    deploymentconfig/sso
    deploymentconfig/sso-postgresql
    
    $ oc scale --replicas=0 dc sso
    deploymentconfig "sso" scaled
    Copy to Clipboard Toggle word wrap
  2. 指示在 Red Hat Single Sign-On 7.5.3 服务器上部署的 Red Hat Single Sign-On 7.5.3 服务器,以便在 Red Hat Single Sign-On 服务器引导时执行数据库导出。

    $ oc set env dc/sso \
      -e "JAVA_OPTS_APPEND= \
        -Dkeycloak.migration.action=export \
        -Dkeycloak.migration.provider=singleFile \
        -Dkeycloak.migration.file=/tmp/demorealm-export.json"
    Copy to Clipboard Toggle word wrap
  3. 扩展 Red Hat Single Sign-On 部署配置备份。这将启动 Red Hat Single Sign-On 服务器并导出其数据库。

    $ oc scale --replicas=1 dc sso
    deploymentconfig "sso" scaled
    Copy to Clipboard Toggle word wrap
  4. (可选)验证导出是否成功。

    $ oc get pods
    NAME                     READY     STATUS    RESTARTS   AGE
    sso-4-ejr0k              1/1       Running   0          27m
    sso-postgresql-1-ozzl0   1/1       Running   0          4h
    
    $ oc logs sso-4-ejr0k | grep 'Export'
    09:24:59,503 INFO  [org.keycloak.exportimport.singlefile.SingleFileExportProvider] (ServerService Thread Pool -- 57) Exporting model into file /tmp/demorealm-export.json
    09:24:59,998 INFO  [org.keycloak.services] (ServerService Thread Pool -- 57) KC-SERVICES0035: Export finished successfully
    Copy to Clipboard Toggle word wrap

4.2.4. 检索并导入导出的 JSON 文件

流程

  1. 从 pod 检索 Red Hat Single Sign-On 数据库的 JSON 文件。

    $ oc get pods
    NAME                     READY     STATUS    RESTARTS   AGE
    sso-4-ejr0k              1/1       Running   0          2m
    sso-postgresql-1-ozzl0   1/1       Running   0          4h
    
    $ oc rsync sso-4-ejr0k:/tmp/demorealm-export.json .
    Copy to Clipboard Toggle word wrap
  2. (可选)将 Red Hat Single Sign-On 数据库的 JSON 文件导入到其他环境中运行的红帽单点登录服务器。

    注意

    要导入到不是由在 OpenShift 上运行的红帽单点登录服务器,请参阅 导入和导出数据库

    当 Red Hat Single Sign-On 服务器作为 OpenShift 上的 Red Hat Single Sign-On 7.5.3 容器运行时,使用 Admin Console Export/Import 功能将资源从以前导出的 JSON 文件导入到红帽单点登录服务器数据库中。

    1. 使用用于创建管理员用户的凭据,登录 Red Hat Single Sign-On 服务器的 master realm 的管理控制台。在浏览器中,导航到 http://sso-<project-name>.<hostname>/auth/admin for the Red Hat Single Sign-On web 服务器,或导航到 https://secure-sso-<project-name>.<hostname>/auth/admin for the encrypted Red Hat Single Sign-On web 服务器。
    2. 在侧边栏的顶部,选择 Red Hat Single Sign-On 域的名称、用户、客户端、域角色和客户端角色。这个示例使用 master 域。
    3. 单击侧栏底部的 Manage 部分下的 Import 链接。
    4. 在打开的页面中,单击 Select file,然后指定本地文件系统中导出的 demorealm-export.json JSON 文件的位置。
    5. Import from realm 下拉菜单中选择要从中导入数据的 Red Hat Single Sign-On realm 的名称。这个示例使用 master 域。
    6. 选择应导入哪些用户、客户端、域角色和客户端角色(默认为导入)。
    7. 选择要执行的策略,当资源已存在时(一个 FailSkipOverwrite)。

      注意

      如果当前数据库中已存在具有相同标识符的对象,尝试导入对象(用户、客户端、域角色或客户端角色)。使用 Skip 策略导入 demorealm-export.json 文件中存在的对象,但当前数据库中不存在。

    8. Import 执行导入。

      当将对象从非主域导入到 master 域时,点 Import 按钮后,有时可能会遇到类似如下的错误:

      Example of Possible Error Message when Performing Partial Import from Previously Exported JSON File

      在这种情况下,首先需要创建缺少的客户端,将 Access Type 设置为仅限 bearer-only。这些客户端可以通过从创建导出 JSON 文件的来源 Red Hat Single Sign-On 服务器手动复制到目标 Red Hat Single Sign-On 服务器(其中导入 JSON 文件)来创建这些客户端。创建必要的客户端后,再次单击 导入 按钮。

      为抑制 上述 错误消息,需要创建缺少的 realm-management 客户端、仅 bearer-only Access Type,然后再次单击 Import 按钮。

      对于 Skip import 策略,新添加的对象被标记为 ADDED,被跳过的对象被标记为 SKIPPED,在导入结果页面中的 操作 列中。

      如果您选择了 Admin Console 导入,您可以覆盖资源(覆盖 策略)。在生产系统中,谨慎使用此功能。

将 OpenShift 3.11 配置为使用 Red Hat Single Sign-On 部署作为 OpenShift 的授权网关。

这个示例添加了 Red Hat Single Sign-On 作为身份验证方法,以及安装 OpenShift Container Platform 集群过程中配置的身份提供程序。配置完成后,Red Hat Single Sign-On 方法也将可用(与配置的身份提供程序一致)供用户登录 OpenShift Web 控制台。

4.3.1. 配置红帽单点登录凭证

前提条件

流程

使用 Red Hat Single Sign-On 部署期间创建的 xref:sso-On web 服务器 https://secure-sso-sso-app-demo 登录加密的 Red Hat Single Sign-On web 服务器。openshift32.example.com/auth/admin 使用 Red Hat Single Sign-On 部署期间创建的 xref:sso-administrator-setup[administrator 帐户。

创建 Realm

  1. 将光标悬停在侧边栏顶部的 realm 命名空间(默认为 Master),然后单击 Add Realm
  2. 输入域名称(本例使用 OpenShift),然后单击 Create

创建用户

创建一个测试用户,可用于演示启用了 Red Hat Single Sign-On 的 OpenShift 登录:

  1. 单击 Manage 栏中的 Users,以查看该域的用户信息。
  2. 单击 添加用户
  3. 输入有效 用户名 (本例使用 testuser)和任何其他可选信息,然后单击 Save
  4. 编辑用户配置:

    1. 单击用户空间中的 Credentials 选项卡,并为该用户输入密码。
    2. 确保 Temporary Password 选项设为 Off,以使其不会在稍后提示输入密码,然后单击 Reset Password 以设置用户密码。弹出窗口提示其他确认。

创建并配置 OpenID-Connect 客户端

  1. 单击 Manage 栏中的 Clients,再单击 Create
  2. 输入 客户端 ID。这个示例使用 openshift-demo
  3. 从下拉菜单中选择一个 Client Protocol (本例使用 openid-connect),然后点击 Save。您将进入 openshift-demo 客户端的配置 Settings 页面。
  4. Access Type 下拉菜单中选择 confidential。这是服务器端应用程序的访问类型。
  5. Valid Redirect URIs 对话框中,输入 OpenShift Web 控制台的 URI,本例中为 https://openshift.example.com:8443/*

在下一节的 OpenShift 主控机上配置 OpenID-Connect 的客户端 Secret。现在,您可以在 Credentials 标签页下复制它。这个 secret 是 <7b0384a2-b832-16c5-9d73-2957842e89h7>。

登录 OpenShift 主控机 CLI。

前提条件

您必须具有编辑 /etc/origin/master/master-config.yaml 文件的权限。

流程

  1. 编辑 /etc/origin/master/master-config.yaml 文件并找到 identityProviders 部分。例如,如果 OpenShift 主控机配置了 HTPassword 身份提供程序,则 identityProviders 部分类似如下:

    identityProviders:
    - challenge: true
      login: true
      name: htpasswd_auth
      provider:
        apiVersion: v1
        file: /etc/origin/openshift-passwd
        kind: HTPasswdPasswordIdentityProvider
    Copy to Clipboard Toggle word wrap

    添加 Red Hat Single Sign-On 作为二级身份提供程序,其内容类似于以下代码片段:

    - name: rh_sso
      challenge: false
      login: true
      mappingMethod: add
      provider:
        apiVersion: v1
        kind: OpenIDIdentityProvider
        clientID: openshift-demo
        clientSecret: 7b0384a2-b832-16c5-9d73-2957842e89h7
        ca: xpaas.crt
        urls:
          authorize: https://secure-sso-sso-app-demo.openshift32.example.com/auth/realms/OpenShift/protocol/openid-connect/auth
          token: https://secure-sso-sso-app-demo.openshift32.example.com/auth/realms/OpenShift/protocol/openid-connect/token
          userInfo: https://secure-sso-sso-app-demo.openshift32.example.com/auth/realms/OpenShift/protocol/openid-connect/userinfo
        claims:
          id:
          - sub
          preferredUsername:
          - preferred_username
          name:
          - name
          email:
          - email
    Copy to Clipboard Toggle word wrap
    1. clientSecret 的 Red Hat Single Sign-On Secret hash 位于 Red Hat Single Sign-On web 控制台中: Clientsopenshift-demoCredentials
    2. 通过 Red Hat Single Sign-On 应用发出请求,可以找到 urls 的端点。例如:

      <curl -k https://secure-sso-sso-app-demo.openshift32.example.com/auth/realms/OpenShift/.well-known/openid-configuration | python -m json.tool>
      Copy to Clipboard Toggle word wrap

      响应包括 authorization_endpointtoken_endpointuserinfo_endpoint

    3. 这个示例工作流使用自生成的 CA 为演示目的提供端到端工作流。因此,ca 作为 < ca: xpaas.crt> 提供。此 CA 证书还必须复制到 /etc/origin/master 文件夹。如果使用从验证的证书颁发机构购买的证书,则不需要这样做。
  2. 保存配置并重启 OpenShift master:

    $ systemctl restart atomic-openshift-master
    Copy to Clipboard Toggle word wrap

4.3.3. 登录 OpenShift

流程

  1. 导航到 OpenShift Web 控制台,本例中为 https://openshift.example.com:8443/console

    OpenShift 登录页面现在提供了使用 htpasswd_authrh-sso 身份提供程序登录的选项?前者仍然可用,因为它存在于 /etc/origin/master/master-config.yaml 中。

  2. 选择 rh-sso,再使用在红帽单点登录中创建的 testuser 用户登录 OpenShift。

    testuser 直到在 OpenShift CLI 中添加项目前,没有项目可见。这是在 OpenShift 中提供用户特权的唯一方法,因为它目前不接受外部角色映射。

  3. 要为 sso-app-demo 提供 testuser 视图 特权,请使用 OpenShift CLI:

    $ oc adm policy add-role-to-user view testuser -n sso-app-demo
    Copy to Clipboard Toggle word wrap

要在 OpenShift 上部署现有应用,您可以使用二进制源功能。

以下示例使用 app-jee-jspservice-jee-jaxrs Quickstart 部署 EAP 6.4 / 7.1 / 7.1 / 7.1 JSP 服务应用,此应用使用红帽单点登录进行身份验证。

前提条件

  • OpenShift 镜像的 Red Hat Single Sign-On 之前使用以下模板之一进行部署:
  • sso75-postgresql
  • sso75-postgresql-persistent
  • sso75-x509-postgresql-persistent

EAP 6.4 / 7.1 / 7.1 服务应用需要专用的红帽单点登录域、用户名和密码才能使用 Red Hat Single Sign-On 进行身份验证。在部署了 Red Hat Single Sign-On for OpenShift 镜像后执行以下步骤:

创建 Red Hat Single Sign-On Realm

  1. 登录红帽单点登录服务器的管理控制台。

    https://secure-sso-sso-app-demo.openshift.example.com/auth/admin

    使用 Red Hat Single Sign-On 管理员用户 的凭据

  2. 将光标悬停在侧边栏顶部的 realm 命名空间(默认为 Master),然后单击 Add Realm
  3. 输入域名称(本例使用 demo),然后单击 Create

复制公钥

在新创建的 demo 域中,单击 Keys 选项卡,然后选择 Active 选项卡,然后复制已生成的 RSA 类型的公钥。

注意

默认情况下,Red Hat Single Sign-On for OpenShift 镜像版本 7.5.3 生成多个密钥,如 HS256RS256AES。要为 OpenShift 7.5.3 镜像复制 Red Hat Single Sign-On 的公钥信息,请单击 Keys 选项卡,然后选择 Active 选项卡,然后单击 键表中的公钥 按钮,其中密钥与 RSA 匹配。然后选择并复制显示的弹出窗口的内容。

稍后需要有关公钥的信息,以便部署启用了 Red Hat Single Sign-On 的 EAP 6.4 / 7.1 JSP 应用。???

创建红帽单点登录角色

service-jee-jaxrs quickstart 通过该服务公开三个端点:

  • 公共 - 不需要身份验证。
  • 安全 - 可以被具有用户角色的用户调用。
  • admin - 可由具有 admin 角色的用户调用。

在 Red Hat Single Sign-On 中创建用户admin 角色。这些角色将分配给红帽单点登录应用程序用户,以对用户应用程序的访问权限进行身份验证。

  1. 单击 Configure 栏中的 Roles,以列出此域的角色。

    注意

    这是一个新域,因此只有默认(offline_accessuma_authorization)角色。

  2. 单击 Add Role
  3. 输入角色名称(用户),然后单击 Save

admin 角色重复上述步骤。

创建 Red Hat Single Sign-On Realm Management 用户

  1. 单击 Manage 栏中的 Users,以查看该域的用户信息。
  2. Add User。
  3. 输入有效 用户名 (本例使用 user appuser),然后单击 Save
  4. 编辑用户配置:

    1. 单击用户空间中的 Credentials 选项卡,再输入用户的密码(本例使用密码 apppassword)。
    2. 确保 Temporary Password 选项设为 Off,以使其不会在稍后提示输入密码,然后单击 Reset Password 以设置用户密码。弹出窗口将提示您确认。
4.4.1.2. 将用户角色分配给域管理用户

执行以下步骤将之前创建的 appuser 用户 与红帽 Single Sign-On 角色关联:

  1. 单击 Role 映射,以列出域和客户端角色配置。在 Available Roles 中,选择之前创建的 用户角色,然后点击 Add selected>
  2. 单击 Client Roles,从列表中选择 realm-management 条目,再选择 Available Roles 列表中的每条记录。

    注意

    您可以通过按住 Ctrl 键并同时点击第一个 模拟 条目来一次性选择多个项目。在保持 Ctrl 键和左键键时,请将列表的末尾移至 view-clients 条目,并确保选中每个记录。

  3. Add selected > 将角色分配给客户端。

流程

  1. 为 EAP 6.4 / 7.1 / 7.1 JSP 应用创建一个新项目。

    $ oc new-project eap-app-demo
    Copy to Clipboard Toggle word wrap
  2. view 角色添加到 default 服务帐户。这可让服务帐户查看 eap-app-demo 命名空间中的所有资源,这是管理集群所必需的。

    $ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
    Copy to Clipboard Toggle word wrap
  3. EAP 模板需要 SSL 密钥存储和 JGroups 密钥存储 :本例使用 keytool (由 Java Development Kit 附带的软件包)为这些密钥存储生成自签名证书。

    1. 为 SSL 密钥存储生成安全密钥(本示例将 密码 用作密钥存储的密码)。

      $ keytool -genkeypair \
      -dname "CN=secure-eap-app-eap-app-demo.openshift.example.com" \
      -alias https \
      -storetype JKS \
      -keystore eapkeystore.jks
      Copy to Clipboard Toggle word wrap
    2. 为 JGroups 密钥存储生成安全密钥(本示例将 密码 用作密钥存储的密码)。

      $ keytool -genseckey \
      -alias jgroups \
      -storetype JCEKS \
      -keystore eapjgroups.jceks
      Copy to Clipboard Toggle word wrap
    3. 使用 SSL 和 JGroup 密钥存储文件,为 OpenShift 机密生成 EAP 6.4 / 7.1。

      $ oc create secret generic eap-ssl-secret --from-file=eapkeystore.jks
      Copy to Clipboard Toggle word wrap
      $ oc create secret generic eap-jgroup-secret --from-file=eapjgroups.jceks
      Copy to Clipboard Toggle word wrap
    4. 将 EAP 应用机密添加到 default 服务帐户。

      $ oc secrets link default eap-ssl-secret eap-jgroup-secret
      Copy to Clipboard Toggle word wrap
4.4.1.4. 部署 EAP 6.4 / 7.1 JSP 应用的二进制构建

流程

  1. 克隆源代码。

    $ git clone https://github.com/keycloak/keycloak-quickstarts.git
    Copy to Clipboard Toggle word wrap

    配置 Red Hat JBoss Middleware Maven 软件仓库

  2. 构建 service-jee-jaxrsapp-jee-jsp 应用程序。

    1. 构建 service-jee-jaxrs 应用。

      $ cd keycloak-quickstarts/service-jee-jaxrs/
      Copy to Clipboard Toggle word wrap
      $ mvn clean package -DskipTests
      [INFO] Scanning for projects...
      [INFO]
      [INFO] ------------------------------------------------------------------------
      [INFO] Building Keycloak Quickstart: service-jee-jaxrs 3.1.0.Final
      [INFO] ------------------------------------------------------------------------
      ...
      [INFO] ------------------------------------------------------------------------
      [INFO] BUILD SUCCESS
      [INFO] ------------------------------------------------------------------------
      [INFO] Total time: 2.153 s
      [INFO] Finished at: 2017-06-26T12:06:12+02:00
      [INFO] Final Memory: 25M/241M
      [INFO] ------------------------------------------------------------------------
      Copy to Clipboard Toggle word wrap
    2. 注释掉 maven-enforcer-plugin 插件的 app-jee-jsp/config/keycloak.json 要求并构建 app-jee-jsp 应用。

      service-jee-jaxrs]$ cd ../app-jee-jsp/
      Copy to Clipboard Toggle word wrap
      app-jee-jsp]$ sed -i /\<executions\>/s/^/\<\!--/ pom.xml
      Copy to Clipboard Toggle word wrap
      app-jee-jsp]$ sed -i '/\(<\/executions>\)/a\-->' pom.xml
      Copy to Clipboard Toggle word wrap
      app-jee-jsp]$ mvn clean package -DskipTests
      [INFO] Scanning for projects...
      [INFO]
      [INFO] ------------------------------------------------------------------------
      [INFO] Building Keycloak Quickstart: app-jee-jsp 3.1.0.Final
      [INFO] ------------------------------------------------------------------------
      ...
      [INFO] Building war: /tmp/github/keycloak-quickstarts/app-jee-jsp/target/app-jsp.war
      [INFO] ------------------------------------------------------------------------
      [INFO] BUILD SUCCESS
      [INFO] ------------------------------------------------------------------------
      [INFO] Total time: 3.018 s
      [INFO] Finished at: 2017-06-26T12:22:25+02:00
      [INFO] Final Memory: 35M/310M
      [INFO] ------------------------------------------------------------------------
      Copy to Clipboard Toggle word wrap
      重要

      app-jee-jsp 快速入门要求您配置适配器配置文件,并且适配器配置文件(keycloak.json)位于快速启动的 config/ 目录中,以成功构建快速入门。但本例稍后通过为 EAP 6.4 / 7.1 用于 OpenShift 映像的所选环境变量配置适配器,因此此时不需要指定 keycloak.json 适配器配置文件的形式。

  1. 在本地文件系统中准备目录结构。

    主二进制构建目录的 deployments/ 子目录中的应用存档直接复制到 OpenShift 上构建的镜像的 标准部署目录中。若要部署应用,包含 Web 应用数据的目录层次结构必须正确结构化。

    在本地文件系统和其中的 deployments/ 子目录中为二进制构建创建主目录。将之前构建的 WAR 存档(由 service-jee-jaxrsapp-jee-jsp Quickstart)复制到 deployments/ 子目录:

    app-jee-jsp]$ ls
    config  pom.xml  README.md  src  target
    Copy to Clipboard Toggle word wrap
    app-jee-jsp]$ mkdir -p sso-eap7-bin-demo/deployments
    Copy to Clipboard Toggle word wrap
    app-jee-jsp]$ cp target/app-jsp.war sso-eap7-bin-demo/deployments/
    Copy to Clipboard Toggle word wrap
    app-jee-jsp]$ cp ../service-jee-jaxrs/target/service.war sso-eap7-bin-demo/deployments/
    Copy to Clipboard Toggle word wrap
    app-jee-jsp]$ tree sso-eap7-bin-demo/
    sso-eap7-bin-demo/
    |__ deployments
        |__ app-jsp.war
        |__ service.war
    
    1 directory, 2 files
    Copy to Clipboard Toggle word wrap
    注意

    标准部署目录的位置取决于用于部署应用的底层基础镜像。请查看下表:

    Expand
    表 4.1. Deployments 目录的标准位置
    Base Image (s)的底层名称Deployments 目录的标准位置

    EAP for OpenShift 6.4 and 7.1

    $JBOSS_HOME/standalone/deployments

    用于 OpenShift 的 Java S2I

    /deployments

    JWS for OpenShift

    $JWS_HOME/webapps

  2. 确定 EAP 6.4 / 7.1 映像的镜像流。

    $ oc get is -n openshift | grep eap | cut -d ' ' -f 1
    jboss-eap64-openshift
    jboss-eap71-openshift
    Copy to Clipboard Toggle word wrap
  1. 创建新二进制构建,指定镜像流和应用程序名称。

    注意

    --image-stream=jboss-eap71-openshift 参数替换为以下 oc 命令中的一个 --image-stream=jboss-eap64-openshift,以在 JBoss EAP 6.4 的 JBoss EAP 6.4 顶部部署 JSP 应用。

    $ oc new-build --binary=true \
    --image-stream=jboss-eap71-openshift \
    --name=eap-app
    --> Found image 31895a4 (3 months old) in image stream "openshift/jboss-eap71-openshift" under tag "latest" for "jboss-eap71-openshift"
    
        JBoss EAP 7.4
        -------------
        Platform for building and running Jakarta EE applications on JBoss EAP 7.4
    
        Tags: builder, javaee, eap, eap7
    
        * A source build using binary input will be created
          * The resulting image will be pushed to image stream "eap-app:latest"
          * A binary build was created, use 'start-build --from-dir' to trigger a new build
    
    --> Creating resources with label build=eap-app ...
        imagestream "eap-app" created
        buildconfig "eap-app" created
    --> Success
    Copy to Clipboard Toggle word wrap
  2. 启动二进制构建。指示 oc 可执行文件使用在上一步中创建的二进制构建目录作为包含 OpenShift 构建的二进制输入的目录。???app-jee-jsp 工作目录中,发出以下命令。

    app-jee-jsp]$ oc start-build eap-app \
    --from-dir=./sso-eap7-bin-demo/ \
    --follow
    Uploading directory "sso-eap7-bin-demo" as binary input for the build ...
    build "eap-app-1" started
    Receiving source from STDIN as archive ...
    Copying all war artifacts from /home/jboss/source/. directory into /opt/eap/standalone/deployments for later deployment...
    Copying all ear artifacts from /home/jboss/source/. directory into /opt/eap/standalone/deployments for later deployment...
    Copying all rar artifacts from /home/jboss/source/. directory into /opt/eap/standalone/deployments for later deployment...
    Copying all jar artifacts from /home/jboss/source/. directory into /opt/eap/standalone/deployments for later deployment...
    Copying all war artifacts from /home/jboss/source/deployments directory into /opt/eap/standalone/deployments for later deployment...
    '/home/jboss/source/deployments/app-jsp.war' -> '/opt/eap/standalone/deployments/app-jsp.war'
    '/home/jboss/source/deployments/service.war' -> '/opt/eap/standalone/deployments/service.war'
    Copying all ear artifacts from /home/jboss/source/deployments directory into /opt/eap/standalone/deployments for later deployment...
    Copying all rar artifacts from /home/jboss/source/deployments directory into /opt/eap/standalone/deployments for later deployment...
    Copying all jar artifacts from /home/jboss/source/deployments directory into /opt/eap/standalone/deployments for later deployment...
    Pushing image 172.30.82.129:5000/eap-app-demo/eap-app:latest ...
    Pushed 6/7 layers, 86% complete
    Pushed 7/7 layers, 100% complete
    Push successful
    Copy to Clipboard Toggle word wrap
  3. 基于构建创建一个新的 OpenShift 应用。

    $ oc new-app eap-app
    --> Found image 6b13d36 (2 minutes old) in image stream "eap-app-demo/eap-app" under tag "latest" for "eap-app"
    
        eap-app-demo/eap-app-1:aa2574d9
        -------------------------------
        Platform for building and running Jakarta EE applications on JBoss EAP 7.4
    
        Tags: builder, javaee, eap, eap7
    
        * This image will be deployed in deployment config "eap-app"
        * Ports 8080/tcp, 8443/tcp, 8778/tcp will be load balanced by service "eap-app"
          * Other containers can access this service through the hostname "eap-app"
    
    --> Creating resources ...
        deploymentconfig "eap-app" created
        service "eap-app" created
    --> Success
        Run 'oc status' to view your app.
    Copy to Clipboard Toggle word wrap
  4. 停止当前命名空间中运行的所有 EAP 6.4 / 7.1 / 7.1 应用的容器。

    $ oc get dc -o name
    deploymentconfig/eap-app
    Copy to Clipboard Toggle word wrap
    $ oc scale dc/eap-app --replicas=0
    deploymentconfig "eap-app" scaled
    Copy to Clipboard Toggle word wrap
  5. 在部署之前,进一步配置 EAP 6.4 / 7.1 JSP 应用。

    1. 配置应用,使其包含关于 Red Hat Single Sign-On 服务器实例的正确详细信息。

      警告

      确保将以下 SSO_PUBLIC_KEY 变量的值替换为已 复制的 demo 域的 RSA 公钥的实际内容。

      $ oc set env dc/eap-app \
      -e HOSTNAME_HTTP="eap-app-eap-app-demo.openshift.example.com" \
      -e HOSTNAME_HTTPS="secure-eap-app-eap-app-demo.openshift.example.com" \
      -e SSO_DISABLE_SSL_CERTIFICATE_VALIDATION="true" \
      -e SSO_USERNAME="appuser" \
      -e SSO_PASSWORD="apppassword" \
      -e SSO_REALM="demo" \
      -e SSO_URL="https://secure-sso-sso-app-demo.openshift.example.com/auth" \
      -e SSO_PUBLIC_KEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkdhXyKx97oIoO6HwnV/MiX2EHO55Sn+ydsPzbjJevI5F31UvUco9uA8dGl6oM8HrnaWWv+i8PvmlaRMhhl6Xs68vJTEc6d0soP+6A+aExw0coNRp2PDwvzsXVWPvPQg3+iytStxu3Icndx+gC0ZYnxoRqL7rY7zKcQBScGEr78Nw6vZDwfe6d/PQ6W4xVErNytX9KyLFVAE1VvhXALyqEM/EqYGLmpjw5bMGVKRXnhmVo9E88CkFDH8E+aPiApb/gFul1GJOv+G8ySLoR1c8Y3L29F7C81odkVBp2yMm3RVFIGSPTjHqjO/nOtqYIfY4Wyw9mRIoY5SyW7044dZXRwIDAQAB" \
      -e SSO_SECRET="0bb8c399-2501-4fcd-a183-68ac5132868d"
      deploymentconfig "eap-app" updated
      Copy to Clipboard Toggle word wrap
    2. 使用 SSL 和 JGroups 密钥存储的详细信息来配置应用。

      $ oc set env dc/eap-app \
      -e HTTPS_KEYSTORE_DIR="/etc/eap-secret-volume" \
      -e HTTPS_KEYSTORE="eapkeystore.jks" \
      -e HTTPS_PASSWORD="password" \
      -e JGROUPS_ENCRYPT_SECRET="eap-jgroup-secret" \
      -e JGROUPS_ENCRYPT_KEYSTORE_DIR="/etc/jgroups-encrypt-secret-volume" \
      -e JGROUPS_ENCRYPT_KEYSTORE="eapjgroups.jceks" \
      -e JGROUPS_ENCRYPT_PASSWORD="password"
      deploymentconfig "eap-app" updated
      Copy to Clipboard Toggle word wrap
    3. 为之前创建的 SSL 和 JGroups 机密定义 OpenShift 卷。

      $ oc volume dc/eap-app --add \
      --name="eap-keystore-volume" \
      --type=secret \
      --secret-name="eap-ssl-secret" \
      --mount-path="/etc/eap-secret-volume"
      deploymentconfig "eap-app" updated
      Copy to Clipboard Toggle word wrap
      $ oc volume dc/eap-app --add \
      --name="eap-jgroups-keystore-volume" \
      --type=secret \
      --secret-name="eap-jgroup-secret" \
      --mount-path="/etc/jgroups-encrypt-secret-volume"
      deploymentconfig "eap-app" updated
      Copy to Clipboard Toggle word wrap
    4. 配置应用的部署配置,以在 默认的 OpenShift 服务帐户下运行应用容器集(默认设置)。

      $ oc patch dc/eap-app --type=json \
      -p '[{"op": "add", "path": "/spec/template/spec/serviceAccountName", "value": "default"}]'
      "eap-app" patched
      Copy to Clipboard Toggle word wrap
  6. 使用修改后的部署配置,部署 EAP 6.4 / 7.1 应用的容器。

    $ oc scale dc/eap-app --replicas=1
    deploymentconfig "eap-app" scaled
    Copy to Clipboard Toggle word wrap
  7. 将服务作为路由公开。

    $ oc get svc -o name
    service/eap-app
    Copy to Clipboard Toggle word wrap
    $ oc get route
    No resources found.
    Copy to Clipboard Toggle word wrap
    $ oc expose svc/eap-app
    route "eap-app" exposed
    Copy to Clipboard Toggle word wrap
    $ oc get route
    NAME      HOST/PORT                                    PATH      SERVICES   PORT       TERMINATION   WILDCARD
    eap-app   eap-app-eap-app-demo.openshift.example.com             eap-app    8080-tcp                 None
    Copy to Clipboard Toggle word wrap
4.4.1.5. 访问应用程序

使用 URL http://eap-app-eap-app-demo.openshift.example.com/app-jsp 访问浏览器中的应用程序。您应该会在以下镜像中看到类似如下的输出:

Red Hat Single Sign-On Example JSP Application

流程

执行以下步骤来测试应用程序:

  1. 单击 INVOKE PUBLIC 按钮,以访问不需要身份验证的 公共端点

    您应看到 Message: public 输出。

  2. 单击 LOGIN 按钮,以根据 demo 域重定向到 Red Hat Single Sign-On 服务器实例。

    指定之前配置的 Red Hat Single Sign-On 用户的用户名和密码(appuser / apppassword)。点登录。以下镜像中详述了应用程序更改:

    sso app jee jsp logged in

  3. 单击 INVOKE SECURED 按钮,以访问 安全 端点。

    您应看到 Message: secure 输出

  4. 点击 INVOKE ADMIN 按钮访问 admin 端点。

    您应该看到 403 Forbidden 输出。

    注意

    admin 端点要求具有 admin Red Hat Single Sign-On 角色的用户正确调用。对 appuser 的访问是禁止的,因为它们只有 用户角色 特权,允许他们 访问受保护的 端点。

流程

执行以下步骤将 appuser 添加到 admin Red Hat Single Sign-On 角色:

  1. 访问红帽单点登录服务器的管理控制台。

    https://secure-sso-sso-app-demo.openshift.example.com/auth/admin.

    使用 Red Hat Single Sign-On 管理员用户 的凭据

  2. 单击 Manage 栏中的 Users,以查看 demo 域的用户信息。
  3. View all users 按钮。
  4. 单击 appuser 的 ID 链接,或者点击 Actions 列中的 Edit 按钮。
  5. Role Mappings 选项卡。
  6. Realm Roles 行的 Available Roles 列表中选择 admin 条目。
  7. Add selected > 按钮为用户添加 admin 角色。
  8. 返回到 EAP 6.4 / 7.1 JSP 服务应用。

    http://eap-app-eap-app-demo.openshift.example.com/app-jsp.

  9. 单击 LOGOUT 按钮,以重新加载 appuser 的角色映射。
  10. 再次单击 LOGIN 按钮,再单击 provider appuser 凭据。
  11. 再次点击 INVOKE ADMIN 按钮。

    您应看到 Message: admin 输出。

本例使用 OpenID-Connect 客户端适配器为 EAP 项目准备 Red Hat Single Sign-On realm、角色和用户凭证。然后,EAP 中为 OpenShift 模板提供了这些凭据,以自动进行 Red Hat Single Sign-On 客户端注册。部署后,可使用 Red Hat Single Sign-On 用户进行验证并访问 JBoss EAP。

注意

这个示例使用 OpenID-Connect 客户端,但也可以使用 SAML 客户端。如需了解更多与 OpenID - Connect 和 SAML 客户端的不同的更多信息,请参阅 Red Hat Single Sign-On Client Registration Methods

前提条件

使用包含 cluster:admin 角色的用户登录 OpenShift CLI。

  1. 创建一个新项目:

    $ oc new-project eap-app-demo
    Copy to Clipboard Toggle word wrap
  2. view 角色添加到 default 服务帐户。这可让服务帐户查看 eap-app-demo 命名空间中的所有资源,这是管理集群所必需的。

    $ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
    Copy to Clipboard Toggle word wrap
  3. EAP 模板需要 SSL 密钥存储和 JGroups 密钥存储
    本例使用 keytool (由 Java Development Kit 附带的软件包)为这些密钥存储生成自签名证书。以下命令将提示输入密码。

    1. 为 SSL 密钥存储生成安全密钥:

      $ keytool -genkeypair -alias https -storetype JKS -keystore eapkeystore.jks
      Copy to Clipboard Toggle word wrap
    2. 为 JGroups 密钥存储生成安全密钥:

      $ keytool -genseckey -alias jgroups -storetype JCEKS -keystore eapjgroups.jceks
      Copy to Clipboard Toggle word wrap
  4. 使用 SSL 和 JGroup 密钥存储文件为 OpenShift 机密生成 EAP:

    $ oc create secret generic eap-ssl-secret --from-file=eapkeystore.jks
    $ oc create secret generic eap-jgroup-secret --from-file=eapjgroups.jceks
    Copy to Clipboard Toggle word wrap
  5. 将 EAP secret 添加到 default 服务帐户:

    $ oc secrets link default eap-ssl-secret eap-jgroup-secret
    Copy to Clipboard Toggle word wrap

4.5.2. 准备 Red Hat Single Sign-On 凭证

使用 Red Hat Single Sign-On 部署期间创建的 管理员帐户,登录到加密 Red Hat Single Sign -On Web 服务器 https://secure-sso- &lt;project-name>。<hostname > /auth/admin

流程

创建 Realm

  1. 将光标悬停在侧栏顶部的 realm 命名空间上,然后单击 Add Realm
  2. 输入域名称(本例使用 eap-demo),然后单击 Create

复制公钥

在新创建的 eap-demo 域中,单击 Keys 选项卡并复制生成的公钥。这个示例使用变量 < realm-public-key> 作为 brevity。这稍后用于部署支持 Red Hat Single Sign-On 的 JBoss EAP 镜像。

创建角色

在红帽单点登录中创建一个角色,其名称对应于 example EAP 应用的 web.xml 中定义的 JEE 角色。为 Red Hat Single Sign-On 应用用户 分配此角色,以对用户应用程序的访问权限进行身份验证。

  1. 单击 Configure 栏中的 Roles,以列出此域的角色。这是一个新域,因此应该只有默认的 offline_access 角色。
  2. 单击 Add Role
  3. 输入角色名称(本示例使用角色 eap-user-role),然后单击 Save

创建用户和分配角色

创建两个用户: - 为 域管理用户 分配 realm-management 角色,以处理 Red Hat Single Sign-On 服务器中的自动 Red Hat Single Sign-On 客户端注册。- 为应用用户 分配 JEE 角色(在上一步中创建的 JEE 角色),以验证用户应用程序的访问权限。

创建 域管理用户

  1. 单击 Manage 栏中的 Users,以查看该域的用户信息。
  2. 单击 添加用户
  3. 输入有效 用户名 (本例使用用户 eap-mgmt-user)并单击 Save
  4. 编辑用户配置。单击用户空间中的 Credentials 选项卡,并为该用户输入密码。确认密码之后,您可以点击 Reset Password 来设置用户密码。弹出窗口提示其他确认。
  5. 单击 Role 映射,以列出域和客户端角色配置。在 Client Roles 下拉菜单中,选择 realm-management 并将所有可用的角色添加到用户。这提供了用户 Red Hat Single Sign-On 服务器权限,可供 JBoss EAP 镜像用于创建客户端。

创建应用程序用户

  1. 单击 Manage 栏中的 Users,以查看该域的用户信息。
  2. 单击 添加用户
  3. 输入有效的 Usernameapplication 用户 的任何其他可选信息,然后单击 Save
  4. 编辑用户配置。单击用户空间中的 Credentials 选项卡,并为该用户输入密码。确认密码之后,您可以点击 Reset Password 来设置用户密码。弹出窗口提示其他确认。
  5. 单击 Role 映射,以列出域和客户端角色配置。在 Available Roles 中,添加之前创建的角色。

流程

  1. 返回到 OpenShift Web 控制台,再单击 Add to project 列出默认镜像流和模板。
  2. 使用 Filter by keyword 搜索栏,将列表限制为与 sso 匹配的列表。您可能需要点击 See all 以显示所需的应用程序模板。
  3. 选择 eap71-sso-s2i 镜像,以列出所有部署参数。包含以下 Red Hat Single Sign-On 参数以在 EAP 构建期间配置 Red Hat Single Sign-On 凭证:

    Expand
    变量值示例

    APPLICATION_NAME

    sso

    HOSTNAME_HTTPS

    secure-sample-jsp.eap-app-demo.openshift32.example.com

    HOSTNAME_HTTP

    sample-jsp.eap-app-demo.openshift32.example.com

    SOURCE_REPOSITORY_URL

    https://repository-example.com/developer/application

    SSO_URL

    https://secure-sso-sso-app-demo.openshift32.example.com/auth

    SSO_REALM

    eap-demo

    SSO_USERNAME

    eap-mgmt-user

    SSO_PASSWORD

    password

    SSO_PUBLIC_KEY

    <realm-public-key>

    HTTPS_KEYSTORE

    eapkeystore.jks

    HTTPS_PASSWORD

    password

    HTTPS_SECRET

    eap-ssl-secret

    JGROUPS_ENCRYPT_KEYSTORE

    eapjgroups.jceks

    JGROUPS_ENCRYPT_PASSWORD

    password

    JGROUPS_ENCRYPT_SECRET

    eap-jgroup-secret

  4. 单击 Create 以部署 JBoss EAP 镜像。

JBoss EAP 镜像部署可能需要几分钟时间。

流程

  1. 访问 JBoss EAP 应用服务器,再单击 登录。您将被重定向到 Red Hat Single Sign-On 登录。
  2. 使用示例中创建的 Red Hat Single Sign-On 用户登录。您已通过 Red Hat Single Sign-On 服务器进行身份验证,并返回到 JBoss EAP 应用服务器。

本示例为 EAP 项目准备红帽单点登录域、角色和用户凭据,并为 OpenShift 部署配置 EAP。部署后,可使用 Red Hat Single Sign-On 用户进行验证并访问 JBoss EAP。

注意

这个示例使用 SAML 客户端,但也可以使用 OpenID-Connect 客户端。有关 SAML 和 OpenID 连接客户端之间的区别,请参阅 Red Hat Single Sign-On Client Registration Methods../advanced_concepts/advanced_concepts.xml#SSO-Clients

前提条件

4.6.1. 准备 Red Hat Single Sign-On 凭证

流程

使用 Red Hat Single Sign-On 部署期间创建的 管理员帐户,登录到加密 Red Hat Single Sign -On Web 服务器 https://secure-sso- &lt;project-name>。<hostname > /auth/admin

创建 Realm

  1. 将光标悬停在侧边栏顶部的 realm 命名空间(默认为 Master),然后单击 Add Realm
  2. 输入域名称(本示例使用 saml-demo),然后单击 Create

复制公钥

在新创建的 saml-demo 域中,单击 Keys 选项卡并复制生成的公钥。本例将变量 realm-public-key 用于 brevity。稍后需要此操作来部署启用了 Red Hat Single Sign-On 的 JBoss EAP 镜像。

创建角色

在红帽单点登录中创建一个角色,其名称对应于 example EAP 应用的 web.xml 中定义的 JEE 角色。该角色将分配给 Red Hat Single Sign-On 应用用户,以对用户应用程序的访问权限进行身份验证。

  1. 单击 Configure 栏中的 Roles,以列出此域的角色。这是一个新域,因此应该只有默认的 offline_access 角色。
  2. 单击 Add Role
  3. 输入角色名称(本示例使用角色 saml-user-role),然后单击 Save

创建用户和分配角色

创建两个用户: - 为 域管理用户 分配 realm-management 角色,以处理 Red Hat Single Sign-On 服务器中的自动 Red Hat Single Sign-On 客户端注册。- 为应用用户 分配 JEE 角色(在上一步中创建的 JEE 角色),以验证用户应用程序的访问权限。

创建 域管理用户

  1. 单击 Manage 栏中的 Users,以查看该域的用户信息。
  2. 单击 添加用户
  3. 输入有效 用户名 (本例使用用户 app-mgmt-user)并单击 Save
  4. 编辑用户配置。单击用户空间中的 Credentials 选项卡,并为该用户输入密码。确认密码之后,您可以点击 Reset Password 来设置用户密码。弹出窗口提示其他确认。

创建应用程序用户

  1. 单击 Manage 栏中的 Users,以查看该域的用户信息。
  2. 单击 添加用户
  3. 输入有效的 Usernameapplication 用户 的任何其他可选信息,然后单击 Save
  4. 编辑用户配置。单击用户空间中的 Credentials 选项卡,并为该用户输入密码。确认密码之后,您可以点击 Reset Password 来设置用户密码。弹出窗口提示其他确认。
  5. 单击 Role 映射,以列出域和客户端角色配置。在 Available Roles 中,添加之前创建的角色。

创建并配置 SAML 客户端

客户端是请求用户身份验证的红帽单点登录实体。本例将 SAML 客户端配置为处理 EAP 应用的身份验证。本节保存了两个文件: keystore.jkskeycloak-saml-subsystem.xml,后者稍后在流程中需要。

创建 SAML 客户端:

  1. 单击 Configure 栏中的 Clients,以列出 realm 中的客户端。点 Create
  2. 输入有效的 客户端 ID。这个示例使用 sso-saml-demo
  3. Client Protocol 下拉菜单中,选择 saml
  4. 输入应用程序的 Root URL。这个示例使用 https://demoapp-eap-app-demo.openshift32.example.com
  5. Save

配置 SAML 客户端:

Settings 选项卡中,为新 sso-saml-demo 客户端设置 Root URLValid Redirect URL:

  1. 对于 Root URL,请输入创建客户端时使用的相同地址。这个示例使用 https://demoapp-eap-app-demo.openshift32.example.com
  2. 对于 Valid Redirect URL,在用户登录时输入要重定向到 的地址。这个示例使用相对于 root https://demoapp-eap-app-demo.openshift32.example.com/* 的重定向地址。

导出 SAML 密钥:

  1. sso-saml-demo 客户端空间中的 SAML Keys 选项卡,再单击 Export
  2. 在本例中,将 归档格式 保留为 JKS。这个示例使用 sso-saml-demo 的默认 Key Alias,以及 saml-demo 的默认 Realm Certificate Alias
  3. 输入 "密钥密码""存储密码 "。这个示例同时使用 password
  4. 单击 Download,再保存 keystore-saml.jks 文件,供日后使用。
  5. 单击 sso-saml-demo 客户端,以返回到为下一步准备的客户端空间。

下载客户端适配器:

  1. 单击 Installation
  2. 使用格式选项 下拉菜单选择格式。这个示例使用 Keycloak SAML Wildfly/JBoss 子系统
  3. 单击 Download,再保存文件 keycloak-saml-subsystem.xml

keystore-saml.jks 将与下一节中的其他 EAP 密钥存储一起使用,以便为 EAP 应用项目创建 OpenShift 机密。将 keystore-saml.jks 文件复制到 OpenShift 节点。
keycloak-saml-subsystem.xml 将被修改并在应用部署中使用。将它作为 secure-saml-deployments 复制到应用的 /configuration 文件夹中。

使用包含 cluster:admin 角色的用户登录 OpenShift CLI。

流程

  1. 创建一个新项目:

    $ oc new-project eap-app-demo
    Copy to Clipboard Toggle word wrap
  2. view 角色添加到 default 服务帐户。这可让服务帐户查看 eap-app-demo 命名空间中的所有资源,这是管理集群所必需的。

    $ oc policy add-role-to-user view system:serviceaccount:$(oc project -q):default
    Copy to Clipboard Toggle word wrap
  3. EAP 模板需要 SSL 密钥存储和 JGroups 密钥存储
    本例使用 keytool (由 Java Development Kit 附带的软件包)为这些密钥存储生成自签名证书。以下命令将提示输入密码。

    1. 为 SSL 密钥存储生成安全密钥:

      $ keytool -genkeypair -alias https -storetype JKS -keystore eapkeystore.jks
      Copy to Clipboard Toggle word wrap
    2. 为 JGroups 密钥存储生成安全密钥:

      $ keytool -genseckey -alias jgroups -storetype JCEKS -keystore eapjgroups.jceks
      Copy to Clipboard Toggle word wrap
  4. 使用 SSL 和 JGroup 密钥存储文件为 OpenShift 机密生成 EAP:

    $ oc create secret generic eap-ssl-secret --from-file=eapkeystore.jks
    $ oc create secret generic eap-jgroup-secret --from-file=eapjgroups.jceks
    Copy to Clipboard Toggle word wrap
  5. 将 EAP 应用机密添加到之前创建的 EAP 服务帐户:

    $ oc secrets link default eap-ssl-secret eap-jgroup-secret
    Copy to Clipboard Toggle word wrap

4.6.3. 修改 secure-saml-deployments 文件

前提条件

  • keycloak-saml-subsystem.xml 从上一节中的红帽单点登录客户端导出至应用的 /configuration 文件夹中,并重命名了 secure-saml-deployments。EAP 在启动文件并将其复制到 Red Hat Sign-On SAML 适配器配置中的 standalone-openshift.xml 文件时进行搜索。

流程

  1. 在文本编辑器中打开 /configuration/secure-saml-deployments 文件。
  2. secure-deployment name 标签的 YOUR-WAR.war 值替换为 application .war 文件。这个示例使用 sso-saml-demo.war
  3. SPECIFY YOUR LOGOUT PAGE! memory page 标签的值 替换为 url,以便在从应用程序注销时重定向用户。这个示例使用 /index.jsp
  4. 删除 & lt;PrivateKeyPem& gt; 和 < CertificatePem > 标签和密钥,并将它替换为密钥存储信息:

    ...
    <Keys>
      <Key signing="true">
        <KeyStore file= "/etc/eap-secret-volume/keystore-saml.jks" password="password">
          <PrivateKey alias="sso-saml-demo" password="password"/>
          <Certificate alias="sso-saml-demo"/>
        </KeyStore>
      </Key>
    </Keys>
    Copy to Clipboard Toggle word wrap

    keystore-saml.jks 的挂载路径(本例中为 /etc/eap-secret-volume/keystore-saml.jks)可以在应用模板中通过参数 EAP_HTTPS_KEYSTORE_DIR 指定。
    当从 Red Hat Sign-On 客户端导出 SAML 密钥时,为 PrivateKey 和证书配置别名和密码。

  5. 删除第二个 & lt;CertificatePem > 标签和密钥,并将其替换为 realm 证书信息:

    ...
    <Keys>
      <Key signing="true">
        <KeyStore file="/etc/eap-secret-volume/keystore-saml.jks" password="password">
          <Certificate alias="saml-demo"/>
        </KeyStore>
      </Key>
    </Keys>
    ...
    Copy to Clipboard Toggle word wrap

    当从 Red Hat Single Sign-On 客户端导出 SAML 密钥时,配置了证书别名和密码。

  6. 保存并关闭 /configuration/secure-saml-deployments 文件。

客户端类型必须通过应用程序 web.xml 中的 <auth-method > 键指定。此文件在部署时由镜像读取。

打开应用程序 web.xml 文件,并确保它包含以下内容:

...
<login-config>
  <auth-method>KEYCLOAK-SAML</auth-method>
</login-config>
...
Copy to Clipboard Toggle word wrap

4.6.5. 部署应用程序

您不需要包含镜像的任何 Red Hat Single Sign-On 配置,因为应用程序本身已配置了该配置。导航到应用程序登录页面,将您重定向到 Red Hat Single Sign-On 登录。使用之前创建的应用程序 用户,通过 Red Hat Single Sign-On 登录应用程序

第 5 章 参考

5.1. 工件存储库镜像

Maven 中的存储库包含各种类型的构建工件和依赖项(所有项目 jar、库 jar、插件或任何其他项目特定工件)。它还指定在执行 S2I 构建期间从哪里下载工件的位置。除了使用中央存储库外,组织还是一种常见做法,用于部署本地自定义存储库(mirror)。

使用镜像的好处包括:

  • 同步镜像的可用性,地理上、更快速。
  • 能够更好地控制存储库内容。
  • 有可能在不同团队(开发人员、CI)之间共享工件,而无需依赖公共服务器和存储库。
  • 改进构建时间。

通常,存储库管理器可以充当镜像的本地缓存。假设存储库管理器已在 http://10.0.0.1:8080/repository/internal/ 部署在并可访问,那么 S2I 构建可以通过按照以下流程向构建配置提供 MAVEN_MIRROR_URL 环境变量来使用这个管理器:

流程

  1. 识别构建配置的名称,以针对其应用 MAVEN_MIRROR_URL 变量。

    $ oc get bc -o name
    buildconfig/sso
    Copy to Clipboard Toggle word wrap
  2. 使用 MAVEN_MIRROR_URL 环境变量更新 sso 的构建配置。

    $ oc set env bc/sso \
      -e MAVEN_MIRROR_URL="http://10.0.0.1:8080/repository/internal/"
    buildconfig "sso" updated
    Copy to Clipboard Toggle word wrap
  3. 验证设置。

    $ oc set env bc/sso --list
    # buildconfigs sso
    MAVEN_MIRROR_URL=http://10.0.0.1:8080/repository/internal/
    Copy to Clipboard Toggle word wrap
  4. 调度应用的新构建。
注意

在应用构建过程中,您会注意到从存储库管理器中提取 Maven 依赖项,而不是默认的公共存储库。另外,在构建完成后,您将看到镜像已填充了构建期间检索和使用的所有依赖项。

5.2. 环境变量

5.2.1. 信息环境变量

以下信息环境变量旨在传达有关镜像的信息,而不由用户修改:

Expand
表 5.1. 信息环境变量
变量名称Description值示例

AB_JOLOKIA_AUTH_OPENSHIFT

-

true

AB_JOLOKIA_HTTPS

-

true

AB_JOLOKIA_PASSWORD_RANDOM

-

true

JBOSS_IMAGE_NAME

镜像名称,与 "name" 标签相同。

rh-sso-7/sso75-openshift-rhel8

JBOSS_IMAGE_VERSION

镜像版本,与 "version" 标签相同。

7.5

JBOSS_MODULES_SYSTEM_PKGS

-

org.jboss.logmanager,jdk.nashorn.api

5.2.2. 配置环境变量

配置环境变量的设计旨在方便地调整镜像,而无需重建,用户应根据需要设置。

Expand
表 5.2. 配置环境变量
变量名称Description值示例

AB_JOLOKIA_AUTH_OPENSHIFT

切换到 OpenShift TLS 通信的客户端身份验证。此参数的值可以是相对区分的名称,它必须包含在呈现的客户端证书中。启用此参数将自动将 Jolokia 切换为 https 通信模式。默认 CA 证书设置为 /var/run/secrets/kubernetes.io/serviceaccount/ca.crt

true

AB_JOLOKIA_CONFIG

如果设置使用此文件(包括路径)作为 Jolokia JVM 代理属性(如 Jolokia 的 参考手册中所述)。如果没有设置,则使用本文档中定义的设置创建 /opt/jolokia/etc/jolokia.properties 文件,否则本文档中的其他设置会被忽略。

/opt/jolokia/custom.properties

AB_JOLOKIA_DISCOVERY_ENABLED

启用 Jolokia 发现。默认为 false

true

AB_JOLOKIA_HOST

要绑定到的主机地址。默认值为 0.0.0.0

127.0.0.1

AB_JOLOKIA_HTTPS

在与 https 的安全通讯中切换。如果 AB_JOLOKIA_OPTS 中没有提供 serverCert 配置,则默认生成自签名证书。注意:如果将值设为空字符串,则 https 将关闭。如果值设为非空字符串,则将打开 https。

true

AB_JOLOKIA_ID

要使用的代理 ID (默认情况下 $HOSTNAME,它是容器 ID)。

openjdk-app-1-xqlsj

AB_JOLOKIA_OFF

如果集禁用 Jolokia 激活(例如,回显一个空值)。默认情况下启用 Jolokia。注意:如果将值设为空字符串,则 https 将关闭。如果值设为非空字符串,则将打开 https。

true

AB_JOLOKIA_OPTS

要附加到代理配置中的其他选项。它们应当以 "key=value, key=value, …<200b> 格式指定

backlog=20

AB_JOLOKIA_PASSWORD

用于基本身份验证的密码。默认情况下关闭身份验证。

mypassword

AB_JOLOKIA_PASSWORD_RANDOM

如果设置,则会为 AB_JOLOKIA_PASSWORD 生成随机值,并将其保存在 /opt/jolokia/etc/jolokia.pw 文件中。

true

AB_JOLOKIA_PORT

要使用的端口(默认为 8778)。

5432

AB_JOLOKIA_USER

用于基本身份验证的用户。默认为 jolokia

myusername

CONTAINER_CORE_LIMIT

计算的内核限制,如 CFS Bandwidth Control 中所述。

2

GC_ADAPTIVE_SIZE_POLICY_WEIGHT

为当前 Garbage Collection (GC)时间和之前的 GC 时间相比,为当前 Garbage Collection (GC)指定的权重。

90

GC_MAX_HEAP_FREE_RATIO

GC 后可用堆的百分比上限,以避免缩减。

40

GC_MAX_METASPACE_SIZE

最大元空间大小。

100

GC_TIME_RATIO_MIN_HEAP_FREE_RATIO

GC 后最小空闲堆的百分比以避免扩展。

20

GC_TIME_RATIO

指定垃圾回收外所花费的时间(例如,应用程序执行时间)与垃圾回收所花费的时间的比例。

4

JAVA_DIAGNOSTICS

将其设置为在发生情况时获取一些诊断信息以标准输出。

true

JAVA_INITIAL_MEM_RATIO

这用于计算基于最大堆内存的默认初始堆内存。默认值为 100,表示 maximal 堆的 100% 用于初始堆大小。您可以通过将此值设置为 0 来跳过此机制,在这种情况下,不会添加 -Xms 选项。

100

JAVA_MAX_MEM_RATIO

它被用来根据容器限制计算默认的 maximal 堆内存。如果在 Docker 容器中使用,且没有容器的内存约束,则此选项不会起作用。如果有一个内存约束,则 -Xmx 被设置为容器可用内存的比例,如此处所述。默认值为 50,这表示 50% 的可用内存被用作最高边界。您可以通过将此值设置为 0 来跳过此机制,在这种情况下,没有添加 -Xmx 选项。

40

JAVA_OPTS_APPEND

服务器启动选项.

-Dkeycloak.migration.action=export -Dkeycloak.migration.provider=dir -Dkeycloak.migration.dir=/tmp

MQ_SIMPLE_DEFAULT_PHYSICAL_DESTINATION

为向后兼容,请将 设为 true 以使用 MyQueueMyTopic 作为物理目的地名称默认值,而不是 queue/MyQueuetopic/MyTopic

false

OPENSHIFT_KUBE_PING_LABELS

集群标签选择器.

app=sso-app

OPENSHIFT_KUBE_PING_NAMESPACE

集群项目命名空间。

myproject

SCRIPT_DEBUG

如果设置为 true,请确保使用 -x 选项执行 bash 脚本,并在执行命令时打印命令及其参数。

true

SSO_ADMIN_PASSWORD

红帽单点登录服务器的 master 域的管理员帐户的密码。必需。如果没有指定值,它将在模板实例化时自动生成并显示为 OpenShift 说明消息。

adm-password

SSO_ADMIN_USERNAME

Red Hat Single Sign-On 服务器的 master 域的管理员帐户的用户名。必需。如果没有指定值,它将在模板实例化时自动生成并显示为 OpenShift 说明消息。

admin

SSO_HOSTNAME

Red Hat Single Sign-On 服务器的自定义主机名。默认不设置。如果没有设置,则请求主机名 SPI 供应商,它使用请求标头来确定 Red Hat Single Sign-On 服务器的主机名。如果设置,将使用 固定 主机名 SPI 供应商,并将 Red Hat Single Sign-On 服务器的主机名设置为提供的变量值。如需设置了 SSO_HOSTNAME 变量时,请参阅 Red Hat Single Sign-On Server 部分的专用自定义主机名部分。

rh-sso-server.openshift.example.com

SSO_REALM

如果提供了这个环境变量,则在 Red Hat Single Sign-On 服务器中创建的域名称。

demo

SSO_SERVICE_PASSWORD

Red Hat Single Sign-On 服务用户的密码。

mgmt-password

SSO_SERVICE_USERNAME

用于访问 Red Hat Single Sign-On 服务的用户名。客户端用于在指定的 Red Hat Single Sign-On realm 中创建应用程序客户端。如果提供了这个环境变量,则会创建此用户。

sso-mgmtuser

SSO_TRUSTSTORE

secret 中的 truststore 文件的名称。

truststore.jks

SSO_TRUSTSTORE_DIR

信任存储目录。

/etc/sso-secret-volume

SSO_TRUSTSTORE_PASSWORD

信任存储和证书的密码。

mykeystorepass

SSO_TRUSTSTORE_SECRET

包含 truststore 文件的 secret 名称。用于 sso-truststore-volume 卷。

truststore-secret

适用于 OpenShift 的 Red Hat Single Sign-On 的可用应用程序模板可以将 上述配置变量 与常见 OpenShift 变量(如 APPLICATION_NAMESOURCE_REPOSITORY_URL)、产品特定变量(如 HORNETQ_CLUSTER_PASSWORD)或配置典型到数据库镜像(如 POSTGRESQL_MAX_CONNECTIONS)的配置变量。https://docs.openshift.com/container-platform/latest/openshift_images/using-templates.html可以根据需要调整所有这些不同类型的配置变量,以实现所部署的 Red Hat Single Sign-On-enabled 应用将尽可能与预期的用例一致。如下为 Red Hat Single Sign-On-On-enabled 应用程序的每个类别可用的配置变量列表。

5.2.3. 所有 Red Hat Single Sign-On 镜像的模板变量

Expand
表 5.3. 适用于所有 Red Hat Single Sign-On 镜像的配置变量
变量Description

APPLICATION_NAME

应用程序的名称。

DB_MAX_POOL_SIZE

为配置的数据源设置 xa-pool/max-pool-size。

DB_TX_ISOLATION

为配置的数据源设置 transaction-isolation。

DB_USERNAME

数据库用户名。

HOSTNAME_HTTP

http 服务路由的自定义主机名。留空,如: < application-name>.<project>.<default-domain-suffix>

HOSTNAME_HTTPS

https 服务路由的自定义主机名。留空,如: < application-name>.<project>.<default-domain-suffix>

HTTPS_KEYSTORE

机密中密钥存储文件的名称。与 HTTPS_PASSWORDHTTPS_NAME 一起定义,请启用 HTTPS,并将 SSL 证书密钥文件设置为 $JBOSS_HOME/standalone/configuration 下的相对路径。

HTTPS_KEYSTORE_TYPE

密钥存储文件的类型(JKS 或 JCEKS)。

HTTPS_NAME

与服务器证书关联的名称(例如 jboss)。与 HTTPS_PASSWORDHTTPS_KEYSTORE 一起定义,请启用 HTTPS 并设置 SSL 名称。

HTTPS_PASSWORD

密钥存储和证书的密码(例如 mykeystorepass)。与 HTTPS_NAMEHTTPS_KEYSTORE 一起定义,请启用 HTTPS 并设置 SSL 密钥密码。

HTTPS_SECRET

包含密钥存储文件的机密的名称。

IMAGE_STREAM_NAMESPACE

安装 Red Hat Middleware 镜像的 ImageStreams 的命名空间。这些 ImageStreams 通常安装在 openshift 命名空间中。只有在安装了不同命名空间/项目的 ImageStreams 时,才需要修改它。

JGROUPS_CLUSTER_PASSWORD

JGroups 集群密码.

JGROUPS_ENCRYPT_KEYSTORE

机密中密钥存储文件的名称。

JGROUPS_ENCRYPT_NAME

与服务器证书关联的名称(例如 secret-key)。

JGROUPS_ENCRYPT_PASSWORD

密钥存储和证书的密码(如 )。

JGROUPS_ENCRYPT_SECRET

包含密钥存储文件的机密的名称。

SSO_ADMIN_USERNAME

Red Hat Single Sign-On 服务器的 master 域的管理员帐户的用户名。必需。如果没有指定值,则在模板实例化时自动生成并显示为 OpenShift 指令消息。

SSO_ADMIN_PASSWORD

红帽单点登录服务器的 master 域的管理员帐户的密码。必需。如果没有指定值,则在模板实例化时自动生成并显示为 OpenShift 指令消息。

SSO_REALM

如果提供了这个环境变量,则在 Red Hat Single Sign-On 服务器中创建的域名称。

SSO_SERVICE_USERNAME

用于访问 Red Hat Single Sign-On 服务的用户名。客户端用于在指定的 Red Hat Single Sign-On realm 中创建应用程序客户端。如果提供了这个环境变量,则会创建此用户。

SSO_SERVICE_PASSWORD

Red Hat Single Sign-On 服务用户的密码。

SSO_TRUSTSTORE

secret 中的 truststore 文件的名称。

SSO_TRUSTSTORE_SECRET

包含 truststore 文件的 secret 名称。用于 sso-truststore-volume 卷。

SSO_TRUSTSTORE_PASSWORD

信任存储和证书的密码。

Expand
表 5.4. 使用临时 Or Persistent Storage 配置特定于 Red Hat Single Sign-On 的 PostgreSQL 应用程序
变量Description

DB_USERNAME

数据库用户名。

DB_PASSWORD

数据库用户密码.

DB_JNDI

应用程序用来解析数据源的数据库 JNDI 名称,如 java:/jboss/datasources/postgresql

POSTGRESQL_MAX_CONNECTIONS

允许的最大客户端连接数。这也设置准备的事务的最大数量。

POSTGRESQL_SHARED_BUFFERS

配置专用于 PostgreSQL 缓存数据的内存数量。

5.2.5. 常规 eap64 和 eap71 S2I 镜像的模板变量

Expand
表 5.5. EAP 6.4 和 EAP 7 应用的配置变量构建了 Via S2I
变量Description

APPLICATION_NAME

应用程序的名称。

ARTIFACT_DIR

工件目录。

AUTO_DEPLOY_EXPLODED

控制是否应该自动部署展开的部署内容。

CONTEXT_DIR

构建 Git 项目中的路径;根项目目录为空。

GENERIC_WEBHOOK_SECRET

通用构建触发器 secret。

GITHUB_WEBHOOK_SECRET

GitHub 触发器 secret。

HORNETQ_CLUSTER_PASSWORD

HornetQ 群集管理员密码.

HORNETQ_QUEUES

队列名称。

HORNETQ_TOPICS

主题名称。

HOSTNAME_HTTP

http 服务路由的自定义主机名。留空,如: < application-name>.<project>.<default-domain-suffix>

HOSTNAME_HTTPS

https 服务路由的自定义主机名。留空,如: < application-name>.<project>.<default-domain-suffix>

HTTPS_KEYSTORE_TYPE

密钥存储文件的类型(JKS 或 JCEKS)。

HTTPS_KEYSTORE

机密中密钥存储文件的名称。与 HTTPS_PASSWORDHTTPS_NAME 一起定义,请启用 HTTPS,并将 SSL 证书密钥文件设置为 $JBOSS_HOME/standalone/configuration 下的相对路径。

HTTPS_NAME

与服务器证书关联的名称(例如 jboss)。与 HTTPS_PASSWORDHTTPS_KEYSTORE 一起定义,请启用 HTTPS 并设置 SSL 名称。

HTTPS_PASSWORD

密钥存储和证书的密码(例如 mykeystorepass)。与 HTTPS_NAMEHTTPS_KEYSTORE 一起定义,请启用 HTTPS 并设置 SSL 密钥密码。

HTTPS_SECRET

包含密钥存储文件的机密的名称。

IMAGE_STREAM_NAMESPACE

安装 Red Hat Middleware 镜像的 ImageStreams 的命名空间。这些 ImageStreams 通常安装在 openshift 命名空间中。只有在安装了不同命名空间/项目的 ImageStreams 时,才需要修改它。

JGROUPS_CLUSTER_PASSWORD

JGroups 集群密码.

JGROUPS_ENCRYPT_KEYSTORE

机密中密钥存储文件的名称。

JGROUPS_ENCRYPT_NAME

与服务器证书关联的名称(例如 secret-key)。

JGROUPS_ENCRYPT_PASSWORD

密钥存储和证书的密码(如 )。

JGROUPS_ENCRYPT_SECRET

包含密钥存储文件的机密的名称。

SOURCE_REPOSITORY_REF

Git 分支/标签引用.

SOURCE_REPOSITORY_URL

应用的 Git 源 URI。

Expand
表 5.6. EAP 6.4 和 EAP 7 的配置变量 Red Hat Single Sign-On-enabled 应用 Built Via S2I
变量Description

SSO_URL

红帽单点登录服务器位置.

SSO_REALM

如果提供了这个环境变量,则在 Red Hat Single Sign-On 服务器中创建的域名称。

SSO_USERNAME

用于访问 Red Hat Single Sign-On 服务的用户名。这用于在指定的 Red Hat Single Sign-On realm 中创建应用程序客户端。这应当与通过 sso75- 模板指定的 SSO_SERVICE_USERNAME 匹配。

SSO_PASSWORD

Red Hat Single Sign-On 服务用户的密码。

SSO_PUBLIC_KEY

红帽单点登录公钥.建议将公钥传递给模板,以避免中间人安全攻击。

SSO_SECRET

红帽单点登录客户端机密进行机密访问。

SSO_SERVICE_URL

红帽单点登录服务位置.

SSO_TRUSTSTORE_SECRET

包含 truststore 文件的 secret 名称。用于 sso-truststore-volume 卷。

SSO_TRUSTSTORE

secret 中的 truststore 文件的名称。

SSO_TRUSTSTORE_PASSWORD

信任存储和证书的密码。

SSO_BEARER_ONLY

红帽单点登录客户端访问类型.

SSO_DISABLE_SSL_CERTIFICATE_VALIDATION

如果 EAP 和 Red Hat Single Sign-On Server 之间的 true SSL 通信是不安全的(例如,使用 curl 禁用证书验证)

SSO_ENABLE_CORS

为红帽单点登录应用程序启用 CORS。

Expand
表 5.7. EAP 6.4 和 EAP 7 的配置变量 Red Hat Single Sign-On 的应用构建了使用 SAML 协议的 Via S2I
变量Description

SSO_SAML_CERTIFICATE_NAME

与服务器证书关联的名称。

SSO_SAML_KEYSTORE_PASSWORD

密钥存储和证书的密码。

SSO_SAML_KEYSTORE

机密中密钥存储文件的名称。

SSO_SAML_KEYSTORE_SECRET

包含密钥存储文件的机密的名称。

SSO_SAML_LOGOUT_PAGE

SAML 应用程序的 Red Hat Single Sign-On logout 页面。

5.3. 公开的端口

Expand
端口号Description

8443

HTTPS

8778

Jolokia monitoring

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat