IBM Cloud Docs
配置高可用性应用程序

配置高可用性应用程序

您可以跨多个区域部署 IBM Cloud® Code Engine 应用程序,使其具有抵御区域故障的能力。 请注意,此示例使用名为 IBM Cloud Internet Services 的全局内容交付网络 (CDN),但您可以使用备用提供者。 此示例还使用定制域。

先决条件

  • 您必须具有应用程序的定制域名,例如 example.com。 此域名由 Code Engine 应用程序使用。
  • 设置 Cloud Internet Services (CIS)的实例。
  • 将域名添加到 Cloud Internet Services (CIS)。 当您向 Cloud Internet Services (CIS)注册域名时,您将把对域名的控制委派给 Cloud Internet Services (CIS)。 请注意,此步骤可能需要一段时间才能完成。

在不同区域中创建项目

在三个不同区域中创建 Code Engine 项目。 您可以使用公共命名模式和共享标记。

例如,使用 CLI 或从控制台在 au-sydeu-debr-sao 区域中创建名为 global-app-project 的项目。

多个地区的项目
名称 状态 标记 地区 资源组 创建时间
global-app-project 就绪 global-app 悉尼 (au-syd) 缺省
global-app-project 就绪 global-app 法兰克福 (eu-de) 缺省 2 分钟
global-app-project 就绪 global-app 圣保罗 (br-sao) 缺省 3 分钟

有关更多信息,请参阅 管理项目

在多个区域中部署应用程序

现在,您的项目是在多个区域中创建的,请在每个项目中部署应用程序。

例如,部署 codeengine/helloworld 应用程序。

  1. Code Engine 项目 页面,单击您创建的其中一个项目的名称。

  2. 单击 应用程序,然后单击 创建 以创建新应用程序。

  3. 使用以下设置配置应用程序。

    1. 将应用程序命名为 global-app
    2. 选择 容器映像 以引用应用程序的容器映像。
    3. 输入 icr.io/codeengine/helloworld 作为映像参考。
    4. 资源和缩放 部分中,将最小实例数设置为 1。 通过将最小实例数设置为 1,可以从 CIS 实例启用运行状况检查以监视池的可用性,以便可以将流量路由到运行状况正常的池。
    5. 将其余选项保留为缺省设置,然后单击 创建
  4. 重复这些步骤以在每个项目中创建应用程序。

有关部署应用程序的更多信息,请参阅 部署应用程序

为定制域生成证书

在企业环境中,与企业域管理员协作以获取必需的证书。 但是,如果定制域在您的控制范围内,并且您希望快速创建未经自我认证的证书,那么可以选择使用 Let 's Encrypt 服务和 Certbot 来获取证书。

  1. 安装 Certbot。 Certbot 是 自动证书管理环境(ACME) 协议的客户机,用于自动执行 CA 与服务器之间的交互。 Let 's Encrypt 服务使用此客户机来验证域所有权并发放证书。 从“Certbot 指示信息”页面中,选择 Other 作为软件,并选择工作站的操作系统以获取安装 Certbot 命令行的适用信息。

  2. 运行以下命令创建证书 此示例命令为 example.comwww.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
    
  3. 要验证您是否拥有该域,请使用 Certbot 工具输出随附的值 (例如,_acme_challenge.example.com_acme_challenge.ww.example.com) 为您在上一步中请求的域设置域注册器的 TXT 记录。 设置 TXT 记录后,继续使用 Certbot 命令。

  4. Certbot 检索 Let 's Encrypt 签署的证书。 证书的存储位置由 Certbot 输出提供。 查找 fullchain.pemprivkey.pem 文件。

创建 TLS 私钥

创建 TLS 私钥以将证书存储在 Code Engine中。

  1. Code Engine 项目 页面,单击您创建的其中一个项目的名称。
  2. 选择 密钥和配置映射
  3. 单击创建
  4. 单击 TLS 密钥
  5. 输入 global-tls 作为名称。
  6. fullchain.pem 文件的内容复制到 证书链 字段中。
  7. privkey.pem 文件的内容复制到 专用密钥 字段中。
  8. 单击创建
  9. 重复这些步骤以在先前创建的每个项目中创建 TLS 私钥。

有关更多信息,请参阅 使用私钥

配置定制域映射

部署应用程序后,请为其配置定制域映射。

  1. Code Engine 项目 页面,单击您创建的其中一个项目的名称。
  2. 选择应用程序
  3. 选择 global-app 应用程序。
  4. 选择 域映射
  5. 选择 公共 以获取可视性。
  6. 单击 创建 以创建定制域映射。
  7. 单击 选择 以选择现有 TLS 密钥,然后选择 global-tls
  8. 输入标准域名; 例如,www.example.com
  9. 请注意 CNAME 目标值。 您需要此值以在 CIS中为域设置路由。
  10. 验证应用程序名称是否为 global-app
  11. 单击创建
  12. 重复这些步骤,为您创建的每个应用程序创建定制域映射。

配置运行状况检查

创建应用程序时,将 最小实例数 设置为 1。 由于应用程序的实例始终在每个区域中运行,因此您可以从 CIS 实例设置运行状况检查,以监视池的可用性。 通过设置运行状况检查,流量始终路由到正在运行的实例,从而使应用程序高度可用。

  1. 从 CIS 实例中,浏览至 可靠性> 全局负载均衡器> 运行状况检查
  2. 单击创建
  3. 将运行状况检查命名为与应用程序名称相同的名称: global-app
  4. 监视器类型 设置为 HTTPS,将 端口 设置为 443
  5. 接受其余选项的默认值。 请注意,如果您使用的是 codeengine/helloworld 应用程序以外的应用程序,请调整应用程序所需的任何选项。
  6. 单击创建

有关更多信息,请参阅 设置运行状况检查

配置 Cloud Internet Services (CIS) 负载均衡器

在定制域映射处于 Ready 状态后,为应用程序全局端点配置 Cloud Internet Services (CIS) 负载均衡器。 有关更多信息,请参阅 配置全局负载均衡器

  1. 转到 Cloud Internet Services (CIS) 控制台中的可靠性页面。

  2. 选择 源池,然后单击 创建

    1. 将池命名为 global-app-au-syd
    2. 源地址 设置为域名映射的 CNAME 目标。
    3. 将 Host 头设置为您的域名。
    4. 运行状况检查中,选择 现有运行状况检查,然后选择 global-app
    5. 单击保存
    6. 对包含已部署应用程序的每个区域重复这些步骤。 更改名称以反映您要作为目标的区域。 例如,global-app-de-euglobal-app-br-sao
  3. 选择 负载均衡器,然后单击 创建

    1. 命名负载均衡器。 请注意,该名称会出现在自定义域名 URL 中。 例如,如果您的自定义域是 global-app.example.com,而您将负载平衡器命名为 global-app,那么您的 URL 就是 global-app.example.com
    2. 交通转向 设置为 Geo
    3. 添加 地理位置 路径。 您可以选择为所有 CIS 区域或仅为某些区域创建路由。
      • 如果为所有 CIS 区域创建路由,那么在创建的每个路由中,添加先前创建的所有源池。 对它们进行排序,以便包含正在运行的应用程序且最接近您正在配置的区域路径的区域。 例如,如果在 au-sydeu-debr-sao 中创建了应用程序,那么对于 Oceana,请将 au-syd 放在第一位。 对于东欧和西欧,请将 de-eu 放在首位。 对于北美和南美,请将 br-sao 放在首位。
      • 如果仅为某些 CIS 区域创建路由,请为 缺省 区域添加路由。 此路径是在指定区域不可用时要使用的回退。
    4. 单击 创建 以创建负载均衡器。

验证应用程序是否可用

打开浏览器并输入负载均衡器名称以及定制域名; 例如,www.global-app.example.com

现在,您的应用程序高度可用。

清除教程

  1. 从 CIS中删除全局负载均衡器和源池。
  2. 从 CIS中删除 DNS 记录。 有关更多信息,请参阅 删除 DNS 记录
  3. 删除您创建的每个项目。 删除项目时,还会删除该项目中包含的所有组件。 有关更多信息,请参阅 删除项目

请注意,您的定制域未删除,但不再与您创建的应用程序相关联。