文档

网络概述

更新时间:

阿里云容器服务 Kubernetes 版 ACK(Container Service for Kubernetes)集成Kubernetes网络、阿里云VPC、阿里云SLB,提供稳定高性能的容器网络。本文介绍ACK集群网络及阿里云网络底层基础设施的重要概念,如容器网络CNI、Service、Ingress、提供服务发现能力的DNS等。您可以通过了解这些概念,更合理地设计应用部署模型和网络访问的方式。

容器网络CNI

图 1. 容器网络模型

image

容器化应用会在同一个节点上部署多个业务,而每个业务都需要自己的网络空间。为避免与其他业务网络冲突,需要Pod有自己独立的网络空间,而Pod中应用需要和其他网络进行通信,就需要Pod能够跟不同的网络互相访问。可见容器网络特点如下:

  • 每个Pod都拥有自己独立的网络空间和IP地址。不同Pod的应用可以监听同样的端口而不冲突。

  • Pod可以通过各自的IP地址互相访问。

    集群中Pod可以通过它独立的IP地址与其他应用互通:

    • 同一个集群中,Pod之间相互访问。

    • Pod直接访问同一个VPC下的ECS。

    • 同一个VPC下的ECS直接访问Pod。

    说明

    Pod能直接访问同一个VPC下的ECS和同一个VPC下的ECS能直接访问Pod的前提是您需要正确设置安全组规则。关于如何设置安全组规则,请参见添加安全组规则

在ACK中,您可以通过两种网络模型实现上述容器网络的能力,分别是Flannel网络模式和Terway网络模式。这两种网络模式采用不同的网络模型,其特点如下:

说明

集群创建完成后,不支持Flannel与Terway之间的变更切换。

Terway网络模式

Terway网络模式采用的是云原生的网络方案,直接基于阿里云的虚拟化网络中的弹性网卡资源来构建的容器网络。Pod会通过弹性网卡资源直接分配VPC中的IP地址,而不需要额外指定虚拟Pod网段。

Terway网络模式的特点是:

  • 容器和虚拟机在同一层网络,便于业务云原生化迁移。

  • 不依赖封包或者路由表,分配给容器的网络设备本身可以用来通信。

  • 集群节点规模不受路由表或者封包的FDB转发表等配额限制。

  • 不需要额外为容器规划Overlay的网段,多个集群容器之间只要设置安全组开放端口就可以互相通信。

  • 可以直接把容器挂载到SLB后端,无需在节点上使用NodePort进行转发。

  • NAT网关可以对容器进行SNAT,无需节点上对容器网段进行SNAT:容器访问VPC内部资源,所带的源IP都是容器IP,便于审计;容器访问外部网络不依赖conntrack SNAT,降低失败率。

  • Terway网络模式支持通过网络策略(NetworkPolicy)配置Pod间网络访问的规则。

    网络策略(NetworkPolicy)是一种关于Pod间及Pod与其他网络端点间所允许的通信规则的规范。NetworkPolicy资源使用标签选择Pod,并定义选定Pod所允许的通信规则。更多信息,请参见在ACK集群使用网络策略在ACK Serverless集群使用网络策略Network Policy

  • 在使用Alibaba Cloud Linux系统作为节点的操作系统时,Terway网络模式支持使用更高效的eBPF加速链路,加速容器网络性能。

Flannel网络模式

Flannel网络模式中Pod的网段独立于VPC的网段。Pod网段会按照掩码均匀划分给每个集群中的节点,每个节点上的Pod会从节点上划分的网段中分配IP地址。Flannel网络基于阿里云VPC的自定义路由能力,来实现跨节点的Pod直接与VPC互相访问。

Flannel网络模式的特点是:

  • 基于阿里云VPC的Flannel网络无封包,相对默认的Flannel VXLAN性能提升20%。

  • Pod网段是独立于VPC的虚拟网段。

  • 每个节点需要对应一个VPC的路由表条目,一个VPC下的Kubernetes节点数量受限于VPC路由表的配额。

关于阿里云专有网络VPC网段和Kubernetes网段关系,请参见专有网络VPC网段和Kubernetes网段关系

关于如何选择合适的网络模式,请参见使用Terway网络插件

ACK常见网络能力一览表

分类

常见网络能力

网络插件

参考文档

Terway

Flannel

网络配置管理

IPv4/IPv6双栈

支持

不支持

节点维度网络配置

支持

不支持

配置Terway网络下节点级别网络

Pod维度网络配置

支持

不支持

为Pod配置固定IP及独立虚拟交换机、安全组

Pod固定IP

支持

不支持

为Pod配置固定IP及独立虚拟交换机、安全组

Pod QoS

支持

不支持

为Pod配置QoS

网络策略Network Policy

支持

不支持

使用网络策略Network Policy

设置Pod安全组

支持

不支持

扩容Pod网段

支持

不支持

使用VPC的多路由表功能

支持

支持

南北向访问

Pod访问公网

支持

支持

从公网直接访问Pod

支持

不支持

使用LoadBalancer服务

支持

支持

通过使用自动创建SLB的服务公开应用

使用Ingress

支持

支持

Ingress概述

Service

由于云原生的应用,通常需要敏捷的迭代和快速的弹性,且单一容器和其相关的网络资源的生命周期非常短暂,所以需要固定的访问地址,以及自动负载均衡实现快速的业务弹性。ACK采用Service方式为一组容器提供固定的访问入口,并对这一组容器进行负载均衡。实现原理如下:

  • 创建Service对象时,ACK会分配一个相对固定的Service IP地址。

  • 通过字段selector选择一组容器,以将这个Service的IP地址和端口负载均衡到这一组容器IP和端口上。

Service网络支持以下多种模式,分别对接不同来源和类型的客户端的访问:

  • ClusterIP

    • ClusterIP类型的Service用于集群内部的应用间访问,如果您的应用需要暴露到集群内部提供服务,需使用ClusterIP类型的Service进行暴露。

      说明
      • 创建Service时默认的Service类型为ClusterIP。

      • 创建ClusterIP类型的Service时,不会创建负载均衡实例。

  • NodePort

    • NodePort类型的Service将集群中部署的应用向外暴露,通过集群节点上的一个固定端口暴露出去,这样在集群外部就可以通过节点IP和这个固定端口来访问。

  • LoadBalancer

  • Headless Service

    • Headless Service类型的Service是在Service属性中指定clusterIP字段为None类型。采用Headless Service类型后,Service将没有固定的虚拟IP地址,客户端访问Service的域名时会通过DNS返回所有的后端Pod实例的IP地址,客户端需要采用DNS负载均衡来实现对后端的负载均衡。

  • ExternalName

    • ExternalName类型的Service将集群外部的域名映射到集群内部的Service上,例如将外部的数据库域名映射到集群内部的Service名,那么就能在集群内部通过Service名直接访问。

关于Service的负载均衡配置需要注意内容,请参见Service的负载均衡配置注意事项

Ingress

在ACK集群中,与Service的4层负载均衡不同,Ingress是集群内Service对外暴露7层的访问接入点。您可以通过Ingress资源来配置不同的7层的转发规则,例如通过域名或者访问路径来路由到不同的Service上,从而达到7层的负载均衡作用。更多信息,请参见Ingress概述

图 2. Ingress和Service关系

image

示例

常见的前后端分离的架构方式中,前后端的访问地址分别使用不同的访问路径。对应这种场景,可以采用Ingress,根据7层的访问路径将负载分配到不同的应用实例上。

image

服务发现DNS

ACK使用DNS来实现应用的服务发现能力,例如客户端应用可以通过Service的服务名解析出它的ClusterIP访问,可以通过StatefulSet的Pod名解析出Pod的IP地址。采用DNS服务发现的能力让集群中应用间的调用与IP地址和部署环境解耦。

集群的Coredns会将Service名自动转换成对应的Service的IP地址,来实现不同部署环境中相同的访问入口。关于集群DNS组件的使用和调优详细信息,请参见DNS策略配置和域名解析说明

image

网络底层基础设施

  • VPC

    • 阿里云专有网络VPC(Virtual Private Cloud)是基于阿里云创建的自定义私有网络,不同的专有网络之间彻底逻辑隔离。您可以在专有网络内创建和管理云产品实例,例如云服务器、云数据库RDS版和负载均衡等。

      每个VPC都由一个路由器、至少一个私网网段和至少一个交换机组成。

      image
      • 私网网段

        在创建专有网络和交换机时,您需要以CIDR地址块的形式指定专有网络使用的私网网段。

        您可以使用下表中标准的私网网段及其子网作为VPC的私网网段,也可以使用自定义地址段作为VPC的私网网段。更多信息,请参见网络规划

        网段

        说明

        192.168.0.0/16

        可用私网IP数量(不包括系统保留地址):65,532

        172.16.0.0/12

        可用私网IP数量(不包括系统保留地址):1,048,572

        10.0.0.0/8

        可用私网IP数量(不包括系统保留地址):16,777,212

        自定义地址段

        除100.64.0.0/10、224.0.0.0/4、127.0.0.0/8、169.254.0.0/16及其子网外的自定义地址段。

      • 虚拟路由器

        虚拟路由器(vRouter)是专有网络的枢纽。作为专有网络中重要的功能组件,它可以连接专有网络内的各个交换机,同时也是连接专有网络和其他网络的网关设备。每个专有网络创建成功后,系统会自动创建一个虚拟路由器。每个虚拟路由器至少关联一张路由表。

        更多信息,请参见路由表概述

      • 交换机

        交换机(vSwitch)是组成专有网络的基础网络设备,用来连接不同的云资源。创建专有网络后,您可以通过创建交换机为专有网络划分一个或多个子网。同一专有网络内的不同交换机之间内网互通。您可以将应用部署在不同可用区的交换机内,提高应用的可用性。

        更多信息,请参见创建和管理交换机

  • SLB

    • 阿里云负载均衡SLB(Server Load Balancer)通过设置虚拟服务地址,将添加的ECS实例虚拟成一个高性能、高可用的应用服务池,并根据转发规则,将来自客户端的请求分发给云服务器池中的ECS实例。

      负载均衡默认检查云服务器池中的ECS实例的健康状态,自动隔离异常状态的ECS实例,消除了单台ECS实例的单点故障,提高了应用的整体服务能力。此外,负载均衡还具备抗DDoS攻击的能力,增强了应用服务的防护能力。

      负载均衡由以下三个部分组成:

      • 负载均衡实例

        一个负载均衡实例是一个运行的负载均衡服务,用来接收流量并将其分配给后端服务器。要使用负载均衡服务,您必须创建一个负载均衡实例,并至少添加一个监听和两台ECS实例。

      • 监听

        监听用于检查客户端请求并将请求转发给后端服务器。监听也会对后端服务器进行健康检查。

      • 后端服务器

        一组接收前端请求的ECS实例。您可以单独添加ECS实例到服务器池,也可以通过虚拟服务器组或主备服务器组来批量添加和管理。

  • 本页导读 (1)