Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Ativar TLS pass-through em um ingress gateway

Última atualização: Sep 12, 2026

Todos os dados entre um ingress gateway e um sidecar proxy são transmitidos por um túnel Mutual Transport Layer Security (mTLS). Se houver sidecar proxies injetados na aplicação, recomenda-se configurar o término de TLS no ingress gateway para garantir criptografia de ponta a ponta. Caso não existam sidecar proxies injetados ou ocorram outras circunstâncias especiais, o ingress gateway oferece suporte a TLS pass-through. Este tópico descreve como ativar o TLS pass-through em um ingress gateway para assegurar acesso seguro a serviços HTTPS em um cluster.

Pré-requisitos

Etapa 1: Preparar um certificado de servidor e uma chave privada

Caso já possua um certificado de servidor e uma chave privada disponíveis para o nome de domínio sample.aliyun.com, renomeie a chave privada para sample.aliyun.com.key e o certificado do servidor para sample.aliyun.com.crt. Alternativamente, execute os comandos do openssl abaixo para criar um certificado de servidor e uma chave privada para sample.aliyun.com.

  1. Execute o comando a seguir para criar um certificado raiz e uma chave privada:

    openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=mynginx Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt 
  2. Execute os comandos abaixo para gerar um certificado de servidor e uma chave privada para o servidor de sample.aliyun.com:

    openssl req -out sample.aliyun.com.csr -newkey rsa:2048 -nodes -keyout sample.aliyun.com.key -subj "/CN=sample.aliyun.com/O=mynginx sample organization"
    openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in sample.aliyun.com.csr -out sample.aliyun.com.crt

Etapa 2: Definir um service interno

O service interno neste exemplo é um servidor NGINX. Primeiramente, crie um arquivo de configuração para esse servidor. Para o domínio aliyun.com, configure o caminho raiz para retornar a mensagem Welcome to aliyun.com without TLS Termination! com código de status 200. O conteúdo do arquivo mynginx.conf está apresentado a seguir.

events {
}
http {
  log_format main '$remote_addr - $remote_user [$time_local]  $status '
  '"$request" $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';
  access_log /var/log/nginx/access.log main;
  error_log  /var/log/nginx/error.log;
  server {
    listen 443 ssl;
    location / {
        return 200 'Welcome to aliyun.com without TLS Termination!';
        add_header Content-Type text/plain;
    }
    server_name www.aliyun.com;
    ssl_certificate /etc/nginx-server-certs/tls.crt;
    ssl_certificate_key /etc/nginx-server-certs/tls.key;
  }
}
  1. Conecte-se ao cluster ao qual o pod do ingress gateway pertence usando kubectl, com base nas informações do arquivo kubeconfig. Em seguida, execute o comando abaixo para criar um ConfigMap que armazene a configuração do servidor NGINX:

    kubectl create configmap mynginx-configmap --from-file=nginx.conf=./mynginx.conf​
  2. Conecte-se ao cluster do pod do ingress gateway usando kubectl, conforme as informações do arquivo kubeconfig. Depois, execute o seguinte comando para criar um secret contendo o certificado do servidor e a chave privada no namespace padrão:

    kubectl create secret tls nginx-server-certs --key sample.aliyun.com.key --cert sample.aliyun.com.crt​
  3. Ative a injeção automática de sidecar proxy no namespace padrão. Para mais informações sobre o procedimento, consulte Ative automatic sidecar proxy injection.

  4. Crie um arquivo mynginxapp.yaml com o conteúdo a seguir. Em seguida, execute o comando kubectl apply -f mynginxapp.yaml para criar um service interno associado ao nome de domínio aliyun.com.

    Expandir para visualizar o arquivo mynginxapp.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: mynginxapp
      labels:
        app: mynginxapp
    spec:
      ports:
      - port: 443
        protocol: TCP
      selector:
        app: mynginxapp
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mynginxapp
    spec:
      selector:
        matchLabels:
          app: mynginxapp
      replicas: 1
      template:
        metadata:
          labels:
            app: mynginxapp
        spec:
          containers:
          - name: nginx
            image: nginx:1.15
            ports:
            - containerPort: 443
            volumeMounts:
            - name: nginx-config
              mountPath: /etc/nginx
              readOnly: true
            - name: nginx-server-certs
              mountPath: /etc/nginx-server-certs
              readOnly: true  
          volumes:
          - name: nginx-config
            configMap:
              name: mynginx-configmap
          - name: nginx-server-certs
            secret:
              secretName: nginx-server-certs    
  5. Execute o comando abaixo para enviar uma solicitação do sidecar proxy ao servidor NGINX e verificar se a implantação foi concluída com sucesso:

    kubectl exec -it $(kubectl get pod  -l app=mynginxapp -o jsonpath={.items..metadata.name}) -c istio-proxy -- curl -v -k --resolve sample.aliyun.com:443:127.0.0.1 https://sample.aliyun.com

Etapa 3: Criar um gateway

  1. Faça login no console do ASM.

  2. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  3. Na página Mesh Management, localize a instância do ASM desejada. Clique em no nome da instância ou em Manage na coluna Actions.

  4. Na página de detalhes da instância do ASM, escolha ASM Gateways > Gateway no painel de navegação à esquerda. Na página exibida, clique em Create from YAML.

  5. Configure o Gateway conforme descrito abaixo e clique em Create.

    1. Selecione um namespace. Este exemplo utiliza o namespace default.

    2. No editor de código, defina um gateway Istio utilizando o seguinte código YAML:

      apiVersion: networking.istio.io/v1alpha3
      kind: Gateway
      metadata:
        name: istio-mynginx-customingressgateway
      spec:
        selector:
          istio: ingressgateway
        servers:
        - hosts:
          - 'sample.aliyun.com'
          port:
            name: https
            number: 443
            protocol: HTTPS
          tls:
            mode: PASSTHROUGH

    Na página Gateway, visualize o gateway Istio criado.

Etapa 4: Criar um virtual service

  1. Faça login no console do ASM.

  2. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  3. Na página Mesh Management, localize a instância do ASM que deseja configurar. Clique em no nome da instância ou em Manage na coluna Actions.

  4. Na página de detalhes da instância do ASM, escolha Traffic Management Center > VirtualService no painel de navegação à esquerda. Na página aberta, clique em Create from YAML.

  5. Configure o VirtualService conforme indicado e clique em Create.

    1. Selecione um namespace. Este exemplo utiliza o namespace default.

    2. No editor de código, defina um virtual service com o código YAML a seguir:

      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: istio-mynginx-customvirtualservice
      spec:
        hosts:
        - "sample.aliyun.com"
        gateways:
        - istio-mynginx-customingressgateway
        tls:
        - match:
          - port: 443
            sniHosts:
            - sample.aliyun.com
          route:
          - destination:
              host: mynginxapp.default.svc.cluster.local
              port:
                number: 443

    Na página VirtualService, visualize o virtual service criado.

Visualize os resultados

  1. Obtenha o endereço IP do ingress gateway por meio de um dos métodos abaixo:

    1. Método 1: pelo console do ASM. Para mais detalhes, consulte a Subetapa 1 da Etapa 3 no tópico Use Istio resources to route traffic to different versions of a service.

    2. Método 2: executando um comando kubectl.

      Conecte-se ao cluster onde reside o pod do ingress gateway usando kubectl, seguindo as informações do arquivo kubeconfig. Em seguida, execute o comando abaixo para obter o endereço IP do ingress gateway:

      kubectl get svc -n istio-system -l istio=ingressgateway
  2. Execute o comando a seguir para acessar o nome de domínio aliyun.com via HTTPS:

    curl -v --cacert aliyun.root.crt --resolve sample.aliyun.com:443:xx.xx.xx.xx   https://sample.aliyun.com

    Saída esperada:

    Welcome to aliyun.com without TLS Termination!%