文档

通过使用自动创建SLB的服务公开应用

更新时间:

当您没有可用的SLB时,Cloud Controller Manager(CCM)组件可以为LoadBalancer类型服务自动创建SLB,并对其进行管理。本文以Nginx应用为例,介绍如何通过使用自动创建SLB的服务来公开应用。

注意事项

  • CCM只为Type=LoadBalancer类型的服务配置SLB。对于非LoadBalancer类型的服务,则不会为其配置负载均衡。

    重要

    Type=LoadBalancer的服务变更为其他类型时,CCM会删除为该SLB添加的配置,从而造成无法通过该SLB访问服务。

  • CCM使用声明式API,会在一定条件下自动根据服务的配置刷新SLB配置。您自行在SLB控制台上修改的配置均存在被覆盖的风险。

    重要

    请勿在SLB控制台上手动修改Kubernetes创建并维护的SLB的任何配置,否则有配置丢失的风险,造成服务不可访问。

  • 已创建的LoadBalancer类型Service不支持重新指定SLB。如果您需要更换SLB,请重新创建Service。

SLB配额限制

  • CCM会为Type=LoadBalancer类型的Service创建SLB。默认情况下一个用户可以保留60个SLB实例。如果需要创建的SLB数量大于60,请到配额平台提交申请

  • CCM会根据Service的配置将ECS挂载到SLB后端服务器组中。

    • 默认情况下一个ECS实例可挂载的后端服务器组的数量为50个,如果一台ECS需要挂载到更多的后端服务器组中,请到配额平台提交申请

    • 默认情况下一个SLB实例可以挂载200个后端服务器,如果需要挂载更多的后端服务器,请到配额平台提交申请

  • CCM会根据Service中定义的端口创建SLB监听。默认情况下一个SLB实例可以添加50个监听,如需添加更多监听,请到配额平台提交申请

  • 更多SLB使用限制请参见使用限制

    负载均衡SLB配额查询请参见负载均衡SLB配额管理

步骤一:部署示例应用

本文以Nginx无状态应用为例,指导您如何在ACK中通过负载均衡类型的Service暴露应用。

控制台操作指导

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

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

  3. 无状态页面,单击使用镜像创建,配置应用的基本信息、容器配置、高级配置等。

    1. 应用基本信息页签中,配置应用名称,本示例为my-nginx,其他参数保持默认值,然后单击下一步

    2. 容器配置页签中,设置容器镜像名称、端口,其他参数保持默认值,然后单击下一步

      配置项

      取值

      镜像名称

      单击选择镜像,在选择镜像及版本对话框单击制品中心页签,然后搜索nginx,选择名称为openanolis/nginx的镜像仓库,单击选择镜像版本,设置镜像的版本,完成后单击确定

      端口

      • 名称:nginx。

      • 容器端口:80。

    3. 高级配置页签中,无需修改参数,单击创建,完成 Nginx应用的创建。

kubectl操作指导

  1. 使用以下示例应用的YAML内容,创建名为my-nginx.yaml文件。

    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: my-nginx    # 示例应用的名称。
      labels:
        app: nginx
    spec:
      replicas: 2       # 设置副本数量。
      selector:
        matchLabels:
          app: nginx     # 对应服务中Selector的值需要与其一致,才可以通过服务公开此应用。
      template:
        metadata:
          labels:
            app: nginx
        spec:
        #  nodeSelector:
        #    env: test-team
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80                                # 需要在服务中暴露该端口。
  2. 执行以下命令,部署示例应用my-nginx。

    kubectl apply -f my-nginx.yaml
  3. 执行以下命令,确认示例应用状态正常。

    kubectl get deployment my-nginx

    预期输出:

    NAME       READY   UP-TO-DATE   AVAILABLE   AGE
    my-nginx   3/3     3            3           50s

步骤二:通过使用自动创建SLB的服务公开应用

您可以通过控制台和kubectl两种方式来创建LoadBalancer类型的服务,并通过其公开应用。

控制台方式

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

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

  3. 服务页面,单击创建,在创建服务对话框中设置服务相关的参数。

    配置项

    描述

    示例

    服务名称

    输入Service(服务)的名称。

    my-nginx-svc

    服务

    类型

    选择Service类型,Service网络支持以下模式,分别对接不同来源和类型的客户端的访问,包括:

    虚拟集群IP

    虚拟集群IP(ClusterIP)主要服务于集群内部通信,仅当服务类型设置为虚拟的ClusterIP时,才支持服务实例之间的发现。通过使用无头服务Headless Service,您可以与其他服务发现机制互动,而不必依赖Kubernetes默认提供的基于ClusterIP的服务发现和负载均衡。

    负载均衡

    负载均衡(LoadBalancer)提供了一种方法,通过集成阿里云负载均衡器SLB(Classic Load Balancer),可以将集群内部应用对外暴露。相比于NodePort方式,能够显著提升应用的可用性和性能。在创建过程中,您有选项可以选择新建SLB或使用已有的SLB

    新建SLB

    新建SLB(Classic Load Balancer)时,您可以选择CLB的网络访问模式(公网或私网)和计费方式(按规格计费或按使用量计费)。更多信息,请参见创建和管理CLB实例

    负载均衡更多配置

    名称:自定义CLB的名称。仅新建CLB需要配置。

    IP版本:根据需要可选择ipv4ipv6

    调度算法:支持轮询(RR)或加权轮询(WRR)两种策略。RR(默认取值):按照访问顺序依次将外部请求依序分发到后端服务器;WRR:权重值越高的后端服务器,被轮询到的次数(概率)也越高。

    访问控制:提供监听级别的访问控制。详细信息,请参见访问控制

    健康检查:支持TCP和HTTP协议。开启健康检查后,您可以通过健康检查来判断后端服务器的业务可用性。健康检查原理,请参见CLB健康检查工作原理

    其他:您还可以通过Annotation配置传统型负载均衡。详细信息,请参见通过Annotation配置传统型负载均衡CLB

    使用已有SLB

    您可以从下拉菜单中选择已有的SLB(Classic Load Balancer)实例进行复用。

    重要

    复用CLB实例存在一些限制,以及相关的注意事项,详细信息请参见哪些CLB可以被复用?

    负载均衡更多配置

    调度算法:支持轮询(RR)或加权轮询(WRR)两种策略。RR(默认取值):按照访问顺序依次将外部请求依序分发到后端服务器;WRR:权重值越高的后端服务器,被轮询到的次数(概率)也越高。

    访问控制:提供监听级别的访问控制。详细信息,请参见访问控制

    健康检查:支持TCP和HTTP协议。开启健康检查后,您可以通过健康检查来判断后端服务器的业务可用性。健康检查原理,请参见SLB健康检查工作原理

    其他:您还可以通过Annotation配置传统型负载均衡。详细信息,请参见通过Annotation配置传统型负载均衡CLB

    1. 选择负载均衡的服务类型。

    2. 单击新建SLB,选择公网访问,本示例使用默认规格(slb.s1.small)。

    外部流量策略

    您的服务类型为节点端口负载均衡时,才能设置外部流量策略。关于外部流量策略的详细介绍,请参见Service快速入门

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

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

    Local

    服务关联

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

    名称:app

    值:my-nginx

    端口映射

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

    80

    注解

    为该服务添加一个注解(Annotation),配置负载均衡的参数。更多参数,请参见通过Annotation配置传统型负载均衡SLB

    标签

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

  4. 单击确定

kubectl

  1. 使用以下示例服务的YAML内容,创建名为my-nginx-svc.yaml的文件。

    selector修改为my-nginx.yaml示例应用文件中matchLabels的值(本示例为app: nginx),从而将该服务关联至后端应用。

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
      name: my-nginx-svc
      namespace: default
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: LoadBalancer
  2. 执行以下命令,创建名为my-nginx-svc的服务,并通过其公开应用。

    kubectl apply -f my-nginx-svc.yaml
  3. 执行以下命令,确认LoadBalancer类型的服务已成功创建。

    kubectl get svc my-nginx-svc

    预期输出:

    NAME           TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)        AGE
    my-nginx-svc   LoadBalancer   172.21.5.82   39.106.XX.XX     80:30471/TCP   5m
  4. 执行以下命令,访问示例应用。

    curl <YOUR-External-IP> # 请将<YOUR-External-IP>替换为上面获取到的EXTERNAL-IP地址。

    预期输出:

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
        body {
            width: 35em;
            margin: 0 auto;
            font-family: Tahoma, Verdana, Arial, sans-serif;
        }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>

  • 本页导读 (1)
文档反馈