文档简介:
本节介绍了网络服务的用户指南。
Service基本概念
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,由于使⽤了云服务商的负载均衡进⾏服务暴露,云服务商会围绕其负载均衡的能⼒提供不同的额外功能。例如,控制负载均衡的⽹络类型,后端绑定的权重调节等,详情请参⻅本章相关⽂档。
服务访问⽅式在CCSE中,⽀持以下类型的互联互通:
集群内访问(ClusterIP)
⼯作负载暴露给同⼀集群内其他⼯作负载访问的⽅式,可以通过 ^“^ 集群内部域名 ^”^ 访问。集群内部域名格式为 ^“^ <⾃定义的访问⽅式名称>.<⼯作负载所在命名空间>.svc.cluster.local ^”^ ,例如 ^“^ nginx.default.svc.cluster.local ^”^ 。详细请参⻅集群内访问(ClusterIP)。
节点访问(NodePort)
节点访问 ( NodePort)是指在每个节点的IP上开放⼀个静态端⼝,通过静态端⼝对外暴露服务。节点访问 (NodePort )会路由到ClusterIP服务,这个ClusterIP服务会⾃动创建。通过请求 :,可以从集群的外部访问⼀个NodePort服务。详细请参⻅节点访问(NodePort)。
负载均衡 ( LoadBalancer )
通过弹性负载均衡从公⽹访问⼯作负载,与弹性IP⽅式相⽐提供了⾼可靠的保障,⼀般⽤于系统中需要暴露到公⽹的服务。访问⽅式由公⽹弹性负载均衡ELB服务地址以及设置的访问端⼝组成,例如 192.168.1.1:80 。
操作步骤
填写基本信息
配置访问信息,选择协议类型TCP或者UDP,容器端⼝是业务容器对外暴露的端⼝,服务端⼝是服务对外提供访问的端⼝,同时⽀持Session粘连,并且可以指定集群内部的服务IP地址。
选择或创建负载,可以选择服务后端的对应的容器实例,根据需要进⾏填写。
使用负载均衡 ( LoadBalancer )暴露Service
如下,服务类型选择“负载均衡”,访问方式可以选择私网访问或公网访问,在负载均衡列表中选择一个。使用已有负载均衡,需要提前到负载均衡控制台创建好,多个Service可以同时复用一个负载均衡,已有监听若存在相同监听端口则会被覆盖,在复用已有负载均衡前需注意监听端口是否冲突。