使用Terraform管理弹性网卡典型实践
更新时间:2024-08-26
概览
百度智能云弹性网卡能够在多个云主机间自由迁移。通过在云主机上绑定多个弹性网卡,实现高可用网络方案;也可以在弹性网卡上绑定多个内网 IP,每个内网IP都可以绑定一个EIP,用户在配置好IP地址后通过配置应用策略即可实现不同业务流量以不同源IP从网卡流出,实现单主机多IP部署。
通过Terraform这种基础设施架构自动化编排工具,能够大大降低企业在基础设施构建过程中成本问题,同时也可以提高云基础设施开发人员在 IAC(基础设施即代码) 方面的技能。使用Terraform允许您使用代码的方式进行弹性网卡的快速创建、部署和管理。
需求场景
- 部署高可用集群:弹性网卡是系统架构中的关键组件,满足系统高可用架构对于单实例多网卡的需求。
- 快速故障迁移:通过将弹性网卡从云主机实例卸载后再挂载到另外一台云主机实例,将故障实例上的业务流量快速迁移到备用实例,实现服务的容灾部署。
- 精细化网络管理:实例可以挂载多个弹性网卡,弹性网卡可分别位于不同的子网,可独立配置安全组、ACL安全访问规则,从而对每个弹性网卡的流量进行安全访问控制,同时可实现不同业务间数据隔离。
配置前您需要了解:
- 每个VPC可支持500个弹性网卡。
- BCC实例与弹性网卡必须在同一可用区、同一VPC,可以在不同子网,挂载不同的安全组。
- BCC的带宽能力由实例规格决定,在一台实例上挂载多个弹性网卡不能提高实例带宽性能。
- BCC主网卡不属于弹性网卡,不在弹性网卡列表中,主网卡在BCC详情页面中配置。
- 单网卡上IP数量最少1个,最多40个。
- 云主机可挂载弹性网卡数量=min(主机核数,8)。
- 云主机绑定的网卡上可配置IP数量:
内存 | IP数量 |
---|---|
1G | 2 |
(1-8]G | 8 |
(8-32]G | 16 |
(32-64]G | 30 |
大于64G | 40 |
配置步骤
1、环境准备
- Terraform:是一种安全有效地构建、更改和版本控制基础设施的工具。它以配置文件为驱动,您在文件中定义各种组件,Terraform会基于该文件完成所有组件的创建、变更和管理。目前百度智能云已与 Terraform集成,您可通过Terraform来创建、管理ENI、VPC、BCC等多种百度智能云资源,具体请参考Terraform BaiduCloud Provider。
2、初始化Terraform
- 登录Terraform官网下载适用于您的操作系统的程序包。
- 配置terraform baidu provider信息,配置文件可参考如下的代码,在当前文件夹内保存为version.tf。
terraform {
required_providers {
baiducloud = {
source = "baidubce/baiducloud"
version = "1.16.2" #版本号 从1.16.2版本开始支持弹性网卡
}
}
}
- 执行命令terraform init,Terraform会根据当前文件夹内的version.tf文件初始化工作空间。
-
编辑Terraform配置文件。新建文件main.tf,在文件中指定VPC、弹性网卡、安全组等元信息。参考配置和步骤如下:
更多弹性网卡参数信息可参考baidu provider官方文档
3、创建弹性网卡
在main.tf文件中加入如下代码,在之后执行terraform apply的时候即可创建弹性网卡
resource "baiducloud_eni" "eni" {
# 弹性网卡名称
name = "terraform-eni"
# 弹性网卡所属子网的ID
subnet_id = baiducloud_subnet.subnet.id
# 弹性网卡描述
description = "terraform test"
# 弹性网卡的安全组
security_group_ids = [
baiducloud_security_group.sg.id
]
# 弹性网卡的私有IP配置
private_ip {
# 是否为主IP
primary = true
# 内网IP
private_ip_address = "172.16.0.10"
# 公网IP(选配)
public_ip_address = baiducloud_eip.eip2.eip
}
private_ip {
primary = false
private_ip_address = "172.16.0.11"
public_ip_address = baiducloud_eip.eip1.eip
}
private_ip {
primary = false
private_ip_address = "172.16.0.13"
}
}
说明:用户可使用Terraform创建弹性网卡所需要的EIP、VPC、子网等资源,然后通过引用的方式填入弹性网卡创建时需要的字段中,也可直接填入弹性网卡依赖的资源的ID。
本示例中弹性网卡依赖的EIP、VPC、子网、安全组配置信息如下
# 新建VPC
resource "baiducloud_vpc" "vpc" {
name = "terraform_vpc"
cidr = "172.16.0.0/20"
}
# 新建子网
resource "baiducloud_subnet" "subnet" {
name = "terraform_subnet"
zone_name = "cn-bj-d"
cidr = "172.16.0.0/24"
vpc_id = baiducloud_vpc.vpc.id
description = "terraform test subnet"
}
# 新建安全组
resource "baiducloud_security_group" "sg" {
name = "terraform-sg"
description = "security group created by terraform"
vpc_id = baiducloud_vpc.vpc.id
}
# 创建两个EIP
resource "baiducloud_eip" "eip1" {
bandwidth_in_mbps = 1
billing_method = "ByBandwidth"
payment_timing = "Postpaid"
}
resource "baiducloud_eip" "eip2" {
bandwidth_in_mbps = 1
billing_method = "ByBandwidth"
payment_timing = "Postpaid"
}
4、弹性网卡配置更新
支持更新的字段如下,只需对字段值进行修改,然后应用变更计划即可完成更新
- name
- description
-
security_group_ids
注意:
- 请确保至少有一个安全组ID
-
private_ip
注意:
- 一个private_ip为一个代码块,在弹性网卡的配置里声明即完成了内网IP的创建
- 主IP不能删除
- 仅可删除辅助IP
- 新增的内网IP都是辅助IP
- 如果删除内网IP,只需要在弹性网卡的配置中,删除想要删除的内网IP代码块
- 如果想绑定EIP,只需要在内网IP的代码块中进行配置即可
5、弹性网卡绑定实例
- 注意事项:
- 一个云主机可以绑定多个弹性网卡,但只能绑定一个主网卡。
- 一个弹性网卡只能同时绑定一个云主机。
- 只有运行中或者已关机状态的云主机才能绑定弹性网卡。
- 弹性网卡和绑定的云主机必须是在同一私有网络内,且两者所在子网的可用区相同。
-
示例代码如下:
注意:如果实例没有完全启动,此时绑定弹性网卡可能会造成失败
# 创建一个1c4g的实例
resource "baiducloud_instance" "server1" {
availability_zone = "cn-bj-d"
instance_spec = "bcc.gr1.c1m4"
image_id = data.baiducloud_images.images.images.0.id
billing = {
payment_timing = "Postpaid"
}
admin_pass = "Eni12345"
subnet_id = baiducloud_subnet.subnet.id
security_groups = [
baiducloud_security_group.sg.id
]
# action = "stop"
}
# 等待60s 实例完全启动
resource "time_sleep" "wait_60_seconds" {
depends_on = [baiducloud_instance.server1, baiducloud_eni.eni]
create_duration = "60s"
}
# 实例绑定弹性网卡
resource "baiducloud_eni_attachment" "default" {
depends_on = [time_sleep.wait_30_seconds]
eni_id = baiducloud_eni.eni.id
instance_id = baiducloud_instance.server1.id
}
说明:
- 挂载云主机后,还需要手动配置辅助IP,参见BCC文档-配置弹性网卡。
- 弹性网卡主IP无法释放,辅助IP可以释放。
6、应用配置
- 执行如下代码,可查看资源变更计划
$ terraform plan
- 执行如下代码,可应用资源变更计划,完成资源的创建或更新,如图所示
$ terraform apply
- 在全部变更计划完成之后,会显示出结果
测试验证
- 1、在百度智能云控制台的产品界面查看对应的资源是否都创建成功。
-
2、在完成了上述步骤的配置之后,可测试是否能够通过两个不同的公网IP连接到实例。
注意:示例中的代码没有配置安全组规则,如果需要测试某个端口的连通性,请按需创建安全组规则
如果能够通过不同的公网IP连接到实例,说明弹性网卡配置和绑定成功。
资源删除
- 若实例需要解绑弹性网卡,只需要删除baiducloud_eni_attachment这一资源即可,可通过如下代码
# 通过-target指定资源进行删除
terraform destroy -target baiducloud_eni_attachment.default
- 可通过如下命令释放当前main.tf中的所有资源
terraform destroy