Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Exponha serviços com o ALB Ingress

Última atualização: Oct 10, 2026

Por padrão, os serviços em um cluster ACK ficam isolados da rede externa. O 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 a edição do recurso e os listeners. Cada objeto AlbConfig tem um mapeamento um para um com uma instância ALB. Os mapeamentos de caminho e os Services associados definidos em um Ingress são traduzidos automaticamente em regras de roteamento e grupos de servidores 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 Ingress e AlbConfig e atualiza dinamicamente a instância ALB associada.

  3. Encaminhamento de tráfego

    Ao contrário 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 Service.

image

Limitações de tipo de serviço

Ao usar o plug-in de rede Flannel, os Services de backend para um ALB Ingress limitam-se aos tipos NodePort e LoadBalancer.

Instale o ALB Ingress Controller

Na criação do cluster

  1. Acesse o ACK console e clique em Create Kubernetes Cluster.

  2. Na etapa Component Configuration, acesse a seção Ingress e selecione ALB Ingress.

  3. Este exemplo usa 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 pública ou privada, da edição Standard e com pagamento conforme o uso na VPC do cluster, e configura um listener HTTP:80.

    • AlbConfig e IngressClass: Cria automaticamente os recursos AlbConfig e IngressClass correspondentes 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.

    Usa 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 WAF-enhanced, 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. Indicado para cenários em que você precisa personalizar a configuração da instância ALB.

Para um cluster existente

  1. Acesse o 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 encontrar o componente. No cartão do componente ALB Ingress Controller, clique em Install no canto inferior direito.

  4. Este exemplo usa 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 pública ou privada, da edição Standard e com pagamento conforme o uso na VPC do cluster, e configura um listener HTTP:80.

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

    Existing

    Usa 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 WAF-enhanced, 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. Indicado para cenários em que você precisa personalizar a configuração da instância ALB.

Crie um aplicativo de exemplo

O aplicativo de exemplo implanta um Deployment chamado coffee e um Service 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 seguinte conteúdo para o editor de modelo e clique em Create.

    YAML do aplicativo 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. Conecte-se a um cluster usando o kubectl.

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

    YAML do aplicativo 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 Service para o aplicativo 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

Crie um ALB Ingress

Configure o nome de domínio e os mapeamentos de caminho para o ALB Ingress rotear as requisições de ingress-demo.com/coffee para o Service 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 do 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 requisição com base em seu prefixo. Por exemplo, requisições para /coffee/1 ou /coffee/buy/1 são correspondidas, mas requisições para /cof ou /coffeebuy/1 não são.

      Exact

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

      ImplementationSpecific

      O comportamento de correspondência depende da implementação do Ingress controller. 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. Você pode clicar 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, encontre o endereço do endpoint ALB, que possui 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 requisição com base em seu prefixo. Por exemplo, requisições para /coffee/1 ou /coffee/buy/1 são correspondidas, mas requisições para /cof ou /coffeebuy/1 não são.

    Exact

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

    ImplementationSpecific

    O comportamento de correspondência depende da implementação do Ingress controller. 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: Este é 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 usam o faturamento de pagamento conforme o uso.

Implantação em produção

  • Configure 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 do serviço altamente disponível e flexível.

  • Ative HTTPS: Use o Certificate Management Service para gerenciar centralmente seus certificados e referencie-os declarativamente no campo tls de um recurso Ingress para proteger o tráfego do Service com HTTPS.

Cotas e limites

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

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

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

Perguntas frequentes

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

Causas

  • Erro 503 (Service Temporarily Unavailable)

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

    • Nenhum pod de backend íntegro: O Service associado não possui pods prontos, o que resulta em um objeto de endpoints vazio.

  • Erro 502 (Bad Gateway)

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

  • Erro 404 (Not Found)

    Geralmente ocorre quando uma requisição corresponde a uma regra de roteamento do Ingress, mas sua URL não corresponde ao caminho do Service do aplicativo no pod de backend.

  • Erro 400 (Bad Request)

    Pode ocorrer por vários motivos, como enviar uma requisiçã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 íntegro. Se estiver vazio, verifique se o selector do Service corresponde aos 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 os logs do aplicativo em busca de falhas de inicialização ou erros de processamento de requisição.

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

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

Causas

  • A instância ALB não está escutando na porta 443: Você configurou o 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 desatualizado: 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 e a reconciliação automáticas não forem acionadas.

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}]. Esta 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. Registre um nome de domínio.

  2. Adicione 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 requisiçã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 de problemas para falhas na resolução de nomes de domínio .

Como configuro o HTTPS para um Ingress?

  1. Compre um certificado oficial, e solicite um certificado. Certifique-se de que o certificado que você deseja usar esteja no estado Issued.

  2. Baixe o certificado SSL.

    Este exemplo mostra como baixar o arquivo de certificado no formato 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: Ingress 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, encontre o recurso de destino 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 de destino, 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 as informações de resposta do servidor. O Server address, Server name e URI (com o valor /coffee) são retornados conforme o esperado. Isso confirma que o HTTPS está configurado corretamente e que o Ingress roteia as requisições para o pod de backend do coffee.

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

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

Como criar manualmente o AlbConfig e o IngressClass?

Crie um AlbConfig

  1. Acesse o 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 a seguir pelos IDs dos vSwitches 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

Crie um IngressClass

O recurso IngressClass associa um AlbConfig aos recursos Ingress. Quando você especifica ingressClassName: alb em um Ingress, ele usa o AlbConfig definido no 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 o 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 versão canário com o ALB Ingress