容器网络概念

适用于: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 Stack HCI 上的 Kubernetes 网络基础知识

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

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

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

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

IP 地址资源

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

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

Kubernetes 网络

在 Azure Stack HCI 上的 AKS 中,可以部署使用以下两种网络模型之一的群集:

  • Flannel Overlay 网络 - 通常在部署群集时创建和配置网络资源。
  • Project Calico 网络 - 这个模型提供额外的网络功能,例如网络策略和流量控制。

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

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

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

比较网络模型

Flannel

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

Calico

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

功能

功能 Flannel 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 Stack HCI 上 AKS 节点中容器的网络概念。 有关 Azure Stack HCI 上的 AKS 概念的详细信息,请参阅以下文章: