创建服务

在Kubernetes中,Pod虽然拥有独立的IP,但会被快速地创建和删除,因此无法直接对外提供服务。而服务(Service)能够解耦前端和后端的关联,从而实现松耦合的微服务设计。本文介绍如何通过控制台和Kubectl创建服务的方式对外发布应用。

前提条件

已创建ACK Serverless集群。更多信息,请参见容器服务 Serverless 版使用快速入门

背景信息

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. 选择示例模板或自定义,然后单击创建

    本示例中,示例模板是一个Nginx的Deployment。

    apiVersion: apps/v1 
    kind: Deployment
    metadata:
       name: nginx-deployment-basic
       labels:
         app: nginx
    spec:
       replicas: 2
       selector:
         matchLabels:
           app: nginx
       template:
         metadata:
           labels:
             app: nginx
         spec:
           containers:
           - name: nginx
             image: nginx:1.7.9                # replace it with your exactly <image_name:tags>
             ports:
             - containerPort: 80               ##需要在服务中暴露该端口。
  5. 在无状态应用列表中,单击目标应用名称或其右侧的详情,查看该Deployment的运行状态。查看应用

步骤二:创建服务

  1. 在集群管理页左侧导航栏,选择网络 > 服务

  2. 服务页面,单击创建

  3. 创建服务对话框中,配置相关信息。

    配置项

    描述

    名称

    设置服务的名称。

    服务类型

    选择服务类型,即服务访问的方式。包括:

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

      说明

      服务类型虚拟集群IP时,支持配置实例间发现服务(Headless Service)。您可以使用无头Service与其他服务发现机制进行接口,无需与Kubernetes的实现捆绑。

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

      说明

      仅ACK集群支持设置节点端口,ACK Serverless集群不支持。

    • 负载均衡:即LoadBalancer,阿里云提供的负载均衡服务(SLB),支持选择公网访问或私网访问,可以路由到NodePort服务和ClusterIP服务。

      • 新建SLB:通过单击修改,修改SLB规格。

      • 使用已有SLB: 您可以在已有的列表中选择SLB规格。

      说明

      负载均衡类型支持新建SLB和使用已有SLB,且多个Kubernetes Service可以复用同一个SLB,但是存在以下限制:

      • 使用已有的负载均衡实例会强制覆盖已有监听。

      • 通过Service创建的SLB无法复用,可能导致SLB被意外删除。仅支持复用您手动在控制台或调用OpenAPI创建的SLB。

      • 复用同一个SLB的多个Service,避免前端监听端口一致,否则会造成端口冲突。

      • 复用SLB时,Kubernetes将使用监听的名字以及虚拟服务器组的名字将作为唯一标识符。请勿修改监听和虚拟服务器组的名字。

      • 不支持跨集群复用SLB。

    外部流量策略

    设置外部流量策略。关于外部流量策略详细介绍,请参见外部流量策略功能对比

    • Local:流量只发给本机的Pod。

    • Cluster:流量可以转发到集群中其他节点上的Pod。

    说明

    您的服务类型为节点端口负载均衡时,才能设置外部流量策略

    服务关联

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

    端口映射

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

    注解

    为该服务添加一个注解(Annotation),配置负载均衡的参数。支持选择自定义注解阿里云注解。例如,设置service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:2,表示将该服务的带宽峰值设置为2Mbit/s,从而控制服务的流量。更多参数,请参见通过Annotation配置传统型负载均衡CLB

    标签

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

  4. 单击创建

    服务页面服务列表,可以查看新创建的服务。

    在服务列表操作列,单击目标服务的详情更新删除,对目标服务做相应操作。

    说明

    在服务详情页面,您可以单击外部端点后面的链接访问应用。