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

Azure CNI 插件为独立的 Docker 主机和 Kubernetes 群集启用单容器/Pod 网络。 本文介绍如何为独立的 Linux 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. 选择屏幕底部的“查看 + 创建”,然后在验证通过时选择“创建”。

部署 Bastion 主机可能需要几分钟时间。 可以在部署 Bastion 主机时继续执行这些步骤。

创建测试虚拟机

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

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

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

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

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    虚拟机名称 输入“vm-1”。
    区域 选择“(亚太)中国东部 2”。
    可用性选项 选择“无需基础结构冗余”。
    安全类型 保留默认值标准
    映像 选择“Ubuntu Server 22.04 LTS - Gen2”。
    大小 选择一个大小。
    管理员帐户
    身份验证类型 选择密码
    用户名 输入“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. 验证是否已将 ipconfig-2 添加为辅助 IP 配置。

重复上述步骤,添加要部署在容器主机上的容器数量尽可能多的配置。

安装 Docker

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

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

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

  2. 选择 vm-1

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

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

  5. 选择“连接”。

有关 Ubuntu 容器主机上的 Docker 的安装说明,请参阅在 Ubuntu 上安装 Docker 引擎

在虚拟机上安装 Docker 后,请按照 Linux 的安装后操作说明进行操作。 有关 Linux 安装后操作的说明,请参阅 Docker 引擎的安装后步骤

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

安装 CNI 插件并创建测试容器

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

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

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

  2. 选择 vm-1

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

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

  5. 选择“连接”。

  6. CNI 插件的安装脚本需要应用程序 jq,请使用以下示例安装该应用程序:

    sudo apt-get update
    sudo apt-get install jq
    
  7. 接下来,克隆 CNI 插件的存储库。 请使用以下示例来克隆存储库:

    git clone https://github.com/Azure/azure-container-networking.git
    
  8. 配置权限并安装 CNI 插件。 安装脚本命令需要 CNI 插件的版本号。 在撰写本文时,最新版本为 v1.4.39。 若要获取插件的最新版本号或以前的版本,请参阅版本

    cd ./azure-container-networking/scripts
    chmod u+x install-cni-plugin.sh
    sudo ./install-cni-plugin.sh v1.4.39
    chmod u+x docker-run.sh
    
  9. 若要使用 CNI 插件来启动容器,必须使用插件附带的特殊脚本来创建和启动容器。 以下示例将使用 CNI 插件脚本创建一个 Alpine 容器:

    sudo ./docker-run.sh vnetdocker1 default alpine
    
  10. 若要验证容器是否收到之前配置的 IP 地址,请连接到容器并查看 IP:

    sudo docker exec -it vnetdocker1 /bin/sh
    
  11. 在以下示例中使用 ifconfig 命令来验证 IP 地址是否已分配给容器:

    ifconfig
    

    屏幕截图显示测试容器的 Bash 提示符中的 ifconfig 输出。

清理资源

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

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

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

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

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

后续步骤

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

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