Skip to content

Latest commit

 

History

History
136 lines (114 loc) · 5.9 KB

File metadata and controls

136 lines (114 loc) · 5.9 KB

Service

Service 概念

Service:即服务,用户在 Kubernetes 中可以部署各种容器,其中一部分是通过 HTTP、HTTPS 协议对外提供七层网络服务,另一部分是通过 TCP、UDP 协议提供四层网络服务。而 Kubernetes 定义的服务(Service)资源是用来管理集群中四层网络的服务访问。基于四层网络,Service 提供了集群内容器服务的暴露能力。

Service 定义访问后端 Pod 的访问方式,并提供固定的虚拟访问 IP。您可以在 Service 中通过设置来访问后端的 Pod,不同访问方式的服务可提供不同网络能力。

TKEStack 提供以下两种服务访问方式:

访问方式 说明
仅在集群内访问
  • 使用 Service 的 ClusterIP 模式,自动分配 Service 网段中的 IP,用于集群内访问。数据库类等服务如 MySQL 可以选择集群内访问,以保证服务网络隔离。
  • 创建完成后的服务可以通过服务名 + 服务端口访问服务。
主机端口访问
  • 提供一个主机端口映射到容器的访问方式,支持 TCP、UDP、Ingress。可用于业务定制上层 LB 转发到 Node。
  • 创建完成后的服务可以通过云服务器 IP+主机端口服务名 + 服务端口访问服务。
集群内访问时,支持 **Headless** Service, 不创建用于集群内访问的 ClusterIP,访问 Service 名称时返回后端 Pods IP:Port,**用于适配自有的服务发现机制**。 两种访问方式均支持 Session Affinity,设置会话保持后,会根据请求 IP把请求转发给这个 IP 之前访问过的 Pod。

Service 控制台操作指引

创建 Service

  1. 登录 TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】
  2. 选择需要创建 Service 的【业务】下相应的【命名空间】,展开【服务】列表,进入【Service】管理页面
  3. 单击【新建】,进入 “新建 Service” 页面,如下图所示:
  4. 根据实际需求,设置 Service 参数,关键参数信息如下:
    • 服务名称:自定义

    • 描述:自定义

    • 命名空间:根据实际需求进行选择

    • 访问设置:根据实际需求进行设置

      • 服务访问方式:选择是【仅在集群内部访问】该负载还是集群外部通过【主机端口访问】该负载
        • 仅在集群内访问:使用 Service 的 ClusterIP 模式,自动分配 Service 网段中的 IP,用于集群内访问。数据库类等服务如 MySQL 可以选择集群内访问,以保证服务网络隔离
        • 主机端口访问:提供一个主机端口映射到容器的访问方式,支持 TCP、UDP、Ingress。可用于业务定制上层 LB 转发到 Node
        • Headless Service:不创建用于集群内访问的 ClusterIP,访问 Service 名称时返回后端 Pods IP:port,用于适配自有的服务发现机制
      • 端口映射:输入负载要暴露的端口并指定通信协议类型(容器和服务端口建议都使用80
    • Session Affinity: 点击【显示高级设置】出现,表示会话保持。Service 有负载均衡的作用,有两种模式:RoundRobin 和 SessionAffinity(默认 None,按需使用)

      • ClientIP:基于客户端 IP 地址进行会话保持的模式, 即第1次将某个客户端发起的请求转发到后端的某个 Pod 上,之后从相同的客户端发起的请求都将被转发到后端相同的 Pod 上。即 Service 启用了 Session Affinity 负载分发策略
      • Node:此时 Service 使用默认的 RoundRobin(轮询模式)进行负载分发,即轮询将请求转发到后端的各个 Pod 上
    • Workload 绑定:通过 Selectors 进行绑定,可以添加自己设定的 Selectors,也可以引用已有 Workload 的Selectors

  5. 单击【创建服务】,完成创建

更新 Service

更新 YAML

  1. 登录 TKEStack,切换到【业务管理】控制台,选择左侧导航栏中的【应用管理】
  2. 选择需要创建 Service 的业务下相应的命名空间,展开服务列表,进入 Service 管理页面
  3. 在需要更新 YAML 的 Service 行中,单击【编辑YAML】,进入更新 Service 页面
  4. 在 “更新Service” 页面,编辑 YAML,单击【完成】,即可更新 YAML

Kubectl 操作 Service 指引

YAML 示例

kind: Service
apiVersion: v1
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
  type: NodePort
  • kind:标识 Service 资源类型
  • metadata:Service 的名称、Label 等基本信息
  • spec.type:标识 Service 的被访问形式
    • ClusterIP:在集群内部公开服务,可用于集群内部访问
    • NodePort:使用节点的端口映射到后端 Service,集群外可以通过节点 IP:NodePort 访问

创建 Service

  1. 参考 YAML 示例,准备 StatefulSet YAML 文件
  2. 安装 Kubectl,并连接集群
  3. 执行以下命令,创建 Service YAML 文件:
kubectl create -f Service YAML 文件名称

例如,创建一个文件名为 my-service.yaml 的 Service YAML 文件,则执行以下命令:

kubectl create -f my-service.yaml
  1. 执行以下命令,验证创建是否成功:
kubectl get services

更新 Service

方法一

执行以下命令,更新 Service:

kubectl edit service/[name]

方法二

  1. 手动删除旧的 Service
  2. 执行以下命令,重新创建 Service:
kubectl create/apply

删除 Service

执行以下命令,删除 Service:

kubectl delete service [NAME]
<style> .params{margin-bottom:0px !important;} </style>