----年--月--日 | --:--:-- | 星期-

阿里云网络架构与管理实战指南

深入解析阿里云网络结构设计,从VPC规划到安全组配置,包含完整的网络架构最佳实践和故障排除方案。

架构图

graph TB subgraph "阿里云网络架构" subgraph "全球网络基础设施" ALI_BACKBONE[阿里云全球网络骨干] EXPRESS_CONNECT[高速通道 ExpressConnect] CDN[阿里云CDN全球加速] end subgraph "地域 Region (华东1-杭州)" subgraph "可用区A cn-hangzhou-g" VPC1[专有网络VPC 1
10.1.0.0/16] VSWITCH1[交换机 Web
10.1.1.0/24] ECS1[ECS云服务器 Web-1] SG1[安全组 Web-SG] end subgraph "可用区B cn-hangzhou-h" VPC2[专有网络VPC 2
10.2.0.0/16] VSWITCH2[交换机 App
10.2.1.0/24] ECS2[ECS云服务器 App-1] SG2[安全组 App-SG] end subgraph "可用区C cn-hangzhou-i" VPC3[专有网络VPC 3
10.3.0.0/16] VSWITCH3[交换机 DB
10.3.1.0/24] ECS3[ECS云服务器 DB-1] SG3[安全组 DB-SG] end SLB[负载均衡 SLB
应用型负载均衡] ALB[应用型负载均衡 ALB
七层负载均衡] NATGW[NAT网关
网络地址转换] VPNGW[VPN网关
混合云连接] end subgraph "云安全服务" CLOUDFW[云防火墙
网络安全防护] DDOS[DDoS高防
流量清洗服务] BASTION[堡垒机
运维安全审计] WAF[Web应用防火墙
应用层防护] end subgraph "网络监控运维" CLOUDMONITOR[云监控
网络监控告警] VPC_FLOW[VPC流日志
网络流量分析] NETWORK_INSIGHT[网络分析
性能洞察] end subgraph "存储和数据库" OSS[对象存储 OSS
海量数据存储] RDS[云数据库 RDS
关系型数据库] REDIS[云数据库 Redis
内存数据库] POLARDB[PolarDB
云原生数据库] end end subgraph "企业本地数据中心" ONPREM_IDC[企业数据中心] ONPREM_FW[企业防火墙] ENTERPRISE_USERS[企业员工] end subgraph "公网用户" INTERNET[互联网] PUBLIC_USERS[公网用户] end PUBLIC_USERS --> CDN CDN --> SLB SLB --> VSWITCH1 VSWITCH1 --> ECS1 SG1 --> ECS1 ECS1 --> ALB ALB --> VSWITCH2 VSWITCH2 --> ECS2 SG2 --> ECS2 ECS2 --> VSWITCH3 VSWITCH3 --> ECS3 SG3 --> ECS3 ECS3 --> RDS ECS3 --> REDIS ECS3 --> POLARDB ECS1 --> OSS ENTERPRISE_USERS --> ONPREM_FW ONPREM_FW --> ONPREM_IDC ONPREM_IDC --> EXPRESS_CONNECT EXPRESS_CONNECT --> VPNGW VPNGW --> VPC1 VPC1 -.->|云企业网CEN| VPC2 VPC2 -.->|云企业网CEN| VPC3 CLOUDFW --> VPC1 CLOUDFW --> VPC2 CLOUDFW --> VPC3 DDOS --> SLB WAF --> SLB BASTION --> ECS1 BASTION --> ECS2 BASTION --> ECS3 CLOUDMONITOR --> VPC1 CLOUDMONITOR --> VPC2 CLOUDMONITOR --> VPC3 VPC_FLOW --> CLOUDMONITOR NETWORK_INSIGHT --> VPC_FLOW ALI_BACKBONE --> EXPRESS_CONNECT ALI_BACKBONE --> CDN NATGW --> VPC1 NATGW --> VPC2 style SLB fill:#ff6600,stroke:#fff,stroke-width:2px,color:#fff style CLOUDFW fill:#ff4757,stroke:#fff,stroke-width:2px,color:#fff style VPC1 fill:#1e90ff,stroke:#fff,stroke-width:2px,color:#fff style VPC2 fill:#1e90ff,stroke:#fff,stroke-width:2px,color:#fff style VPC3 fill:#1e90ff,stroke:#fff,stroke-width:2px,color:#fff style SG1 fill:#ffa502,stroke:#fff,stroke-width:2px,color:#fff style SG2 fill:#ffa502,stroke:#fff,stroke-width:2px,color:#fff style SG3 fill:#ffa502,stroke:#fff,stroke-width:2px,color:#fff style OSS fill:#2ed573,stroke:#fff,stroke-width:2px,color:#fff style RDS fill:#3742fa,stroke:#fff,stroke-width:2px,color:#fff style REDIS fill:#ff3838,stroke:#fff,stroke-width:2px,color:#fff

阿里云网络架构与管理实战指南

阿里云网络基础概念

全球基础设施

阿里云提供覆盖全球的云计算基础设施:

阿里云全球架构:
  地域(Regions): 28+个地域
  可用区(Zones): 84+个可用区
  边缘节点(Edge): 2800+个边缘节点
  海外地域: 覆盖亚太、欧洲、美洲等
  网络带宽: 多线BGP网络

地域和可用区查询

# 安装阿里云CLI
curl -O https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
tar -xzf aliyun-cli-linux-latest-amd64.tgz
sudo mv aliyun /usr/local/bin/

# 配置访问凭证
aliyun configure

# 查看所有地域
aliyun ecs DescribeRegions

# 查看指定地域的可用区
aliyun ecs DescribeZones --RegionId cn-hangzhou

核心网络组件

VPC (专有网络)

{
  "VPC特性": {
    "逻辑隔离": "基于隧道技术的网络隔离",
    "自定义网段": "支持RFC1918私有网段",
    "路由控制": "灵活的路由表配置",
    "安全组": "实例级安全访问控制"
  },
  "网络类型": {
    "经典网络": "传统共享网络(逐步淘汰)",
    "专有网络": "VPC私有网络(推荐)",
    "弹性网络": "混合云网络连接"
  }
}

VPC架构设计

网络规划原则

CIDR块设计最佳实践

# 阿里云推荐的网络规划
企业级VPC规划:
  生产VPC:    10.0.0.0/8     (1600万个IP)
  测试VPC:    172.16.0.0/12  (100万个IP)
  开发VPC:    192.168.0.0/16 (65,536个IP)

多可用区子网规划:
  cn-hangzhou-g: 10.1.0.0/16  (65,536个IP)
  cn-hangzhou-h: 10.2.0.0/16  (65,536个IP)
  cn-hangzhou-i: 10.3.0.0/16  (65,536个IP)

创建VPC和交换机

# 创建VPC
aliyun vpc CreateVpc \
    --RegionId cn-hangzhou \
    --CidrBlock 10.0.0.0/16 \
    --VpcName production-vpc \
    --Description "Production VPC network"

# 创建Web层交换机
aliyun vpc CreateVSwitch \
    --VpcId vpc-xxxxxxxxx \
    --ZoneId cn-hangzhou-g \
    --CidrBlock 10.0.1.0/24 \
    --VSwitchName web-vswitch

# 创建应用层交换机
aliyun vpc CreateVSwitch \
    --VpcId vpc-xxxxxxxxx \
    --ZoneId cn-hangzhou-g \
    --CidrBlock 10.0.2.0/24 \
    --VSwitchName app-vswitch

# 创建数据层交换机
aliyun vpc CreateVSwitch \
    --VpcId vpc-xxxxxxxxx \
    --ZoneId cn-hangzhou-g \
    --CidrBlock 10.0.3.0/24 \
    --VSwitchName db-vswitch

多层网络架构设计

三层网络架构

阿里云三层架构:
  Web层(公网访问):
    - 交换机: web-vswitch (10.0.1.0/24)
    - 实例: 前端服务器、SLB负载均衡器
    - 安全组: web-sg

  应用层(内网访问):
    - 交换机: app-vswitch (10.0.2.0/24)
    - 实例: 应用服务器、API网关
    - 安全组: app-sg

  数据层(高安全):
    - 交换机: db-vswitch (10.0.3.0/24)
    - 实例: RDS数据库、Redis缓存
    - 安全组: db-sg

自动化部署脚本

#!/bin/bash
# 阿里云多层架构自动化部署脚本

REGION_ID="cn-hangzhou"
ZONE_ID="cn-hangzhou-g"
VPC_CIDR="10.0.0.0/16"

# 创建VPC
echo "创建VPC..."
VPC_ID=$(aliyun vpc CreateVpc \
    --RegionId $REGION_ID \
    --CidrBlock $VPC_CIDR \
    --VpcName production-vpc \
    --output cols=VpcId rows | tail -n 1)

echo "VPC ID: $VPC_ID"

# 等待VPC创建完成
sleep 10

# 创建Web层交换机
echo "创建Web层交换机..."
WEB_VSWITCH_ID=$(aliyun vpc CreateVSwitch \
    --VpcId $VPC_ID \
    --ZoneId $ZONE_ID \
    --CidrBlock 10.0.1.0/24 \
    --VSwitchName web-vswitch \
    --output cols=VSwitchId rows | tail -n 1)

# 创建应用层交换机
echo "创建应用层交换机..."
APP_VSWITCH_ID=$(aliyun vpc CreateVSwitch \
    --VpcId $VPC_ID \
    --ZoneId $ZONE_ID \
    --CidrBlock 10.0.2.0/24 \
    --VSwitchName app-vswitch \
    --output cols=VSwitchId rows | tail -n 1)

# 创建数据层交换机
echo "创建数据层交换机..."
DB_VSWITCH_ID=$(aliyun vpc CreateVSwitch \
    --VpcId $VPC_ID \
    --ZoneId $ZONE_ID \
    --CidrBlock 10.0.3.0/24 \
    --VSwitchName db-vswitch \
    --output cols=VSwitchId rows | tail -n 1)

echo "网络架构创建完成!"
echo "VPC ID: $VPC_ID"
echo "Web VSwitch ID: $WEB_VSWITCH_ID"
echo "App VSwitch ID: $APP_VSWITCH_ID"
echo "DB VSwitch ID: $DB_VSWITCH_ID"

路由和网关配置

路由表配置

# 查看VPC路由表
aliyun vpc DescribeRouteTables --VpcId vpc-xxxxxxxxx

# 创建自定义路由表
aliyun vpc CreateRouteTable \
    --VpcId vpc-xxxxxxxxx \
    --RouteTableName custom-route-table \
    --Description "Custom route table for production"

# 添加自定义路由条目
aliyun vpc CreateRouteEntry \
    --RouteTableId vtb-xxxxxxxxx \
    --DestinationCidrBlock 192.168.0.0/16 \
    --NextHopType Instance \
    --NextHopId i-xxxxxxxxx

NAT网关配置

# 创建NAT网关
aliyun vpc CreateNatGateway \
    --RegionId cn-hangzhou \
    --VpcId vpc-xxxxxxxxx \
    --VSwitchId vsw-xxxxxxxxx \
    --NatGatewayName production-nat \
    --Description "Production NAT Gateway"

# 购买EIP并绑定NAT网关
aliyun vpc AllocateEipAddress \
    --RegionId cn-hangzhou \
    --InternetChargeType PayByBandwidth \
    --Bandwidth 100

# 绑定EIP到NAT网关
aliyun vpc AssociateEipAddress \
    --AllocationId eip-xxxxxxxxx \
    --InstanceId ngw-xxxxxxxxx \
    --InstanceType Nat

# 创建SNAT条目
aliyun vpc CreateSnatEntry \
    --RegionId cn-hangzhou \
    --SnatTableId stb-xxxxxxxxx \
    --SourceVSwitchId vsw-xxxxxxxxx \
    --SnatIp 47.xxx.xxx.xxx

VPN网关配置

# 创建VPN网关
aliyun vpc CreateVpnGateway \
    --RegionId cn-hangzhou \
    --VpcId vpc-xxxxxxxxx \
    --VSwitchId vsw-xxxxxxxxx \
    --VpnGatewayName production-vpn \
    --Bandwidth 100

# 创建用户网关
aliyun vpc CreateCustomerGateway \
    --RegionId cn-hangzhou \
    --CustomerGatewayName onprem-gateway \
    --IpAddress 203.0.113.1 \
    --Description "On-premises gateway"

# 创建IPsec连接
aliyun vpc CreateVpnConnection \
    --RegionId cn-hangzhou \
    --VpnGatewayId vpn-xxxxxxxxx \
    --CustomerGatewayId cgw-xxxxxxxxx \
    --Name vpn-connection-to-onprem \
    --LocalSubnet 10.0.0.0/16 \
    --RemoteSubnet 192.168.0.0/16

安全组和访问控制

安全组规则设计

Web层安全组

# 创建Web层安全组
aliyun ecs CreateSecurityGroup \
    --RegionId cn-hangzhou \
    --VpcId vpc-xxxxxxxxx \
    --SecurityGroupName web-sg \
    --Description "Security group for web tier"

# 允许HTTP和HTTPS访问
aliyun ecs AuthorizeSecurityGroup \
    --RegionId cn-hangzhou \
    --SecurityGroupId sg-xxxxxxxxx \
    --IpProtocol tcp \
    --PortRange 80/80 \
    --SourceCidrIp 0.0.0.0/0 \
    --Description "Allow HTTP traffic"

aliyun ecs AuthorizeSecurityGroup \
    --RegionId cn-hangzhou \
    --SecurityGroupId sg-xxxxxxxxx \
    --IpProtocol tcp \
    --PortRange 443/443 \
    --SourceCidrIp 0.0.0.0/0 \
    --Description "Allow HTTPS traffic"

# 允许SSH访问(限制IP)
aliyun ecs AuthorizeSecurityGroup \
    --RegionId cn-hangzhou \
    --SecurityGroupId sg-xxxxxxxxx \
    --IpProtocol tcp \
    --PortRange 22/22 \
    --SourceCidrIp 203.0.113.0/24 \
    --Description "Allow SSH from management network"

应用层安全组

# 创建应用层安全组
aliyun ecs CreateSecurityGroup \
    --RegionId cn-hangzhou \
    --VpcId vpc-xxxxxxxxx \
    --SecurityGroupName app-sg \
    --Description "Security group for application tier"

# 只允许来自Web层的访问
aliyun ecs AuthorizeSecurityGroup \
    --RegionId cn-hangzhou \
    --SecurityGroupId sg-app-xxxxxxxxx \
    --IpProtocol tcp \
    --PortRange 8080/8080 \
    --SourceGroupId sg-web-xxxxxxxxx \
    --Description "Allow access from web tier"

数据库层安全组

# 创建数据库层安全组
aliyun ecs CreateSecurityGroup \
    --RegionId cn-hangzhou \
    --VpcId vpc-xxxxxxxxx \
    --SecurityGroupName db-sg \
    --Description "Security group for database tier"

# 只允许来自应用层的数据库连接
aliyun ecs AuthorizeSecurityGroup \
    --RegionId cn-hangzhou \
    --SecurityGroupId sg-db-xxxxxxxxx \
    --IpProtocol tcp \
    --PortRange 3306/3306 \
    --SourceGroupId sg-app-xxxxxxxxx \
    --Description "Allow MySQL access from app tier"

aliyun ecs AuthorizeSecurityGroup \
    --RegionId cn-hangzhou \
    --SecurityGroupId sg-db-xxxxxxxxx \
    --IpProtocol tcp \
    --PortRange 6379/6379 \
    --SourceGroupId sg-app-xxxxxxxxx \
    --Description "Allow Redis access from app tier"

负载均衡架构

SLB (Server Load Balancer)

应用型负载均衡(ALB)

# 创建应用型负载均衡
aliyun slb CreateLoadBalancer \
    --RegionId cn-hangzhou \
    --LoadBalancerName production-alb \
    --VpcId vpc-xxxxxxxxx \
    --VSwitchId vsw-xxxxxxxxx \
    --LoadBalancerSpec slb.s3.large \
    --AddressType intranet

# 创建监听器
aliyun slb CreateLoadBalancerHTTPListener \
    --RegionId cn-hangzhou \
    --LoadBalancerId lb-xxxxxxxxx \
    --ListenerPort 80 \
    --BackendServerPort 8080 \
    --Bandwidth 1000 \
    --HealthCheck on \
    --HealthCheckURI /health

# 创建HTTPS监听器
aliyun slb CreateLoadBalancerHTTPSListener \
    --RegionId cn-hangzhou \
    --LoadBalancerId lb-xxxxxxxxx \
    --ListenerPort 443 \
    --BackendServerPort 8080 \
    --ServerCertificateId cert-xxxxxxxxx \
    --Bandwidth 1000

# 添加后端服务器
aliyun slb AddBackendServers \
    --RegionId cn-hangzhou \
    --LoadBalancerId lb-xxxxxxxxx \
    --BackendServers '[{"ServerId":"i-xxxxxxxxx","Weight":100}]'

网络型负载均衡(NLB)

# 创建网络型负载均衡
aliyun slb CreateLoadBalancer \
    --RegionId cn-hangzhou \
    --LoadBalancerName production-nlb \
    --LoadBalancerSpec slb.s3.large \
    --AddressType internet

# 创建TCP监听器
aliyun slb CreateLoadBalancerTCPListener \
    --RegionId cn-hangzhou \
    --LoadBalancerId lb-xxxxxxxxx \
    --ListenerPort 80 \
    --BackendServerPort 80 \
    --Bandwidth 1000 \
    --HealthCheck on

CLB (Classic Load Balancer)

# 四层负载均衡配置
aliyun slb CreateLoadBalancerTCPListener \
    --LoadBalancerId lb-xxxxxxxxx \
    --ListenerPort 3306 \
    --BackendServerPort 3306 \
    --Bandwidth 1000 \
    --PersistenceTimeout 3600

网络监控和日志

VPC流日志

# 启用VPC流日志
aliyun vpc CreateFlowLog \
    --RegionId cn-hangzhou \
    --FlowLogName production-flowlog \
    --ResourceType VPC \
    --ResourceId vpc-xxxxxxxxx \
    --TrafficType All \
    --LogStoreName flowlog-store \
    --ProjectName flowlog-project

云监控集成

监控指标:
  网络指标:
    - CPUUtilization: CPU使用率
    - NetworkIn: 网络入流量
    - NetworkOut: 网络出流量
    - NetworkPacketsIn: 入包量
    - NetworkPacketsOut: 出包量

  负载均衡器指标:
    - ActiveConnection: 活跃连接数
    - NewConnection: 新建连接数
    - DropConnection: 丢弃连接数
    - ResponseTime: 响应时间

  VPC指标:
    - VPCEgressBytes: VPC出流量
    - VPCIngressBytes: VPC入流量

监控配置脚本

#!/usr/bin/env python3
from aliyunsdkcore.client import AcsClient
from aliyunsdkcms.request.v20190101 import PutCustomMetricRequest
import json

def create_network_monitoring():
    """创建网络监控配置"""

    # 初始化客户端
    client = AcsClient('your-access-key', 'your-secret-key', 'cn-hangzhou')

    # 创建自定义监控指标
    request = PutCustomMetricRequest.PutCustomMetricRequest()

    metric_data = [{
        "MetricName": "NetworkConnections",
        "Dimensions": {
            "InstanceId": "i-xxxxxxxxx",
            "Region": "cn-hangzhou"
        },
        "Time": "2024-12-31T10:00:00Z",
        "Values": {
            "Average": 100,
            "Maximum": 150,
            "Minimum": 50
        }
    }]

    request.set_MetricList(json.dumps(metric_data))

    response = client.do_action_with_exception(request)
    print(f"Monitoring configured: {response}")

if __name__ == "__main__":
    create_network_monitoring()

故障排除和诊断

网络连通性测试

# 创建网络探测
aliyun vpc CreateNetworkInsightsPath \
    --RegionId cn-hangzhou \
    --Source i-xxxxxxxxx \
    --Destination i-yyyyyyyyy \
    --Protocol TCP \
    --DestinationPort 3306

# 启动网络分析
aliyun vpc StartNetworkInsightsAnalysis \
    --RegionId cn-hangzhou \
    --NetworkInsightsPathId nip-xxxxxxxxx

网络诊断工具

#!/bin/bash
# 阿里云网络诊断脚本

echo "=== 阿里云网络诊断工具 ==="

# 检查VPC信息
echo "检查VPC..."
aliyun vpc DescribeVpcs --RegionId cn-hangzhou

# 检查交换机
echo "检查交换机..."
aliyun vpc DescribeVSwitches --RegionId cn-hangzhou

# 检查安全组
echo "检查安全组..."
aliyun ecs DescribeSecurityGroups --RegionId cn-hangzhou

# 检查路由表
echo "检查路由表..."
aliyun vpc DescribeRouteTables --RegionId cn-hangzhou

# 检查负载均衡器
echo "检查负载均衡器..."
aliyun slb DescribeLoadBalancers --RegionId cn-hangzhou

# 检查ECS实例网络
echo "检查ECS实例..."
aliyun ecs DescribeInstances --RegionId cn-hangzhou

性能诊断脚本

#!/usr/bin/env python3
import subprocess
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest

def diagnose_network_performance():
    """网络性能诊断"""

    client = AcsClient('your-access-key', 'your-secret-key', 'cn-hangzhou')

    # 获取实例列表
    request = DescribeInstancesRequest.DescribeInstancesRequest()
    response = client.do_action_with_exception(request)
    instances = json.loads(response)

    for instance in instances['Instances']['Instance']:
        print(f"诊断实例: {instance['InstanceName']}")
        print(f"  实例ID: {instance['InstanceId']}")
        print(f"  VPC ID: {instance['VpcAttributes']['VpcId']}")
        print(f"  交换机ID: {instance['VpcAttributes']['VSwitchId']}")
        print(f"  内网IP: {instance['VpcAttributes']['PrivateIpAddress']['IpAddress']}")

        if 'PublicIpAddress' in instance:
            print(f"  公网IP: {instance['PublicIpAddress']['IpAddress']}")

if __name__ == "__main__":
    diagnose_network_performance()

成本优化策略

网络成本分析

成本优化要点:
  1. 带宽成本:
     - 选择合适的带宽计费方式
     - 使用CDN减少源站带宽消耗
     - 合理配置NAT网关带宽

  2. 流量成本:
     - 避免跨地域数据传输
     - 使用内网传输降低成本
     - 优化应用架构减少网络调用

  3. 资源成本:
     - 定期清理未使用的EIP
     - 合理配置负载均衡器规格
     - 使用预留实例降低成本

成本监控脚本

#!/usr/bin/env python3
from aliyunsdkcore.client import AcsClient
from aliyunsdkbssopenapi.request.v20171214 import QueryBillRequest
import json
from datetime import datetime, timedelta

def analyze_network_costs():
    """分析网络相关成本"""

    client = AcsClient('your-access-key', 'your-secret-key', 'cn-hangzhou')

    # 获取账单信息
    request = QueryBillRequest.QueryBillRequest()
    request.set_BillingCycle('2024-12')
    request.set_ProductCode('ecs')  # ECS产品

    response = client.do_action_with_exception(request)
    bill_data = json.loads(response)

    network_costs = {}
    total_cost = 0

    for item in bill_data['Data']['Items']['Item']:
        if 'network' in item['SubOrderId'].lower():
            service = item['ProductName']
            cost = float(item['PaymentAmount'])

            if service not in network_costs:
                network_costs[service] = 0
            network_costs[service] += cost
            total_cost += cost

    print("网络成本分析:")
    for service, cost in network_costs.items():
        print(f"  {service}: ¥{cost:.2f}")

    print(f"总网络成本: ¥{total_cost:.2f}")

    # 成本优化建议
    provide_cost_optimization_suggestions(network_costs)

def provide_cost_optimization_suggestions(costs):
    """提供成本优化建议"""

    suggestions = []

    if costs.get('EIP', 0) > 100:
        suggestions.append("考虑使用NAT网关替代多个EIP")

    if costs.get('SLB', 0) > 500:
        suggestions.append("评估负载均衡器规格是否过高")

    if costs.get('Bandwidth', 0) > 1000:
        suggestions.append("考虑使用CDN优化带宽成本")

    print("\n成本优化建议:")
    for i, rec in enumerate(suggestions, 1):
        print(f"{i}. {rec}")

if __name__ == "__main__":
    analyze_network_costs()

Infrastructure as Code

Terraform配置

# main.tf
terraform {
  required_providers {
    alicloud = {
      source  = "aliyun/alicloud"
      version = "~> 1.200.0"
    }
  }
}

provider "alicloud" {
  region = var.region
}

# VPC
resource "alicloud_vpc" "main" {
  vpc_name   = "${var.environment}-vpc"
  cidr_block = var.vpc_cidr

  tags = {
    Environment = var.environment
    Project     = var.project_name
  }
}

# 交换机
resource "alicloud_vswitch" "web" {
  vswitch_name = "${var.environment}-web-vswitch"
  vpc_id       = alicloud_vpc.main.id
  cidr_block   = "10.0.1.0/24"
  zone_id      = data.alicloud_zones.available.zones.0.id
}

resource "alicloud_vswitch" "app" {
  vswitch_name = "${var.environment}-app-vswitch"
  vpc_id       = alicloud_vpc.main.id
  cidr_block   = "10.0.2.0/24"
  zone_id      = data.alicloud_zones.available.zones.0.id
}

resource "alicloud_vswitch" "db" {
  vswitch_name = "${var.environment}-db-vswitch"
  vpc_id       = alicloud_vpc.main.id
  cidr_block   = "10.0.3.0/24"
  zone_id      = data.alicloud_zones.available.zones.0.id
}

# 安全组
resource "alicloud_security_group" "web" {
  name   = "${var.environment}-web-sg"
  vpc_id = alicloud_vpc.main.id
}

resource "alicloud_security_group_rule" "web_http" {
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "80/80"
  priority          = 1
  security_group_id = alicloud_security_group.web.id
  cidr_ip           = "0.0.0.0/0"
}

# NAT网关
resource "alicloud_nat_gateway" "main" {
  vpc_id      = alicloud_vpc.main.id
  name        = "${var.environment}-nat"
  payment_type = "PayAsYouGo"
  vswitch_id   = alicloud_vswitch.web.id
  nat_type     = "Enhanced"
}

# EIP
resource "alicloud_eip_address" "nat" {
  bandwidth            = "100"
  internet_charge_type = "PayByBandwidth"
  address_name         = "${var.environment}-nat-eip"
}

resource "alicloud_eip_association" "nat" {
  allocation_id = alicloud_eip_address.nat.id
  instance_id   = alicloud_nat_gateway.main.id
  instance_type = "Nat"
}

# SNAT条目
resource "alicloud_snat_entry" "web" {
  depends_on        = [alicloud_eip_association.nat]
  snat_table_id     = alicloud_nat_gateway.main.snat_table_ids
  source_vswitch_id = alicloud_vswitch.web.id
  snat_ip           = alicloud_eip_address.nat.ip_address
}

# variables.tf
variable "region" {
  description = "Alibaba Cloud region"
  type        = string
  default     = "cn-hangzhou"
}

variable "environment" {
  description = "Environment name"
  type        = string
  default     = "production"
}

variable "vpc_cidr" {
  description = "VPC CIDR block"
  type        = string
  default     = "10.0.0.0/16"
}

variable "project_name" {
  description = "Project name"
  type        = string
  default     = "myproject"
}

# outputs.tf
output "vpc_id" {
  description = "VPC ID"
  value       = alicloud_vpc.main.id
}

output "web_vswitch_id" {
  description = "Web vSwitch ID"
  value       = alicloud_vswitch.web.id
}

output "nat_gateway_id" {
  description = "NAT Gateway ID"
  value       = alicloud_nat_gateway.main.id
}

ROS (Resource Orchestration Service)模板

# network-template.yaml
ROSTemplateFormatVersion: '2015-09-01'
Description: 'Alibaba Cloud multi-tier network architecture'

Parameters:
  VpcCidr:
    Type: String
    Default: '10.0.0.0/16'
    Description: 'VPC CIDR block'

  Environment:
    Type: String
    Default: 'production'
    Description: 'Environment name'

Resources:
  VPC:
    Type: 'ALIYUN::ECS::VPC'
    Properties:
      VpcName: !Sub '${Environment}-vpc'
      CidrBlock: !Ref VpcCidr
      Description: !Sub 'VPC for ${Environment} environment'

  WebVSwitch:
    Type: 'ALIYUN::ECS::VSwitch'
    Properties:
      VpcId: !Ref VPC
      ZoneId: !Select [0, !GetAZs '']
      CidrBlock: '10.0.1.0/24'
      VSwitchName: !Sub '${Environment}-web-vswitch'

  AppVSwitch:
    Type: 'ALIYUN::ECS::VSwitch'
    Properties:
      VpcId: !Ref VPC
      ZoneId: !Select [0, !GetAZs '']
      CidrBlock: '10.0.2.0/24'
      VSwitchName: !Sub '${Environment}-app-vswitch'

  WebSecurityGroup:
    Type: 'ALIYUN::ECS::SecurityGroup'
    Properties:
      VpcId: !Ref VPC
      SecurityGroupName: !Sub '${Environment}-web-sg'
      Description: 'Security group for web tier'
      SecurityGroupIngress:
        - IpProtocol: tcp
          PortRange: '80/80'
          SourceCidrIp: '0.0.0.0/0'
        - IpProtocol: tcp
          PortRange: '443/443'
          SourceCidrIp: '0.0.0.0/0'

Outputs:
  VpcId:
    Description: 'VPC ID'
    Value: !Ref VPC

  WebVSwitchId:
    Description: 'Web vSwitch ID'
    Value: !Ref WebVSwitch

网络安全最佳实践

零信任网络架构

零信任原则:
  1. 身份验证:
     - 使用RAM进行精细化权限控制
     - 启用MFA多因子认证
     - 定期轮换访问密钥

  2. 网络分段:
     - 最小权限安全组规则
     - 使用企业级安全组
     - 实施网络隔离策略

  3. 数据保护:
     - 启用传输加密(TLS/SSL)
     - 使用KMS密钥管理服务
     - 实施数据脱敏策略

  4. 监控审计:
     - 启用ActionTrail操作审计
     - 配置安全中心监控
     - 实施威胁检测

安全配置检查脚本

#!/usr/bin/env python3
from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526 import DescribeSecurityGroupsRequest
import json

def security_audit():
    """安全配置审计"""

    client = AcsClient('your-access-key', 'your-secret-key', 'cn-hangzhou')

    # 获取安全组列表
    request = DescribeSecurityGroupsRequest.DescribeSecurityGroupsRequest()
    response = client.do_action_with_exception(request)
    security_groups = json.loads(response)

    security_issues = []

    for sg in security_groups['SecurityGroups']['SecurityGroup']:
        sg_id = sg['SecurityGroupId']
        sg_name = sg['SecurityGroupName']

        # 检查安全组规则
        for rule in sg.get('Permissions', {}).get('Permission', []):
            # 检查过于宽泛的规则
            if rule.get('SourceCidrIp') == '0.0.0.0/0':
                if rule.get('IpProtocol') == 'tcp' and '22' in rule.get('PortRange', ''):
                    security_issues.append({
                        'security_group': sg_name,
                        'issue': 'SSH端口对全网开放',
                        'severity': 'HIGH',
                        'rule_id': rule.get('SecurityGroupRuleId')
                    })

                if rule.get('PortRange') == '-1/-1':
                    security_issues.append({
                        'security_group': sg_name,
                        'issue': '所有端口对全网开放',
                        'severity': 'CRITICAL',
                        'rule_id': rule.get('SecurityGroupRuleId')
                    })

    # 输出审计结果
    if security_issues:
        print("发现以下安全问题:")
        for issue in security_issues:
            print(f"- {issue['security_group']}: {issue['issue']} (严重性: {issue['severity']})")
    else:
        print("未发现明显的安全问题")

    return security_issues

def recommend_security_improvements():
    """安全改进建议"""

    recommendations = [
        "启用VPC流日志进行网络监控",
        "使用Web应用防火墙(WAF)保护Web应用",
        "配置云安全中心进行威胁检测",
        "实施企业级安全组策略",
        "启用DDoS高防护服务",
        "使用SSL证书保护数据传输"
    ]

    print("\n=== 安全改进建议 ===")
    for i, rec in enumerate(recommendations, 1):
        print(f"{i}. {rec}")

if __name__ == "__main__":
    security_audit()
    recommend_security_improvements()

混合云连接

高速通道(Express Connect)

# 创建边界路由器
aliyun vpc CreatePhysicalConnection \
    --RegionId cn-hangzhou \
    --AccessPointId ap-xxxxxxxxx \
    --LineOperator CT \
    --Type VPC \
    --Name production-express-connect

# 创建VBR
aliyun vpc CreateVirtualBorderRouter \
    --RegionId cn-hangzhou \
    --PhysicalConnectionId pc-xxxxxxxxx \
    --VlanId 100 \
    --CircuitCode express-circuit-001 \
    --Name production-vbr

智能接入网关(SAG)

# 创建云连接网
aliyun smartag CreateCloudConnectNetwork \
    --Name production-ccn \
    --Description "Production cloud connect network"

# 绑定SAG到CCN
aliyun smartag BindSmartAccessGateway \
    --SmartAGId sag-xxxxxxxxx \
    --CcnId ccn-xxxxxxxxx

总结

阿里云提供了完整的网络服务体系,通过合理的架构设计和配置管理,可以构建出安全、高性能、经济高效的云网络基础设施。

关键要点

  1. 网络架构设计
    • 采用VPC专有网络实现网络隔离
    • 使用多可用区部署提高可用性
    • 通过安全组实现精细化访问控制
  2. 安全最佳实践
    • 实施深度防御策略
    • 使用WAF和DDoS防护
    • 启用全面的监控和审计
  3. 性能优化
    • 选择合适的实例规格和带宽
    • 优化负载均衡器配置
    • 使用CDN和缓存策略
  4. 成本管理
    • 监控网络使用情况和成本
    • 定期清理未使用的资源
    • 选择合适的计费方式
  5. 自动化运维
    • 使用Terraform进行基础设施即代码
    • 实施ROS资源编排服务
    • 建立监控和告警机制

掌握这些概念和最佳实践,将帮助您在阿里云上构建出现代化、安全、可扩展的网络架构。


本文为阿里云网络架构管理指南,建议结合实际项目需求和阿里云最新文档进行实践。如有技术问题,欢迎交流讨论。

开始输入以搜索文档

尝试搜索: DevOps, Docker, Kubernetes