CCE集群网络说明及规划
更新时间:2020-12-29
有效的规划集群的网络,可以适应业务发展的需要。 本文将介绍在百度云 VPC 环境下 Kubernetes 里各种网络地址的作用,以及地址段该如何规划。
集群网络概念
集群网络包括:节点网络,容器网络和服务网络,概念分别如下。
节点网络
节点网络为集群内主机分配节点网络范围内的IP地址,创建集群时,需要选择节点网络的子网,更多节点网络和子网介绍参考 私有网络VPC子网。
容器网络
容器实例Pod所在的网段,集群创建好后不支持修改此网段。
- Kubernetes中的最小管理单元Pod,其在kubernetes网络模型中对应一个独立的IP。
- 容器网络为集群内Pod分配容器网络范围内的IP地址,百度云CCE提供了自定义的三大类私有网段10、192和172作为容器网络,并根据配置的单节点最大运行Pod的数量,自动计算该容器网络所允许的集群的最大节点数量。限制:因为VPC路由表的限制最多200。
服务网络
Kubernetes的service,在实际网络中并没有实体,是一个纯虚拟的IP网段。
- 在节点上,kube-proxy可以通过iptables或ipvs将service地址转发到后端对应的Pod。
- Service 地址段不能与容器网络、节点网络重合。
- Service 地址在 Kubernetes 集群内使用,不能在集群外使用。目前Service地址并没有暴露给用户选择,CCE从172.[16-31].0.0/16中选取第一个与容器网络 和节点网络不冲突的地址 作为Service 网络地址
CCE集群网络示意图
CCE集群网络架构图如下,包括节点网络,容器网络,服务网络。
容器网络冲突说明
CCE上配置的容器网络,会进行地址冲突检查,如有冲突,可以通过查看详情了解冲突的地址或路由,并可以选择使用建议的容器网络。如果建议使用的容器网络是空,则表明当前VPC无可用容器网络,建议新建VPC创建CCE集群。
选择查看详情:
可以看到容器网络冲突详情,并可选择使用建议的容器网络。
容器网络冲突检查有以下几点:
- 检查容器网络和节点网络不能冲突。
- 检查当前容器网络和当前集群所在的VPC内已创建的集群的容器网络不能冲突。
- 检查当前容器网络不能与当前集群所在的已存在的VPC路由冲突(先比较src地址是否是0.0.0.0/0,如果是则继续比较des地址)。
集群网络规划
为了保证容器间网络互通,CCE创建集群时,会将每个容器网段都添加到路由表中,为了避免网段冲突,需要对VPC和容器网段进行合理的划分。
VPC节点子网网络和容器网络不能冲突,如果VPC节点子网选择的是172.16.0.0/16,容器网络也选择172.16.0.0/16,则创建集群时会提示容器网络冲突,用推荐的容器网络。
示例
下面以一个完整的示例流程,来演示整个VPC内CCE集群的创建流程。
Step1: 创建VPC网络
- 登录VPC 控制台
- 点击创建VPC。
- 选择VPC CIDR,点击确定。
在本示例中,为避免和容器网络冲突,选择192.168.0.0/16的VPC网络。
Step2: VPC网络内创建子网
- VPC创建好后,在该VPC下创建子网,并选择子网的CIDR。
- 设备类型可以选择通用型或NAT专属型,如果有访问外网需求,参考 CCE 访问公网实践
Step3: 创建CCE集群
- 登录CCE集群Console。
- 选择创建集群。
- 选择刚刚创建的节点网络和节点子网。如有容器网络冲突,点击查看详情,使用推荐的容器网络。
Step4: 验证节点IP
容器集群创建成功后,校验集群IP。
- 在CCE集群Console,选择刚刚创建的集群。
- 点击左侧导航栏的节点列表
- 查看节点的内网IP,是否属于创建集群时,选择的节点子网。
如下图:
Step5: 验证路由表
- 登录VPC 控制台
- 选择刚创建的VPC。
- 点击左侧导航栏选择路由表。可以看到新增网段为172.16.x.0/24的路由信息,下一跳是BCC的实例的ID。
如下图:
Step6: 验证Pod IP
最终要验证Pod分配的IP,是否正确。
- 在CCE集群Console,选择刚刚创建的集群。
- 选择节点列表,选择VPC远程登录集群。
- 输入用户名和密码,执行:
kubectl get pods -n kube-system -o wide
如下图:看到容器的IP分配的是172.16.0.x,属于创建集群时选择的容器网络。
以上的校验,表明成功地创建了一个 VPC 网络内的集群。