文档

使用负载均衡类型的Service暴露应用

更新时间:

在Kubernetes集群中,Service是将运行的一组Pod的网络应用进行服务暴露的标准方法,能够解耦前端和后端的关联,从而实现松耦合的微服务设计。Service服务支持多种类型,例如ClusterIP、NodePort、LoadBalancer等。本文主要为您介绍如何在ACK Edge集群中,通过LoadBalancer(负载均衡)类型Service对外暴露应用。

背景信息

Kubernetes集群支持的所有Service类型,请参见使用Service实现对外暴露应用

ACK Edge集群可以被划分为云上节点池和云下节点池(边缘节点池),云上节点池以及其托管的管控面形成一个ACK集群。

ACK Edge集群中,您可以选择通过在云上节点池使用负载均衡类型Service暴露应用,也可以在云下(边缘)节点池上使用负载均衡Service暴露应用。

云上节点池使用负载均衡类型Service

如果您的线下IDC节点和云上VPC通过专线打通主机网络,可以在云上使用负载均衡类服务,将业务请求通过专线转发到云下IDC的工作负载上。

image

更多实现方案和操作可参考如下文档:

内容分类

相关文档

概述

Service的负载均衡配置注意事项及CCM资源更新策略

SLB

CLB

通过Annotation配置传统型负载均衡CLB

NLB

通过Annotation配置网络型负载均衡NLB

问题排查和FAQ

边缘(云下)节点池使用负载均衡类型Service

边缘侧支持多个网络域的数据中心计算资源接入,每个数据中心作为一个节点池,并支持同一组业务在多地域进行服务暴露,即一个Service在多个数据中心对应多个接入点。

说明

当前ACK Edge集群仅支持阿里云ENS数据中心以及ENS负载均衡。

ACK Edge集群提供了一个新的自定义集群资源PoolService,云上托管组件edge-controller-manager会根据您创建的负载均衡Service,自动为您选中一个由节点池管理的PoolService资源,该地域的负载均衡实例生命周期会跟这个PoolService资源进行绑定。

image

部署负载均衡类型Service示例

步骤一:部署应用

  1. 采用以下YAML内容创建名为nginx.yaml的文件。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 3 
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.22
            ports:
            - containerPort: 80
  1. 执行以下命令部署名为nginx的应用。

    kubectl apply -f nginx.yaml 
  2. 执行以下命令确认应用状态正常。

    kubectl get deployment nginx

    预期输出如下:

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

步骤二:在节点池部署负载均衡类型Service公开应用

在云上节点池部署SLB类型Service

  1. 采用以下YAML内容创建名为nginx-svc-cloud.yaml的文件。

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-svc-cloud
      labels:
        app: nginx
      annotations:
        openyurt.io/topologyKeys: openyurt.io/nodepool #服务拓扑限制流量节点池闭环
    spec:
      selector:
        app: nginx
      type: LoadBalancer
      externalTrafficPolicy: Cluster
      ports:
      - name: nginx
        port: 80
        protocol: TCP
        targetPort: 80
  2. 执行以下命令部署名为nginx-svc-cloud的服务,并通过该服务对外公开应用。

    kubectl apply -f nginx-svc-cloud.yaml
  3. 执行以下命令确认nginx-svc-cloud服务已创建。

    kubectl get service

    预期输出如下:

    NAME              TYPE           CLUSTER-IP       EXTERNAL-IP        PORT(S)        AGE
    nginx-svc-cloud   LoadBalancer   10.110.xxx.xxx   120.26.xxx.xxx     80:32433/TCP   3m6s
  4. 执行以下命令确认服务已对外公开。

    说明

    请将命令中的IP地址替换为上一步骤中返回的EXTERNAL-IP

    curl http://120.26.xxx.xxx:80

    预期输出如下:

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
    html { color-scheme: light dark; }
    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>

在边缘节点池部署ELB类型Service

  1. 采用以下YAML内容创建名为nginx-svc-edge.yaml的文件。

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-svc-edge
      labels:
        app: nginx
      annotations:
        openyurt.io/topologyKeys: openyurt.io/nodepool              #服务拓扑限制流量节点池闭环
        service.openyurt.io/nodepool-labelselector: edge-svc=nginx  #边缘节点池选择器
    spec:
      selector:
        app: nginx
      type: LoadBalancer
      loadBalancerClass: alibabacloud.com/elb
      externalTrafficPolicy: Cluster
      ports:
      - name: nginx
        port: 80
        protocol: TCP
        targetPort: 80
  2. 执行以下命令部署名为nginx-svc-edge的服务,并通过该服务对外公开应用。

    kubectl apply -f nginx-svc-edge.yaml
  3. 执行以下命令确认nginx-svc-edge服务已创建。

    kubectl get service

    预期输出如下:

    NAME              TYPE           CLUSTER-IP      EXTERNAL-IP                      PORT(S)        AGE
    nginx-svc-edge    LoadBalancer   10.110.xxx.xxx  112.28.xxx.xxx,117.177.xxx.xxx   80:30048/TCP   12m
  4. 执行以下命令查看多地域的PoolService。

    kubectl get ps

    预期输出如下:

    NAME                                                AGE
    nginx-svc-edge-np4d3f9f93f8df4e47aef87661bf******   13m
    nginx-svc-edge-npb3bcd4eacaaa449aa0a5a00260******   13m
  5. 执行以下命令确认服务已对外公开。

    说明

    请将命令中的IP地址替换为步骤2中返回的EXTERNAL-IP

    curl http://112.28.xxx.xxx:30048

    预期输出如下:

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
    html { color-scheme: light dark; }
    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>