在Kubernetes中,Pod虽然拥有独立的IP, 但Pod会快速地创建和删除,因此通过Pod直接对外界提供服务不符合高可用的设计准则。通过Service这个抽象,Service能够解耦前端和后端的关联,前端不用关心后端的具体实现,从而实现松耦合的微服务设计。您可以在阿里云容器服务Kubernetes版中创建服务。本文介绍如何创建服务。

背景信息

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

有关更多详细的原理,请参见Service

步骤1:创建Deployment

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 无状态页签中,单击使用模板创建
  5. 选择样例模板或自定义,然后单击创建

    本例中,示例模板是一个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                                          ##需要在服务中暴露该端口。
  6. 在无状态应用列表中,单击目标应用名称或者其右侧的详情,查看该Deployment的运行状态。
    查看运行状态

步骤2:创建服务

  1. 在集群管理页左侧导航栏中,单击服务
  2. 单击页面右上角的创建
  3. 在弹出的创建服务对话框中,进行配置。
    参数 描述
    名称 输入服务的名称,本例中为nginx-svc。
    类型 选择服务类型,即服务访问的方式。包括:
    • 虚拟集群IP:即ClusterIP,指通过集群的内部IP暴露服务。选择该值,服务只能够在集群内部可以访问,这也是默认的Service类型。
      说明 您的服务类型为虚拟集群IP时,才能设置实例间发现服务(Headless Service)。您可以使用无头Service与其他服务发现机制进行接口,而不必与Kubernetes的实现捆绑在一起。
    • 节点端口:即NodePort,通过每个Node上的IP和静态端口(NodePort)暴露服务。NodePort服务会路由到ClusterIP服务,这个ClusterIP服务会自动创建。通过请求<NodeIP>:<NodePort>,可以从集群的外部访问一个NodePort服务。
    • 负载均衡:即LoadBalancer,指阿里云提供的负载均衡服务(SLB),可选择公网访问或内部访问。阿里云负载均衡服务可以路由到NodePort服务和ClusterIP服务。
      • 新建SLB:您可以通过单击修改,修改SLB规格。
      • 使用已有负载均衡: 您可以在已有的列表中选择SLB规格。
      说明 负载均衡类型支持新建SLB和使用已有SLB,且多个Kubernetes Service可以复用同一个SLB,但是存在以下限制:
      • 使用已有的负载均衡实例会强制覆盖已有监听。
      • Kubernetes通过Service创建的SLB不能复用(会导致SLB被意外删除)。只能复用您手动在控制台(或调用OpenAPI)创建的SLB。
      • 复用同一个SLB的多个Service不能有相同的前端监听端口,否则会造成端口冲突。
      • 复用SLB时,监听的名字以及虚拟服务器组的名字被Kubernetes作为唯一标识符。请勿修改监听和虚拟服务器组的名字。
      • 不支持跨集群复用SLB。
    关联 选择服务要绑定的后端对象,本例中是前面创建的nginx-deployment-basic。若不进行关联部署,则不会创建相关的Endpoints对象,您可自己进行绑定,请参见services-without-selectors
    外部流量策略 可选值为Local或Cluster。
    说明 您的服务类型为节点端口负载均衡时,才能设置外部流量策略
    端口映射 添加服务端口和容器端口,容器端口需要与后端的Pod中暴露的容器端口一致。
    注解 为该服务添加一个注解(annotation),配置负载均衡的参数,例如设置service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth:20表示将该服务的带宽峰值设置为20Mbit/s,从而控制服务的流量。更多参数请参见通过Annotation配置负载均衡
    标签 您可为该服务添加一个标签,标识该服务。
  4. 单击创建,nginx-svc服务出现在服务列表中。
    服务列表
  5. 拷贝nginx-svc服务的外部端点至浏览器中可查看服务的基本信息。
    查看外部端点

    您已成功创建了一个关联到后端的Deployment的服务,最后成功访问Nginx的欢迎页面。