Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Usar um gateway ASM para expor serviços no cluster

Última atualização: Sep 12, 2026

O ASM permite usar recursos Ingress em clusters gerenciados e definir um gateway ASM como controlador de ingress. Este tópico descreve como configurar um recurso Ingress no ACK e usar um gateway ASM como controlador de ingress para expor serviços internos do cluster.

Pré-requisitos

Limitações

  • Ao usar um gateway ASM como controlador de ingress, o campo defaultBackend não tem suporte no Ingress. Para mais informações, consulte Ingress.

  • O plano de dados oferece suporte apenas à API Ingress v1.

Visão geral

O Ingress é um objeto padrão da API do Kubernetes que gerencia o acesso externo aos serviços em um cluster. Configure regras de roteamento em um recurso Ingress para expor serviços HTTP ou HTTPS ao tráfego externo.

O ASM possibilita o uso de recursos Ingress em clusters gerenciados e a especificação de um gateway ASM como Ingress Controller. Esse gateway oferece diversos recursos avançados, como dimensionamento automático, aceleração de hardware tls e desligamento graceful. Ao usá-lo como Ingress Controller, você aproveita as várias capacidades de observabilidade e segurança fornecidas pela Service Mesh. Além disso, o gateway ASM oferece suporte ao carregamento dinâmico de certificados. As chaves privadas, os certificados de servidor e os certificados raiz necessários para tls (Transport Layer Security) podem ser configurados dinamicamente sem reiniciar o gateway.

Etapa 1: Ativar o acesso à API Ingress

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

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

  3. No gateway desejado, clique em Enable Ingress API access na seção Advanced features:. Na caixa de diálogo Confirm, clique em OK.

Etapa 2: Criar um recurso Ingress e especificar o controlador de ingress

Como não é possível especificar portas de listener em um recurso Ingress, o tráfego usa por padrão a porta 80 para HTTP e a porta 443 para HTTPS. Portanto, exponha essas portas no seu gateway ASM.

Especificar o controlador de ingress usando uma annotation

  1. Crie um arquivo chamado ingress.yaml com o seguinte conteúdo.

    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. Conecte-se ao cluster ACK com kubectl e execute o seguinte comando:

    kubectl apply -f ingress.yaml

Especificar o controlador de ingress usando uma IngressClass

  1. Use o conteúdo abaixo para criar o arquivo 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. Conecte-se ao cluster ACK com kubectl e execute o seguinte comando:

    kubectl apply -f ingress.yaml

Etapa 3: Verificar o acesso HTTP

Execute o comando a seguir para acessar o service httpbin.

curl -H 'host: httpbin.aliyun.com'  http://${ASM_GATEWAY_IP}/status/418

Saída esperada:

    -=[ teapot ]=-

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

Essa saída confirma que o recurso Ingress expôs a aplicação httpbin por meio do gateway ASM.

Etapa 4: Configurar tls e verificar o acesso HTTPS

O ASM permite definir configurações tls em um recurso Ingress. Como o gateway ASM executa no namespace istio-system, qualquer Secret referenciado no recurso Ingress também deve existir no namespace istio-system.

O carregamento dinâmico de certificados do gateway ASM possibilita configurar tls montando Secrets sem reiniciar os pods do gateway. Monte múltiplos Secrets para carregar certificados diferentes. Esse processo não exige reinicialização dos pods do gateway.

O procedimento a seguir mostra como carregar um único certificado como exemplo. Caso precise oferecer suporte a vários certificados, crie um Secret adicional para cada um deles. Os certificados são carregados automaticamente quando referenciados no recurso Ingress, seguindo os padrões nas etapas 2 e 3 abaixo.

  1. Prepare o certificado do servidor e a chave privada.

    Um nome de domínio precisa ter registro ICP para ser acessível a partir da China continental. Este exemplo usa aliyun.com para gerar um certificado e uma chave privada, salvando-os como um Secret.

    • Cenário 1: Você não possui certificado e chave privada para aliyun.com

      Use o openssl para gerar o certificado e a chave:

      1. Execute o comando abaixo para criar 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. Execute os comandos a seguir para gerar 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. No seu ambiente KubeConfig, execute o comando abaixo para criar um Secret no namespace istio-system:

        kubectl create -n istio-system secret tls myexample-credential --key=aliyun.com.key --cert=aliyun.com.crt
    • Cenário 2: Você já possui um certificado válido e chave privada para aliyun.com

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

      2. No seu ambiente KubeConfig, execute o comando abaixo para criar um Secret no namespace istio-system:

        kubectl create -n istio-system secret tls myexample-credential --key=aliyun.com.key --cert=aliyun.com.crt
  2. Crie um recurso Ingress e especifique o Secret tls como myexample-credential, criado na Etapa 1.

    1. Use o conteúdo a seguir para criar o arquivo ingress-https.yaml.

      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
      Nota

      Se você criar um recurso Ingress no console do ACK, só poderá selecionar um Secret de certificado que esteja no mesmo namespace do recurso Ingress. Por exemplo, ao criar um recurso Ingress no namespace default, apenas Secrets do namespace default estarão disponíveis para seleção. Sendo assim, copie o Secret myexample-credential criado na Etapa 1 para o namespace default para garantir que ele possa ser selecionado no console do ACK.

    2. Conecte-se ao cluster ACK usando kubectl e execute o comando a seguir para aplicar o recurso Ingress.

      kubectl apply -f ingress-https.yaml
  3. Execute o comando abaixo para acessar o service httpbin via HTTPS.

    curl  -H Host:httpbin.aliyun.com --resolve httpbin.aliyun.com:443:${ASM_GATEWAY_IP} https://httpbin.aliyun.com:443/status/418 -k

    Saída esperada:

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

    Essa saída confirma que o recurso Ingress expôs a aplicação httpbin via HTTPS por meio do gateway ASM.