第265集:云网络配置
教学目标
- 理解云网络的基本概念和架构
- 掌握VPC的创建和配置方法
- 熟悉子网、路由表和网关的管理
- 学习安全组和网络ACL的配置
- 能够实现负载均衡和网络监控
核心知识点
1. 云网络概述
1.1 云网络架构
Internet
|
Internet Gateway
|
+----------+----------+
| VPC |
| 10.0.0.0/16 |
+----------+----------+
|
+--------------+--------------+
| |
Public Subnet Private Subnet
10.0.1.0/24 10.0.2.0/24
| |
+--------------+--------------+
|
Route Table
|
+--------------+--------------+
| |
Web Server Database Server
(Public IP) (Private IP)1.2 云网络核心组件
| 组件 | 描述 | 作用 |
|---|---|---|
| VPC | 虚拟私有云 | 隔离的网络环境 |
| 子网 | IP地址段划分 | 网络分段和隔离 |
| 路由表 | 路由规则定义 | 控制网络流量流向 |
| 网关 | 网络出口入口 | 连接外部网络 |
| 安全组 | 实例级防火墙 | 控制入站和出站流量 |
| 网络ACL | 子网级防火墙 | 控制子网级别流量 |
| 负载均衡器 | 流量分发 | 提高应用可用性 |
2. AWS网络配置
2.1 创建VPC
# 创建VPC
VPC_ID=$(aws ec2 create-vpc \
--cidr-block 10.0.0.0/16 \
--query 'Vpc.VpcId' \
--output text)
echo "VPC ID: $VPC_ID"
# 启用DNS支持
aws ec2 modify-vpc-attribute \
--vpc-id $VPC_ID \
--enable-dns-support '{"Value": true}'
aws ec2 modify-vpc-attribute \
--vpc-id $VPC_ID \
--enable-dns-hostnames '{"Value": true}'
# 添加标签
aws ec2 create-tags \
--resources $VPC_ID \
--tags Key=Name,Value=main-vpc2.2 创建子网
# 创建公网子网
PUBLIC_SUBNET_ID=$(aws ec2 create-subnet \
--vpc-id $VPC_ID \
--cidr-block 10.0.1.0/24 \
--availability-zone us-east-1a \
--query 'Subnet.SubnetId' \
--output text)
echo "Public Subnet ID: $PUBLIC_SUBNET_ID"
# 启用自动分配公网IP
aws ec2 modify-subnet-attribute \
--subnet-id $PUBLIC_SUBNET_ID \
--map-public-ip-on-launch
# 创建私网子网
PRIVATE_SUBNET_ID=$(aws ec2 create-subnet \
--vpc-id $VPC_ID \
--cidr-block 10.0.2.0/24 \
--availability-zone us-east-1a \
--query 'Subnet.SubnetId' \
--output text)
echo "Private Subnet ID: $PRIVATE_SUBNET_ID"
# 添加标签
aws ec2 create-tags \
--resources $PUBLIC_SUBNET_ID \
--tags Key=Name,Value=public-subnet
aws ec2 create-tags \
--resources $PRIVATE_SUBNET_ID \
--tags Key=Name,Value=private-subnet2.3 配置网关
# 创建互联网网关
IGW_ID=$(aws ec2 create-internet-gateway \
--query 'InternetGateway.InternetGatewayId' \
--output text)
echo "Internet Gateway ID: $IGW_ID"
# 附加网关到VPC
aws ec2 attach-internet-gateway \
--vpc-id $VPC_ID \
--internet-gateway-id $IGW_ID
# 创建NAT网关
# 首先创建EIP
EIP_ID=$(aws ec2 allocate-address \
--domain vpc \
--query 'AllocationId' \
--output text)
echo "Elastic IP ID: $EIP_ID"
# 创建NAT网关
NAT_GW_ID=$(aws ec2 create-nat-gateway \
--subnet-id $PUBLIC_SUBNET_ID \
--allocation-id $EIP_ID \
--query 'NatGateway.NatGatewayId' \
--output text)
echo "NAT Gateway ID: $NAT_GW_ID"
# 等待NAT网关可用
aws ec2 wait nat-gateway-available \
--nat-gateway-ids $NAT_GW_ID2.4 配置路由表
# 创建公网路由表
PUBLIC_RT_ID=$(aws ec2 create-route-table \
--vpc-id $VPC_ID \
--query 'RouteTable.RouteTableId' \
--output text)
echo "Public Route Table ID: $PUBLIC_RT_ID"
# 添加默认路由到互联网网关
aws ec2 create-route \
--route-table-id $PUBLIC_RT_ID \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id $IGW_ID
# 关联公网子网
aws ec2 associate-route-table \
--route-table-id $PUBLIC_RT_ID \
--subnet-id $PUBLIC_SUBNET_ID
# 创建私网路由表
PRIVATE_RT_ID=$(aws ec2 create-route-table \
--vpc-id $VPC_ID \
--query 'RouteTable.RouteTableId' \
--output text)
echo "Private Route Table ID: $PRIVATE_RT_ID"
# 添加默认路由到NAT网关
aws ec2 create-route \
--route-table-id $PRIVATE_RT_ID \
--destination-cidr-block 0.0.0.0/0 \
--nat-gateway-id $NAT_GW_ID
# 关联私网子网
aws ec2 associate-route-table \
--route-table-id $PRIVATE_RT_ID \
--subnet-id $PRIVATE_SUBNET_ID2.5 配置安全组
# 创建Web服务器安全组
WEB_SG_ID=$(aws ec2 create-security-group \
--group-name web-sg \
--description "Security group for web servers" \
--vpc-id $VPC_ID \
--query 'GroupId' \
--output text)
echo "Web Security Group ID: $WEB_SG_ID"
# 添加入站规则
aws ec2 authorize-security-group-ingress \
--group-id $WEB_SG_ID \
--protocol tcp \
--port 80 \
--cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress \
--group-id $WEB_SG_ID \
--protocol tcp \
--port 443 \
--cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress \
--group-id $WEB_SG_ID \
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0
# 添加出站规则
aws ec2 authorize-security-group-egress \
--group-id $WEB_SG_ID \
--protocol -1 \
--port -1 \
--cidr 0.0.0.0/0
# 创建数据库安全组
DB_SG_ID=$(aws ec2 create-security-group \
--group-name db-sg \
--description "Security group for database servers" \
--vpc-id $VPC_ID \
--query 'GroupId' \
--output text)
echo "Database Security Group ID: $DB_SG_ID"
# 添加入站规则(仅允许Web服务器访问)
aws ec2 authorize-security-group-ingress \
--group-id $DB_SG_ID \
--protocol tcp \
--port 3306 \
--source-group $WEB_SG_ID
# 添加出站规则
aws ec2 authorize-security-group-egress \
--group-id $DB_SG_ID \
--protocol -1 \
--port -1 \
--cidr 0.0.0.0/03. 负载均衡配置
3.1 应用负载均衡器
# 创建目标组
TARGET_GROUP_ARN=$(aws elbv2 create-target-group \
--name web-targets \
--protocol HTTP \
--port 80 \
--vpc-id $VPC_ID \
--health-check-path /health \
--health-check-interval-seconds 30 \
--health-check-timeout-seconds 5 \
--healthy-threshold 3 \
--unhealthy-threshold 2 \
--query 'TargetGroups[0].TargetGroupArn' \
--output text)
echo "Target Group ARN: $TARGET_GROUP_ARN"
# 创建应用负载均衡器
ALB_ARN=$(aws elbv2 create-load-balancer \
--name my-alb \
--subnets $PUBLIC_SUBNET_ID $PUBLIC_SUBNET_ID_2 \
--security-groups $WEB_SG_ID \
--type application \
--query 'LoadBalancers[0].LoadBalancerArn' \
--output text)
echo "ALB ARN: $ALB_ARN"
# 获取ALB DNS名称
ALB_DNS=$(aws elbv2 describe-load-balancers \
--load-balancer-arns $ALB_ARN \
--query 'LoadBalancers[0].DNSName' \
--output text)
echo "ALB DNS: $ALB_DNS"
# 创建监听器
LISTENER_ARN=$(aws elbv2 create-listener \
--load-balancer-arn $ALB_ARN \
--protocol HTTP \
--port 80 \
--default-actions Type=forward,TargetGroupArn=$TARGET_GROUP_ARN \
--query 'Listeners[0].ListenerArn' \
--output text)
echo "Listener ARN: $LISTENER_ARN"
# 注册目标
INSTANCE_ID_1="i-1234567890abcdef0"
INSTANCE_ID_2="i-0987654321fedcba0"
aws elbv2 register-targets \
--target-group-arn $TARGET_GROUP_ARN \
--targets Id=$INSTANCE_ID_1 Id=$INSTANCE_ID_23.2 网络负载均衡器
# 创建网络负载均衡器
NLB_ARN=$(aws elbv2 create-load-balancer \
--name my-nlb \
--subnets $PUBLIC_SUBNET_ID $PUBLIC_SUBNET_ID_2 \
--type network \
--query 'LoadBalancers[0].LoadBalancerArn' \
--output text)
echo "NLB ARN: $NLB_ARN"
# 创建TCP目标组
TCP_TARGET_GROUP_ARN=$(aws elbv2 create-target-group \
--name tcp-targets \
--protocol TCP \
--port 3306 \
--vpc-id $VPC_ID \
--target-type instance \
--query 'TargetGroups[0].TargetGroupArn' \
--output text)
echo "TCP Target Group ARN: $TCP_TARGET_GROUP_ARN"
# 创建TCP监听器
aws elbv2 create-listener \
--load-balancer-arn $NLB_ARN \
--protocol TCP \
--port 3306 \
--default-actions Type=forward,TargetGroupArn=$TCP_TARGET_GROUP_ARN4. Azure网络配置
4.1 创建虚拟网络
# 创建资源组
az group create \
--name myResourceGroup \
--location eastus
# 创建虚拟网络
VNET_ID=$(az network vnet create \
--name myVNet \
--resource-group myResourceGroup \
--location eastus \
--address-prefixes 10.0.0.0/16 \
--query 'newVNet.id' \
-o tsv)
echo "VNet ID: $VNET_ID"
# 创建公网子网
PUBLIC_SUBNET_ID=$(az network vnet subnet create \
--name public-subnet \
--vnet-name myVNet \
--resource-group myResourceGroup \
--address-prefixes 10.0.1.0/24 \
--query 'id' \
-o tsv)
echo "Public Subnet ID: $PUBLIC_SUBNET_ID"
# 创建私网子网
PRIVATE_SUBNET_ID=$(az network vnet subnet create \
--name private-subnet \
--vnet-name myVNet \
--resource-group myResourceGroup \
--address-prefixes 10.0.2.0/24 \
--query 'id' \
-o tsv)
echo "Private Subnet ID: $PRIVATE_SUBNET_ID"4.2 配置网络安全组
# 创建Web服务器NSG
WEB_NSG_ID=$(az network nsg create \
--name web-nsg \
--resource-group myResourceGroup \
--location eastus \
--query 'newNSG.id' \
-o tsv)
echo "Web NSG ID: $WEB_NSG_ID"
# 添加入站规则
az network nsg rule create \
--nsg-name web-nsg \
--resource-group myResourceGroup \
--name allow-http \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 100 \
--source-address-prefixes '*' \
--source-port-ranges '*' \
--destination-address-prefixes '*' \
--destination-port-ranges 80
az network nsg rule create \
--nsg-name web-nsg \
--resource-group myResourceGroup \
--name allow-https \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 110 \
--source-address-prefixes '*' \
--source-port-ranges '*' \
--destination-address-prefixes '*' \
--destination-port-ranges 443
az network nsg rule create \
--nsg-name web-nsg \
--resource-group myResourceGroup \
--name allow-ssh \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 120 \
--source-address-prefixes '*' \
--source-port-ranges '*' \
--destination-address-prefixes '*' \
--destination-port-ranges 22
# 关联NSG到子网
az network vnet subnet update \
--name public-subnet \
--vnet-name myVNet \
--resource-group myResourceGroup \
--network-security-group $WEB_NSG_ID5. GCP网络配置
5.1 创建VPC网络
# 创建VPC网络
gcloud compute networks create my-vpc \
--subnet-mode custom
# 创建子网
gcloud compute networks subnets create public-subnet \
--network my-vpc \
--region us-central1 \
--range 10.0.1.0/24
gcloud compute networks subnets create private-subnet \
--network my-vpc \
--region us-central1 \
--range 10.0.2.0/24
# 创建防火墙规则
gcloud compute firewall-rules create allow-http \
--network my-vpc \
--allow tcp:80 \
--source-ranges 0.0.0.0/0 \
--target-tags http-server
gcloud compute firewall-rules create allow-https \
--network my-vpc \
--allow tcp:443 \
--source-ranges 0.0.0.0/0 \
--target-tags https-server
gcloud compute firewall-rules create allow-ssh \
--network my-vpc \
--allow tcp:22 \
--source-ranges 0.0.0.0/0 \
--target-tags ssh-server5.2 配置负载均衡
# 创建外部IP地址
IP_ADDRESS=$(gcloud compute addresses create lb-ipv4 \
--region us-central1 \
--format='get(address)')
echo "External IP: $IP_ADDRESS"
# 创建健康检查
gcloud compute health-checks create http http-health-check \
--request-path /health \
--port 80
# 创建后端服务
gcloud compute backend-services create web-backend-service \
--health-checks http-health-check \
--global
# 创建实例组
gcloud compute instance-groups unmanaged create web-instance-group \
--zone us-central1-a
# 添加实例到实例组
gcloud compute instance-groups unmanaged add-instances web-instance-group \
--zone us-central1-a \
--instances instance-1,instance-2
# 添加实例组到后端服务
gcloud compute backend-services add-backend web-backend-service \
--instance-group web-instance-group \
--instance-group-zone us-central1-a \
--global
# 创建URL映射
gcloud compute url-maps create web-url-map \
--default-service web-backend-service
# 创建目标HTTP代理
gcloud compute target-http-proxies create http-lb-proxy \
--url-map web-url-map
# 创建转发规则
gcloud compute forwarding-rules create http-forwarding-rule \
--address lb-ipv4 \
--global \
--target-http-proxy http-lb-proxy \
--ports 80实用案例分析
案例1:构建高可用Web架构
场景描述
使用AWS构建一个高可用的Web应用架构,包括多可用区部署、负载均衡和自动故障转移。
实施步骤
- 创建多可用区VPC
# 创建VPC
VPC_ID=$(aws ec2 create-vpc \
--cidr-block 10.0.0.0/16 \
--query 'Vpc.VpcId' \
--output text)
# 创建多个公网子网
PUBLIC_SUBNET_1=$(aws ec2 create-subnet \
--vpc-id $VPC_ID \
--cidr-block 10.0.1.0/24 \
--availability-zone us-east-1a \
--query 'Subnet.SubnetId' \
--output text)
PUBLIC_SUBNET_2=$(aws ec2 create-subnet \
--vpc-id $VPC_ID \
--cidr-block 10.0.2.0/24 \
--availability-zone us-east-1b \
--query 'Subnet.SubnetId' \
--output text)
# 创建多个私网子网
PRIVATE_SUBNET_1=$(aws ec2 create-subnet \
--vpc-id $VPC_ID \
--cidr-block 10.0.10.0/24 \
--availability-zone us-east-1a \
--query 'Subnet.SubnetId' \
--output text)
PRIVATE_SUBNET_2=$(aws ec2 create-subnet \
--vpc-id $VPC_ID \
--cidr-block 10.0.11.0/24 \
--availability-zone us-east-1b \
--query 'Subnet.SubnetId' \
--output text)
# 创建互联网网关
IGW_ID=$(aws ec2 create-internet-gateway \
--query 'InternetGateway.InternetGatewayId' \
--output text)
aws ec2 attach-internet-gateway \
--vpc-id $VPC_ID \
--internet-gateway-id $IGW_ID
# 创建公网路由表
PUBLIC_RT_ID=$(aws ec2 create-route-table \
--vpc-id $VPC_ID \
--query 'RouteTable.RouteTableId' \
--output text)
aws ec2 create-route \
--route-table-id $PUBLIC_RT_ID \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id $IGW_ID
# 关联公网子网
aws ec2 associate-route-table \
--route-table-id $PUBLIC_RT_ID \
--subnet-id $PUBLIC_SUBNET_1
aws ec2 associate-route-table \
--route-table-id $PUBLIC_RT_ID \
--subnet-id $PUBLIC_SUBNET_2- 部署应用负载均衡器
# 创建目标组
TARGET_GROUP_ARN=$(aws elbv2 create-target-group \
--name web-targets \
--protocol HTTP \
--port 80 \
--vpc-id $VPC_ID \
--health-check-path /health \
--query 'TargetGroups[0].TargetGroupArn' \
--output text)
# 创建应用负载均衡器
ALB_ARN=$(aws elbv2 create-load-balancer \
--name web-alb \
--subnets $PUBLIC_SUBNET_1 $PUBLIC_SUBNET_2 \
--security-groups $WEB_SG_ID \
--type application \
--query 'LoadBalancers[0].LoadBalancerArn' \
--output text)
# 创建监听器
aws elbv2 create-listener \
--load-balancer-arn $ALB_ARN \
--protocol HTTP \
--port 80 \
--default-actions Type=forward,TargetGroupArn=$TARGET_GROUP_ARN
# 部署EC2实例
USER_DATA=$(cat <<'EOF'
#!/bin/bash
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello from $(hostname -f)</h1>" > /var/www/html/index.html
EOF
)
INSTANCE_1=$(aws ec2 run-instances \
--image-id ami-0c55b159cbfafe1f0 \
--count 1 \
--instance-type t2.micro \
--key-name my-key-pair \
--security-group-ids $WEB_SG_ID \
--subnet-id $PUBLIC_SUBNET_1 \
--user-data "$USER_DATA" \
--query 'Instances[0].InstanceId' \
--output text)
INSTANCE_2=$(aws ec2 run-instances \
--image-id ami-0c55b159cbfafe1f0 \
--count 1 \
--instance-type t2.micro \
--key-name my-key-pair \
--security-group-ids $WEB_SG_ID \
--subnet-id $PUBLIC_SUBNET_2 \
--user-data "$USER_DATA" \
--query 'Instances[0].InstanceId' \
--output text)
# 等待实例就绪
aws ec2 wait instance-running --instance-ids $INSTANCE_1 $INSTANCE_2
# 注册目标
aws elbv2 register-targets \
--target-group-arn $TARGET_GROUP_ARN \
--targets Id=$INSTANCE_1 Id=$INSTANCE_2- 配置自动扩缩容
# 创建启动模板
aws ec2 create-launch-template \
--launch-template-name web-launch-template \
--image-id ami-0c55b159cbfafe1f0 \
--instance-type t2.micro \
--key-name my-key-pair \
--security-group-ids $WEB_SG_ID \
--user-data "$USER_DATA"
# 创建自动扩缩容组
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name web-asg \
--launch-template LaunchTemplateName=web-launch-template \
--min-size 2 \
--max-size 6 \
--desired-capacity 2 \
--target-group-arns $TARGET_GROUP_ARN \
--vpc-zone-identifier $PUBLIC_SUBNET_1 $PUBLIC_SUBNET_2
# 配置扩缩容策略
aws autoscaling put-scaling-policy \
--auto-scaling-group-name web-asg \
--policy-name scale-out \
--scaling-adjustment 1 \
--adjustment-type ChangeInCapacity \
--cooldown 300
aws autoscaling put-scaling-policy \
--auto-scaling-group-name web-asg \
--policy-name scale-in \
--scaling-adjustment -1 \
--adjustment-type ChangeInCapacity \
--cooldown 300案例2:实现混合云连接
场景描述
使用AWS VPN连接本地数据中心和云环境,实现混合云架构。
实施步骤
- 创建虚拟私有网关
# 创建虚拟私有网关
VGW_ID=$(aws ec2 create-vpn-gateway \
--type ipsec.1 \
--availability-zone us-east-1a \
--query 'VpnGateway.VpnGatewayId' \
--output text)
echo "VPN Gateway ID: $VGW_ID"
# 附加到VPC
aws ec2 attach-vpn-gateway \
--vpc-id $VPC_ID \
--vpn-gateway-id $VGW_ID
# 等待网关可用
aws ec2 wait vpn-gateway-available \
--vpn-gateway-ids $VGW_ID- 创建客户网关
# 创建客户网关
CGW_ID=$(aws ec2 create-customer-gateway \
--type ipsec.1 \
--public-ip 203.0.113.12 \
--bgp-asn 65000 \
--device-name MyDevice \
--query 'CustomerGateway.CustomerGatewayId' \
--output text)
echo "Customer Gateway ID: $CGW_ID"- 创建VPN连接
# 创建VPN连接
VPN_CONNECTION_ID=$(aws ec2 create-vpn-connection \
--type ipsec.1 \
--vpn-gateway-id $VGW_ID \
--customer-gateway-id $CGW_ID \
--static-routes-only \
--query 'VpnConnection.VpnConnectionId' \
--output text)
echo "VPN Connection ID: $VPN_CONNECTION_ID"
# 等待VPN连接可用
aws ec2 wait vpn-connection-available \
--vpn-connection-ids $VPN_CONNECTION_ID
# 获取VPN配置
aws ec2 get-vpn-connection-device-types \
--vpn-connection-id $VPN_CONNECTION_ID \
--vpn-connection-device-type vendor-id,cisco,platform-id,csr-1000v,software-version=ios-16-09-02
# 下载配置文件
aws ec2 get-vpn-connection-device-type-config \
--vpn-connection-id $VPN_CONNECTION_ID \
--vpn-connection-device-type-id vendor-id,cisco,platform-id,csr-1000v,software-version=ios-16-09-02 \
--output text > vpn-config.txt- 配置路由
# 创建路由表
PRIVATE_RT_ID=$(aws ec2 create-route-table \
--vpc-id $VPC_ID \
--query 'RouteTable.RouteTableId' \
--output text)
# 添加VPN路由
aws ec2 create-route \
--route-table-id $PRIVATE_RT_ID \
--destination-cidr-block 192.168.0.0/16 \
--gateway-id $VGW_ID
# 关联私网子网
aws ec2 associate-route-table \
--route-table-id $PRIVATE_RT_ID \
--subnet-id $PRIVATE_SUBNET_1
aws ec2 associate-route-table \
--route-table-id $PRIVATE_RT_ID \
--subnet-id $PRIVATE_SUBNET_2课后练习
基础练习
- 创建一个VPC和子网
- 配置安全组规则
- 创建一个简单的负载均衡器
进阶练习
- 构建多可用区架构
- 配置自动扩缩容
- 实现VPN连接
挑战练习
- 设计高可用网络架构
- 实现混合云连接
- 配置网络监控和告警
思考问题
- 如何设计安全的网络架构?
- 如何优化网络性能?
- 如何实现网络故障转移?
总结
本集详细介绍了Linux系统中云网络的配置方法,包括VPC配置、子网管理、路由表、安全组、负载均衡以及网络监控等内容。通过本集的学习,您应该能够:
- 理解云网络的基本概念和架构
- 掌握VPC的创建和配置方法
- 熟悉子网、路由表和网关的管理
- 学习安全组和网络ACL的配置
- 能够实现负载均衡和网络监控
云网络是云基础设施的重要组成部分,它提供了灵活、安全、可扩展的网络环境。在实际项目中,应根据应用需求和安全要求设计合理的网络架构,并建立完善的监控和故障恢复机制,以确保网络的稳定性和可靠性。