更新时间:2024-12-26 GMT+08:00
分享

网络概述

关于集群的网络,可以从如下两个角度进行了解:

  • 集群网络是什么样的:集群中包含有哪些网络,各自的用处是什么,具体请参见集群网络构成
  • 集群中的Pod是如何访问的:访问Pod就是访问容器,也就是访问用户的业务,Kubernetes提供ServiceIngress来解决Pod的访问问题。本章节根据用户使用场景总结了常见的网络访问场景,让您能够在不同使用场景下选择合适的使用方法。

集群网络构成

集群的网络可以分成两部分:

  • 容器网络

    为集群内Pod分配IP地址。CCE Autopilot集群继承Kubernetes的IP-Per-Pod-Per-Network的容器网络模型,即每个Pod在每个网络平面下都拥有一个独立的IP地址,Pod内所有容器共享同一个网络命名空间,集群内所有Pod都在一个直接连通的扁平网络中,无需NAT可直接通过Pod的IP地址访问。Kubernetes只提供了如何为Pod提供网络的机制,并不直接负责配置Pod网络;Pod网络的具体配置操作交由具体的容器网络插件实现。容器网络插件负责为Pod配置网络并管理容器IP地址。

    当前CCE Autopilot集群仅支持云原生网络2.0容器网络模型。云原生网络2.0是自研的新一代容器网络模型,深度整合了虚拟私有云VPC的弹性网卡(Elastic Network Interface,简称ENI)和辅助弹性网卡(Sub Network Interface,简称Sub-ENI)的能力,直接从VPC网段内分配容器IP地址,支持ELB直通容器,绑定安全组,绑定弹性公网IP,享有高性能。

  • 服务网络

    服务(Service)是Kubernetes内的概念,每个Service都有一个固定的IP地址,在CCE上创建集群时,可以指定Service的地址段(即服务网段)。服务网段不能和容器子网重叠。服务网段是集群的ClusterIP类型服务的IP地址范围,只在集群内使用,不能在集群外使用。

Service

Service是用来解决Pod访问问题的。每个Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以给这些Pod做负载均衡。

图1 通过Service访问Pod

根据创建Service的类型不同,可分成如下模式:

  • ClusterIP:用于在集群内部互相访问的场景,通过ClusterIP访问Service。
  • LoadBalancer:用于从集群外部访问的场景,通过一个特定的LoadBalancer访问Service,这个LoadBalancer将请求直接转发到Pod的SubENI,而外部只需要访问LoadBalancer。

Ingress

Service是基于四层TCP和UDP协议转发的,而Ingress可以基于七层的HTTP和HTTPS协议转发,可以通过域名和路径做到更细粒度的划分,如下图所示。

图2 Ingress-Service

网络访问场景

工作负载网络访问可以分为如下几种场景。

  • 从集群内部访问工作负载:创建ClusterIP类型的Service,通过Service访问工作负载。
  • 从集群外部访问工作负载:从集群外部访问工作负载推荐使用Service(LoadBalancer类型)或Ingress访问。
    • 通过公网访问工作负载:需要LoadBalancer绑定公网IP。
    • 通过内网访问工作负载:通过LoadBalancer的内网IP即可访问工作负载。如果跨VPC需要通过对等连接等手段打通不同VPC网络。
  • 工作负载访问外部网络:
    • 工作负载访问内网:负载访问内网地址,在不同容器网络模型下有不同的表现,需要注意在对端安全组放通容器网段。
    • 工作负载访问公网:访问公网有几种方法可以实现,一是给Pod IP绑定公网IP(为Pod配置EIP),另一个是通过NAT网关配置SNAT规则(从容器访问公网)。
图3 网络访问示意图

相关文档