Oracle云基础架构(OCI)负载均衡器平台模块
此Terraform模块创建并管理Oracle Cloud Infrastructure(OCI)负载平衡器及其所有相关资源,包括后端集、侦听器、证书、路径路由集、规则集和主机名。
特性
- 完整的负载均衡器管理:使用灵活的形状选项创建和配置OCI负载均衡器
- 后端套件:支持具有不同负载平衡策略的多个后端集
- SSL/TLS支持:完整的SSL证书管理和HTTPS侦听器
- 健康检查:后端服务器的可配置健康检查
- 路径路由:支持到不同后端集的基于路径的路由
- 规则集:具有自定义规则的高级交通管理
- 主机名管理:支持多站点托管的虚拟主机名
- 安全组:网络安全组集成
- 灵活的形状:支持固定和灵活的负载平衡器形状
- 私有的/公共的:支持私有和公共负载平衡器
用法
基本HTTP负载平衡器
module "load_balancer" {
source = "path/to/this/module"
compartment_id = "ocid1.compartment.oc1..example"
display_name = "web-app-lb"
shape = "flexible"
subnet_ids = ["ocid1.subnet.oc1..example1", "ocid1.subnet.oc1..example2"]
shape_details = {
minimum_bandwidth_in_mbps = 10
maximum_bandwidth_in_mbps = 100
}
backend_sets = {
"web-backend" = {
policy = "ROUND_ROBIN"
backends = [
{
name = "web-server-1"
ip_address = "10.0.1.10"
port = 80
weight = 1
},
{
name = "web-server-2"
ip_address = "10.0.1.11"
port = 80
weight = 1
}
]
health_checker = {
protocol = "HTTP"
interval_ms = 10000
port = 80
response_body_regex = ".*"
retries = 3
return_code = 200
timeout_in_millis = 3000
url_path = "/health"
}
}
}
listeners = {
"http-80" = {
default_backend_set_name = "web-backend"
port = 80
protocol = "HTTP"
}
}
freeform_tags = {
Environment = "production"
Application = "web-app"
}
}带SSL终止的HTTPS负载均衡器
module "https_load_balancer" {
source = "path/to/this/module"
compartment_id = "ocid1.compartment.oc1..example"
display_name = "secure-web-lb"
shape = "flexible"
subnet_ids = ["ocid1.subnet.oc1..example1", "ocid1.subnet.oc1..example2"]
shape_details = {
minimum_bandwidth_in_mbps = 10
maximum_bandwidth_in_mbps = 400
}
certificates = {
"ssl-cert" = {
private_key = file("path/to/private-key.pem")
public_certificate = file("path/to/certificate.pem")
ca_certificate = file("path/to/ca-bundle.pem")
}
}
backend_sets = {
"secure-backend" = {
policy = "ROUND_ROBIN"
backends = [
{
name = "app-server-1"
ip_address = "10.0.1.20"
port = 8080
weight = 1
}
]
health_checker = {
protocol = "HTTP"
interval_ms = 10000
port = 8080
url_path = "/actuator/health"
return_code = 200
}
}
}
listeners = {
"https-443" = {
default_backend_set_name = "secure-backend"
port = 443
protocol = "HTTP"
ssl_configuration = {
certificate_name = "ssl-cert"
verify_peer_certificate = false
protocols = ["TLSv1.2", "TLSv1.3"]
}
}
}
}专用负载平衡器
module "private_load_balancer" {
source = "path/to/this/module"
compartment_id = "ocid1.compartment.oc1..example"
display_name = "internal-api-lb"
shape = "flexible"
subnet_ids = ["ocid1.subnet.oc1..private-subnet"]
is_private = true
network_security_group_ids = ["ocid1.networksecuritygroup.oc1..example"]
shape_details = {
minimum_bandwidth_in_mbps = 10
maximum_bandwidth_in_mbps = 100
}
backend_sets = {
"api-backend" = {
policy = "LEAST_CONNECTIONS"
backends = [
{
name = "api-server-1"
ip_address = "10.0.2.10"
port = 8080
},
{
name = "api-server-2"
ip_address = "10.0.2.11"
port = 8080
}
]
}
}
listeners = {
"http-8080" = {
default_backend_set_name = "api-backend"
port = 8080
protocol = "HTTP"
}
}
}例子
这 examples/ 目录包含完整的工作示例:
simple-load-balancer/:基本HTTP负载平衡器设置https-load-balancer/:具有SSL终止和重定向规则的HTTPS负载平衡器
需求
| 名称 | 版本 |
|---|---|
| 地形 | >=1.0 |
| >= 5.0.0 |
提供商
| 名称 | 版本 |
|---|---|
| >= 5.0.0 |
资源
输入
| 名称 | 描述 | 类型 | 默认值 | 必填 |
|---|---|---|---|---|
| compartment_id | 要在其中创建负载平衡器的隔间的OCID | string | n/a | 是 |
| display_name | 负载平衡器的用户友好名称 | string | n/a | 是 |
| subnet_ids | 用于创建负载均衡器的子网OCID数组 | list(string) | n/a | 是 |
| shape | 负载平衡器的形状 | string | "flexible" | 没有 |
| is_private | 负载平衡器是否具有VCN本地(专用)IP地址 | bool | false | 没有 |
| network_security_group_ids | 与负载平衡器关联的NSG OCID数组 | list(string) | [] | 没有 |
| reserved_ips | 保留的IP OCID数组 | list(object({id = string})) | [] | 没有 |
| ip_mode | 负载平衡器是否具有IPv4或IPv6 ip地址 | string | "IPV4" | 没有 |
| is_delete_protection-enabled | 是否为负载平衡器启用了删除保护 | bool | false | 没有 |
| shape_details | 灵活负载平衡器形状的形状细节 | object({maximum_bandwidth_in_mbps = number, minimum_bandwidth_in_mbps = number}) | null | 没有 |
| backend_sets | 要创建的后端集映射 | map(object) | {} | 没有 |
| listeners | 要创建的监听器映射 | map(object) | {} | 没有 |
| certificates | 要创建的SSL证书映射 | map(object) | {} | 没有 |
| path_route_sets | 要创建的路径路由集的映射 | map(object) | {} | 没有 |
| rule_sets | 要创建的规则集映射 | map(object) | {} | 没有 |
| 主机名 | 要创建的主机名映射 | map(object) | {} | 没有 |
| freeform_tags | 标记负载平衡器的简单键值对 | map(string) | {} | 没有 |
| defined_tags | 预定义并作用于命名空间标签 | map(string) | {} | 没有 |
输出
| 名称 | 描述 |
|---|---|
| load_balancer_id | 负载平衡器的OCID |
| load_balancer_display_name | 负载平衡器的显示名称 |
| load_balancer_shape | 负载平衡器的形状 |
| load_balancer_state | 负载平衡器的当前状态 |
| load_balancer_ip_addresses | ip地址数组 |
| public_ip_addresss | 负载均衡器的公共ip地址(如果不是私有的) |
| private_ip_addresss | 负载均衡器的私有ip地址 |
| backend_sets | 创建的后端集 |
| 后端 | 创建的后端 |
| 听众 | 听众创建 |
| 证书 | 创建的证书 |
| path_route_sets | 创建的路径路由集 |
| rule_sets | 创建的规则集 |
| 主机名 | 创建的主机名 |
负载平衡器形状
固定形状
10Mbps:10 Mbps100Mbps:100 Mbps400Mbps:400 Mbps8000Mbps:8000 Mbps
灵活的形状
flexible:可配置带宽(与shape_details)
负载平衡策略
ROUND_ROBIN:在后端服务器上均匀分配请求LEAST_CONNECTIONS:路由到活动连接最少的服务器IP_HASH:基于客户端IP哈希的路由
健康检查协议
HTTP:HTTP健康检查HTTPS:HTTPS健康检查TCP:TCP连接健康检查
SSL/TLS配置
该模块支持全面的SSL/TLS配置:
- 使用私钥和证书链进行证书管理
- 可配置的SSL协议(TLSv1.2、TLSv1.3)
- 自定义密码套件
- 对等证书验证选项
- 密码选择的服务器顺序偏好
高级功能
基于路径的路由
根据URL路径将流量路由到不同的后端集:
path_route_sets = {
"api-routes" = {
path_routes = [
{
backend_set_name = "api-backend"
path = "/api/*"
path_match_type = {
match_type = "PREFIX_MATCH"
}
}
]
}
}规则集
创建自定义流量管理规则:
rule_sets = {
"security-headers" = {
items = [
{
action = "ADD_HTTP_REQUEST_HEADER"
header = "X-Forwarded-Proto"
value = "https"
}
]
}
}会话保持
配置会话粘性:
backend_sets = {
"sticky-backend" = {
policy = "ROUND_ROBIN"
session_persistence_configuration = {
cookie_name = "JSESSIONID"
disable_fallback = false
}
}
}安全考虑
- 网络安全组:使用NSG控制进出负载均衡器的流量
- 专用负载平衡器:对内部流量使用专用负载平衡器
- SSL/TLS:始终对生产工作负载使用HTTPS
- 证书管理:定期轮换证书
- 健康检查:配置适当的健康检查端点
监控和故障排除
- 使用OCI监控服务跟踪负载均衡器指标
- 在OCI控制台中检查后端服务器运行状况
- 监控访问日志中的流量模式和错误
- 设置健康检查失败的警报
贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 如果适用,添加测试
- 提交拉取请求
许可证
此模块在MIT许可证下发布。有关详细信息,请参阅LICENSE文件。
支持
对于问题和疑问:
- 检查 示例 目录
- 查看OCI负载均衡器文档
- 在此存储库中打开问题
