Service管理

最近更新时间: 2024-10-17 17:10:00

简介

Service 定义访问后端 Pod 的访问策略,提供固定的虚拟访问 IP。您可以通过 Service 负载均衡地访问到后端的 Pod。 Service 支持以下类型:

  • 公网访问: 使用 Service 的 Loadbalance 模式,自动创建公网 CLB。 公网 IP 可直接访问到后端的 Pod。

  • VPC内网访问:使用 Service 的 Loadbalance 模式,自动创建内网 CLB。指定 annotations:service.kubernetes.io/qcloud-loadbalancer-internal-subnetid: subnet-xxxxxxxx,VPC 内网即可通过内网 IP 直接访问到后端的 Pod。

  • 集群内访问:使用 Service 的 ClusterIP 模式,自动分配 Service 网段中的 IP,用于集群内访问。

Service 控制台操作指引

注意事项

  • 建议您的容器业务不要和 CVM 业务共用一个 CLB。

  • 建议您不要在 CLB 控制台直接操作 TKE 自动管理的 CLB。

  • 使用已有的 CLB 时,TKE 会自动覆盖 CLB 已有的后端 RS。

  • TKE 会自动覆盖和更新名称为 TKE_Dedicated_Listener 的监听器,其他监听器不覆盖。

创建 Service

  1. 登录 TKE 控制台。

  2. 在左侧导航栏中,单击集群,进入“集群管理”页面。

  3. 单击需要创建 Service 的集群ID/名称,进入待创建 Service 的集群管理页面。

  4. 选择服务 > Service,进入“Service”信息页面。

  1. 单击新建,进入“新建Service”页面。

  1. 根据实际需求,设置 Service 参数。关键参数信息如下:

    • 服务名称:自定义。

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

    • 服务访问方式:根据实际需求,选择对应的访问方式。

    • 端口映射:根据实际需求进行设置。

  2. 单击创建服务,完成创建。

更新 Service

更新 YAML

  1. 登录 TKE 控制台。

  2. 在左侧导航栏中,单击集群,进入“集群管理”页面。

  3. 单击需要更新 YAML 的集群ID/名称,进入待更新 YAML 的集群管理页面。

  4. 选择服务 > Service,进入“Service”信息页面。

  1. 在需要更新 YAML 的 Service 行中,单击编辑YAML,进入更新 Service 页面。

  2. 在“更新Service”页面,编辑 YAML,单击完成,即可更新 YAML。

Kubectl 操作 Service 指引

YAML 示例

kind: Service
apiVersion: v1
metadata:
  ## annotations:
  ##   service.kubernetes.io/qcloud-loadbalancer-internal-subnetid: subnet-xxxxxxxx ##若是创建内网访问的 Service 需指定该条 annotation
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
  type: LoadBalancer
  • kind:标识 Service 资源类型。

  • metadata:Service 的名称、Label等基本信息。

  • metadata.annotations: Service 的额外说明,可通过该参数设置腾讯云金融专区 TKE 的额外增强能力。

  • spec.type:标识 Service 的被访问形式

    • ClusterIP:在集群内部公开服务,可用于集群内部访问。

    • NodePort:使用节点的端口映射到后端 Service,集群外可以通过节点 IP:NodePort 访问。

    • LoadBalancer:使用腾讯云金融专区提供的负载均衡器公开服务,默认创建公网 CLB, 指定 annotations 可创建内网 CLB。

    • ExternalName:将服务映射到 DNS,仅适用于 kube-dns1.7及更高版本。

annotations: 使用已有负载均衡器创建公网/内网访问的 Service

如果您已有的包年包月传统型 CLB 为空闲状态,需要提供给 TKE 创建的 Service 使用,您可以通过以下 annotations 进行设置:

metadata:
  annotations:
    service.kubernetes.io/tke-existed-lbid: lb-6swtxxxx

annotations: 指定节点绑定 Loadbalances

如果您的集群规模较大,入口类型的应用需设置亲和性调度到部分节点, 您可以通过配置 Service 的 Loadbalance,只绑定指定节点, annotations 如下:

metadata:
  annotations:
    service.kubernetes.io/qcloud-loadbalancer-backends-label: `key in (value1, value2) ` ## LabelSelector格式
  • 建议配合工作负载的亲和性调度使用。

  • 前提条件是 Node 已根据业务需求设置 Label。

  • 采用原生 LabelSelector 格式如:

    • service.kubernetes.io/qcloud-loadbalancer-backends-label: key1=values1, key2=values2

    • service.kubernetes.io/qcloud-loadbalancer-backends-label: key1 in (value1),key2 in (value2)

    • service.kubernetes.io/qcloud-loadbalancer-backends-label: key in (value1, value2)

    • service.kubernetes.io/qcloud-loadbalancer-backends-label: key1, key2 notin (value2)

  • 增量的节点若匹配,将自动绑定到该 Loadbalance。

  • 修改存量节点的 Label, 根据匹配规则将动态绑定和解绑 Loadbalance。

如果您使用的是带宽上移账号,在创建公网访问方式的服务时需要指定以下两个 annotations 项:

  • service.kubernetes.io/qcloud-loadbalancer-internet-charge-type 公网带宽计费方式,可选值有:TRAFFIC_POSTPAID_BY_HOUR(按使用流量计费),BANDWIDTH_POSTPAID_BY_HOUR(按带宽计费)
  • service.kubernetes.io/qcloud-loadbalancer-internet-max-bandwidth-out 带宽上限,范围:[1,2000] Mbps。 例如: metadata: annotations: service.kubernetes.io/qcloud-loadbalancer-internet-charge-type: TRAFFIC_POSTPAID_BY_HOUR service.kubernetes.io/qcloud-loadbalancer-internet-max-bandwidth-out: "10"

创建 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
  4. 执行以下命令,验证创建是否成功。

    kubectl get services

    返回类似以下信息,即表示创建成功。

    NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
    kubernetes   ClusterIP   172.16.255.1   <none>        443/TCP   38d

更新 Service

方法一

执行以下命令,更新 Service。

kubectl edit service/[name]

方法二

  1. 手动删除旧的 Service。

  2. 执行以下命令,重新创建 Service。

    kubectl create/apply

删除 Service

执行以下命令,删除 Service。

kubectl delete service [NAME]