×

本指南演示如何修改Red Hat OpenShift Service on AWS (ROSA) 4.14及以上版本[1]中Web控制台、OAuth服务器和下载组件路由的主机名和TLS证书。

本指南中对组件路由[2]所做的更改,在自定义内部OAuth服务器URL控制台路由下载路由的OpenShift Container Platform文档中有更详细的描述。

前提条件

  • ROSA CLI (rosa) 1.2.37或更高版本

  • AWS CLI (aws)

  • 4.14或更高版本的ROSA Classic集群

    目前不支持ROSA与HCP。

  • OpenShift CLI (oc)

  • jq CLI

  • 具有cluster-admin角色的用户对集群的访问权限。

  • OpenSSL(用于生成演示SSL/TLS证书)

设置您的环境

  1. 使用具有cluster-admin权限的帐户登录到您的集群。

  2. 为您的集群名称配置环境变量

    $ export CLUSTER_NAME=$(oc get infrastructure cluster -o=jsonpath="{.status.infrastructureName}"  | sed 's/-[a-z0-9]\{5\}$//')
  3. 确保所有字段在移至下一部分之前正确输出

    $ echo "Cluster: ${CLUSTER_NAME}"
    示例输出
    Cluster: my-rosa-cluster

查找当前路由

  1. 验证您是否可以访问其默认主机名上的组件路由。

    您可以通过查询openshift-consoleopenshift-authentication项目中的路由列表来查找主机名。

    $ oc get routes -n openshift-console
    $ oc get routes -n openshift-authentication
    示例输出
    NAME        HOST/PORT                                                                          PATH       SERVICES    PORT    TERMINATION          WILDCARD
    console     console-openshift-console.apps.my-example-cluster-aws.z9a9.p1.openshiftapps.com    ... 1 more  console    https   reencrypt/Redirect   None
    downloads   downloads-openshift-console.apps.my-example-cluster-aws.z9a9.p1.openshiftapps.com  ... 1 more  downloads  http    edge/Redirect        None
    NAME              HOST/PORT                                                             PATH        SERVICES          PORT   TERMINATION            WILDCARD
    oauth-openshift   oauth-openshift.apps.my-example-cluster-aws.z9a9.p1.openshiftapps.com ... 1 more  oauth-openshift   6443   passthrough/Redirect   None

    从该输出中您可以看到我们的基本主机名是z9a9.p1.openshiftapps.com

  2. 运行以下命令获取默认入口的ID

    $ export INGRESS_ID=$(rosa list ingress -c ${CLUSTER_NAME} -o json | jq -r '.[] | select(.default == true) | .id')
  3. 确保所有字段在移至下一部分之前正确输出

    $ echo "Ingress ID: ${INGRESS_ID}"
    示例输出
    Ingress ID: r3l6

    通过运行这些命令,您可以看到我们集群的默认组件路由为

    • 控制台:console-openshift-console.apps.my-example-cluster-aws.z9a9.p1.openshiftapps.com

    • 下载:downloads-openshift-console.apps.my-example-cluster-aws.z9a9.p1.openshiftapps.com

    • OAuth:oauth-openshift.apps.my-example-cluster-aws.z9a9.p1.openshiftapps.com

我们可以使用rosa edit ingress命令来更改每个服务的 hostname 并为所有组件路由添加 TLS 证书。rosa edit ingress 命令的命令行帮助摘录中显示了相关的参数。

$ rosa edit ingress -h
Edit a cluster ingress for a cluster. Usage:
  rosa edit ingress ID [flags]
  [...]
  --component-routes string                Component routes settings. Available keys [oauth, console, downloads]. For each key a pair of hostname and tlsSecretRef is expected to be supplied. Format should be a comma separate list 'oauth: hostname=example-hostname;tlsSecretRef=example-secret-ref,downloads:...'

在此示例中,我们将使用以下自定义组件路由

  • 控制台:console.my-new-domain.dev

  • 下载:downloads.my-new-domain.dev

  • OAuth:oauth.my-new-domain.dev

为每个组件路由创建有效的TLS证书

在本节中,我们创建三个单独的自签名证书密钥对,然后信任它们以验证我们是否可以使用真实的 Web 浏览器访问我们的新组件路由。

这仅用于演示目的,不推荐作为生产工作负载的解决方案。请咨询您的证书颁发机构,了解如何为您的生产工作负载创建具有类似属性的证书。

为避免 HTTP/2 连接合并问题,必须为每个端点使用单独的单个证书。不支持使用通配符或 SAN 证书。

  1. 为每个组件路由生成证书,注意将证书的主题 (-subj) 设置为我们要使用的组件路由的自定义域名

    示例
    $ openssl req -newkey rsa:2048 -new -nodes -x509 -days 365 -keyout key-console.pem -out cert-console.pem -subj "/CN=console.my-new-domain.dev"
    $ openssl req -newkey rsa:2048 -new -nodes -x509 -days 365 -keyout key-downloads.pem -out cert-downloads.pem -subj "/CN=downloads.my-new-domain.dev"
    $ openssl req -newkey rsa:2048 -new -nodes -x509 -days 365 -keyout key-oauth.pem -out cert-oauth.pem -subj "/CN=oauth.my-new-domain.dev"

    这将生成三对.pem文件,key-<component>.pemcert-<component>.pem

将证书作为密钥添加到集群

  1. openshift-config命名空间中创建三个TLS密钥。

    当您稍后在本指南中更新组件路由时,这些将成为您的密钥引用。

    $ oc create secret tls console-tls --cert=cert-console.pem --key=key-console.pem -n openshift-config
    $ oc create secret tls downloads-tls --cert=cert-downloads.pem --key=key-downloads.pem -n openshift-config
    $ oc create secret tls oauth-tls --cert=cert-oauth.pem --key=key-oauth.pem -n openshift-config

查找集群中负载均衡器的主机名

创建集群时,服务会创建一个负载均衡器并为该负载均衡器生成主机名。我们需要知道负载均衡器主机名才能为我们的集群创建 DNS 记录。

您可以通过对openshift-ingress命名空间运行oc get svc命令来查找主机名。负载均衡器的主机名是与openshift-ingress命名空间中的router-default服务关联的EXTERNAL-IP

$ oc get svc -n openshift-ingress
NAME            TYPE          CLUSTER-IP     EXTERNAL-IP                                             PORT(S)                     AGE
router-default  LoadBalancer  172.30.237.88  a234gsr3242rsfsfs-1342r624.us-east-1.elb.amazonaws.com  80:31175/TCP,443:31554/TCP  76d

在我们的例子中,主机名是a234gsr3242rsfsfs-1342r624.us-east-1.elb.amazonaws.com

保存此值以备后用,因为我们需要它来为新的组件路由主机名配置 DNS 记录。

将组件路由DNS记录添加到您的托管提供商

在您的托管提供商中,添加将新组件路由主机名的CNAME映射到我们在上一步中找到的负载均衡器主机名的DNS记录。

使用ROSA CLI更新组件路由和TLS密钥

更新DNS记录后,您可以使用ROSA CLI更改组件路由。

  1. 使用rosa edit ingress命令使用新的基本域及其关联的密钥引用更新您的默认入口路由,注意更新每个组件路由的主机名。

    $ rosa edit ingress -c ${CLUSTER_NAME} ${INGRESS_ID} --component-routes 'console: hostname=console.my-new-domain.dev;tlsSecretRef=console-tls,downloads: hostname=downloads.my-new-domain.dev;tlsSecretRef=downloads-tls,oauth: hostname=oauth.my-new-domain.dev;tlsSecretRef=oauth-tls'

    您也可以只编辑组件路由的一个子集,将不需要更改的组件路由设置为空字符串。例如,如果您只想更改控制台和 OAuth 服务器主机名以及 TLS 证书,则应运行以下命令

    $ rosa edit ingress -c ${CLUSTER_NAME} ${INGRESS_ID} --component-routes 'console: hostname=console.my-new-domain.dev;tlsSecretRef=console-tls,downloads: hostname="";tlsSecretRef="", oauth: hostname=oauth.my-new-domain.dev;tlsSecretRef=oauth-tls'
  2. 运行rosa list ingress命令以验证您的更改是否已成功完成

    $ rosa list ingress -c ${CLUSTER_NAME} -ojson | jq ".[] | select(.id == \"${INGRESS_ID}\") | .component_routes"
    示例输出
    {
      "console": {
        "kind": "ComponentRoute",
        "hostname": "console.my-new-domain.dev",
        "tls_secret_ref": "console-tls"
      },
      "downloads": {
        "kind": "ComponentRoute",
        "hostname": "downloads.my-new-domain.dev",
        "tls_secret_ref": "downloads-tls"
      },
      "oauth": {
        "kind": "ComponentRoute",
        "hostname": "oauth.my-new-domain.dev",
        "tls_secret_ref": "oauth-tls"
      }
    }
  3. 将您的证书添加到本地系统的信任库中,然后使用您的本地 Web 浏览器确认您可以访问其新路由的组件。

使用 ROSA CLI 将组件路由重置为默认值

如果要将组件路由重置为默认配置,请运行以下rosa edit ingress命令

$ rosa edit ingress -c ${CLUSTER_NAME} ${INGRESS_ID} --component-routes 'console: hostname="";tlsSecretRef="",downloads: hostname="";tlsSecretRef="", oauth: hostname="";tlsSecretRef=""'

1。在 4.14 之前的 Red Hat OpenShift Service on AWS ROSA 版本上修改这些路由通常不受支持。但是,如果您使用的是 4.13 版本的集群,您可以通过提交支持案例来请求 Red Hat 支持为您的 4.13 版本集群启用此功能的支持。
2。我们使用术语“组件路由”来指代 ROSA 首次安装时提供的 OAuth、控制台和下载路由。