

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 网络配置和端口设置
<a name="dotnet-migrating-applications-network"></a>

本节介绍 IIS 迁移的网络配置选项，包括 VPC 设置、端口配置和多站点部署。

## VPC 配置
<a name="dotnet-migrating-applications-network-vpc"></a>

**eb migrate** 命令可为 Elastic Beanstalk 环境提供灵活的 VPC 配置选项。该工具既可以检测来自源 EC2 实例的 VPC 设置，也可以通过命令行参数接受自定义 VPC 配置。查看[将 Elastic Beanstalk 和 Amazon VPC 结合使用](vpc.md)，了解如何使用 VPC 配置 Elastic Beanstalk。

### 自动 VPC 检测
<a name="dotnet-migrating-applications-network-vpc-auto"></a>

在 EC2 实例上运行 **eb migrate** 时，该命令会自动发现并使用源环境 EC2 实例中的 VPC 配置。以下示例输出说明了检测到的配置信息：

```
PS C:\migrations_workspace > eb migrate
Identifying VPC configuration of this EC2 instance (i-0123456789abcdef0):
  id: vpc-1234567890abcdef0
  publicip: true
  elbscheme: public
  ec2subnets: subnet-123,subnet-456,subnet-789
  securitygroups: sg-123,sg-456
  elbsubnets: subnet-123,subnet-456,subnet-789
...
```

检测到的配置包括：
+ VPC 标识符
+ 公有 IP 分配设置
+ 负载均衡器方案（公共/私有）
+ EC2 实例子网分配
+ 安全组关联
+ 负载均衡器子网分配

### 本地或非Amazon 云主机
<a name="dotnet-migrating-applications-network-vpc-onprem"></a>

在本地服务器或非Amazon 云主机上**eb migrate**运行时，Elastic Beanstalk 服务将使用您账户中的默认 VPC。 Amazon 下方列表显示了命令和输出的示例：

```
PS C:\migrations_worspace> eb migrate `
      -k windows-test-pem `
      --region us-east-1 `
      -a EBMigratedEnv `
      -e EBMigratedEnv-test2 `
      --copy-firewall-config
Determining EB platform based on host machine properties
Using .\migrations\latest to contain artifacts for this migration run.
...
```

查看[将 Elastic Beanstalk 和 Amazon VPC 结合使用](vpc.md)，了解 Elastic Beanstalk 如何为环境配置默认 VPC。

### 自定义 VPC 配置
<a name="dotnet-migrating-applications-network-vpc-custom"></a>

对于需要特定 VPC 设置的任何源环境（EC2、本地环境或非Amazon 云环境），请提供与以下示例类似的 VPC 配置文件：

```
{
    "id": "vpc-12345678",
    "publicip": "true",
    "elbscheme": "public",
    "ec2subnets": ["subnet-a1b2c3d4", "subnet-e5f6g7h8"],
    "securitygroups": "sg-123456,sg-789012",
    "elbsubnets": ["subnet-a1b2c3d4", "subnet-e5f6g7h8"]
}
```

使用下面的命令应用此配置：

```
PS C:\migrations_workspace> eb migrate --vpc-config vpc-config.json
```

**注意**  
VPC 配置文件需要用于指定 VPC ID 的 `id` 字段。所有其他字段均为可选字段，如有任何未指定的字段，Elastic Beanstalk 将使用默认值。

**重要**  
*当您指定* `--vpc-config` *参数时，迁移将忽略源环境中的任何现有 VPC 设置。*使用此参数时，迁移将仅使用您传入的配置文件中指定的 VPC 设置。使用此参数会覆盖发现源实例 VPC 配置或使用默认 VPC 的默认行为。

在以下场景中使用 `--vpc-config` 参数：
+ 迁移没有可发现的 VPC 设置的非 EC2 环境时
+ 迁移到与源环境所使用的 VPC 不同的 VPC 时
+ 需要自定义子网选择或安全组配置时
+ 自动发现无法正确识别所需的 VPC 设置时
+ 从本地迁移，并且不想使用默认 VPC 时

### 安全网络配置
<a name="dotnet-migrating-applications-network-vpc-security"></a>

默认情况下，**eb migrate** 会在目标实例上打开端口 80，但不会从源计算机复制其他 Windows 防火墙规则。要包含所有防火墙配置，请使用以下命令：

```
PS C:\migrations_workspace> eb migrate --copy-firewall-config
```

此命令执行以下操作：
+ 识别 IIS 站点绑定使用的端口
+ 检索相应的防火墙规则
+ 生成 PowerShell 脚本以在目标实例上重新创建规则
+ 保留源计算机端口 80 的所有 DENY 规则（否则，默认情况下会允许端口 80）

假设在使用案例中，源计算机具有以下示例中指定的防火墙规则：

```
# Source machine firewall configuration
Get-NetFirewallRule | Where-Object {$_.Enabled -eq 'True'} | Get-NetFirewallPortFilter | Where-Object {$_.LocalPort -eq 80 -or $_.LocalPort -eq 443 -or $_.LocalPort -eq 8081}
# Output shows rules for ports 80, 443, and 8081
```

迁移会创建包含以下配置的脚本 (`modify_firewall_config.ps1`)：

```
New-NetFirewallRule -DisplayName "Allow Web Traffic" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 80,443
New-NetFirewallRule -DisplayName "Allow API Traffic" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8081
```

迁移工具会自动执行以下操作：
+ 从所有 IIS 站点绑定中提取 HTTP/HTTPS 端口
+ 使用 Windows 防火墙 [INetFwPolicy2](https://learn.microsoft.com/en-us/windows/win32/api/netfw/nn-netfw-inetfwpolicy2) 接口枚举防火墙规则
+ 筛选规则，以便仅包括明确引用指定端口的规则
+ 仅处理 HTTP 和 HTTPS 站点绑定及其关联的防火墙规则
+ 保留规则属性，包括显示名称、操作、协议和已启用状态
+ 同时处理防火墙规则中的单个端口和端口范围
+ 将防火墙配置脚本添加到部署清单

### 负载均衡器配置
<a name="dotnet-migrating-applications-network-vpc-lb"></a>

您可以通过 `--vpc-config` 参数指定负载均衡器配置。以下示例对参数进行了演示。

方案选择  
在公有负载均衡器和私有负载均衡器方案之间进行选择：  

```
{
    "id": "vpc-12345678",
    "elbscheme": "private",
    "elbsubnets": ["subnet-private1", "subnet-private2"]
}
```

子网分布  
为了实现高可用性，请将负载均衡器子网跨可用区分布：  

```
{
    "elbsubnets": [
        "subnet-az1", // Availability Zone 1
        "subnet-az2", // Availability Zone 2
        "subnet-az3"  // Availability Zone 3
    ]
}
```

**注意**  
虽然 Elastic Beanstalk 支持使用应用程序负载均衡器、网络负载均衡器和经典负载均衡器创建环境，但 **eb migrate** 命令仅支持应用程序负载均衡器。有关负载均衡器类型的更多信息，请参阅 [Elastic Beanstalk 环境的负载均衡器](using-features.managing.elb.md)。

## 使用端口配置进行多站点部署
<a name="dotnet-migrating-applications-network-multi"></a>

**eb migrate** 命令可处理复杂的多站点 IIS 部署，在这些部署中，应用程序可能共享依赖关系或使用非标准端口。考虑以下示例，其中的典型企业设置具有多个站点：

```
<!-- IIS Configuration -->
<sites>
    <site name="Default Web Site" id="1">
        <bindings>
            <binding protocol="http" bindingInformation="*:80:www.example.com" />
        </bindings>
    </site>
    <site name="InternalAPI" id="2">
        <bindings>
            <binding protocol="http" bindingInformation="*:8081:api.internal" />
        </bindings>
    </site>
    <site name="ReportingPortal" id="3">
        <bindings>
            <binding protocol="http" bindingInformation="*:8082:reports.internal" />
        </bindings>
    </site>
</sites>
```

要迁移此配置，请使用以下示例命令和参数：

```
PS C:\migrations_workspace> eb migrate `
    --sites "Default Web Site,InternalAPI,ReportingPortal" `
    --copy-firewall-config `
    --instance-type "c5.large"
```

**eb migrate** 命令会创建部署包，用于保留每个站点的身份和配置。该命令会生成 `aws-windows-deployment-manifest.json`，用于定义应如何部署这些站点。以下示例展示了生成的 json 文件：

```
{
    "manifestVersion": 1,
    "deployments": {
        "msDeploy": [
            {
                "name": "DefaultWebSite",
                "parameters": {
                    "appBundle": "DefaultWebSite.zip",
                    "iisPath": "/",
                    "iisWebSite": "Default Web Site"
                }
            }
        ],
        "custom": [
            {
                "name": "InternalAPI",
                "scripts": {
                    "install": {
                        "file": "ebmigrateScripts\\install_site_InternalAPI.ps1"
                    },
                    "restart": {
                        "file": "ebmigrateScripts\\restart_site_InternalAPI.ps1"
                    },
                    "uninstall": {
                        "file": "ebmigrateScripts\\uninstall_site_InternalAPI.ps1"
                    }
                }
            },
            {
                "name": "ReportingPortal",
                "scripts": {
                    "install": {
                        "file": "ebmigrateScripts\\install_site_ReportingPortal.ps1"
                    },
                    "restart": {
                        "file": "ebmigrateScripts\\restart_site_ReportingPortal.ps1"
                    },
                    "uninstall": {
                        "file": "ebmigrateScripts\\uninstall_site_ReportingPortal.ps1"
                    }
                }
            }
        ]
    }
}
```

迁移过程会创建以下应用程序负载均衡器侦听器规则，其中保留了原始路由逻辑：
+ 端口 80 流量路由到 Default Web Site
+ 端口 8081 流量路由到 InternalAPI
+ 8082 端口的交通路线 ReportingPortal

## 共享配置和依赖关系
<a name="dotnet-migrating-applications-network-shared"></a>

多个站点共享配置或依赖关系时，**eb migrate** 会适当地处理这些关系。参考以下示例，其中多个站点共享一个通用配置：

```
<!-- Shared configuration in applicationHost.config -->
<location path="Default Web Site">
    <system.webServer>
        <asp enableSessionState="true" />
        <caching enabled="true" enableKernelCache="true" />
    </system.webServer>
</location>
```

迁移过程会完成以下任务：

1. 识别跨站点的共享配置

1. 生成相应的 PowerShell 脚本来应用这些设置

1. 维护配置层次结构和继承

## 最佳实践
<a name="dotnet-migrating-applications-network-best"></a>

我们建议您遵循迁移应用程序网络配置的最佳实践。以下分组提供了摘要指南。

VPC 设计  
+ 遵循 Amazon VPC 设计最佳实践
+ 为负载均衡器和 EC2 实例使用单独的子网
+ 实施正确的路由表和 NACLs
+ 考虑使用 Amazon 服务的 VPC 终端节点

高可用性  
+ 跨多个可用区进行部署
+ 针对负载均衡器使用至少两个子网
+ 跨配置自动缩放 AZs
+ 实施适当的运行状况检查

安全性  
+ 遵守安全最佳实践
+ 使用安全组作为主访问控制
+ 实施网络访问控制列表 (ACLs) 以提高安全性
+ 监控 VPC 流日志

## 问题排查
<a name="dotnet-migrating-applications-network-troubleshooting"></a>

常见的网络配置问题包括以下方面。每个主题后面均提供了示例命令，可用于获取有关环境网络配置和运行状况的更多信息。

子网配置  

```
# Verify subnet availability
PS C:\migrations_workspace> aws ec2 describe-subnets --subnet-ids subnet-id

# Check available IP addresses
PS C:\migrations_workspace>aws ec2 describe-subnets --subnet-ids subnet-id --query 'Subnets[].AvailableIpAddressCount'
```

安全组访问  

```
# Verify security group rules
PS C:\migrations_workspace> aws ec2 describe-security-groups --group-ids sg-id

# Test network connectivity
PS C:\migrations_workspace> aws ec2 describe-network-interfaces --filters Name=group-id,Values=sg-id
```

负载均衡器运行状况  

```
# Check load balancer health
PS C:\migrations_workspace> aws elbv2 describe-target-health --target-group-arn arn:aws:elasticloadbalancing:region:account-id:targetgroup/group-name/group-id
```