Todos os produtos
Search
Central de documentação

Container Compute Service:Expor uma aplicação usando um serviço que cria automaticamente um balanceador de carga

Última atualização: Jun 29, 2026

O componente cloud-controller-manager (CCM) cria e gerencia automaticamente um balanceador de carga para um Service do tipo LoadBalancer. O balanceador pode ser um Classic Load Balancer (CLB) ou um Network Load Balancer (NLB). Este tópico usa uma aplicação Nginx como exemplo para demonstrar como expor uma aplicação por meio de um Service que provisiona automaticamente um balanceador de carga.

Observações

  • O CCM configura um balanceador de carga apenas para Services do tipo Type=LoadBalancer. O CCM não configura balanceadores de carga para outros tipos de Service.

  • Importante

    Se você alterar o tipo de um Service de Type=LoadBalancer para Type!=LoadBalancer, o CCM excluirá a configuração do balanceador de carga. Isso tornará o Service inacessível pelo balanceador.

  • O CCM usa uma API declarativa e atualiza automaticamente a configuração do balanceador de carga com base na configuração do Service. Consequentemente, quaisquer modificações manuais no console do Server Load Balancer podem ser sobrescritas.

    Importante

    Não modifique manualmente no console do Server Load Balancer a configuração de um balanceador de carga gerenciado pelo Kubernetes. Suas alterações podem ser sobrescritas e tornar o Service inacessível.

  • Não é possível alterar o balanceador de carga de um Service existente do tipo LoadBalancer. Para usar um balanceador diferente, crie um novo Service.

Limites de cota

Etapa 1: Implantar a aplicação de exemplo

Implante a aplicação pela linha de comando do kubectl.

  1. Crie um arquivo chamado my-nginx.yaml com o seguinte conteúdo YAML para a aplicação de exemplo.

    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: my-nginx    # The name of the sample application.
      labels:
        app: nginx
    spec:
      replicas: 3       # The number of replicas.
      selector:
        matchLabels:
          app: nginx     # The value must match the selector of the Service that exposes this application.
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest     # Replace this with the actual image address. The format is <image_name:tags>.
            ports:
            - containerPort: 80                                # This port must be exposed in the Service.
  2. Implante a aplicação de exemplo my-nginx.

    kubectl apply -f my-nginx.yaml
  3. Confirme se a aplicação de exemplo está no estado Normal.

    kubectl get deployment my-nginx

    Saída de exemplo:

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

Etapa 2: Expor a aplicação usando um serviço que cria automaticamente um balanceador de carga

Crie um Service do tipo LoadBalancer pelo console ou pelo kubectl para expor a aplicação.

Usar o console

  1. Faça login no console do ACS. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do cluster desejado. No painel de navegação à esquerda, escolha Network > Services.

  3. Na página Services, clique em Create no canto superior esquerdo.

  4. Na caixa de diálogo Create Service, defina os parâmetros do Service.

    Parâmetro

    Descrição

    Exemplo

    Name

    Insira um nome para o Service.

    my-nginx-svc

    Service Type

    Selecione um tipo de Service. A rede do Service oferece os seguintes modos para diferentes tipos de clientes e origens de acesso:

    Cluster IP

    Este modo destina-se principalmente à comunicação interna no cluster. A descoberta de serviços entre instâncias de serviço funciona apenas quando o tipo de serviço está definido como ClusterIP virtual. Com um Headless Service, é possível interagir com outros mecanismos de descoberta de serviços sem depender da descoberta de serviços e do balanceamento de carga padrão baseados em ClusterIP fornecidos pelo Kubernetes.

    SLB

    Este modo expõe aplicações internas do cluster à internet por meio da integração com o Classic Load Balancer (CLB) e o Network Load Balancer (NLB) da Alibaba Cloud. Esse modo oferece maior disponibilidade e desempenho que o modo NodePort.

      External Traffic Policy

      A External Traffic Policy só pode ser definida quando o tipo de Service é SLB.

      • Local: roteia o tráfego apenas para os pods do nó atual.

      • Cluster: encaminha o tráfego para pods em outros nós do cluster.

      Local

      Backend

      Selecione a aplicação de backend para associar ao Service. Se você não vincular um deployment, o sistema não criará objetos Endpoints. Para mais informações, consulte services-without-selectors.

      Nome: app

      Valor: nginx

      Port Mapping

      Adicione uma porta de serviço (corresponde ao campo port no arquivo YAML do Service) e uma porta de contêiner (corresponde ao campo targetPort no arquivo YAML do Service). A porta do contêiner deve corresponder à porta exposta pelo pod de backend.

      80

      Annotations

      Adicione uma anotação ao Service para configurar os parâmetros do balanceador de carga. Para mais informações, consulte Configurar uma instância CLB usando anotações.

      Importante

      Não reutilize a instância SLB do API Server do cluster. Caso contrário, o acesso ao cluster pode apresentar anomalias.

      Neste exemplo, o método de faturamento do Service está definido como pagamento por largura de banda e o pico de largura de banda está configurado para 2 Mbit/s para controlar o tráfego. As anotações são as seguintes:

      • service.beta.kubernetes.io/alibaba-cloud-loadbalancer-charge-type:paybybandwidth

      • service.beta.kubernetes.io/alibaba-cloud-loadbalancer-bandwidth:2

      Label

      Adicione um rótulo para identificar o Service.

      Nenhum

    Usar kubectl

    1. Crie um arquivo chamado my-nginx-svc.yaml com o seguinte conteúdo para o Service.

      Certifique-se de que o valor do campo selector (app: nginx neste exemplo) corresponda ao valor do campo matchLabels no deployment da aplicação de backend. Isso associa o Service à aplicação de backend.

      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. Saída esperada:

      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/TCP   5m
    3. Saída esperada:

      curl <YOUR-External-IP> # Replace <YOUR-External-IP> with the external IP address obtained in the previous step.
      <!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>Thank you for using nginx.