Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Use an ASM gateway as an Ingress controller

Última atualização: Jun 28, 2026

Quando as cargas de trabalho em um cluster do Container Service for Kubernetes (ACK) precisam de acesso HTTP ou HTTPS de clientes externos, exponha-as por meio de um recurso de Ingress padrão do Kubernetes com suporte de um gateway do Alibaba Cloud Service Mesh (ASM). Essa abordagem oferece dimensionamento automático, aceleração de Transport Layer Security (TLS), desligamento graceful da instância do Server Load Balancer (SLB), carregamento dinâmico de certificados e recursos integrados de observabilidade e segurança, sem a necessidade de manter um controlador de ingress separado.

Nota

O Ingress gerencia o roteamento padrão de HTTP/HTTPS. Para gerenciamento avançado de tráfego, como divisão de tráfego, injeção de falhas ou políticas de autorização, utilize os recursos ASM Gateway e VirtualService. Para obter mais informações sobre a API Gateway do Kubernetes, consulte Ingress Gateways.

Pré-requisitos

Antes de começar, verifique se você possui:

Limitações

Limitação

Detalhes

defaultBackend não suportado

O gateway do ASM não oferece suporte ao campo defaultBackend nos recursos de Ingress. Para obter mais informações, consulte Ingress

Versão da API de Ingress

Apenas networking.k8s.io/v1 é suportada. Verifique se o plano de dados suporta a API de Ingress v1 antes de prosseguir

Ativar o Ingress no gateway do ASM

  1. Faça login no console do ASM. No painel de navegação à esquerda, selecione Service Mesh > Mesh Management.

  2. Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, selecione ASM Gateways > Ingress Gateway.

  3. Na seção Advanced features, clique em Enable Ingress API access. Na mensagem Submit, clique em OK.

Criar um recurso de Ingress

O Ingress não suporta portas de escuta personalizadas. Por padrão, a porta 80 gerencia o tráfego HTTP e a porta 443 gerencia o tráfego HTTPS. Certifique-se de que ambas as portas estejam habilitadas no gateway do ASM.

Existem dois métodos para designar o gateway do ASM como controlador de ingress:

Método

Campo / Anotação

Status

Campo IngressClass (recomendado)

ingressClassName: istio

Abordagem padrão do Kubernetes

Anotação (obsoleta)

kubernetes.io/ingress.class: istio

Obsoleto pelo Kubernetes

Usar o campo ingressClassName (recomendado)

O campo ingressClassName referencia um recurso IngressClass que identifica o controlador responsável pelo Ingress.

  1. Crie um arquivo chamado ingress.yaml:

       apiVersion: networking.k8s.io/v1
       kind: Ingress
       metadata:
         name: ingress
       spec:
         ingressClassName: istio
         rules:
         - host: httpbin.aliyun.com
           http:
             paths:
             - path: /
               pathType: Prefix
               backend:
                 service:
                   name: httpbin
                   port:
                     number: 8000
  2. Aplique o Ingress:

       kubectl apply -f ingress.yaml

Usar a anotação (obsoleta)

Nota

A anotação kubernetes.io/ingress.class foi tornada obsoleta pelo Kubernetes. Utilize o campo ingressClassName para garantir compatibilidade futura.

  1. Crie um arquivo chamado ingress.yaml:

       apiVersion: networking.k8s.io/v1
       kind: Ingress
       metadata:
         annotations:
           kubernetes.io/ingress.class: istio
         name: ingress
       spec:
         rules:
         - host: httpbin.aliyun.com
           http:
             paths:
             - path: /status
               pathType: Prefix
               backend:
                 service:
                   name: httpbin
                   port:
                     number: 8000
  2. Aplique o Ingress:

       kubectl apply -f ingress.yaml

Verificar o acesso HTTP

  1. Obtenha o endereço IP externo do gateway do ASM:

       export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway \
         -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
  2. Envie uma solicitação para o serviço httpbin:

       curl -H 'Host: httpbin.aliyun.com' "http://${INGRESS_HOST}/status/418"

    Saída esperada:

           -=[ teapot ]=-
    
              _...._
            .'  _ _ `.
           | ."` ^ `". _,
           \_;`"---"`|//
             |       ;/
             \_     _/

    Essa saída confirma que o Ingress roteia com sucesso o tráfego para a aplicação httpbin por meio do gateway do ASM.

Configurar TLS para acesso HTTPS

O gateway do ASM suporta carregamento dinâmico de certificados. É possível atualizar chaves privadas, certificados de servidor e certificados raiz sem reiniciar o pod do gateway. Vários Secrets podem ser montados para servir diferentes certificados.

Como o gateway do ASM executa no namespace istio-system, os Secrets de TLS referenciados no Ingress também devem residir em istio-system.

Preparar um certificado de servidor e chave privada

Um nome de domínio deve possuir um registro ICP (Internet Content Provider) antes de se tornar acessível. O exemplo a seguir gera um certificado autoassinado para aliyun.com.

Escolha um dos cenários abaixo:

Cenário 1: Gerar um novo certificado

  1. Crie um certificado raiz e uma chave privada:

       openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 \
         -subj '/O=myexample Inc./CN=aliyun.com' \
         -keyout aliyun.root.key -out aliyun.root.crt
  2. Gere um certificado de servidor e uma chave privada para aliyun.com:

       openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes \
         -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization"
       openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key \
         -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt
  3. Crie um Secret de TLS no namespace istio-system:

       kubectl create -n istio-system secret tls myexample-credential \
         --key=aliyun.com.key --cert=aliyun.com.crt

Cenário 2: Usar um certificado existente

  1. Nomeie o arquivo de certificado como aliyun.com.crt e o arquivo de chave privada como aliyun.com.key.

  2. Crie um Secret de TLS no namespace istio-system:

       kubectl create -n istio-system secret tls myexample-credential \
         --key=aliyun.com.key --cert=aliyun.com.crt

Criar um Ingress com TLS

  1. Crie um arquivo chamado ingress-https.yaml:

    Nota

    Ao criar um Ingress no console do ACK, você só pode selecionar Secrets do namespace onde o Ingress reside. Se o Ingress estiver no namespace default, copie o Secret myexample-credential para default para que ele apareça no console:

    kubectl get secret myexample-credential -n istio-system -o yaml \
      | sed 's/namespace: istio-system/namespace: default/' \
      | kubectl apply -f -
       apiVersion: networking.k8s.io/v1
       kind: Ingress
       metadata:
         name: ingress
         annotations:
           kubernetes.io/ingress.class: istio
       spec:
         rules:
           - host: httpbin.aliyun.com
             http:
               paths:
                 - backend:
                     service:
                       name: httpbin
                       port:
                         number: 8000
                   path: /status
                   pathType: Prefix
         tls:
           - hosts:
               - httpbin.aliyun.com
             secretName: myexample-credential
  2. Aplique o Ingress:

       kubectl apply -f ingress-https.yaml

Verificar o acesso HTTPS

Envie uma solicitação para o serviço httpbin via HTTPS:

curl -H 'Host: httpbin.aliyun.com' \
  --resolve "httpbin.aliyun.com:443:${INGRESS_HOST}" \
  "https://httpbin.aliyun.com:443/status/418" -k

Saída esperada:

    -=[ teapot ]=-

       _...._
     .'  _ _ `.
    | ."` ^ `". _,
    \_;`"---"`|//
      |       ;/
      \_     _/

Essa saída confirma que o Ingress roteia com sucesso o tráfego para a aplicação httpbin via HTTPS por meio do gateway do ASM.

Carregar certificados adicionais

Para atender a vários domínios com certificados diferentes, repita as etapas de preparação do certificado e criação do Secret para cada domínio e adicione entradas ao array tls no seu recurso de Ingress. O gateway do ASM carrega novos certificados dinamicamente sem reiniciar o pod.