云容器引擎通过将Kubernetes网络和VPC深度集成,提供了稳定高性能的容器网络,能够满足多种复杂场景下工作负载间的互相访问。
- 每个命名空间下,创建的服务数量不能超过6000个。此处的服务对应kubernetes的service资源,即工作负载所添加的服务。
- 容器开启hostPort或hostNetwork网络模式后,若需对外提供服务,则需要给容器所在节点开启对应端口的安全组(containerPort)。
Kubernetes中每一个工作负载会有一个或多个实例(Pod),每个实例(Pod)的IP地址由网络插件动态随机分配(Pod重启后IP地址会改变)。为屏蔽这些后端实例的动态变化和对多实例的负载均衡,引入了Service这个资源对象。
Service是一种资源,提供了我们访问单个或多个容器应用的能力。每个服务在其生命周期内,都拥有一个固定的IP地址和端口。每个服务对应了后台的一个或多个Pod,通过这种方式,客户端就不需要关心Pod所在的位置,方便后端进行方便的Pod扩容、缩容等操作。
用户在Kubernetes中可以部署各种容器,其中一部分是通过HTTP、HTTPS协议对外提供七层网络服务,另一部分是通过TCP、UDP协议提供四层网络服务。而Kubernetes定义的Service资源就是用来管理集群中四层网络的服务访问。
根据创建Service的type类型不同,可分成如下模式:
- ClusterIP:默认类型,为服务分配集群虚拟IP,此时集群内部的pod可以通过服务名称寻址到服务的集群虚拟IP地址,集群外无效。
- NodePort:在每个节点上为服务分配静态端口号,此时如果在集群外部访问任何一个节点的IP地址加指定的端口号,kube-proxy会将流量转发到服务的集群虚拟IP,再由虚拟IP寻址到Pod。
- LoadBalancer:通过云服务供应商提供的load balancer向外部暴露服务,由指定的load balancer负责对NodePort与ClusterIP服务的路由。
ClusterIP和NodePort类型的Service,在不同云服务商或是自建集群中的行为表现通常情况下相同。而LoadBalancer类型的Service,由于使用了云服务商的负载均衡进行服务暴露,云服务商会围绕其负载均衡的能力提供不同的额外功能。例如,控制负载均衡的网络类型,后端绑定的权重调节等,详情请参见本章相关文档。
在CCE中,支持以下类型的互联互通:
- 集群内访问(ClusterIP)
工作负载暴露给同一集群内其他工作负载访问的方式,可以通过“集群内部域名”访问。集群内部域名格式为“<自定义的访问方式名称>.<工作负载所在命名空间>.svc.cluster.local”,例如“nginx.default.svc.cluster.local”。详细请参见集群内访问(ClusterIP)。
- 节点访问(NodePort)
节点访问 ( NodePort)是指在每个节点的IP上开放一个静态端口,通过静态端口对外暴露服务。节点访问 ( NodePort )会路由到ClusterIP服务,这个ClusterIP服务会自动创建。通过请求 <NodeIP>:<NodePort>,可以从集群的外部访问一个NodePort服务。详细请参见节点访问(NodePort)。
- 负载均衡 ( LoadBalancer )
通过弹性负载均衡从公网访问工作负载,与弹性IP方式相比提供了高可靠的保障,一般用于系统中需要暴露到公网的服务。访问方式由公网弹性负载均衡ELB服务地址以及设置的访问端口组成,例如“10.117.117.117:80”。详细请参见负载均衡(LoadBalancer)。
七层负载均衡(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概述。
网络策略(NetworkPolicy)
网络策略(NetworkPolicy)是一种关于pod间及pod与其他网络端点间所允许的通信规则的规范。
NetworkPolicy资源使用标签选择pod,并定义选定pod所允许的通信规则,详细请参见NetworkPolicy。
网络底层基础设施
- VPC
虚拟私有云(Virtual Private Cloud,以下简称VPC),是基于创建的自定义私有网络,不同的专有网络之间彻底逻辑隔离。可以为云服务器、云数据库和负载均衡等构建隔离的、用户自主配置和管理的虚拟网络环境,提升用户云上资源的安全性,简化用户的网络部署。
您可以在VPC中定义安全组、VPN、IP地址段、带宽等网络特性。用户可以通过VPC方便地管理、配置内部网络,进行安全、快捷的网络变更。同时,用户可以自定义安全组内与组间弹性云主机的访问规则,加强弹性云主机的安全保护。
ELB
弹性负载均衡(Elastic Load Balance,简称ELB)是将访问流量根据转发策略分发到后端多台服务器的流量分发控制服务。弹性负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。
弹性负载均衡支持经典型、共享型两种负载均衡:
− 经典型负载均衡:适用于访问量较小,应用模型简单的web业务。
− 共享型负载均衡:适用于访问量较大的web业务,提供基于域名和URL的路由均衡能力,实现更加灵活的业务转发。