Todos os produtos
Search
Central de documentação

Container Compute Service:Expor um aplicativo com um balanceador de carga existente

Última atualização: Jun 29, 2026

É possível acessar um Service exposto pelo Alibaba Cloud Server Load Balancer (SLB) fora do cluster pelo nome de domínio do SLB ou por <IP:Service Port>. Dentro do cluster, o acesso ocorre via <Service Name:Service Port>. Este tópico descreve como expor um aplicativo em um cluster ACS usando um Service com um balanceador de carga existente, tomando um aplicativo Nginx como exemplo.

Pré-requisitos

Você deve ter uma instância de SLB criada no console do SLB na mesma região do cluster ACS. Este tópico usa como exemplo uma instância de Classic Load Balancer (CLB) voltada para a internet. Se você não tiver uma instância de CLB, consulte Criar e gerenciar instâncias de CLB.

Considerações

Limites de reutilização do SLB

  • A instância de SLB a ser reutilizada deve atender aos seguintes requisitos:

    • Somente instâncias de SLB criadas manualmente no console do SLB podem ser reutilizadas. Não é possível reutilizar instâncias criadas automaticamente pelo cloud controller manager (CCM) ou usadas pelo servidor de API do cluster.

    • Para reutilizar uma instância de SLB de rede interna em um cluster ACS, a instância e o cluster devem estar na mesma Virtual Private Cloud (VPC).

    • O tipo de endereço da instância de SLB deve corresponder ao tipo de acesso do Service:

      • Se o Service fornecer Public Access (definido pela anotação service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "internet"), o Address Type da instância de SLB deve ser Public Network.

      • Se o Service fornecer acesso interno (definido pela anotação service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: "intranet"), o Address Type da instância de SLB deve ser Internal Network.

    • Vários Services não podem usar a mesma porta de listener na mesma instância de SLB.

    • Ao reutilizar uma instância de SLB entre clusters, garanta que a combinação de namespace e nome do Service seja exclusiva em cada cluster.

  • O CCM configura uma instância de SLB apenas para Services do tipo type: LoadBalancer.

    Importante

    Se você alterar um Service type: LoadBalancer para outro tipo, o CCM excluirá as configurações adicionadas à instância de SLB. Consequentemente, o Service ficará inacessível por meio dessa instância.

  • O CCM usa uma API declarativa e reconcilia automaticamente a configuração do SLB com base na configuração do Service sob condições específicas. Se a anotação service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true" estiver definida, quaisquer configurações modificadas manualmente no console do SLB poderão ser sobrescritas.

    Importante

    Não modifique manualmente no console do SLB nenhuma configuração de uma instância gerenciada pelo ACS. Caso contrário, as configurações poderão ser perdidas e o Service poderá ficar inacessível.

  • Não é possível alterar a instância de SLB de um Service LoadBalancer existente. Para trocar a instância de SLB, crie um novo Service.

Limites de cota do SLB

Etapa 1: Implantar um aplicativo de exemplo

Os passos a seguir demonstram como implantar o aplicativo usando kubectl.

  1. Use o kubectl no Cloud Shell para conectar-se ao seu cluster.

  2. Crie um arquivo chamado my-nginx.yaml com o seguinte conteúdo.

    Visualize o conteúdo YAML

    apiVersion: apps/v1
    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                 # This value must match the selector in the Service manifest to expose the application.
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
            ports:
            - containerPort: 80        # This port must be exposed in the Service.
  3. Execute o comando abaixo para implantar o aplicativo de exemplo my-nginx.

    kubectl apply -f my-nginx.yaml
  4. Execute o comando a seguir para verificar se o aplicativo está em execução.

    kubectl get deployment my-nginx

    Saída esperada:

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

Etapa 2: Expor o aplicativo com um Service

Crie um Service LoadBalancer para expor o aplicativo usando o console ou o kubectl.

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, configure os parâmetros do Service.

    Parâmetro

    Descrição

    Exemplo

    Name

    Insira um nome para o Service.

    my-nginx-svc

    Service Type

    Selecione o tipo do Service. Isso determina como o Service será acessado.

    Create Service:

    • Service Type: LoadBalancer

    • SLB Type: Classic Load Balancer (CLB)

    • Select Resource: Use Existing Resource

    • : Selected

    Backend

    Se você não associar uma carga de trabalho, nenhum objeto Endpoints será criado, mas é possível vincular um manualmente. Para mais informações, consulte Services without selectors.

    Clique em + Reference Workload Label e selecione my-nginx:

    • Name: app

    • Value: nginx

    Port Mapping

    Adicione uma porta de serviço (campo port no arquivo YAML do Service) e uma porta de contêiner (campo targetPort no arquivo YAML do Service). A porta do contêiner deve corresponder à porta exposta pelo Pod de back-end.

    • Service Port: 80

    • Container Port: 80

    • Protocol: TCP

    Annotations

    Adicione uma anotação ao Service para configurar parâmetros do balanceador de carga. Para mais detalhes, consulte Usar anotações para configurar instâncias de Classic Load Balancer (CLB).

    Este exemplo define o método de faturamento como pagamento por largura de banda e o limite de largura de banda como 2 Mbit/s para controlar o tráfego do Service.

    Defina o método de faturamento:

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

    • Value: paybybandwidth

    Defina a largura de banda:

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

    • Value: 2

    Label

    Adicione um rótulo para identificar o Service.

    Nenhum

  5. Clique em Create. Na página Services, visualize o Service recém-criado.

  6. Acesse o aplicativo de exemplo usando o endereço IP na coluna External IP, como 39.106.XX.XX:80.

    Após acessar o aplicativo, a página Welcome to nginx! será exibida. Isso indica que o Service Nginx foi implantado e está funcionando conforme o esperado.

kubectl

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

    • Atualize o valor da anotação service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id. Substitua ${YOUR_LB_ID} pelo ID da instância de SLB criada no console do SLB.

    • Por padrão, reutilizar uma instância de SLB existente não cria nem sobrescreve seus listeners. Se necessário, defina a anotação service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners como true. Neste exemplo, a instância de SLB é nova e requer um listener, portanto o valor é definido como true. Para mais informações, consulte Usar anotações para configurar instâncias de Classic Load Balancer (CLB).

    • Defina o valor de selector como o valor de matchLabels no arquivo my-nginx.yaml, que é app: nginx, para associar o Service ao aplicativo de back-end.

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${YOUR_LB_ID} 
        service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true'
      labels:
        app: nginx
      name: my-nginx-svc
      namespace: default
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: LoadBalancer
  2. Execute o comando a seguir para criar o Service my-nginx-svc e expor o aplicativo.

    kubectl apply -f my-nginx-svc.yaml
  3. Execute o comando abaixo para verificar se o Service LoadBalancer foi criado.

    kubectl get svc my-nginx-svc

    Saída esperada:

    NAME           TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)        AGE
    my-nginx-svc   LoadBalancer   172.21.5.82   39.106.XX.XX     80/TCP         5m
  4. Execute o comando curl <YOUR-External-IP> para acessar o aplicativo. Substitua o placeholder <YOUR-External-IP> pelo EXTERNAL-IP obtido na etapa anterior.

    curl 39.106.XX.XX

    Saída esperada:

    <!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>