$ export CLUSTER_NAME=$(oc get infrastructure cluster -o=jsonpath="{.status.infrastructureName}" | sed 's/-[a-z0-9]\{5\}$//')
本指南演示如何修改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证书)
使用具有cluster-admin
权限的帐户登录到您的集群。
为您的集群名称配置环境变量
$ export CLUSTER_NAME=$(oc get infrastructure cluster -o=jsonpath="{.status.infrastructureName}" | sed 's/-[a-z0-9]\{5\}$//')
确保所有字段在移至下一部分之前正确输出
$ echo "Cluster: ${CLUSTER_NAME}"
Cluster: my-rosa-cluster
验证您是否可以访问其默认主机名上的组件路由。
您可以通过查询openshift-console
和openshift-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
。
运行以下命令获取默认入口的ID
$ export INGRESS_ID=$(rosa list ingress -c ${CLUSTER_NAME} -o json | jq -r '.[] | select(.default == true) | .id')
确保所有字段在移至下一部分之前正确输出
$ 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
在本节中,我们创建三个单独的自签名证书密钥对,然后信任它们以验证我们是否可以使用真实的 Web 浏览器访问我们的新组件路由。
这仅用于演示目的,不推荐作为生产工作负载的解决方案。请咨询您的证书颁发机构,了解如何为您的生产工作负载创建具有类似属性的证书。 |
为避免 HTTP/2 连接合并问题,必须为每个端点使用单独的单个证书。不支持使用通配符或 SAN 证书。 |
为每个组件路由生成证书,注意将证书的主题 (-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>.pem
和cert-<component>.pem
。
在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记录后,您可以使用ROSA CLI更改组件路由。
使用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 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"
}
}
将您的证书添加到本地系统的信任库中,然后使用您的本地 Web 浏览器确认您可以访问其新路由的组件。