Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Expor serviços com ALB Ingress

Última atualização: Sep 09, 2026

Por padrão, os serviços em um cluster ACK ficam isolados da rede externa. Um ALB Ingress expõe esses serviços utilizando um Application Load Balancer (ALB) como ponto de entrada para o tráfego externo. O ALB oferece roteamento baseado em domínio, segurança e alta disponibilidade.

Como funciona

  1. Associação de recursos

    Um objeto AlbConfig define as configurações específicas de uma instância ALB, como sua edição de recurso e listeners. Cada objeto AlbConfig possui um mapeamento um para um com uma instância ALB. Os mapeamentos de caminho e os serviços associados definidos em um Ingress são traduzidos automaticamente em regras de roteamento e server groups para a instância ALB.

  2. Sincronização dinâmica

    O ALB Ingress Controller monitora continuamente o API server em busca de alterações nos recursos de Ingress e AlbConfig e atualiza dinamicamente a instância ALB associada.

  3. Encaminhamento de tráfego

    Diferentemente do Nginx Ingress Controller, o ALB Ingress Controller é um componente gerenciado que atua como plano de controle da instância ALB. Ele não lida diretamente com o tráfego do plano de dados. A instância ALB processa o tráfego do usuário e o encaminha para os pods de backend do serviço.

image

Limitações de tipo de serviço

Ao utilizar o plugin de rede Flannel, os serviços de backend para um ALB Ingress limitam-se aos tipos NodePort e LoadBalancer.

Instale o ALB Ingress Controller

Na criação do cluster

  1. Faça login no ACK console e clique em Create Kubernetes Cluster.

  2. Na etapa Component Configuration, vá até a seção Ingress e selecione ALB Ingress.

  3. Este exemplo utiliza a opção New. Siga as instruções na tela para criar o cluster.

    ALB Instance

    Descrição

    New

    Cria automaticamente uma instância ALB, um AlbConfig e um IngressClass.

    • Instância ALB: Cria automaticamente uma instância ALB standard, com pagamento conforme o uso, pública ou privada na VPC do cluster e configura um listener HTTP:80.

    • AlbConfig e IngressClass: Cria automaticamente os recursos correspondentes de AlbConfig e IngressClass no cluster e os associa à instância ALB.

    Select Existing VPC

    Esta opção está disponível apenas quando o cluster está configurado para usar uma Virtual Private Cloud (VPC) existente.

    Utiliza uma instância ALB existente e cria automaticamente um AlbConfig e um IngressClass. A instância ALB especificada deve ser da edição Standard ou aprimorada com WAF, estar na mesma VPC do cluster e não estar associada a outro cluster.

    None

    Instala apenas o componente ALB Ingress Controller. Você deve criar manualmente um AlbConfig e um IngressClass posteriormente. Esta opção é adequada para cenários em que você precisa personalizar a configuração da instância ALB.

Para um cluster existente

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

  2. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Components and Add-ons .

  3. Use a caixa de pesquisa ou clique na aba Networking para localizar o componente. No cartão do componente ALB Ingress Controller, clique em Install no canto inferior direito.

  4. Este exemplo utiliza a opção New. Clique em OK.

    ALB Instance

    Descrição

    New

    Cria automaticamente uma instância ALB, um AlbConfig e um IngressClass.

    • Instância ALB: Cria automaticamente uma instância ALB standard, com pagamento conforme o uso, pública ou privada na VPC do cluster e configura um listener HTTP:80.

    • AlbConfig e IngressClass: Cria automaticamente os recursos correspondentes de AlbConfig e IngressClass no cluster e os associa à instância ALB.

    Existing

    Utiliza uma instância ALB existente e cria automaticamente um AlbConfig e um IngressClass. A instância ALB especificada deve ser da edição Standard ou aprimorada com WAF, estar na mesma VPC do cluster e não estar associada a outro cluster.

    None

    Instala apenas o componente ALB Ingress Controller. Você deve criar manualmente um AlbConfig e um IngressClass posteriormente. Esta opção é adequada para cenários em que você precisa personalizar a configuração da instância ALB.

Criar uma aplicação de exemplo

A aplicação de exemplo implanta um Deployment chamado coffee e um serviço correspondente chamado coffee-svc.

Console

  1. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Workloads > Deployments.

  2. Clique em Create from YAML. Selecione Custom na lista suspensa Sample Template. Em seguida, copie o conteúdo abaixo para o editor de modelo e clique em Create.

    YAML da aplicação de exemplo

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: ClusterIP  # When you use the flannel network plugin, the backend Service of an ALB Ingress supports only the NodePort and LoadBalancer types.
  3. Na caixa de diálogo de confirmação, clique em View e verifique se o status do Pod é Running.

kubectl

  1. Conectar-se a um cluster usando kubectl.

  2. Crie um arquivo chamado coffee-deployment-service.yaml com o seguinte conteúdo.

    YAML da aplicação de exemplo

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: ClusterIP  # When you use the flannel network plugin, the backend Service of an ALB Ingress supports only the NodePort and LoadBalancer types.
  3. Crie o Deployment e o serviço para a aplicação de exemplo.

    kubectl apply -f coffee-deployment-service.yaml
  4. Verifique se o status do Pod é Running.

     kubectl get pod -l app=coffee

    Saída esperada:

    NAME                      READY   STATUS    RESTARTS   AGE
    coffee-84bd6*****-*****   1/1     Running   0          4m22s
    coffee-84bd6*****-*****   1/1     Running   0          4m22s

Criar um ALB Ingress

Configure o nome de domínio e os mapeamentos de caminho para o ALB Ingress rotear solicitações de ingress-demo.com/coffee para o serviço coffee-svc dentro do cluster.

Para usar um ALB Ingress em um cluster dedicado ACK , você deve conceder permissões de acesso ao ALB Ingress Controller .

Console

  1. No painel de navegação à esquerda, escolha Network > Ingresses. Selecione o namespace default e clique em Create Ingress.

  2. Especifique os seguintes parâmetros de Ingress e clique em OK.

    • Name: coffee-ingress

    • Domain Name: ingress-demo.com

    • Mappings: Path: /coffee, Match Rule: Prefix, Service: coffee-svc, Port: 80.

      Regra de correspondência (pathType)

      Descrição

      Prefix

      Corresponde ao caminho da solicitação com base em seu prefixo. Por exemplo, solicitações para /coffee/1 ou /coffee/buy/1 são correspondidas, mas solicitações para /cof ou /coffeebuy/1 não são.

      Exact

      Corresponde exatamente ao caminho da solicitação. Apenas solicitações para /coffee são correspondidas.

      ImplementationSpecific

      O comportamento de correspondência depende da implementação do controller de Ingress. Para o ALB Ingress Controller, este tipo equivale a uma correspondência Exact.

  3. Obtenha o endereço do Endpoint.

    Um ALB Ingress leva cerca de 10 segundos para entrar em vigor. Clique no botão de atualização para obter as informações do endpoint. Se o endpoint não for atualizado após um longo período, clique no nome do Ingress e acesse a aba Events para solucionar problemas .

    Na coluna Endpoint da lista de Ingress, localize o endereço do endpoint ALB, que segue um formato semelhante a alb-<instance_id>.cn-wulanchabu.alb.aliyuncsslb.com.

  4. Teste o acesso ao domínio e ao endpoint. Um código de status HTTP 200 indica que o ALB Ingress está funcionando corretamente.

    curl -H "Host:ingress-demo.com" http://<endpoint_address>/coffee -s -o /dev/null -w "%{http_code}\n"

kubectl

  1. Crie um arquivo chamado coffee-ingress.yaml com o seguinte conteúdo. Em seguida, execute o comando kubectl apply -f coffee-ingress.yaml para criar o ALB Ingress.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: coffee-ingress
      namespace: default
    spec:
      ingressClassName: alb
      rules:
      - host: ingress-demo.com
        http:
          paths:
          - path: /coffee
            backend:
              service: 
                name: coffee-svc
                port:
                  number: 80
            pathType: Prefix

    Regra de correspondência (pathType)

    Descrição

    Prefix

    Corresponde ao caminho da solicitação com base em seu prefixo. Por exemplo, solicitações para /coffee/1 ou /coffee/buy/1 são correspondidas, mas solicitações para /cof ou /coffeebuy/1 não são.

    Exact

    Corresponde exatamente ao caminho da solicitação. Apenas solicitações para /coffee são correspondidas.

    ImplementationSpecific

    O comportamento de correspondência depende da implementação do controller de Ingress. Para o ALB Ingress Controller, este tipo equivale a uma correspondência Exact.

  2. Visualize o Ingress e obtenha o endereço do endpoint no campo ADDRESS.

    kubectl get ingress coffee-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'

    Saída esperada:

    alb-******************.cn-wulanchabu.alb.aliyuncsslb.com
  3. Teste o acesso ao domínio e ao endpoint. Um código de status HTTP 200 indica que o ALB Ingress está funcionando corretamente.

    curl -H "Host:ingress-demo.com" http://<endpoint_address>/coffee -s -o /dev/null -w "%{http_code}\n"

Faturamento

  • ALB Ingress Controller: É um componente gerenciado do ACK e gratuito.

  • Instância ALB: Cada objeto de recurso AlbConfig cria uma instância ALB correspondente. As instâncias ALB utilizam faturamento pagamento conforme o uso.

Implantação em produção

  • Configurar DNS: Crie um registro CNAME para mapear o domínio do seu serviço ao endpoint público da instância ALB. Isso desacopla o domínio do endpoint da instância, garantindo um ponto de entrada de serviço altamente disponível e flexível.

  • Ativar HTTPS: Utilize o Certificate Management Service para gerenciar centralmente seus certificados e referenciá-los declarativamente no campo tls de um recurso de Ingress, protegendo o tráfego do serviço com HTTPS.

Cotas e limites

  • Os nomes de recursos AlbConfig, Ingress, Service e namespace não podem começar com aliyun.

  • Para informações sobre os limites de cota do ALB Ingress, consulte Cálculo de cotas do ALB.

  • Para verificar as regiões e zonas de disponibilidade suportadas pelo ALB Ingress, consulte Regiões e zonas suportadas pelo ALB.

FAQ

Por que um Ingress retorna códigos de erro HTTP?

Causas

  • Erro 503 (Service Temporarily Unavailable)

    • Nenhuma regra de roteamento correspondente: O caminho da solicitação não corresponde a nenhuma regra de roteamento configurada no Ingress.

    • Nenhum pod de backend saudável: O serviço associado não possui pods prontos, resultando em um objeto de endpoints vazio.

  • Erro 502 (Bad Gateway)

    Após um listener HTTP ou HTTPS receber uma solicitação de conexão do cliente, o ALB envia um código de status HTTP 502 Bad Gateway ao cliente porque falha ao encaminhar a solicitação para um Pod ou ao receber uma resposta dele.

  • Erro 404 (Not Found)

    Geralmente ocorre quando uma solicitação corresponde a uma regra de roteamento do Ingress, mas sua URL não corresponde ao caminho do serviço da aplicação no pod de backend.

  • Erro 400 (Bad Request)

    Pode ocorrer por vários motivos, como enviar uma solicitação HTTP para um listener HTTPS.

Para mais informações sobre códigos de erro HTTP, consulte Códigos de status do ALB .

Solução

  1. Verifique o status do Ingress: Execute o comando kubectl describe ingress <ingress-name> -n <namespace> e inspecione a seção Events em busca de mensagens de erro. Se aparecer um evento como listener is not exist in alb, adicione a configuração de listener necessária ao seu AlbConfig.

    ...
    Events:
      Type     Reason                  Age     From     Message
      ----     ------                  ----    ----     -------
      Warning  FailedBuildModel        ****    ingress  listener is not exist in alb, port: 443, protocol: HTTPS
      Warning  FailedBuildModel        ****    ingress  listener not found for (443/HTTPS), with ingresses 1
    ...
  2. Verifique os endpoints de backend: Execute o comando kubectl get endpoints <service-name> -n <namespace> para confirmar que o campo ENDPOINTS lista pelo menos um endereço IP e porta de pod saudável. Se estiver vazio, verifique se o selector do serviço corresponde às labels dos pods e se os pods estão no estado Running.

  3. Verifique o status e os logs do pod: Execute kubectl get pod -l <app=your-app> -n <namespace> para visualizar o status do pod. Em seguida, use o nome do pod para executar kubectl logs <pod-name> -n <namespace> e verifique nos logs da aplicação se há falhas de inicialização ou erros de processamento de solicitações.

  4. Teste a conectividade de rede: De dentro de um pod ou de um nó, use curl para acessar o ClusterIP do serviço de backend ou um IP de pod, verificando se o serviço está acessível dentro do cluster.

Por que o HTTPS fica inacessível após a configuração de TLS?

Causas

  • A instância ALB não está escutando na porta 443: Você configurou TLS para o Ingress, mas o listener HTTPS:443 correspondente não foi criado.

  • Configuração de certificado incorreta: O tipo do Secret não é kubernetes.io/tls ou IngressTLS, ou o conteúdo de tls.crt e tls.key no campo data está incorreto ou não corresponde.

  • Certificado obsoleto: A instância ALB pode estar usando um certificado antigo. Isso acontece se você atualizar um certificado no Alibaba Cloud Certificate Management Service, mas não atualizar o ID do certificado no seu AlbConfig, ou se a descoberta automática e a reconciliação falharem ao disparar.

Solução

  1. Verifique a porta do listener: Execute o comando kubectl describe albconfig <alb-name> -n <namespace> para confirmar que as configurações spec.listeners.port: 443 e spec.listeners.protocol: HTTPS estão presentes.

  2. Verifique a configuração do Ingress: Confirme se a configuração do Ingress inclui a annotation alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]. Essa annotation associa o Ingress aos listeners HTTP e HTTPS.

  3. Verifique a configuração do Secret: Na configuração do Ingress, verifique o campo secretName de spec.tls para confirmar que o Secret correto está referenciado. Execute o comando kubectl get secret <secret-name> -n <namespace> -o yaml para confirmar o tipo do Secret e a integridade dos dados.

Como configurar a resolução de domínio do Ingress?

  1. Registrar um nome de domínio.

  2. Adicionar um registro CNAME.

    Por exemplo, adicione um registro DNS com o tipo de registro CNAME , o registro de host @ (que representa o domínio raiz, como ingress-demo.com ), e o valor do registro como o endereço do endpoint do Ingress .
  3. Em um navegador, acesse http://ingress-demo.com/coffee para verificar se a resolução do nome de domínio está funcionando.

    Após o acesso bem-sucedido, uma página de teste do NGINX é retornada, exibindo informações como Server address, Server name, Date e URI (com o valor /coffee) do pod de backend. Isso indica que o Ingress roteou corretamente a solicitação para o pod de backend.

    Para verificação, substitua o exemplo pelo seu nome de domínio registrado. Se a resolução do nome de domínio falhar, consulte Solução rápida para falhas na resolução de nomes de domínio .

Como configuro HTTPS para um Ingress?

  1. Comprar um certificado oficial, e solicitar um certificado. Certifique-se de que o certificado que deseja usar esteja no estado Issued.

  2. Baixar o certificado SSL.

    Este exemplo mostra como baixar o arquivo de certificado formatado em PEM para o domínio ingress-demo.com , com o tipo de servidor definido como Other .
  3. Crie um Secret para armazenar o arquivo de certificado.

    1. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Configurations > Secrets.

    2. Na página Secrets, selecione o namespace default e clique em Create à esquerda. Adicione as seguintes configurações e clique em OK.

      • Name: ingress-tls

      • Type: TLS Certificate

      • Certificates: O conteúdo completo do arquivo de certificado baixado e descompactado (.pem).

      • Key: O conteúdo completo do arquivo de chave privada baixado e descompactado (.key).

  4. Atualize o AlbConfig para adicionar um listener HTTPS:443 à instância ALB.

    1. No painel de navegação à esquerda, escolha Workloads > Custom Resources. Na aba Resource Objects, pesquise por AlbConfig e clique no resultado da pesquisa.

    2. Na lista de objetos de recurso AlbConfig, localize o recurso alvo alb e clique em Edit YAML na coluna Actions.

    3. Adicione os campos spec.listeners.port: 443 e spec.listeners.protocol: HTTPS e clique em OK.

      spec:
          config:
            addressAllocatedMode: Fixed
            addressType: Internet
            zoneMappings:
              - vSwitchId: vsw-xxx
              - vSwitchId: vsw-xxx
          listeners:
            - port: 80
              protocol: HTTP
            - port: 443
              protocol: HTTPS
  5. Atualize o Ingress para adicionar uma configuração TLS e associá-la ao listener HTTPS:443.

    1. No painel de navegação à esquerda, escolha Network > Ingresses. Na coluna Actions do Ingress alvo, clique em Update.

    2. Adicione as seguintes configurações e clique em OK.

      • TLS Settings: Enabled

      • Domain Name: ingress-demo.com

      • Secrets: ingress-tls

      • Annotations: alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]

  6. Em um navegador, acesse https://ingress-demo.com/coffee para verificar o acesso HTTPS.

    A página exibe o logotipo do NGINX e informações de resposta do servidor. O Server address, Server name e URI (com o valor /coffee) são retornados conforme esperado. Isso confirma que o HTTPS está configurado corretamente e que o Ingress roteia solicitações para o pod de backend coffee.

    Para verificação, substitua o exemplo pelo seu nome de domínio registrado.

Para mais informações sobre como configurar certificados HTTPS, consulte Configurar certificados HTTPS para comunicação criptografada.

Como criar manualmente AlbConfig e IngressClass?

Criar um AlbConfig

  1. Faça login no VPC console e anote os IDs de pelo menos dois vSwitches que estejam em zonas de disponibilidade diferentes dentro da VPC onde o cluster está implantado.

    As zonas de disponibilidade dos vSwitches configurados devem ser suportadas pelo ALB. Para mais informações, consulte Regiões e zonas do ALB .
  2. Substitua zoneMappings.vSwitchId no código abaixo pelos IDs de vSwitch obtidos na etapa anterior. Salve o conteúdo em um arquivo chamado albconfig.yaml e execute kubectl apply -f albconfig.yaml para criar o AlbConfig.

    Para etapas mais detalhadas, consulte Criar um AlbConfig .
    apiVersion: alibabacloud.com/v1
    kind: AlbConfig
    metadata:
      name: alb # Do not create another AlbConfig resource with the same name.
    spec:
      config:
        name: alb-test
        addressType: Internet
        zoneMappings:
        - vSwitchId: vsw-****cg2a9g71hx8go**** # Replace with your actual vSwitch ID.
        - vSwitchId: vsw-****un9tql5t8nh15**** # Replace with your actual vSwitch ID.
      listeners:
        - port: 80
          protocol: HTTP

Criar um IngressClass

O recurso IngressClass associa um AlbConfig aos recursos de Ingress. Quando você especifica ingressClassName: alb em um Ingress, ele usa o AlbConfig definido na IngressClass alb.

Salve o seguinte conteúdo em um arquivo chamado IngressClass.yaml e execute kubectl apply -f IngressClass.yaml para criar o IngressClass.

O campo spec.parameters.name deve ser definido com o nome do AlbConfig. O AlbConfig padrão criado ao instalar o componente chama-se alb . Para mais informações, consulte Usar IngressClass para associar um AlbConfig a um Ingress .
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: alb
spec:
  controller: ingress.k8s.alibabacloud/alb
  parameters:
    apiGroup: alibabacloud.com
    kind: AlbConfig
    name: alb # This must match the name of the AlbConfig resource.

Documentação relacionada

Uso avançado do ALB Ingress

Personalizar regras de encaminhamento do ALB Ingress

Realizar uma implantação canary com ALB Ingress