开发者学堂课程【Kubernetes 极速入门:K8S 集群核心概念 Service_Service 介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/658/detail/10916
K8S 集群核心概念 Service_Service 介绍
内容介绍:
一、场景
二、学习目标
三、学习步骤
四、课程内容
一、场景
通过前面课程的学习,已经可以通过控制器创建相关的应用。可是在访问应用时发现这样一个问题,Pod 如果是被人为关闭的,Controller 就会重新拉起一个新的 Pod。
如果重新拉起,Pod 的 IP地址就会重新分配。如果是通过 Pod 的 IP 地址来访问 Pod 的话,会发现可能无法完全的去控制 Pod 的访问。
因此在 k8s 集群当中引入了这样一个概念,这个概念就叫做 Service,专门用于控制对于 Pod 的访问。不管这个应用有多少 Pod,都不会直接去访问,只要访问这个应用所包含的 Service 就可以访问到 Pod 了。
二、学习目标
1、了解 Service 是什么?
2、了解 Service 作用。
3、了解 Service 类型。
4、了解 Service 参数。
5、掌握 Service 创建方法。
6、了解 Service 删除方法。
三、学习步骤
首先按照学习目标对学习步骤进行设计,在这里同样是分成六个步骤。
1、了解 Service 是什么
2、了解 Service 作用
3、了解 Service 类型
4、了解 Service 参数
5、掌握 Service 创建方法
6、了解 Service 删除方法
这就是步骤的一个顺序,按照这个步骤进行学习。
四、课程内容
1、Service 介绍
在这里要注意到在 K8s 当中,Service 这个概念不是实体服务。所讲的实体服务是什么呢?
比如说一个服务要有自己所运行的配置文件,也有自己所运营的数据文件,这是一个实体服务。
但是 Service 在 K8s 当中,它仅仅是一条 iptables 或 ipvs 的转发规则,因此它没有自己的配置文件以及运行文件,更加没有自己的守护进程,所以说在这里它仅仅只是一个服务。
比如说,当去饭店吃饭的时候,会遇到服务员,服务员是一个人完全没有问题,但是他的服务其实仅仅只是一种转换,老板把菜单递给服务员,服务员再把菜单递给顾客,顾客进行点菜,然后服务员再把菜单递给厨师,厨师再去做菜,所以说服务员在这个过程中是起到一个转发和连接的作用。
那么其实在这里 Service 的性质和服务员是差不多的,也是起到一个转换和连接的作用。去饭店吃饭需要找服务员,如果直接找老板或者大厨就可能吃不到饭。
2、Service 作用
Service 作用是可以让 pod 能够被用户访问,那么 pod 的 IP 地址会经常发生变化,如果直接访问 pod ,并且 IP 地址发生变化,那下次可能不知道它的地址是什么。因此是通过 Service 为 pod 客户端提供访问 pod 方法,即客户端访问 pod 入口。那么怎么样让 Service 与 pod 进行关联呢?
在这里有一个 Service 通过 pod 标签与 pod 进行关联。
在下面这幅图当中,可以简单了解一下,有 pod 和 Node 两个图例,在最中间的位置就是 pod , pod 有 IP 地址,是10.10.10.1。如果想要直接访问 pod 的话, pod 的 IP 地址会直接发生变化,所以在这里10.10.10.1并不是永久存在的,所以不建议直接访问 pod 。那可以在 pod 的前端加一个 Service ,这样的目的就是为了让用户能够直接通过这个 Service 来访问 pod ,这个 Service 的 IP 地址是10.10.9.1。
它的这个 IP 地址是很少发生变化的,或者是通过它的域名进行访问。它的最外侧这一层是物理机,那么在这个过程当中怎么关联呢?可以给 pod 起一个标签。
比如说 app:nginx,这样就可以解决了。那么 Service 与它关联的时候,只要让 Service 来找这个标签(app:nginx),这样的话就可以让 Service 与 pod 进行关联。
3、Service 类型
Service 有四种类型,在这里举一下例子。
第一种是 ClusterIP。它是什么意思呢?
当在集群当中创建一个 Service 的时候,会自动分配一个集群的虚拟 IP ,访问这个虚拟 IP ,就可以访问到 Service 了。访问到 Service 之后就可以访问到 pod 了。但是这个只能是在集群内的主机来进行访问。
第二种类型就是 NodePort ,它就是通过物理机的端口映射来完成一个 pod 访问。
如果在集群之外来访问 K8s 集群内的 Service 的话,那就可以在每个Node上分配一个端口作为Service 的映射端口,然后就可以通过这个端口就可以访问到 Service ,进一步就可以访问到 pod 了。
第三种类型就是 LoadBalancer ,它一般工作在特定的 Cloud Provider 上,例如 Google Cloud,AWS,OpenStack 。这种方式一般在局域网当中使用的比较少,如果 K8s 集群部署在 OpenStack 之上,就可以通过这种方式访问了。
第四种类型是 ExternalName ,这种方式的 Service是把集群外部的服务引入到集群内部中来,即实现了集群内的 pod 和集群外部的服务进行通信。
4、Service 参数
Service 参数有很多种,在这里重点介绍的是端口参数,端口参数第一种是tport ,它是创建 K8s 集群当中的 Service 的时候,会自动分配一个端口,当然这也是对应相应的服务类型;
第二种是 targetPort ,它包括的是 Pod 中容器的端口。
第三种是 NodePort ,它是主要针对 Service 的类型,它要是一个 NodePort 类型,则通过 Node实现外网用户访问k8s集群内service。
一般的话可以随机也可以手工指定,随机的话它的范围是30000-32767,特别注意这个范围