跳转至

创建服务(Service)

在 Kubernetes 集群中,每个 Pod 都有一个内部独立的 IP 地址,但是工作负载中的 Pod 可能会被随时创建和删除,直接使用 Pod IP 地址并不能对外提供服务。

这就需要创建服务,通过服务您会获得一个固定的 IP 地址,从而实现工作负载前端和后端的解耦, 让外部用户能够访问服务。同时,服务还提供了负载均衡(LoadBalancer)功能,使用户能从公网访问到工作负载。

前提条件

创建服务

  1. NS Editor 用户成功登录后,点击左上角的 集群列表 进入 集群列表 页面。在集群列表中,点击一个集群名称。

    集群列表

  2. 在左侧导航栏中,点击 容器网络 -> 服务 进入服务列表,点击右上角 创建服务 按钮。

    服务与路由

  3. 打开 创建服务 页面,选择一种访问类型,参考以下几个参数表进行配置。

    创建服务

    点选 集群内访问(ClusterIP) ,这是指通过集群的内部 IP 暴露服务, 选择此项的服务只能在集群内部访问。这是默认的服务类型。

    参数 说明 举例值
    访问类型 【类型】必填
    【含义】指定 Pod 服务发现的方式,这里选择集群内访问(ClusterIP)。
    ClusterIP
    服务名称 【类型】必填
    【含义】输入新建服务的名称。
    【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
    Svc-01
    命名空间 【类型】必填
    【含义】选择新建服务所在的命名空间。关于命名空间更多信息请参考命名空间概述
    【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
    default
    标签选择器 【类型】必填
    【含义】添加标签,Service 根据标签选择 Pod,填写后点击 添加 。也可以引用已有工作负载的标签,点击 引用负载标签 ,在弹出的窗口中选择负载,系统会默认将所选的负载标签作为选择器。
    app:job01
    端口配置 【类型】必填
    【含义】为服务添加协议端口,需要先选择端口协议类型,目前支持 TCP、UDP 两种传输协议。
    端口名称:输入自定义的端口的名称。
    服务端口(port):Pod 对外提供服务的访问端口。
    容器端口(targetport):工作负载实际监听的容器端口,用来对集群内暴露服务。
    会话保持 【类型】选填
    【含义】开启后,相同客户端的请求将转发至同一 Pod
    开启
    会话保持最大时长 【类型】选填
    【含义】开启会话保持后,保持的最大时长
    30 秒
    注解 【类型】选填
    【含义】为服务添加注解

    点选 节点访问(NodePort) ,这是指通过每个节点上的 IP 和静态端口( NodePort )暴露服务。 NodePort 服务会路由到自动创建的 ClusterIP 服务。通过请求 <节点 IP>:<节点端口> , 您可以从集群的外部访问一个 NodePort 服务。

    参数 说明 举例值
    访问类型 【类型】必填
    【含义】指定 Pod 服务发现的方式
    NodePort
    服务名称 【类型】必填
    【含义】输入新建服务的名称。
    【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
    Svc-01
    命名空间 【类型】必填
    【含义】选择新建服务所在的命名空间。关于命名空间更多信息请参考命名空间概述
    【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
    default
    标签选择器 【类型】必填
    【含义】添加标签,Service 根据标签选择 Pod,填写后点击 添加 。也可以引用已有工作负载的标签,点击 引用负载标签 ,在弹出的窗口中选择负载,系统会默认将所选的负载标签作为选择器。
    端口配置 【类型】必填
    【含义】为服务添加协议端口,需要先选择端口协议类型,目前支持 TCP、UDP 两种传输协议。
    端口名称:输入自定义的端口的名称。
    服务端口(port):Pod 对外提供服务的访问端口。默认为了方便起见,服务端口被设置为与容器端口字段相同的值。
    容器端口(targetport):工作负载实际监听的容器端口。
    节点端口(nodeport):节点的端口,接收来自 ClusterIP 传输的流量。用来做外部流量访问的入口。
    会话保持 【类型】选填
    【含义】开启后,相同客户端的请求将转发至同一 Pod
    开启后 Service 的 .spec.sessionAffinityClientIP ,详情请参考 Service 的会话亲和性
    开启
    会话保持最大时长 【类型】选填
    【含义】开启会话保持后,保持的最大时长
    .spec.sessionAffinityConfig.clientIP.timeoutSeconds 默认设置为 30 秒
    30 秒
    注解 【类型】选填
    【含义】为服务添加注解

    点选 负载均衡(LoadBalancer) ,这是指使用云提供商的负载均衡器向外部暴露服务。 外部负载均衡器可以将流量路由到自动创建的 NodePort 服务和 ClusterIP 服务上。

    参数 说明 举例值
    访问类型 【类型】必填
    【含义】指定 Pod 服务发现的方式
    LoadBalancer
    服务名称 【类型】必填
    【含义】输入新建服务的名称。
    【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
    Svc-01
    命名空间 【类型】必填
    【含义】选择新建服务所在的命名空间。关于命名空间更多信息请参考命名空间概述
    【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
    default
    外部流量策略 【类型】必填
    【含义】设置外部流量策略。
    Cluster:流量可以转发到集群中所有节点上的 Pod。
    Local:流量只发给本节点上的 Pod。
    【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
    Cluster
    标签选择器 【类型】必填
    【含义】添加标签,Service 根据标签选择 Pod,填写后点击 添加 。也可以引用已有工作负载的标签,点击 引用负载标签 ,在弹出的窗口中选择负载,系统会默认将所选的负载标签作为选择器。
    负载均衡类型 【类型】必填
    【含义】使用的负载均衡类型,当前支持 MetalLB 和其他。
    MetalLB
    MetalLB IP 池 【类型】必填
    【含义】选择的负载均衡类型为 MetalLB 时,LoadBalancer Service 默认会从这个池中分配 IP 地址, 并且通过 APR 宣告这个池中的所有 IP 地址,详情请参考安装 MetalLB
    负载均衡地址 【类型】必填
    【含义】
    1. 如使用的是公有云 CloudProvider,此处填写的为云厂商提供的负载均衡地址;
    2. 如果上述负载均衡类型选择为 MetalLB,默认从上述 IP 池中获取 IP,如果不填则自动获取。
    自动获取
    端口配置 【类型】必填
    【含义】为服务添加协议端口,需要先选择端口协议类型,目前支持 TCP、UDP 两种传输协议。
    端口名称:输入自定义的端口的名称。
    服务端口(port):Pod 对外提供服务的访问端口。默认为了方便起见,服务端口被设置为与容器端口字段相同的值。
    容器端口(targetport):工作负载实际监听的容器端口。
    节点端口(nodeport):节点的端口,接收来自 ClusterIP 传输的流量。用来做外部流量访问的入口。
    注解 【类型】选填
    【含义】为服务添加注解

    点选 外部服务(ExternalName) ,这是指通过将服务映射到外部域名来暴露服务。 选择此项的服务不会创建典型的 ClusterIP 或 NodePort,而是通过 DNS 名称解析将请求重定向到外部的服务地址。

    参数 说明 举例值
    访问类型 【类型】必填
    【含义】指定 Pod 服务发现的方式,这里选择外部服务(ExternalName)。
    ExternalName
    服务名称 【类型】必填
    【含义】输入新建服务的名称。
    【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
    Svc-01
    命名空间 【类型】必填
    【含义】选择新建服务所在的命名空间。关于命名空间更多信息请参考命名空间概述
    【注意】请输入 4 到 63 个字符的字符串,可以包含小写英文字母、数字和中划线(-),并以小写英文字母开头,小写英文字母或数字结尾。
    default
    域名 【类型】必填
  4. 配置完所有参数后,点击 确定 按钮,自动返回服务列表。在列表右侧,点击 ,可以修改或删除所选服务。

    服务列表

YAML 示例

kind: Service
apiVersion: v1
metadata:
  name: nvidia-dcgm-exporter
  namespace: gpu-operator
  uid: 7e412db9-2d23-4599-b48c-91e434aebef1
  resourceVersion: '408861'
  creationTimestamp: '2024-12-09T09:11:41Z'
  labels:
    app: nvidia-dcgm-exporter
  annotations:
    prometheus.io/scrape: 'true'
  ownerReferences:
    - apiVersion: nvidia.com/v1
      kind: ClusterPolicy
      name: cluster-policy
      uid: 59e6c966-abb9-45be-b13e-e51e31e7e55b
      controller: true
      blockOwnerDeletion: true
spec:
  ports:
    - name: gpu-metrics
      protocol: TCP
      port: 9400
      targetPort: 9400
  selector:
    app: nvidia-dcgm-exporter
  clusterIP: 10.233.29.230
  clusterIPs:
    - 10.233.29.230
  type: ClusterIP
  sessionAffinity: None
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  internalTrafficPolicy: Cluster
status:
  loadBalancer: {}

评论