为独立的 Windows Docker 主机部署容器网络

Azure CNI 插件为独立的 Docker 主机和 Kubernetes 群集启用单容器/Pod 网络。 本文介绍如何为独立的 Windows Docker 主机安装和配置 CNI 插件。

先决条件

创建虚拟网络和堡垒主机

以下过程创建包含资源子网、Azure Bastion 子网和 Azure Bastion 主机的虚拟网络。

  1. 在门户中,搜索并选择“虚拟网络”。

  2. 在“虚拟网络”页面上,选择“+ 创建”。

  3. 创建虚拟网络基本信息选项卡上输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“新建”。
    在“名称”中输入“test-rg”。
    选择“确定”。
    实例详细信息
    名称 输入“vnet-1”。
    区域 选择“(亚太)中国东部 2”。

    Azure 门户中“创建虚拟网络”的“基本信息”选项卡的屏幕截图

  4. 选择“下一步”,转到“安全性”选项卡。

  5. 在“安全性”选项卡的“Azure Bastion”部分中,选择“启用 Bastion”。

    Azure Bastion 使用浏览器通过安全外壳 (SSH) 或远程桌面协议 (RDP),通过使用其专用 IP 地址连接虚拟网络中的虚拟机。 虚拟机不需要公共 IP 地址、客户端软件或特殊配置。 有关 Azure Bastion 的详细信息,请参阅 Azure Bastion

    注意

    每小时定价从部署 Bastion 的时刻开始计算,无论出站数据的使用情况如何。 有关详细信息,请参阅定价SKU。 如果要将 Bastion 部署为教程或测试的一部分,建议在此资源使用完成后将其删除。

  6. 在“Azure Bastion”中,输入或选择以下信息:

    设置
    Azure Bastion 主机名 输入“堡垒”。
    Azure Bastion 公共 IP 地址 选择“创建公共 IP 地址”。
    在“名称”中输入“public-ip”。
    选择“确定”。

    在 Azure 门户的“创建虚拟网络”中启用堡垒主机的屏幕截图。

  7. 选择下一步,转到IP 地址选项卡。

  8. 在“子网”的地址空间框中,选择“默认”子网。

  9. 编辑子网中,输入或选择以下信息:

    设置
    子网详细信息
    子网模板 保留默认值“默认”。
    名称 输入“subnet-1”。
    开始地址 保留默认值“10.0.0.0”。
    子网大小 保留默认值/24 (256 个地址)

    默认子网重命名和配置的屏幕截图。

  10. 选择“保存”。

  11. 选择屏幕底部的“查看 + 创建”,然后在验证通过时选择“创建”。

部署网络和堡垒主机可能需要几分钟时间。 部署完成或虚拟网络创建完成后,继续执行后续步骤。

创建测试虚拟机

以下过程会在虚拟网络中创建一个名为 vm-1 的测试虚拟机 (VM)。

  1. 在门户中,搜索并选择“虚拟机”。

  2. 在“虚拟机”中,选择“+ 创建”。

  3. 在“创建虚拟机”的“基本信息”选项卡上,输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    虚拟机名称 输入“vm-1”。
    区域 选择“中国东部 2”。
    可用性选项 选择“无需基础结构冗余”。
    安全类型 保留默认值标准
    映像 选择Windows Server 2022 Datacenter - x64 Gen2
    VM 架构 保留默认值“x64”。
    大小 选择一个大小。
    管理员帐户
    身份验证类型 选择密码
    用户名 输入“azureuser”。
    Password 输入密码。
    确认密码 重新输入密码。
    入站端口规则
    公共入站端口 选择“无”。
  4. 选择页面顶部的“网络”选项卡。

  5. 在“网络”选项卡中,输入或选择以下信息:

    设置
    网络接口
    虚拟网络 选择“vnet-1”。
    子网 选择“subnet-1 (10.0.0.0/24)”。
    公共 IP 选择
    NIC 网络安全组 选择“高级”。
    配置网络安全组 选择“新建”。
    在“名称”中输入“nsg-1”。
    将其余字段保留默认设置,然后选择“确定”。
  6. 将其余设置保留为默认值,然后选择“查看 + 创建”。

  7. 检查设置,然后选择“创建”。

注意

虚拟网络中具有堡垒主机的虚拟机不需要公共 IP 地址。 Bastion 提供公共 IP,虚拟机使用专用 IP 在网络中进行通信。 可以从堡垒托管的虚拟网络的任何虚拟机中删除公共 IP。 有关详细信息,请参阅 将公共 IP 地址与 Azure VM 取消关联

注意

Azure 会为未分配公共 IP 地址的 VM 或位于内部基本 Azure 负载均衡器的后端池中的 VM 提供默认出站访问 IP。 默认出站访问 IP 机制会提供不可配置的出站 IP 地址。

发生以下事件之一时,将禁用默认出站访问 IP:

  • 将公共 IP 地址分配给 VM。
  • 虚拟机被放置在标准负载平衡器的后端池中,有无出站规则均可。
  • 向虚拟机的子网分配了 Azure 虚拟网络 NAT 网关 资源。

在灵活业务流程模式下通过使用虚拟机规模集创建的 VM 没有默认的出站访问权限。

有关 Azure 中的出站连接的详细信息,请参阅 Azure 中的默认出站访问使用源网络地址转换(SNAT)进行出站连接

添加 IP 配置

Azure CNI 插件根据你在虚拟机的虚拟网络接口上创建的 IP 地址池将 IP 地址分配给容器。 对于主机上的每个容器,IP 配置必须存在于虚拟网络接口上。 如果服务器上的容器数超过虚拟网络接口上的 IP 配置数,则容器会启动但不会有 IP 地址。

在本部分,我们将向之前创建的虚拟机的虚拟网络接口添加 IP 配置。

  1. 在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。

  2. 选择 vm-1

  3. 在“设置”中,选择“网络”。

  4. 选择“网络接口:”旁边的网络接口名称。 网络接口命名为带随机数的 vm-1

  5. 在网络接口的“设置”中,选择“IP 配置”。

  6. 在“IP 配置”的“名称”中选择“ipconfig1”。

  7. 在“ipconfig1”设置中,将专用 IP 地址的分配从“动态”更改为“静态”。

  8. 选择“保存” 。

  9. 返回到“IP 配置”。

  10. 选择“+ 添加”。

  11. 对于“添加 IP 配置”,请输入或选择以下信息:

    设置
    名称 输入 ipconfig-2
    专用 IP 地址设置
    分配 选择“静态”。
    IP 地址 输入 10.0.0.5。
  12. 选择“确定”

  13. 验证是否已将“ipconfig2”添加为辅助 IP 配置。

重复步骤 1 到 13 以添加配置,配置数与你希望在容器主机上部署的容器数相同。

在 Windows 中配置 IP 地址

若要向 Windows 虚拟机分配多个 IP 地址,必须将 IP 地址添加到 Windows 中的网络接口。 在本部分,你将登录到虚拟机并配置在上一部分创建的 IP 配置。

  1. 在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。

  2. 选择 vm-1

  3. 在“vm-1”的“概述”中选择“连接”,然后选择“Bastion”。

  4. 输入在前面的步骤中部署虚拟机时创建的用户名和密码。

  5. 选择“连接”。

  6. 打开虚拟机上的网络连接配置。 选择“开始”->“运行”,然后输入 ncpa.cpl

  7. 选择“确定”。

  8. 选择虚拟机的网络接口,然后选择“属性”:

    在 Windows OS 中选择网络接口的屏幕截图。

  9. 在“以太网属性”中,选择“Internet 协议版本 4 (TCP/IPv4)”,然后选择“属性”。

  10. 在“常规”选项卡中输入或选择以下信息:

    设置
    选择“使用下面的 IP 地址:”
    IP 地址: 输入 10.0.0.4
    子网掩码: 输入 255.255.255.0
    默认网关 输入 10.0.0.1
    选择“使用下面的 DNS 服务器地址:”
    首选 DNS 服务器: 输入 168.63.129.16,此 IP 是 DHCP 分配的默认 Azure DNS 的 IP 地址
  11. 选择“高级...”。

  12. 在“IP 地址”中选择“添加...”。

  13. 输入或选择以下信息:

    设置
    TCP/IP 地址
    IP 地址: 输入 10.0.0.5
    子网掩码: 输入 255.255.255.0
  14. 选择添加

  15. 若要添加与之前创建的任何额外 IP 配置相对应的其他 IP 地址,请选择“添加”。

  16. 选择“确定”。

  17. 选择“确定”。

  18. 选择“确定”

应用网络配置时,Bastion 连接会断开几秒钟。 等待几秒钟,然后尝试重新连接。 重新连接成功后继续操作。

安装 Docker

必须在之前创建的虚拟机上安装和配置 Docker 容器引擎。

使用通过虚拟网络部署的 Azure Bastion 主机登录到之前创建的虚拟机。

  1. 在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。

  2. 选择 vm-1

  3. 在“vm-1”的“概述”中选择“连接”,然后选择“Bastion”。

  4. 输入在前面的步骤中部署虚拟机时创建的用户名和密码。

  5. 选择“连接” 。

  6. vm-1 上打开 Windows PowerShell

  7. 以下示例安装 Docker CE/Moby:

    Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/microsoft/Windows-Containers/Main/helpful_tools/Install-DockerCE/install-docker-ce.ps1" -o install-docker-ce.ps1
    
    .\install-docker-ce.ps1
    

虚拟机会重启以在 Windows 中安装容器支持。 重新连接到虚拟机,然后 Docker 安装会继续。

有关 Windows 容器的详细信息,请参阅入门:为容器准备 Windows

在虚拟机上安装 Docker 后,请继续执行本文中的步骤。

安装 CNI 插件和 jq

Azure CNI 插件作为 GitHub 项目维护,可从项目的 GitHub 页面下载。 对于本文,你将在虚拟机中下载 CNI 插件存储库,然后安装并配置该插件。

有关 Azure CNI 插件的详细信息,请参阅 Azure 容器网络

  1. 在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。

  2. 选择 vm-1

  3. 在“vm-1”的“概述”中选择“连接”,然后选择“Bastion”。

  4. 输入在前面的步骤中部署虚拟机时创建的用户名和密码。

  5. 选择“连接”。

  6. 使用以下示例下载 CNI 插件并将其提取到虚拟机中的临时文件夹:

    Invoke-WebRequest -Uri https://github.com/Azure/azure-container-networking/archive/refs/heads/master.zip -OutFile azure-container-networking.zip
    
    Expand-Archive azure-container-networking.zip -DestinationPath azure-container-networking
    
  7. 若要安装 CNI 插件,请切换到在上一步骤中下载的 CNI 插件文件夹所在的 scripts 目录。 安装脚本命令需要 CNI 插件的版本号。 在撰写本文时,最新版本为 v1.4.39。 若要获取插件的最新版本号或以前的版本,请参阅版本

    cd .\azure-container-networking\azure-container-networking-master\scripts\
    
    .\Install-CniPlugin.ps1 v1.4.39
    
  8. CNI 插件附带插件的内置网络配置文件。 使用以下示例将该文件复制到网络配置目录:

    Copy-Item -Path "c:\k\azurecni\bin\10-azure.conflist" -Destination "c:\k\azurecni\netconf"
    

安装 jq

用于通过 Azure CNI 插件创建容器的脚本需要 jq 应用程序。 有关详细信息和下载位置,请参阅下载 jq

  1. 在虚拟机中打开 Web 浏览器并下载 jq 应用程序。

  2. 下载的内容是该应用程序的独立可执行文件。 将可执行文件 jq-win64.exe 复制到 C:\Windows 目录。

创建测试容器

  1. 若要使用 CNI 插件来启动容器,必须使用插件附带的特殊脚本来创建和启动容器。 以下示例使用 CNI 插件脚本创建了一个 Windows Server 容器:

    cd .\azure-container-networking\azure-container-networking-master\scripts\
    .\docker-exec.ps1 vnetdocker1 default mcr.microsoft.com/windows/servercore/iis add
    

    首次下载容器映像可能需要几分钟时间。 当容器启动并初始化网络时,Bastion 连接会断开。 等待几秒钟以重新建立连接。

  2. 若要验证容器是否收到之前配置的 IP 地址,请连接到容器并查看 IP:

    docker exec -it vnetdocker1 powershell
    
  3. 在以下示例中使用 ipconfig 命令来验证 IP 地址是否已分配给容器:

    ipconfig
    

    测试容器的 PowerShell 提示符中 ipconfig 输出的屏幕截图。

  4. 退出容器并关闭 Bastion 与 vm-1 的连接。

清理资源

使用创建的资源之后,可以删除资源组及其所有资源。

  1. 在 Azure 门户中,搜索并选择“资源组”。

  2. 在“资源组”页上,选择“test-rg”资源组。

  3. 在“test-rg”页上,选择“删除资源组”。

  4. 在“输入资源组名称以确认删除”中输入“test-rg”,然后选择“删除”。

后续步骤

本文介绍了如何安装 Azure CNI 插件和创建测试容器。

有关 Azure 容器网络和 Azure Kubernetes 服务的详细信息,请参阅: