部署 Azure 虚拟网络容器网络接口插件
Azure 虚拟网络容器网络接口 (CNI) 插件安装在 Azure 的虚拟机中,并为 Kubernetes Pod 和 Docker 容器提供虚拟网络功能。 要了解有关该插件的详细信息,请参阅启用容器以使用 Azure 虚拟网络功能。 此外,通过选择高级网络选项,该插件可用于 Azure Kubernetes 服务 (AKS),高级网络选项自动将 AKS 容器放置在虚拟网络中。
为 Azure 容器服务-引擎 Kubernetes 群集部署插件
Azure 容器服务-引擎使用 Azure 资源管理器模板部署 Kubernetes 群集。 群集配置在 JSON 文件中指定,该文件在生成模板时传递给工具。 若要详细了解受支持的群集设置及其说明的完整列表,请参阅 Azure 容器服务引擎 - 群集定义。 该插件是使用 Azure 容器服务-引擎创建的群集的默认网络插件。 配置插件时,以下网络配置设置非常重要:
设置 | 说明 |
---|---|
firstConsecutiveStaticIP | 分配给主节点的 IP 地址。 此设置是必需的。 |
kubernetesConfig 下的 clusterSubnet | 在其中部署集群并将 IP 地址分配给 Pod 的虚拟网络子网的 CIDR |
masterProfile 下的 vnetSubnetId | 指定在其中部署群集的子网的 Azure 资源管理器资源 ID |
vnetCidr | 在其中部署集群的虚拟网络的 CIDR |
kubeletConfig 下的 max-Pod | 每个代理虚拟机上的 Pod 的最大数量。 对于插件,默认值为 30。 最多可以指定 250 个 |
配置示例
下面的 json 示例适用于具有以下属性的群集:
一个主节点和两个代理节点
部署在名为 KubeClusterSubnet (10.0.0.0/20) 的子网中,主节点和代理节点都驻留其中。
{
"apiVersion": "vlabs",
"properties": {
"orchestratorProfile": {
"orchestratorType": "Kubernetes",
"kubernetesConfig": {
"clusterSubnet": "10.0.0.0/20" --> Subnet allocated for the cluster
}
},
"masterProfile": {
"count": 1,
"dnsPrefix": "ACSKubeMaster",
"vmSize": "Standard_A2",
"vnetSubnetId": "/subscriptions/<subscription ID>/resourceGroups/<Resource Group Name>/providers/Microsoft.Network/virtualNetworks/<Vnet Name>/subnets/KubeClusterSubnet",
"firstConsecutiveStaticIP": "10.0.1.50", --> IP address allocated to the Master node
"vnetCidr": "10.0.0.0/16" --> Virtual network address space
},
"agentPoolProfiles": [
{
"name": "k8sagentpoo1",
"count": 2,
"vmSize": "Standard_A2_v2",
"vnetSubnetId": "/subscriptions/<subscription ID>/resourceGroups/<Resource Group Name>/providers/Microsoft.Network/virtualNetworks/<VNet Name>/subnets/KubeClusterSubnet",
"availabilityProfile": "AvailabilitySet"
}
],
"linuxProfile": {
"adminUsername": "KubeServerAdmin",
"ssh": {
"publicKeys": [
{…}
]
}
},
"servicePrincipalProfile": {
"clientId": "dd438987-aa12-4754-b47d-375811889714",
"secret": "azure123"
}
}
}
为 Kubernetes 群集部署插件
完成以下步骤以在 Kubernetes 群集中的每个 Azure 虚拟机上安装插件:
在每个虚拟机上预分配虚拟网络 IP 地址池,IP 地址从中分配给 Pod。 每个 Azure 虚拟机在每个网络接口上都附带一个主虚拟网络专用 IP 地址。 Pod 的 IP 地址池将作为辅助地址 (ipconfigs) 添加到虚拟机网络接口上,方法是使用以下某个选项:
PowerShell:使用 PowerShell 分配多个 IP 地址
Azure 资源管理器模板:使用模板分配多个 IP 地址
确保为你希望在虚拟机上出现的所有 Pod 添加足够的 IP 地址。
通过在群集创建期间向 Kubelet 传递
–network-plugin=cni
命令行选项,选择用于为群集提供网络的插件。 默认情况下,Kubernetes 在已安装插件和配置文件的目录中查找它们。如果希望 Pod 可以访问互联网,请在 Linux 虚拟机上添加以下 iptables 规则,对 Internet 流量进行源 NAT。 在以下示例中,指定的 IP 范围是 10.0.0.0/8。
iptables -t nat -A POSTROUTING -m iprange ! --dst-range 168.63.129.16 -m addrtype ! --dst-type local ! -d 10.0.0.0/8 -j MASQUERADE
该规则对未流向指定 IP 范围的流量进行 NAT。 假设以前范围之外的所有流量都是 Internet 流量。 可以选择指定虚拟机的虚拟网络、对等虚拟网络和本地网络的 IP 范围。
Windows 虚拟机自动为流往虚拟机所属子网范围之外的流量进行源 NAT。 无法指定自定义 IP 范围。
完成前面的步骤后,将自动从虚拟网络向 Kubernetes 代理虚拟机上出现的 Pod 分配专用 IP 地址。
为 Docker 容器部署插件
使用以下命令创建 Docker 容器:
./docker-run.sh \<container-name\> \<container-namespace\> \<image\>
容器自动开始从分配的池中接收 IP 地址。 如果你想将流量负载均衡到 Docker 容器中,它们必须放置在带有负载均衡探测的软件负载均衡器后面。
CNI 网络配置文件
CNI 网络配置文件以 JSON 格式描述。 默认情况下,它出现在 /etc/cni/net.d
(对于 Linux)和 c:\cni\netconf
(对于 Windows)中。 该文件指定插件的配置且在 Windows 和 Linux 中不同。 下面的 json 是示例 Linux 配置文件,后面是一些关键设置的说明。 无需对文件进行任何更改:
{
"cniVersion":"0.3.0",
"name":"azure",
"plugins":[
{
"type":"azure-vnet",
"mode":"bridge",
"bridge":"azure0",
"ipam":{
"type":"azure-vnet-ipam"
}
},
{
"type":"portmap",
"capabilities":{
"portMappings":true
},
"snat":true
}
]
}
设置说明
“cniVersion”:Azure 虚拟网络 CNI 插件支持 CNI 规范的 0.3.0 和 0.3.1版本。
“名称”:网络的名称。 此属性可以设置为任何唯一值。
“类型”:网络插件的名称。 设置为 azure vnet。
“模式”:操作模式。 此字段可选。 支持的唯一模式是“桥接”。 有关更多详细信息,请参阅操作模式。
“桥”:用于将容器连接到虚拟网络的桥的名称。 此字段可选。 如果省略,则插件会根据主接口索引自动选择唯一名称。
“ipam” - “类型”:IPAM 插件的名称。 始终设置为 azure vnet ipam。
下载并安装插件
从 GitHub 下载插件。 下载所使用的平台的最新版本:
将 Linux 或 Windows 的安装脚本复制到计算机。 将脚本保存到计算机上的 scripts
目录,对于 Linux,将文件命名为 install-cni-plugin.sh
;对于 Windows,将文件命名为 install-cni-plugin.ps1
。
要安装插件,请为你的平台运行相应的脚本,指定正在使用的插件的版本。 例如,可以指定 v1.4.20。 对于 Linux 安装,请提供相应的 CNI 插件版本,例如 v1.0.1:
scripts/install-cni-plugin.sh [azure-cni-plugin-version] [cni-plugin-version]
scripts\\ install-cni-plugin.ps1 [azure-cni-plugin-version]
针对 Linux,该脚本在 /opt/cni/bin
下安装插件;针对 Windows,该脚本在 c:\cni\bin
下安装插件。 安装的插件附带简单的网络配置文件,该配置文件可在安装后运行。 它不需要更新。 要了解有关文件中设置的详细信息,请参阅 CNI 网络配置文件。