为应用程序配置定制域映射

域映射为 URL 项目中的 Code Engine 应用程序提供了路径。 有了 Code Engine,只要部署应用程序,这些映射就会默认自动创建。 不过,您可以将自己的自定义域映射到 Code Engine 应用程序,以便从 Code Engine 控制台或 CLI 将来自自定义 URL 的请求路由到您的应用程序。

如果要将应用程序与您拥有的域作为目标,那么可以使用定制域映射。 在 Code Engine中设置定制域映射时,请在项目中的标准域名 (FQDN) 与 Code Engine 应用程序之间定义 1-to-1 映射。

定制域映射必须仅指向一个应用程序。 但是,您可以配置到单个应用程序的多个域映射。

每个项目最多可以创建 80 个定制域映射。 请参阅 项目配额(Project quota)

在 Code Engine中创建定制域映射时,您在映射中使用的域名在区域中必须唯一。

要创建和设置定制域映射,请完成以下步骤:

  1. 查看 在 Code Engine中使用定制域映射之前的注意事项
  2. 从域注册器获取定制域 (在 Code Engine外部)。
  3. 在 Code Engine 中为 应用程序 (来自 Code Engine 控制台或 CLI) 配置定制域映射。
  4. 使用域注册器完成定制域配置 (在 Code Engine外部)。

假设要为 www.example.comshop.example.com 创建定制域映射。 在这种情况下,必须为每个唯一域或子域创建定制域映射。 但是,如果 TLS 私钥的证书包含在定制域映射中指定的域,那么可以对多个定制域映射复用相同的 TLS 私钥。 这意味着您可以将 TLS 私钥映射到多个域 (例如 www.example.comshop.example.com) 或通配符域 (例如 *.example.com)。

从控制台配置定制域映射

您可以使用 Code Engine 应用程序通过 Code Engine 控制台创建到已注册域名的定制域映射。

在此场景中,我们将创建到具有 TLS 私钥的应用程序的定制域映射。 例如,创建定制域映射以将 www.example.com 域映射到 myapp 应用程序。

准备工作

  1. Code Engine "项目" 页面,转至您的项目。

  2. 在“概述”页面中,单击 域映射

  3. 在“域映射”页面中,单击 创建 以创建映射。

  4. 从“创建域映射”页面中,指定要用于此域映射的 TLS 私钥。Code Engine 验证证书是否由可信 CA 签署,以及证书是否与提供的定制域名和专用密钥匹配。

    要创建新的 TLS 私钥,

    1. 单击创建
    2. 添加与您的域关联的 TLS 证书 (包括所有中间证书)。 如果将证书作为单独的文件提供给您,请将这些文件的内容并置在一起。 您可以在文件中提供此信息。
    3. 添加与证书相对应的私钥。 您可以在文件中提供此信息。

    证书链的示例格式

    -----BEGIN CERTIFICATE-----
    ...certificate...
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    ...intermediate-certificate...
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
    ...intermediate-certificate...
    -----END CERTIFICATE-----
    

    或者,要使用现有 TLS 密钥,

    1. 单击选择
    2. 从列表中选择要使用的现有密钥。
  5. 指定域名和目标组件。

    • 指定定制域名的标准域名; 例如,www.example.com
    • 选择现有目标应用程序; 例如,myapp。 对于此示例,myapp 应用程序使用 icr.io/codeengine/helloworld 样本图像。 有关用于此示例的代码的更多信息,请参阅 helloworld
    • 请注意 CNAME 目标 字段。 此值是 使用域注册器完成定制域配置 时所需的 CNAME 条目,以便将以定制域为目标的流量路由到指定的应用程序。
  6. 单击 创建 以创建定制域映射。

现在,您具有在 Code Engine中创建的域映射。 但是,发送到应用程序的请求不会 (尚未) 路由到定制域。 接下来,您必须 使用域注册器完成定制域配置 (在 Code Engine外部)。

使用 CLI 配置定制域映射

要使用 CLI 创建定制域映射,请使用 domainmapping create 命令。 此命令需要标准域名 (FQDN),例如 www.example.com,目标应用程序和 TLS 密钥。 有关选项的完整列表,请参阅 ibmcloud ce domainmapping create 命令。

准备工作

注册域名后,您具有已签名的 TLS 证书及其针对此域的匹配专用密钥,并且您具有现有 Code Engine 应用程序,您已准备好将定制域映射添加到此应用程序。 您可以在 CLI 中使用 domainmapping create 命令,通过 Code Engine 应用程序创建定制域映射。

  1. 使用已签名的 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
    
  2. 在 Code Engine myapp 应用程序与定制域 www.example.com 之间创建定制域映射。 使用您在上一步中创建的 TLS 私钥。

    ibmcloud ce domainmapping create --domain-name www.example.com --target myapp --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 外部)。

使用域注册器完成定制域配置

创建 Code Engine 定制域映射后,必须将与标准域名匹配的 CNAME 记录添加到定制域的 DNS 设置中。 您可以在相应域注册器的配置设置中找到 DNS 设置。 完成此步骤,以便将以定制域为目标的流量路由到 Code Engine 定制域映射中定义的 Code Engine 函数。

测试定制域

在使用域注册器完成定制域配置并发布 CNAME 记录更新之后,可以使用定制域映射来测试应用程序。

使用浏览器,通过使用 curl 将定制域作为目标来调用应用程序。

curl -v -X GET https://www.example.com

示例输出

Hello World from:
     ___  __  ____  ____
    / __)/  \(    \(  __)
   ( (__(  O )) D ( ) _)
    \___)\__/(____/(____)
 ____  __ _   ___  __  __ _  ____
(  __)(  ( \ / __)(  )(  ( \(  __)
 ) _) /    /( (_ \ )( /    / ) _)
(____)\_)__) \___/(__)\_)__)(____)
Some Env Vars:
--------------
CE_API_BASE_URL=https://api.private.us-south.codeengine.cloud.ibm.com
CE_APP=myapp
CE_DOMAIN=us-south.codeengine.appdomain.cloud
CE_PROJECT_ID=abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
CE_REGION=us-south
CE_SUBDOMAIN=abcdabcdab
HOME=/root
HOSTNAME=myapp-00001-deployment-6db6d89dc7-k6qc7
K_REVISION=myapp-00001
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PORT=8080
PWD=/
SHLVL=1

对定制域的调用的输出将映射到使用 icr.io/codeengine/helloworld 样本图像的 myapp 应用程序。

有关 Code Engine中的域映射的更多信息,请参阅 使用定制域映射