创建ClusterIP类型服务

Kubernetes中,Pod会快速地被创建和删除,这导致PodIP地址不固定,因此无法直接对外提供服务。Service提供了一个固定的IP地址,外部服务(前端)可以通过这个固定的IP地址访问到后端Pod,而无需关心后端具体是哪些Pod以及它们的IP地址。Service的这种机制实现了前后端的解耦,从而对外提供稳定的服务。本文介绍如何通过控制台创建虚拟集群IP(ClusterIP)类型服务。

背景信息

Kubernetes Service定义了这样一种抽象:一个Pod的逻辑分组,一种可以访问它们的策略,通常称为微服务。这一组Pod能够被Service访问到,通常是通过Label Selector来实现。

Kubernetes中,Pod虽然拥有独立的IP,但Pod会快速地创建和删除,因此通过Pod直接对外界提供服务不符合高可用的设计准则。通过Service,Service能够解耦frontend(前端)和backend(后端)的关联,frontend不用关心backend的具体实现,从而实现松耦合的微服务设计。

更多详细的原理,请参见Kubernetes service

步骤一:创建Deployment

  1. 登录容器计算服务控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

  3. 无状态页面,单击使用YAML创建资源

  4. 选择示例模板或自定义,然后单击创建

    本示例模板是一个NginxDeployment。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-nginx-svc
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
  5. 无状态页面,单击目标应用名称或右侧的详情,查看该Deployment的运行状态,等待其所有Pod实例可用。

步骤二:创建服务

  1. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择网络 > 服务

  2. 服务页面右侧,单击创建,在创建服务对话框中,配置相关信息,然后单击确定

    配置项

    说明

    示例

    服务名称

    设置服务的名称。

    my-nginx-svc

    服务类型

    选择虚拟集群IP(Cluster IP),即ClusterIP,通过集群的内部IP暴露服务。选择该值后,服务只能在集群内部访问,此类型为默认的Service类型。

    说明

    可按需选择是否开启实例间服务发现(Headless Service)。开启后,可使用无头Service与其他服务发现机制进行对接,无需与Kubernetes的实现捆绑。

    虚拟集群IP(Cluster IP)

    服务关联

    选择服务要绑定的后端应用。如不进行关联,则不会创建相关的Endpoints对象。关于服务关联的详细介绍,请参见services-without-selectors

    • 名称:app

    • :nginx

    端口映射

    添加服务端口(对应Service YAML文件中的port)和容器端口(对应Service YAML文件中的targetPort),容器端口需要与后端的Pod中暴露的容器端口一致。

    • 服务端口:80

    • 容器端口:80

    • 协议:TCP

    注解

    为该服务添加一个注解(Annotation)。

    标签

    为该服务添加一个标签,标识该服务。

    创建完成后,可在服务页面的操作列,对目标服务进行更新YAML 编辑删除操作。