容器网络概念

适用于:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS

应用程序组件必须协同工作才能在基于容器的微服务方法中处理其任务。 Kubernetes 提供支持应用程序通信的资源,使你可在内部或外部连接应用程序并将其公开。 可以对应用程序进行负载均衡,以生成高可用性应用程序。

更复杂的应用程序可能需要为 SSL/TLS 终止或多个组件的路由配置入口流量。 可能还需要限制网络流量流入 Pod 和节点之间的流,以确保安全性。

本文介绍在 Arc 启用的 AKS 中向应用程序提供网络的核心概念:

  • Kubernetes 服务
  • 入口控制器
  • 网络策略

Kubernetes 服务

为了简化应用程序工作负荷的网络配置,Kubernetes 使用服务以逻辑方式将一组 Pod 组合在一起,并提供网络连接。 以下服务类型可用:

群集 IP:创建内部 IP 地址,以便在 Kubernetes 群集中使用。 将群集 IP 用于支持群集中其他工作负荷的内部专用应用程序。

显示 AKS 群集中的群集 IP 流量流的关系图。

NodePort:在基础节点上创建端口映射,允许应用程序使用节点 IP 地址和端口直接访问。

显示 AKS 群集中 NodePort 流量的示意图。

LoadBalancer:创建 Azure 负载均衡器资源,配置外部 IP 地址,并将请求的 Pod 连接到负载均衡器后端池。 为允许客户流量发送到应用程序,要在所需端口上创建负载均衡规则。

显示 AKS 群集中的负载均衡器流量流的示意图。

对于入站流量的其他控制和路由,可以使用入口控制器。

注意

部署与另一个目标群集共享网络的目标群集时,可能会发生负载均衡器 IP 地址冲突。 如果你在共享同一 AksHciClusterNetwork 对象的目标集群中部署使用不同端口的两个工作负载,就会发生这种情况。 由于在 HA 代理内部分配 IP 地址和端口映射的方式,这可能导致 IP 地址分配重复。 如果发生这种情况,则在重新部署工作负荷之前,一个或两个工作负荷可能会遇到随机网络连接问题。 重新部署工作负荷时,可以使用导致每个工作负荷接收单独的服务 IP 地址的相同端口,也可以在使用不同 AksHciClusterNetwork 对象的目标群集上重新部署工作负荷。

ExternalName:创建特定的 DNS 条目,以便更轻松地访问应用程序。 负载均衡器和服务的 IP 地址可以是内部或外部地址,具体取决于整个网络设置,并且可以动态分配。 或者,可以指定要使用的现有静态 IP 地址。 现有的静态 IP 地址通常绑定到 DNS 条目。 内部负载均衡器仅分配有一个专用 IP 地址,因此无法从 Internet 对其进行访问。

Azure 本地上的 Kubernetes 网络基础知识

为允许访问应用程序或让应用程序组件相互通信,Kubernetes 为虚拟网络提供了抽象层。 Kubernetes 节点连接到虚拟网络,可为 Pod 提供入站和出站连接。 在每个节点上运行的 kube-proxy 组件提供这些网络功能。

在 Kubernetes 中, 服务 以逻辑方式对 Pod 进行分组以允许:

  • 通过单个 IP 地址或 DNS 名称和特定端口直接访问。
  • 使用负载均衡器在托管同一服务或应用程序的多个 Pod 之间分配流量。

Azure 本地平台还通过以高可用性方式提供“底层”网络,帮助简化 Azure 本地群集上 AKS 的虚拟网络。 创建 AKS 群集时,我们还会创建和配置基础 HAProxy 负载均衡器资源。 在 Kubernetes 群集中部署应用程序时,将为 Pod 和 Kubernetes 服务配置 IP 地址作为此负载均衡器中的终结点。

IP 地址资源

为了简化应用程序工作负荷的网络配置,AKS Arc 将 IP 地址分配给部署中的以下对象:

  • Kubernetes 群集 API 服务器:API 服务器是公开 Kubernetes API 的 Kubernetes 控制平面的组件。 API 服务器是 Kubernetes 控制平面的前端。 静态 IP 地址始终分配给 API 服务器,而不考虑基础网络模型。
  • Kubernetes 节点(虚拟机):Kubernetes 群集由一组辅助角色计算机(称为节点)和节点托管容器化应用程序组成。 除了控制平面节点,每个群集至少有一个工作器节点。 对于 AKS 群集,Kubernetes 节点配置为虚拟机。 这些虚拟机在 Azure 本地中创建为高可用性虚拟机,有关详细信息,请参阅 节点网络概念
  • Kubernetes 服务:在 Kubernetes 中, 服务 以逻辑方式对 Pod IP 地址进行分组,以便通过特定端口上的单个 IP 地址或 DNS 名称直接访问。 服务还可以使用 负载均衡器分发流量。 静态 IP 地址始终分配给 Kubernetes 服务,而不考虑基础网络模型。
  • HAProxy 负载均衡器HAProxy 是一个 TCP/HTTP 负载均衡器和代理服务器,可将传入请求分散到多个终结点。 Azure 本地部署上的 AKS 中的每个工作负荷群集都部署并配置为专用虚拟机的 HAProxy 负载均衡器。
  • Microsoft本地云服务:这是一个 Azure 本地云提供商,用于创建和管理在本地 Azure 本地群集或 Windows Server 群集上托管 Kubernetes 的虚拟化环境。 网络模型后跟 Azure 本地或 Windows Server 群集确定Microsoft本地云服务使用的 IP 地址分配方法。 若要详细了解 Microsoft 本地云服务实现的网络概念,请参阅节点网络概念

Kubernetes 网络

在 Azure 本地的 AKS 中,可以部署使用以下网络模型之一的群集:

  • Flannel 覆盖网络 - 网络资源通常在部署群集时创建和配置。
  • Project Calico 网络 - 此模型提供其他网络功能,例如网络策略和流控制。

这两种网络实现都使用覆盖网络配置模型,该模型提供与数据中心网络的其余部分断开连接的 IP 地址分配。

若要了解有关覆盖网络的详细信息,请参阅 简介:适用于 Windows 的 Kubernetes 覆盖网络。

有关 Calico 网络插件和策略的详细信息,请查看 Calico 网络策略入门。

比较网络模型

法兰绒

注意

弗拉内尔 CNI 于 2023 年 12 月退休。

Flannel 是专为容器设计的虚拟网络层。 Flannel 会创建一个覆盖主机网络的平面网络。 在该覆盖网络中,会为所有容器/Pod 分配一个 IP 地址,并且通过连接到彼此的 IP 地址来直接通信。

Calico

Calico 是开源网络和网络安全解决方案,适用于容器、虚拟机和基于本机主机的工作负载。 Calico 支持多个数据平面,包括:Linux eBPF 数据平面、Linux 网络数据平面和 Windows HNS 数据平面。

功能

功能 法兰绒 Calico
网络策略
IPv6
使用的层 L2 (VxLAN) L2 (VxLAN)
在现有或新的虚拟网络中部署群集
Windows 支持
Pod-Pod 连接
Pod-VM 连接,同一网络中 VM
Pod-VM 连接,不同网络中的 VM
Kubernetes 服务
通过负载均衡器公开
网络 具有多守护程序的同一群集上的许多网络 同一群集上的许多网络
部署 Linux:DaemonSet Linux:DaemonSet
Windows:服务 Windows:服务
命令行 calicoctl

重要

目前,默认选择是在覆盖网络模式下使用 Calico。 若要启用 Flannel,请使用 -primaryNetworkPlugin PowerShell 命令的参数 New-AksHciCluster 并指定 flannel 为值。 部署群集后,此值不能更改,它适用于 Windows 和 Linux 群集节点。

例如:

New-AksHciCluster -name MyCluster -primaryNetworkPlugin 'flannel'

后续步骤

本文介绍 Azure 本地 AKS 节点上容器的网络概念。 有关 Azure 本地概念上的 AKS 的详细信息,请参阅以下文章: