上云无忧 > 文档中心 > 天翼云容器云服务引擎CCSE实战教程 - 服务与网络
容器云服务引擎CCSE
天翼云容器云服务引擎CCSE实战教程 - 服务与网络

文档简介:
本节介绍了容器云服务引擎CCSE的最佳实践,以服务与网路举例。 CCSE集群网络规划: 在创建CCSE Kubernetes集群时,您需要指定专有网络VPC、Pod网络CIDR/Pod子网(地址段)和Service CIDR(地址段)。
*产品来源:中国电信天翼云。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

本节介绍了容器云服务引擎CCSE的最佳实践,以服务与网路举例。

CCSE集群网络规划

在创建CCSE Kubernetes集群时,您需要指定专有网络VPC、Pod网络CIDR/Pod子网(地址段)和Service CIDR(地址段)。因此建议您提前规划ECS地址、Kubernetes Pod地址和Service地址。本文将介绍天翼云专有网络VPC环境下CCSE Kubernetes集群里各种地址的作用,以及地址段该如何规划。

专有网络VPC网段和Kubernetes网段关系

专有网络VPC(下文简称为VPC或专有网络)的网段规划包含VPC自身网段和子网网段,Kubernetes网段规划包含Pod地址段和Service地址段。CCSE网络支持Cubecni和Calico两种网络模式。

Cubecni网络模式:

配置Cubecni模式网络时,需要设置的参数及参数网段配置的注意事项如下:

专有网络:您在创建VPC时需要选择网段,建议从10.0.0.0/16-20、172.16.0.0/16-20、192.168.0.0/16-20三者中选择一个。

Pod子网:Pod地址从该子网分配,用于Pod网络通信。Pod是Kubernetes内的概念,每个Pod具有一个IP地址。在VPC里创建子网时指定的网段,必须是当前VPC网段的子集。配置网段时,请注意:Cubecni网络模式下,Pod分配的Pod IP就是从这个子网网段内获取的。该地址段不能和Service CIDR网段重叠。

Service CIDR:Service地址段。Service是Kubernetes内的概念,对应的是Service类型为ClusterIP时Service使用的地址,每个Service有自己的地址。配置网段时,请注意:Service地址只在Kubernetes集群内使用,不能在集群外使用。Service地址段不能和Pod子网地址段重叠。

Calico网络模式:

配置Calico模式网络时,需要设置的参数及参数网段配置的注意事项如下:

专有网络:您在创建VPC时需要选择网段,建议从10.0.0.0/16-20、172.16.0.0/16-20、192.168.0.0/16-20三者中选择一个。

Pod网络CIDR:Pod网络CIDR,Pod地址从该地址段分配,用于Pod网络通信。Pod是Kubernetes内的概念,每个Pod具有一个IP地址。配置网段时,请注意:非VPC子网,为虚拟网段。该地址段不能和Service CIDR网段重叠。

例如,VPC网段用的是172.16.0.0/12,Kubernetes的Pod地址段就不能使用172.16.0.0/16、172.17.0.0/16等,因为这些地址都包含在172.16.0.0/12里。

Service CIDR:Service地址段。Service是Kubernetes内的概念,对应的是Service类型为ClusterIP时Service使用的地址,每个Service有自己的地址。配置网段时,请注意:Service地址只在Kubernetes集群内使用,不能在集群外使用。Service地址段不能和Pod网络CIDR地址段重叠。

网络规划

在天翼云环境下使用CCSE支持的Kubernetes集群,首先需要根据业务场景、集群规模进行网络规划。您可以按下表规格进行规划(未包含场景,请根据实际需要自行调整)。

VPC网络规划:

集群节点规模 目的 VPC规划 可用区
小于100个节点 一般性业务 单VPC 1个
任意 需要多可用区 单VPC 3个及以上
任意 对可靠性有极致要求、需要多地域 多VPC 3个及以上

容器网络规划:

本文针对Cubecni和Calico网络场景,规划容器网络:Cubecni配置示例:Cubecni Pod IPVlan模式

专有网络网段 Pod CIDR网段 Service CIDR网段 最大可分配Pod地址数
192.168.0.0/16 192.168.0.0/20 10.96.0.0/16 4090

Calico配置示例

专有网络网段 Pod CIDR网段 Service CIDR网段 最大可分配Pod地址数
192.168.0.0/16 172.16.0.0/16 10.96.0.0/16 65536

如何选择地址段?

场景1:单VPC+单Kubernetes集群

这是最简单的情形。VPC地址在创建VPC的时候就已经确定,创建Kubernetes集群时,选择的Pod及Service地址网段和当前VPC不一样的地址段即可。

场景2:单VPC+多Kubernetes集群

一个VPC下创建多个Kubernetes集群。VPC地址是在创建VPC时已经确定。创建Kubernetes集群时,每个集群内的VPC地址段、Service地址段和Pod地址段彼此间不能重叠。所有Kubernetes集群之间的Pod地址段(Cubecni模式下)不能重叠,但Service地址段可以重叠。

场景3:VPC互联

两个VPC网络互联的情况下,可以通过对等连接使VPC互联。

在这种情况下,VPC A和VPC B里创建的Kubernetes集群有以下限制:不能和VPC A的地址段重叠,不能和VPC B的地址段重叠,不能和其他集群的地址段重叠,不能和Pod的地址段重叠,不能和Service的地址段重叠。

使用Cubecni网络插件

Cubecni是天翼云开源的基于专有网络VPC的容器网络接口CNI(Container Network Interface)插件,支持基于Kubernetes标准的网络策略来定义容器间的访问策略。您可以通过使用Cubecni网络插件实现Kubernetes集群内部的网络互通。本文介绍如何使用天翼云容器云服务引擎Kubernetes版CCSE集群的Cubecni网络插件。

背景信息

Cubecni网络插件是CCSE自研的网络插件,将原生的弹性网卡及子网IP分配给Pod实现Pod网络,支持基于Kubernetes标准的网络策略(Network Policy)来定义容器间的访问策略。

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

Cubecni与Calico对比:在创建集群时,CCSE提供Cubecni和Calico两种网络插件。

Cubecni:是天翼云容器云服务引擎CCSE自研的网络插件。CCSE将天翼云的弹性网卡和子网IP分配给容器,支持基于Kubernetes标准的网络策略来定义容器间的访问策略。Cubecni拥有更为灵活的IPAM(容器地址分配)策略,避免地址浪费。如果您不需要使用实现容器与虚机互访,可以选择calico,其他情况建议选择Cubecni。

Calico:使用社区Calico CNI插件的IP IP模式。

Cubecni与Calico对比

对比项 Cubecni Calico
性能 性能接近弹性网卡 IP IP解封包损耗
安全 支持使用网络策略Network Policy 支持使用网络策略Network Policy
地址管理 无需按节点分配地址段,随用随分配,地址无浪费。支持配置安全组 每个节点提前分配虚拟地址段
ELB ELB后端不能直接对接Pod,需要通过NodePort转发 ELB后端不能直接对接Pod,需要通过NodePort转发

配置

步骤一:规划和准备集群网络:在创建CCSE Kubernetes集群时,您需要指定专有网络VPC、Pod子网(地址段)和Service CIDR(地址段)。

您可以使用以下网段配置,以快速搭建Cubecni网络。

专有网络网段 Pod子网 Service CIDR
192.168.0.0/16 192.168.0.0/20 172.21.0.0/20

本文使用上述推荐网段,说明如何创建一个专有网络和Pod子网。

登录专有网络管理控制台。在顶部菜单栏处,选择专有网络的地域,然后单击创建专有网络。在创建专有网络页面,设置名称为vpc_192_168_0_0_16,在IPv4网段文本框中,输入192.168.0.0/16。单击+添加,设置第二个交换机名称为pod_switch_192_168_32_0_19,选择可用区,设置IPv4网段为192.168.32.0/20。单击确定。

步骤二:配置Cubecni网络:为Cubecni网络插件配置集群网络的关键参数配置说明如下:

虚拟私有云:选择步骤一:规划和准备集群网络中创建的专有网络。网络插件:选择Cubecni。Pod子网:选择步骤一:规划和准备集群网络中创建的Pod子网。Service CIDR:保留默认值。

Cubecni IPVlan模式

在创建集群时,如果选择Cubecni网络插件,则使用Cubecni IPvlan模式。Cubecni IPvlan模式采用IPvlan虚拟化实现高性能的Pod和Service网络:不同于默认的Terway的网络模式,IPvlan模式主要在Pod网络、Service、网络策略(NetworkPolicy)做了性能的优化:Pod的网络直接通过ENI网卡的IPvlan L2的子接口实现,大大简化了网络在宿主机上的转发流程,让Pod的网络性能几乎与宿主机的性能无异,延迟相对传统模式降低30%。Pod的网络策略(NetworkPolicy)采用eBPF替换掉原有的iptables的实现,不需要在宿主机上产生大量的iptables规则,降低网络策略对网络性能的影响。

通过注解配置负载均衡

通过Service YAML文件中的Annotation(注解),可以实现丰富的负载均衡功能。本文从ELB、监听和后端服务器组三种资源维度介绍通过注解可以对ELB进行的常见配置操作。

注解使用说明

注解的内容是区分大小写。annotations字段格式 service.beta.kubernetes.io/xxx

ELB

ELB的典型操作:指定负载均衡的规格

apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/ctyun-loadbalancer-spec: "${负载均衡的规格ID}" name: nginx namespace: default spec: ports: - port: 443 protocol: TCP targetPort: 443 selector: name: nginx type: LoadBalancer

使用一个已有的负载均衡

apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/ctyun-loadbalancer-id: "${负载均衡ID}" name: nginx namespace: default spec: ports: - port: 443 protocol: TCP targetPort: 443 selector: name: nginx type: LoadBalancer

常用注解

注解 类型 描述 默认值 支持的CCM版本
service.beta.kubernetes.io/ctyun-loadbalancer-address-type String 创建公网类型或者私网类型的ELB,取值可以是internet或者intranet intranet v1.0.0及以上
service.beta.kubernetes.io/ctyun-loadbalancer-id String 指定已有负载均衡实例的ID。 删除service时该 ELB不会被删除。 v1.0.0及以上
service.beta.kubernetes.io/ctyun-loadbalancer-spec String 负载均衡的规格 v1.0.0及以上
service.beta.kubernetes.io/ctyun-loadbalancer-resource-pack-id String 开通ELB所使用的资源包ID v1.0.0及以上

基于DNS的服务发现

DNS为Kubernetes集群内的工作负载提供域名解析服务。本文主要介绍Kubernetes集群中DNS域名解析原理和CCSE集群中默认内置的DNS服务器CoreDNS。

Kubernetes集群中DNS域名解析原理

CCSE集群中kubelet的config.yaml有clusterDNS和clusterDomain,这两个参数分别被用来设置集群DNS服务器的IP地址和主域名后缀。

CCSE集群默认部署了一套CoreDNS工作负载,并通过kube-dns的服务名暴露DNS服务。CCSE部署的CoreDNS工作负载后端是两个名为coredns的Pod,集群会根据Pod内的配置,将域名请求发往集群DNS服务器获取结果。Pod内的DNS域名解析配置文件为/etc/resolv.conf,文件内容如下。

nameserver 10.xx.x.xx search kube-system.svc.cluster.local svc.cluster.local cluster.local options ndots:5

序号 描述
1 业务Pod(Pod Client)试图访问Nginx服务(Service Nginx)时,先会请求本地DNS配置文件(/etc/resolv.conf)中指向的DNS服务器(nameserver 10.96.0.10,即Service kube-dns)获取服务IP地址,得到解析结果为10.96.1.2的IP地址
2 业务Pod(Pod Client)再直接发起往该IP地址的请求,请求最终经过Nginx服务(Service Nginx)转发到达后端的Nginx容器(Pod Nginx-1和Pod Nginx-2)上

CoreDNS介绍

CoreDNS是Kubernetes集群中负责DNS解析的组件,能够支持解析集群内部自定义服务域名和集群外部域名。CoreDNS具备丰富的插件集,在集群层面支持自建DNS、自定义hosts、CNAME、rewrite等需求。与Kubernetes一样,CoreDNS项目由 CNCF托管。关于CoreDNS的更多信息,请参见CoreDNS: DNS and Service Discovery。CCSE集群使用CoreDNS负责集群的服务发现,您可以根据不同使用场景配置CoreDNS及使用CoreDNS提升集群DNS QPS性能。

相似文档
  • 本节介绍了容器云服务引擎CCSE的最佳实践,以存储与安全举例。 存储基础知识: 天翼云容器云服务引擎CCSE使用Kubernetes编排系统作为集群、应用、存储、网络等模块的管理平台。本文为您介绍CCSE容器存储相关的基础知识,以便在使用容器服务的存储能力时,了解相应模块的基础知识和使用原则。
  • 本节介绍了容器云服务引擎CCSE的最佳实践,以服务发布举例。 灰度发布和蓝绿发布: 当对服务进行版本更新升级时,需要使用到滚动升级、分批暂停发布、蓝绿发布以及灰度发布等发布方式。本文将介绍在CCSE集群中如何通过Nginx Ingress Controller来实现应用服务的灰度发布。
  • 本节介绍了容器云服务引擎CCSE的最佳实践,以弹性伸缩举例。 容器水平伸缩: 容器云服务引擎CCSE支持在控制台界面上快速创建支持HPA的应用,实现容器资源的弹性伸缩。您也可通过定义HPA(Horizontal Pod Autoscaling)的YAML来进行配置。
  • 本节介绍了容器云服务引擎CCSE的最佳实践,以使用容器镜像服务发布应用举例。 在容器云服务引擎CCSE,使用容器镜像服务CRS中的容器镜像,发布一个容器应用。 前提条件:已开通容器镜像服务CRS实例,已开通CCSE集群。
  • 本节介绍了容器云服务引擎CCSE的计费类常见问题。 Q:如何为购买的容器CCSE实例续费? A:为防止资源到期或者浪费,已经购买包月实例的用户,可执行续费操作,延长容器实例的有效期,也可以设置到期自动续费的相关操作。 备注:公测期间只能在控制台进行续订操作。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部