网络概述
CCE集群网络架构基于Kubernetes原生网络模型,结合华为云的基础设施能力,构建了覆盖节点、容器、服务三层的立体化通信体系。其核心目标是实现集群内/外流量的高效转发、服务发现与网络隔离,支持从中小型应用到大规模微服务架构的全场景需求。
您可以从如下角度了解集群网络:
- 集群网络构成:集群由多个节点组成,并且每个节点上运行着多个Pod(容器)。为了确保节点之间、节点与Pod之间、Pod与Pod之间的通信,集群中包含以下几种不同的网络:
- 节点网络:用于节点之间的通信,确保集群内的所有节点能够相互通信。
- 容器网络:用于Pod之间的通信,确保集群内的所有Pod能够直接通过IP地址相互通信,无需NAT转换。
- 服务网络:用于集群内部服务的通信,提供稳定的虚拟IP地址,使得服务可以被集群内的其他Pod或服务访问。
- 集群中的Pod访问方式:Kubernetes提供Service和Ingress来解决Pod的访问问题。本章节根据用户使用场景总结了常见的网络访问场景,让您能够在不同使用场景下选择合适的使用方法。
集群网络构成
集群网络是Kubernetes的核心部分,确保集群内部的容器能够相互通信,同时也能够与外部通信。其核心构成如下:
- 节点网络:CCE使用VPC中的子网作为集群的节点网络,在子网内为集群内主机(即节点)分配IP地址,子网的可用IP数量作为关键因素直接限制集群中可以创建的节点数量上限(如掩码为/24的子网最多可分配254个节点IP),且集群中可创建节点数量还受容器网络的影响,在容器网络模型中会进一步说明。
- 容器网络:为集群内Pod分配独立的IP地址,集群内所有Pod都在一个直接连通的扁平网络中,无需NAT可直接通过Pod的IP地址访问。Kubernetes通过容器网络接口(CNI)对容器间的网络做出了标准化的定义,通过网络模型插件为Pod分配独立IP,不同网络模型的可以有不同分配原则,实现集群内扁平网络通信。
图1 容器网络
当前CCE支持如下容器网络模型:
- 容器隧道网络模型:容器隧道网络在节点网络基础上通过隧道封装构建的独立于节点网络平面的容器网络平面,CCE集群容器隧道网络使用的封装协议为VXLAN,后端虚拟交换机采用的是openvswitch,VXLAN是将以太网报文封装成UDP报文进行隧道传输。
- VPC网络模型:VPC网络采用VPC路由方式与底层网络深度整合,适用于高性能场景,节点数量受限于虚拟私有云VPC的路由配额。每个节点将会被分配固定大小的IP地址段。VPC网络由于没有隧道封装的消耗,容器网络性能相对于容器隧道网络有一定优势。VPC网络集群由于VPC路由中配置有容器网段与节点IP的路由,可以支持集群外直接访问容器实例等特殊场景。
- 云原生网络2.0模型:云原生网络2.0是自研的新一代容器网络模型,深度整合了虚拟私有云VPC的弹性网卡(Elastic Network Interface,简称ENI)和辅助弹性网卡(Sub Network Interface,简称Sub-ENI)的能力,直接从VPC网段内分配Pod IP地址,支持ELB直通容器,绑定安全组,绑定弹性公网IP,享有高性能。
不同容器网络模型,容器网络的性能、组网规模、适用场景各不相同,在容器网络模型对比章节,将会详细介绍不同容器网络模型的功能特性,了解这些有助于您选择容器网络模型。
- 服务网络:服务(Service)是Kubernetes内的概念,每个Service都有一个固定的IP地址,Kubernetes通过Service机制为Pod提供稳定的访问入口。在CCE上创建集群时,可以指定Service的地址段(即服务网段)。服务网段不能和节点网段、容器网段重叠,且只在集群内使用,不能在集群外使用。
Service
在Kubernetes中,Pod被视为临时性、可随时替换的资源。当Pod被销毁或替换时,其相关的网络资源也会随之变化,因此需要为Pod提供稳定的访问方式。Kubernetes通过Service为一组具有相同功能的Pod提供固定的访问入口,并对这些Pod进行负载均衡。
如下图所示,Service通过Selector关联一组Pod,当访问Service的IP地址和端口时,流量会被分配到这些Pod上。当Pod发生变化时,Service会自动更新后端的转发规则,确保通过Service始终能够访问到最新的Pod。

根据创建Service的类型不同,可分成如下模式:
- ClusterIP:用于在集群内部互相访问的场景,通过ClusterIP访问Service。
- NodePort:用于从集群外部访问的场景,通过节点上的端口访问Service。
- LoadBalancer:用于从集群外部访问的场景,其实是NodePort的扩展,通过一个特定的LoadBalancer访问Service,这个LoadBalancer将请求转发到节点的NodePort,而外部只需要访问LoadBalancer。
- DNAT:用于从集群外部访问的场景,为集群节点提供网络地址转换服务,使多个节点可以共享使用弹性IP。
Service的详细介绍请参见服务概述。
Ingress
Service是基于四层TCP和UDP协议转发的,而Ingress可以基于七层的HTTP和HTTPS协议转发,可以通过域名和路径做到更细粒度的划分,如下图所示。

Ingress的详细介绍请参见路由概述。
DNS
CCE使用CoreDNS来实现集群内的服务发现功能。例如,客户端应用可以通过Service的服务名解析出其ClusterIP,进而通过Service访问后端的Pod。这种DNS服务发现机制使得集群中应用间的调用与具体的IP地址和部署环境解耦。关于集群DNS的详细说明请参见DNS概述。

网络访问场景
工作负载网络访问可以分为如下几种场景。
- 从集群内部访问工作负载:创建ClusterIP类型的Service,通过Service访问工作负载。
- 从集群外部访问工作负载:从集群外部访问工作负载推荐使用Service(NodePort类型或LoadBalancer类型)或Ingress访问。
- 通过公网访问工作负载:需要节点或LoadBalancer绑定公网IP。
- 通过内网访问工作负载:通过节点或LoadBalancer的内网IP即可访问工作负载。如果跨VPC需要通过对等连接等手段打通不同VPC网络。
- 工作负载访问外部网络:
- 工作负载访问内网:负载访问内网地址,在不同容器网络模型下有不同的表现,需要注意在对端安全组放通容器网段,具体请参见容器如何访问VPC内部网络。
- 工作负载访问公网:访问公网有几种方法可以实现,一是让容器所在节点绑定公网IP(容器网络模型为VPC网络或容器隧道网络),或给Pod IP绑定公网IP(云原生2.0网络),另一个是通过NAT网关配置SNAT规则,具体请参见从容器访问公网。
