本文介绍阿里云容器服务Kubernetes支持的网络类型。

容器网络

容器服务通过将Kubernetes网络和阿里云VPC的深度集成,提供了稳定高性能的容器网络。在容器服务中,支持以下类型的互联互通。
  • 同一个容器集群中,Pod之间相互访问。
  • 同一个容器集群中,Pod访问Service。
  • 同一个容器集群中,ECS访问Service。
  • Pod直接访问同一个VPC下的ECS(*)。
  • 同一个VPC下的ECS直接访问Pod(*)。
说明 * 需要正确设置安全组规则。

网络能力

Service

通常情况下,直接访问Pod会有如下几个问题:
  • Pod会随时被Deployment这样的控制器删除重建,那访问Pod的结果就会变得不可预知。
  • Pod的IP地址是在Pod启动后才被分配,在启动前并不知道Pod的IP地址。
  • 应用往往都是由多个运行相同镜像的一组Pod组成,一个个Pod的访问也变得不现实。

Kubernetes中的Service对象就是用来解决上述Pod访问问题的。Service有一个固定IP地址,Service将访问他的流量转发给Pod,具体转发给哪些Pod通过Label来选择,而且Service可以给这些Pod做负载均衡。详细请参见创建服务

Ingress

通常情况下,service 和 pod 的 IP 仅可在集群内部访问。集群外部的请求需要通过负载均衡转发到 service 在 Node 上暴露的 NodePort 上,然后再由 kube-proxy 通过边缘路由器 (edge router) 将其转发给相关的 Pod 或者丢弃,而 Ingress 就是为进入集群的请求提供路由规则的集合。

Ingress 可以给 service 提供集群外部访问的 URL、负载均衡、SSL 终止、HTTP 路由等。为了配置这些 Ingress 规则,集群管理员需要部署一个 Ingress controller,它监听 Ingress 和 service 的变化,并根据规则配置负载均衡并提供访问入口。

Ingress 的组成部分
  • Nginx:实现负载均衡到pod的集合。
  • Ingress Controller:从集群api获取services对应pod的ip到nginx配置文件中。
  • Ingress:为nginx创建虚拟主机。

Ingress的创建与管理请参见通过界面创建路由(Ingress)

网络底层基础设施

VPC

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

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

SLB

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

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

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

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

  • 监听

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

  • 后端服务器

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



Terway网络插件

Terway网络插件是阿里云容器服务自研的网络插件,功能上完全兼容Flannel:
  • 支持将阿里云的弹性网卡分配给容器。
  • 支持基于Kubernetes标准的NetworkPolicy来定义容器间的访问策略,兼容Calico的Network Policy。


在Terway网络插件中,每个Pod拥有自己网络栈和IP地址。同一台ECS内的Pod之间通信,直接通过机器内部的转发,跨ECS的Pod通信,报文通过VPC的vRouter转发。由于不需要使用VxLAN等的隧道技术封装报文,因此具有较高的通信性能。

网络策略

网络策略(NetworkPolicy)是一种关于pod间及pod与其他网络端点间所允许的通信规则的规范。

NetworkPolicy 资源使用标签选择pod,并定义选定pod所允许的通信规则。详细请参见使用网络策略(Network Policy)