配置 Terraform 模块

Oracle Cloud 中承载单租户 SaaS 应用程序所需的网络资源在 Terraform 模块中定义。下载模块并设置所需的变量。

下载 Terraform 代码

此解决方案的 Terraform 代码在 GitHub 上提供。

  1. 在左侧的导航窗格中,单击下载代码
  2. 单击 Git 资料档案库
  3. 将资料档案库克隆或下载到本地计算机。

关于 Terraform 代码

此解决方案的 Terraform 代码组织为多个模块,每个模块包含目标拓扑的特定组件的资源。

Terraform 代码在顶层包含以下目录和文件:
  • chef:此目录包含用于安装和配置路由网关的 Chef 配方。
  • examples:此目录包含实施此解决方案所需的 Terraform 代码。此目录中的代码使用 modules 目录中定义的模块。
  • LICENSE.txt:此文件包含样例代码的许可证条款和条件。
  • modules:此目录包含为解决方案提供构建块的 Terraform 模块。
  • README.md:此文件提供有关代码和使用代码的基本说明的简要说明。
  • test:此目录包含可用于验证部署的测试脚本。
examples/full-deployment 目录包含调用此解决方案所需的 Terraform 模块的代码。它包含以下子目录和文件:
examples/full-deployment
├── common
│   ├── compartments
│   └── configuration
├── Makefile
├── management
│   ├── access
│   ├── network
│   ├── server_attachment
│   └── servers
├── peering
│   ├── network
│   └── routing
├── README.md
├── tenant
│   ├── network
│   └── servers
├── terraform.tfvars.sample
└── terragrunt.hcl
配置目录或文件 在配置中定义的资源
common/configuration 无。

该目录中的代码使用 examples/network_calculator 中的 Terraform 模块来计算所需的租户 VCN 和对等 VCN 的数量、每个 VCN 的 CIDR 大小以及租户 VCN 和对等 VCN 之间的映射。在创建 Vcn 和其他网络资源时,将使用计算结果。

common/compartments
  • 一种管理区间。
  • 对等 Vcn 的一个或多个区间。
  • 每个租户的区间。
management/access 附加到 ISV VCN 中公共子网的 Oracle Linux 计算实例。此实例是拓扑的基础服务器。
management/network
  • ISV VCN 也称为管理 VCN。
  • ISV VCN 的 NAT 和互联网关。
  • 以下子网:
    • 管理服务器的专用管理子网。
    • Bastion 服务器的公共访问子网。
    • 路由网关的专用对等连接子网
  • VCN 的默认路由表,规则用于通过互联网网关为公共互联网绑定的流量。
  • 对等连接子网的路由表,规则用于通过 NAT 网关路由公共互联网绑定的流量。
  • 访问子网的安全列表,规则如下:
    • 允许来自任何源的入站 ICMP 通信。
    • 允许任何目的地的出站 TCP 流量绑定。
  • 对等连接子网的安全列表,规则如下:
    • 允许任何目的地的出站 TCP 流量绑定。
    • 允许来自任何源的入站 ICMP 通信。
    • 允许从任何源到端口 5666 的入站 TCP 通信。
  • 管理子网的安全列表,规则如下:
    • 允许来自访问子网的入站 ICMP 通信。
    • 允许从访问子网到端口 80 的入站 HTTP 通信。
    • 允许任何目的地的出站 TCP 流量绑定。
management/server_attachment
  • 附加到管理子网的路由表,规则如下:
    • 通过 NAT 网关为公共互联网路由通信绑定。
    • 将每个租户 Vcn 的流量绑定到适当的路由网关实例。
  • 附加到访问子网的路由表,规则如下:
    • 通过互联网网关路由公共互联网的绑定流量。
    • 将每个租户 Vcn 的流量绑定到适当的路由网关实例。
management/servers 附加到 ISV VCN 中管理子网的 Oracle Linux 计算实例。

可以使用管理服务器安装和运行基础结构监视应用程序,例如,Nagios Core。

peering/network
  • 一个动态组,由承载路由网关的计算实例组成。
  • 一个策略,用于允许在此配置中定义的动态组使用区间中的 Vnic 和专用地址。
  • 两个对等 VCN,每个 VCN 中都有一个子网。
  • 每个 VCN 的本地对等连接网关(LPG)。
  • 每个子网的安全列表,其中包含允许所有入站 ICMP 通信流量和所有出站 TCP 通信流量的规则。
  • 每个子网的路由表,规则用于通过相应对等 VCN 的 LPG 路由每个租户 VCN 的流量绑定。
peering/routing
  • 两个路由网关:
    • 一个网关是一对计算实例,每个实例在不同的故障域中,安装有定位对象以实现高可用性。每个计算实例都有两个辅助 VNIC,其中一个浮动 IP 地址连接到第一个辅助 VNIC。此网关旨在演示路由网关的 HA 故障转移。
    • 其他网关是单个计算实例。
  • 具有以下规则的网络安全组:
    • 允许组中的所有 TCP 通信端口 3121、2224 和 21064。
    • 允许组中的所有 UDP 通信传送到端口 4505。
tenant/network 每个租户的以下资源:
  • 租户 VCN。
  • 租户 VCN 的 NAT 和互联网网关。
  • 两个子网:一个公共和另一个专用。
  • VCN 的 LPG。
  • 公共子网的路由表,规则如下:
    • 通过互联网网关路由公共互联网的绑定流量。
    • 通过 LPG 为对等连接子网绑定的路由流量。
    • 通过 LPG 为管理子网绑定的路由流量。
  • 专用子网的路由表,规则如下:
    • 通过 NAT 网关为公共互联网路由通信绑定。
    • 通过 LPG 为对等连接子网绑定的路由流量。
    • 通过 LPG 为管理子网绑定的路由流量。
  • 公共子网的安全列表,规则如下:
    • 允许来自任何目标的入站 ICMP 通信。
    • 允许发送到任何目标的 TCP 流量。
  • 专用子网的安全列表,规则如下:
    • 允许来自任何目标的入站 ICMP 通信。
    • 允许发送到任何目标的 TCP 流量。
    • 允许入站 TCP 通信到端口 5666。
tenant/servers 每个租户划分中的 Oracle Linux 计算实例。

可以使用此实例安装和运行基础结构监视代理。例如,如果在 ISV VCN 中的管理服务器中安装了 Nagios Core,则可以在每个租户区间的计算实例中安装 Nagios 代理。代理可以监视区间中的服务器,并将度量发送到广域监视服务器。

terraform.tfvars.sample Terraform 变量文件的模板。
terragrunt.hcl Terragrunt 配置。

设置 Terraform 变量

指定 Terraform 连接到 Oracle Cloud Infrastructure 租户、计算实例的 SSH 密钥和路由集群的口令所需的参数。

  1. examples/full-deployment/terraform.tfvars.sample 复制到 examples/full-deployment/terraform.tfvars
  2. 在纯文本编辑器中打开 examples/full-deployment/terraform.tfvars,并按如下所示设置变量的值:
    变量 说明
    tenancy_ocid 租户的 OCID。

    您可以在 Oracle Cloud Infrastructure Web 控制台中找到租户的 OCID。从服务菜单中选择管理,然后单击租户详细信息

    user_ocid 您希望 Terraform 在 Oracle Cloud Infrastructure 中用来验证的用户的 OCID。

    要查找用户的 OCID,请从服务菜单中选择标识,然后选择用户。在列表中找到您的用户名,然后复制其 OCID。

    fingerprint 您上载的 API 签名密钥的指纹。
    private_key_path 包含您的私有 API 签名密钥的文件的完整路径和名称。
    region 要创建资源的区域的 ID。

    例如,“美国东部” (Ashburn)区域的 ID 为 us-ashburn-1

    请参阅区域和可用性域

    compartment_ocid 要在其中创建资源的区间的 OCID。

    您指定的区间将成为拓扑的父区间。

    要查找区间的 OCID,请从服务菜单中选择标识,然后选择间。在列表中找到所需的区间,然后复制其 OCID。

    bastion_ssh_public_key_file 包含 bastion 服务器的 SSH 公共密钥的文件的完整路径和名称。
    bastion_ssh_private_key_file 包含 bastion 服务器的 SSH 私有密钥的文件的完整路径和名称。
    remote_ssh_public_key_file 包含拓扑中私有计算实例的 SSH 公共密钥的文件的完整路径和名称。
    remote_ssh_private_key_file 包含拓扑中私有计算实例的 SSH 私有密钥的文件的完整路径和名称。

    保存并关闭 terraform.tfvars

    下面是一个已完成的 terraform.tfvars 文件示例:

    tenancy_ocid = "ocid1.tenancy.oc1..aaaaaaaa2 (truncated)"
    user_ocid = "ocid1.user.oc1..aaaaaaaag (truncated)"
    fingerprint = "56:f6:8e:bf: (truncated)"
    private_key_path = "/home/joe/.oci/oci_api_key.pem"
    region = "us-ashburn-1"
    
    compartment_ocid = "ocid1.compartment.oc1..aaaaaaaam (truncated)"
    
    bastion_ssh_public_key_file = "/home/joe/.ssh/ida_rsa_bastion.pub"
    bastion_ssh_private_key_file = "/home/joe/.ssh/ida_rsa_bastion"
    remote_ssh_public_key_file = "/home/joe/.ssh/ida_rsa_remote.pub"
    remote_ssh_private_key_file = "/home/joe/.ssh/ida_rsa_remote"
  3. 为环境变量中的路由集群设置共享密钥。
    export TF_VAR_hacluster_password="somePassword"

    密码必须至少包含八个字符。它必须至少包含一个大写字母、一个小写字母、数字和一个特殊(非字母数字)字符。