一个 Kubernetes 的服务 (Service) 是一种抽象,它定义了一类 Pod 的逻辑集合和一个用于访问它们的策略 - 有的时候被称之为微服务,而在这个集合中的 Pod 的 IP 地址以及数量等都会发生动态变化,这个服务的客户端并不需要知道这些变化,也不需要自己来记录这个集合的 Pod 信息,这一切都是由抽象层 Service 来完成。
创建服务
登录 KubeSphere 控制台,在所属的企业空间中选择已有 项目 或新建项目,访问左侧菜单栏,点击 网络与服务 → 服务 进入服务列表页。
创建服务支持两种方式,页面创建 和 编辑模式创建。若选择以编辑模式,可点击右上角编辑模式进入代码界面,支持 yaml 和 json 格式。左上角显示配置文件列表和导入导出按钮。其中导入 yaml 文件方式会自动将 yaml 文件内容填充到页面上,用户根据需要可以在页面上调整后再行创建,编辑模式可以方便习惯命令行操作的用户直接在页面上编辑 yaml 文件创建服务。以下主要介绍页面创建的方式。
第一步:填写基本信息
在服务列表页,点击 创建 按钮,填写基本信息:
- 名称:为服务起一个简洁明了的名称,便于用户浏览和搜索。
- 别名:帮助您更好的区分资源,并支持中文名称。
- 描述信息:详细介绍服务的特性,当用户想进一步了解该服务时,描述内容将变得尤为重要。
第二步:服务设置
2.1. 选择需要创建服务的类型,每种服务类型适合不同的场景:
- VirtualIP:以集群为服务生成的集群内唯一的 IP 为基础,集群内部可以通过此 IP 来访问服务,集群外部可以通过 NodePort 和 LoadBalancer 方式来访问服务。此类型适合绝大多数服务。
- Headless (selector):集群不为服务生成 IP,集群内部通过服务的后端 Pod IP 直接访问服务。此类型适合后端异构的服务,比如需要区分主从的服务。
- Headless (externalname):给服务集群内设置一个 CNAME 记录,作为域名。
2.2. 若选择 VIP 或 Headless (selector),需填写服务设置:
- 选择器:选择器来选择不同的后端,使用键值对 (Label Selector) 或 指定工作负载 可以选择多个部署。
- 端口:服务的端口号和目标端口,目标端口是对应的后端工作负载的端口号,如 MySQL 的 3306 端口。
- 会话亲和性
- None:以 Round robin 的方式轮询后端的 Pods。
- ClientIP:来自同一个 IP 地址的访问请求都转发到同一个后端 Pod。
若选择 Headless (externalname),通过返回 CNAME 和它的值,可以将服务映射到 externalName 字段的内容。
第三步:添加标签
标签设置页用于指定资源对应的一组或者多组标签 (Label)。Label 以键值对的形式附加到任何对象上,如 Pod,Service,Node 等,定义好标签后,其他对象就可以通过标签来对对象进行引用,最常见的用法便是通过节点选择器来引用对象。
第四步:外网访问设置
为服务选择外网访问方式,LoadBalancer 的方式需要对应的负载均衡器插件来启用,如果未安装插件则无法使用。服务创建后支持修改外网访问方式。
- None: 只在集群内部访问服务,集群外部无法访问。
- NodePort: 集群外部可以通过访问集群节点的对应端口来访问服务,端口将由集群自动创建。
- LoadBalancer: 通过云服务商提供的负载均衡器来访问服务。
注意:由于使用 Load Balancer 需要安装与云服务商对接的 cloud-controller-manage 插件,目前 qingcloud-cloud-controller-manager 插件正在开发阶段,且即将上线,待上线后即可使用 Load Balancer 将内部的服务暴露给外网访问。
创建完成后即可在服务列表中查看成功创建的服务详情。