为函数配置定制域映射
域映射提供指向项目中 Code Engine 函数的 URL 路径。 通过 Code Engine,缺省情况下,每当部署函数时都会自动创建这些映射。 但是,您可以将自己的定制域映射到 Code Engine 函数,以将来自定制 URL 的请求从 Code Engine 控制台或 CLI 路由到您的函数。
如果要将函数与您拥有的域作为目标,那么可以使用定制域映射。 在 Code Engine中设置定制域映射时,请在项目中定义标准域名 (FQDN) 与 Code Engine 函数之间的 1-to-1 映射。
定制域映射必须仅指向一个映射。 但是,您可以配置到单个函数的多个域映射。
每个项目最多可以创建 80 个定制域映射。 请参阅 项目配额(Project quota)。
在 Code Engine中创建定制域映射时,在映射中使用的域名在区域中必须唯一。
要创建和设置定制域映射,请完成以下步骤:
- 查看 在 Code Engine 中使用定制域映射之前的注意事项。
- 从域注册器获取定制域 (在 Code Engine外部)。
- 在 Code Engine 中为 函数 (来自 Code Engine 控制台或 CLI) 配置定制域映射。
- 使用域注册器完成定制域配置。(位于 Code Engine外部)。
假设要为 www.example.com
和 shop.example.com
创建定制域映射。 在这种情况下,必须为每个唯一域或子域创建定制域映射。 但是,如果 TLS 私钥的证书包含在定制域映射中指定的域,那么可以对多个定制域映射复用相同的 TLS 私钥。 这意味着您可以将 TLS 私钥映射到多个域 (例如 www.example.com
和 shop.example.com
)
或通配符域 (例如 *.example.com
)。
从控制台配置定制域映射
您可以使用 Code Engine 函数通过 Code Engine 控制台创建到已注册域名的定制域映射。
准备工作
在此场景中,创建到具有 TLS 私钥的函数的定制域映射。 例如,创建定制域映射以将 www.example.com
域映射到 myfunction
函数。
-
从 Code Engine "项目" 页面,转至您的项目。
-
在“概述”页面中,单击 域映射。
-
在“域映射”页面中,单击 创建 以创建映射。
-
从“创建域映射”页面中,指定要用于此域映射的 TLS 私钥。Code Engine 验证证书是否由可信 CA 签名,以及证书是否与提供的定制域名和专用密钥匹配。
要创建新的 TLS 私钥,
- 单击创建。
- 添加与您的域相关联的 TLS 证书 (包括所有中间证书)。 如果将证书作为单独的文件提供给您,请将这些文件的内容并置在一起。 您可以在文件中提供此信息。
- 添加与证书相对应的私钥。 您可以在文件中提供此信息。
证书链的示例格式
-----BEGIN CERTIFICATE----- ...certificate... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ...intermediate-certificate... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ...intermediate-certificate... -----END CERTIFICATE-----
或者,要使用现有 TLS 密钥,
- 单击选择。
- 从列表中选择要使用的现有密钥。
-
指定域名和目标组件。
- 指定定制域名的标准域名; 例如,
www.example.com
。 - 选择现有目标函数; 例如,
myfunction
。 对于此示例,myfunction
函数使用icr.io/codeengine/helloworld
样本图像。 有关用于此示例的代码的更多信息,请参阅helloworld
。 - 请注意 CNAME 目标 字段。 此值是 使用域注册器完成定制域配置 时所需的 CNAME 条目,以便将以定制域为目标的流量路由到指定的函数。
- 指定定制域名的标准域名; 例如,
-
单击 创建 以创建定制域映射。
现在,您具有在 Code Engine中创建的域映射。 但是,发送到函数的请求不会 (尚未) 路由到定制域。 接下来,使用域注册器完成定制域配置。
假设要为 www.example.com
和 shop.example.com
创建定制域映射。 在这种情况下,必须为每个唯一域或子域创建定制域映射。 但是,如果 TLS 私钥包含在定制域映射中指定的域的证书,那么可以对多个定制域映射复用相同的 TLS 私钥。 TLS 私钥可以包含映射到特定多个域 (例如 www.example.com
和 shop.example.com
)
或通配符域 (例如 *.example.com
) 的证书。 请注意,不能在区域中多次使用通配符域。
使用 CLI 配置定制域映射
要使用 CLI 创建定制域映射,请使用 domainmapping create
命令。 此命令需要标准域名 (FQDN),例如 www.example.com
,目标函数和 TLS 私钥。 有关选项的完整列表,请参阅 ibmcloud ce domainmapping create
命令。
准备工作
- 获取已注册的域名。
- 获取定制域的已签名 TLS 证书和专用密钥。
- 设置 Code Engine CLI 环境。
- 创建项目。
- 创建函数。
注册域名后,您具有已签名的 TLS 证书及其针对此域的匹配专用密钥,并且具有现有 Code Engine 函数,您已准备好添加定制域映射。 您可以在 CLI 中使用 domainmapping create
命令,通过 Code Engine 函数创建定制域映射。
-
使用已签名的 TLS 证书和专用密钥创建 TLS 私钥。 在此示例中,
mycert.txt
文件包含 TLS 证书,包括与域关联的所有中间证书。 如果将证书作为单独的文件提供给您,请将这些文件的内容并置在一起。myprivatekey.txt
文件包含与证书链对应的匹配专用密钥。ibmcloud ce secret create --name mytlssecret --format tls --cert-chain-file mycertchain.txt --private-key-file myprivatekey.txt
示例输出
Creating tls secret 'mytlssecret'... OK
-
在 Code Engine
myfunction
函数与定制域www.example.com
之间创建定制域映射。 使用您在上一步中创建的 TLS 私钥。ibmcloud ce domainmapping create --domain-name www.example.com --target myhellofun --tls-secret mytlssecret
示例输出
OK Domain mapping successfully created.
下表概述了此示例中与 domainmapping create
命令配合使用的选项。 有关该命令及其选项的更多信息,请参阅 ibmcloud ce domainmapping create
命令。
选项 | 描述 |
---|---|
--domain-name |
自定义域映射的名称。 指定定制域的名称,例如 www.example.com 。 此值是必需的。 |
--target |
目标Code Engine函数的名称。 此值是必需的。 |
--tls-secret |
域映射的 TLS 私钥。 此值是必需的。 |
现在,将在 Code Engine中创建定制域映射。 但是,发送到函数的请求不会 (尚未) 路由到定制域。 接下来,必须 使用域注册器完成定制域配置。
使用域注册器完成定制域配置
创建 Code Engine 定制域映射后,必须将与标准域名匹配的 CNAME 记录添加到定制域的 DNS 设置中。 您可以在相应域注册器的配置设置中找到 DNS 设置。 完成此步骤,以便将以定制域为目标的流量路由到 Code Engine 定制域映射中定义的 Code Engine 函数。
测试定制域
在使用域注册器完成定制域配置并发布 CNAME 记录更新之后,可以使用定制域映射来测试函数。
使用浏览器,通过使用 curl
命令将定制域作为目标来调用该函数。
curl -v -X GET https://www.example.com
对定制域的调用的输出将映射到 myhellofun
函数,该函数使用 icr.io/codeengine/helloworld
样本图像。