使用定制域映射
域映射为您的 Code Engine 应用程序或项目中的功能提供 URL 路径。 使用 Code Engine,默认情况下,每当您部署应用程序或创建函数时,这些映射都会自动创建。 不过,您可以将自定义域映射到 Code Engine 应用程序或功能。 此选项可将您的自定义 URL 中的请求路由到您的应用程序或功能。 您可以使用 Code Engine 控制台或CLI。
如果要将 Code Engine 应用程序或函数与您拥有的域作为目标,那么可以使用定制域映射。 当您在 Code Engine 中设置自定义域映射时,您将在您的完全限定域名(FQDN)和项目中的 Code Engine 应用程序或功能之间定义一对一的映射。
定制域映射必须仅指向一个 Code Engine 应用程序或函数。 但是,您可以配置到单个应用程序或函数的多个域映射。
要在 Code Engine中使用定制域映射,请完成以下步骤。 请注意,某些步骤是在 Code Engine外部完成的。
- 查看 在 Code Engine 中使用定制域映射之前的注意事项。
- 从域注册器获取定制域 (在 Code Engine外部)。
- 在 Code Engine 中为您的 应用程序 或 功能 配置自定义域映射 (通过 Code Engine 控制台或CLI )。
- 请与您的域名注册商 ( Code Engine 以外 )完成自定义域名的配置。
在您完成域名注册商的自定义域名设置,并在 Code Engine 中为您的应用程序或功能配置了域名映射后,请测试域名映射。
在 Code Engine中,可以 查看,更新 或 删除 到应用程序或函数的域映射。
在 Code Engine 中使用定制域映射之前的注意事项
在 Code Engine中实现定制域映射之前,请注意以下注意事项:
- 对于使用SSL/TLS证书保护的域名,仅使用自定义域名映射,该证书由公共、可信的证书颁发机构(CA)签署。
- 您可以定义指向公共域名的定制域映射。
- 如果您的域名只能通过非公开域名系统(DNS)解析,请提供一份列有域名并由受信任的公共认证机构(CA)签名的证书。
- 提供完整的证书链,从与自定义域对应的证书开始,然后是所有中间证书,直到根证书。
- 不能使用自签名证书。
- 不能使用由不可信企业 CA 或非公共企业 CA 签署的证书。
- 您的证书必须具有设置的到期日期。
获取定制域及其 TLS 证书和专用密钥
在 Code Engine中配置定制域映射之前,必须首先从域注册器 (在 Code Engine 外部) 获取定制域。
- 从域注册器中,获取定制域; 例如,
www.example.com
。 - 为您的自定义域名获取SSL/TLS 证书:
-
您可以使用 Let's Encrypt服务和 Certbot 创建非自认证证书。 如果自定义域名在您的控制范围内,并且您想快速创建证书,您可以使用Certbot和Let's Encrypt服务来获取证书。
-
您可以从可信机构获得一份签名证书。 这种数字证书用于在服务器和客户端之间建立通信隐私。 这些证书包含的信息用于在端点之间建立可靠、安全的连接。 您还必须获取与 TLS 证书匹配的私钥。
您可以从您的认证机构获得证书和钥匙。 为您的自定义域名获取签名的SSL/TLS 证书。 出于安全考虑,Code Engine 仅支持自定义域名映射,且该映射必须使用由受信任的公共CA机构签发的TLS/SSL证书进行配置。
如果您的自定义域名管理已委托给 Cloud Internet Services (CIS) 如果您的自定义域管理已委托给 CIS,则可通过订购源证书来获取您的证书和密钥。 采用这种方法后,就可以应用 端到端灵活 TLS 模式。
-
我该如何为自定义域名使用 Certbot 和 Let's Encrypt 服务?
在企业环境中,与企业域管理员协作以获取必需的证书。 然而,如果自定义域名在您的控制范围内,并且您想要快速获得证书,那么您可以使用 Certbot 和 Let's Encrypt服务来获取证书:
-
安装 Certbot。 Certbot 是 自动证书管理环境(ACME) 协议的客户机,用于自动执行 CA 与服务器之间的交互。 Let 's Encrypt 服务使用此客户机来验证域所有权并发放证书。 从 Certbot 文档中选择
Other
作为软件,并选择工作站的操作系统,以获取安装 Certbot 命令行的适用信息。 -
运行以下命令创建证书 此示例命令为
example.com
和www.example.com
定制域创建证书。 请确保更新您自己的定制域的命令。certbot certonly --manual --preferred-challenges dns --email webmaster@example.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --domain example.com --domain www.example.com
-
要验证您是否拥有该域,请使用 Certbot 工具输出随附的值 (例如,
_acme_challenge.example.com
和_acme_challenge.ww.example.com
) 为您在上一步中请求的域设置域注册器的TXT
记录。 设置TXT
记录后,继续使用 Certbot 命令。 -
Certbot 检索 Let 's Encrypt 签署的证书。 证书的存储位置由 Certbot 输出提供。 查找
fullchain.pem
和privkey.pem
文件。
用于在 Ubuntu 系统上运行 Certbot 的示例命令
sudo certbot certonly --manual --preferred-challenges dns --email webmaster@example.com --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --domain example.com --domain www.example.com
example.com
和 www.example.com
的证书请求的示例输出
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:
_acme-challenge.example.com.
with the following value:
<MASKED>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name:
_acme-challenge.www.example.com
with the following value:
<MASKED>
(This must be set up in addition to the previous challenges; do not remove,
replace, or undo the previous challenge tasks yet. Note that you might be
asked to create multiple distinct TXT records with the same name. This is
permitted by DNS standards.)
Before continuing, verify the TXT record has been deployed. Depending on the DNS
provider, this may take some time, from a few seconds to multiple minutes. You can
check if it has finished deploying with aid of online tools, such as the Google
Admin Toolbox: https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.www.example.com.
Look for one or more bolded line(s) below the line ';ANSWER'. It should show the
value(s) you've just added.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2023-02-01.
These files will be updated when the certificate renews.
NEXT STEPS:
- This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate's expiry date.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
您的证书已就绪。
如何将从 CIS 获取的源证书用于自定义域名?
如果您从公共和可信 CA 获取证书和密钥,那么它们就是经过签名的,是安全的。 您与 CA 合作,为自定义域获取签名 SSL/TLS 证书。
您还可以使用 Cloud Internet Services (CIS) 订购源证书,然后配置 CIS,根据该流程将用户 IP 地址转发给您的应用程序或功能:
-
订购您的原产地证书:
- 在 IBM Cloud 控制台中,转到 资源列表,然后筛选
Internet Services
实例。 从搜索结果中,单击目标实例的名称,查看其详细信息页面。 - 在 CIS 实例详细信息页面,转到起源页面 (Security>Origin ),然后单击订购。
- 在“订购原产地证书”窗格中,保留所有默认值并输入要使用的域名。 例如,
myapp.example.com
。 点击订单确认。 - 复制起源证书和私钥值。 您在映射域名时需要这些信息。
- 在 IBM Cloud 控制台中,转到 资源列表,然后筛选
-
配置并应用 端到端灵活 TLS 模式。
边缘证书由 CIS 提供。 源证书仅用于加密 CIS 与 Code Engine 应用程序或功能之间的流量。
在 CIS 中成功创建 DNS 记录后,您就可以配置 CIS,将用户 IP 地址转发到您的应用程序或功能。
在 Code Engine 中配置定制域映射
您现在已经熟悉了自定义域映射的概念,并从域名注册商处获得了自定义域。 您已准备好配置您的 Code Engine 应用程序或功能,以使用自定义域映射。 请参阅:
查看域映射
从控制台查看域映射
您可以从控制台查看应用程序或功能的所有自动生成和定制域映射的列表。 缺省情况下,表内容的作用域限定为定制域映射。 使用 类型 过滤器来修改视图。
此视图显示有关与映射关联的证书到期的信息。 当证书到期时,无法再使用域映射访问应用程序或功能,并且此条件会产生 SSL 错误。 如果您有即将到期的证书,请 更新定制域映射 以使用更新后的证书。
此视图还显示有关与域映射关联的特定应用程序或函数以及域映射类型的信息。 对于 Code Engine 生成的映射,类型可以是 System-public
、System-private
或 System-internal
。 对于您创建的定制域映射,类型为 Custom
。
- 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
- 在概览页面中,点击 “域映射”。
- 在域映射页面中,查看现有应用程序或功能的已定义域映射列表。
Type
指示是自动生成映射还是定制域映射。
使用 CLI 查看域映射
要使用 CLI 查看应用程序或功能的所有定制域映射的列表,请使用 ibmcloud ce domainmapping list
命令。 例如
ibmcloud ce domainmapping list
示例输出
Listing domain mappings...
OK
Name CNAME Target Target-Type Status Secret Name Age
www.example.com custom.abcdabcdabc.us-south.codeengine.appdomain.cloud myapp app ready mytlssecret 36m
要查看应用程序或函数的所有域映射的列表,包括您创建的定制域映射以及 Code Engine 创建的自动生成的域映射,请使用 ibmcloud ce domainmapping list
命令指定 --all
选项。 定制域映射显示 CNAME
的值。
更新域映射
创建定制域映射时,TLS 私钥在证书到期之前有效。 在域映射页面中,您可以查看有关证书到期前剩余天数的信息。
请务必了解用于定制域的证书是列出多个域名,还是使用通配符证书。 当您的证书即将过期(或已过期)时,请使用更新的证书信息编辑域映射的现有 TLS 密钥。 请勿为您的域映射创建不同的 TLS 密钥和更新的凭证。
从控制台更新域映射
假设 www.example.com
的定制域映射具有即将到期的证书。 您可以从控制台更新域映射以使用已更新的证书,甚至替换映射的 TLS 私钥。 您还可以更新域映射以指向项目中的其他应用程序或功能。
- 从 Code Engine "项目" 页面,转至您的项目。
- 在“概述”页面中,单击 域映射。
- 从“域映射”页面中,单击 操作 图标
> 编辑 以编辑映射。 或者,您可以在定义的定制域的行中单击以更新映射。
- 在“更新域映射”面板中,您可以更改与此域映射关联的应用程序或功能。 或者,您可以替换或更新此映射的 TLS 密钥。
- 单击更新以保存更改。
更新映射后,您可以查看最近更改的域映射列表。
使用 CLI 更新域映射
要更新定制域映射,请使用 ibmcloud ce domainmapping update
命令。
假设 www.example.com
的定制域映射具有即将到期的证书。 您可以更新域映射以使用更新的证书,甚至可以使用 --tls-secret
选项替换映射的 TLS 私钥。 您也可以使用 --target
选项更新您的域映射,指向项目中的其他应用程序或功能。
以下示例更新了 www.example.com
自定义域映射,使其使用名为 mytlssecret
的更新TLS密钥。
-
使用本地工作站上
mycertchain2.txt
和myprivatekey2
文件中的更新证书和私钥信息更新TLS密钥mytlssecret
。ibmcloud ce secret update --name mytlssecret --cert-chain-file mycertchain2.txt --private-key-file myprivatekey2.txt
示例输出
Updating secret mytlssecret.. OK
-
更新域映射以使用更新后的 TLS 私钥。
ibmcloud ce domainmapping update --domain-name www.example.com --tls-secret mytlssecret2
示例输出
Getting domain mapping 'www.example.com.org'... Updating domain mapping 'www.example.com.org'...
删除域映射
删除域映射时,将除去 Code Engine 应用程序或函数与 Code Engine中的定制域映射的关联。 此操作不会删除关联的应用程序,功能或 TLS 私钥。
删除域映射中引用的应用程序或功能,也会删除与该应用程序或功能关联的任何自定义域映射。
当您删除自定义域映射,但保留域DNS设置时,您的流量仍会路由到 Code Engine 项目。 例如,CNAME指向 Code Engine 的项目仍然可以设置。 但是,将使用 404 (找不到) 错误消息来应答该请求。 确保域注册器在 DNS 设置中更新标准域名的关联 CNAME 记录。
从控制台删除域映射
从控制台中,只能删除类型为 Custom
的域映射。 Code Engine 自动生成的域映射无法删除。
要从控制台中删除定制域映射,
- 从 Code Engine "项目" 页面,转至您的项目。
- 在“概述”页面中,单击 域映射 以查看已定义的域映射的列表。
- (可选) 单击 类型 以按类型过滤域映射。
- 从“域映射”页面中,删除要从应用程序或功能中除去的定制域映射。 单击 操作 图标
> 删除 以删除映射。
使用 CLI 删除域映射
要使用 CLI 删除定制域映射,请使用 ibmcloud ce domainmapping delete
命令。
您只能删除自定义的域名映射,不能删除 Code Engine 生成的域名映射。 运行 ibmcloud ce domainmapping list
命令以使用 CLI 显示定制域映射的列表。 定制域映射具有生成的 CNAME
记录。 在 CLI
中,可以使用 ibmcloud ce domainmapping get
命令为指定的定制域映射获取生成的 CNAME
值。
ibmcloud ce domainmapping delete --domain-name www.example.com -f
示例输出
Deleting domain mapping 'www.example.com'...
OK
后续步骤
获取自定义域映射的 CNAME 记录
Code Engine 为定义的定制域映射提供 CNAME 目标。
要从 Code Engine 控制台获取 CNAME 记录,请打开定义的定制域映射并查看“更新域映射”页面。 通过下列其中一种方法打开“更新域映射”页面:
- 从“域映射”表中,单击定义的定制域的行。
- 单击 操作 图标
> 编辑 以编辑映射。
从“更新域映射”页面中,可以获取 CNAME target
值。 例如,www.example.com
映射具有 custom.abcdabcdabc.us-east.codeengine.appdomain.cloud
CNAME 值,其中 abcdabcdabc
是自动生成的唯一标识,us-east
是项目的区域。
要使用 CLI 获取 CNAME 记录,请使用 ibmcloud ce domainmapping get
命令。 例如:
ibmcloud ce domainmapping get --domain-name www.example.com
示例输出
Getting domain mapping 'www.example.com'...
OK
Domain Name: www.example.com
CNAME: custom.abcdabcdabc.us-south.codeengine.appdomain.cloud
Target Name: myapp
Target Type: app
TLS Secret: mytlssecret
Status: ready
拥有 CNAME 目标后,即可将 CNAME 记录条目添加到定制域的 DNS 设置中。 请注意,使用域注册器发布 CNAME 记录可能需要一些时间来填充因特网中的 DNS 更改。
在 CIS 中添加 DNS 记录,将流量导向 Code Engine 应用程序
如果您有一个 CIS 实例来管理自定义域,请更新 DNS 记录以指向您的 Code Engine 项目,如下所示。 请注意,对于非 CIS 域名注册商,步骤有所不同,但目标是相同的:创建具有 CNAME 类型的 DNS 记录,指向 Code Engine 项目 CNAME 端点:
-
在 CIS 实例详细信息页面,转到可靠性>DNS。 滚动到 DNS 记录,然后单击添加。
-
在“添加记录”窗格中
- 选择 CNAME 作为类型。
- 设置子域;例如,
myapp
. - 提供之前复制的 CNAME 目标值作为别名域名。
- 验证 DNS 记录的详细信息输出是否显示域名映射为别名。 例如,查找类似于:
myapp.example.com is an alias of custom.<id>.<region>.codeeng.appdomain.cloud
. 单击添加确认添加 DNS 记录。
如果需要注册多个域和子域,如
example.com
和www.example.com
,则必须为每个子域重复步骤。 您可以考虑创建一个涵盖多个域的单一证书。 不过,您只能在一个地区使用一次该证书。 如果您计划在一个地区的多个项目中使用自定义域,请将它们分开。
您现在已经熟悉了自定义域映射的使用,并获得了带有 TLS 证书和私钥的自定义域。 您可以在 Code Engine 中为您的 应用程序 或 功能 配置自定义域映射。