Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Ative TLS passthrough em um ingress gateway

Última atualização: Jun 28, 2026

Com o TLS passthrough, o ingress gateway encaminha o tráfego TLS criptografado diretamente para os serviços de backend sem descriptografá-lo. O serviço de backend termina a sessão TLS em vez do gateway, mantendo-a intacta do cliente ao servidor.

Essa abordagem difere da terminação TLS, em que o gateway descriptografa o tráfego antes de encaminhá-lo:

Modo

Terminação TLS em

Caso de uso

Terminação TLS

Ingress gateway

Proxies sidecar injetados; o tráfego entre o gateway e o sidecar trafega por um túnel mTLS

TLS passthrough

Serviço de backend

Proxies sidecar não injetados ou circunstâncias especiais que exigem criptografia de ponta a ponta sem descriptografia intermediária

Nota: Se houver proxies sidecar injetados, todo o tráfego entre o ingress gateway e esses proxies trafegará por um túnel mutual TLS (mTLS). Nesse caso, configure a terminação TLS no ingress gateway.

O TLS passthrough usa Server Name Indication (SNI) para rotear o tráfego. Os clientes devem oferecer suporte à extensão TLS SNI.

Pré-requisitos

Antes de começar, verifique se você atende aos seguintes requisitos:

Etapa 1: Preparar um certificado de servidor e chave privada

Se você já possui um certificado de servidor e uma chave privada para sample.aliyun.com, renomeie-os para sample.aliyun.com.crt e sample.aliyun.com.key e pule para a Etapa 2.

Caso contrário, execute os comandos openssl a seguir para gerar certificados autoassinados para testes.

  1. Crie uma autoridade certificadora raiz (CA):

       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. Gere um certificado de servidor assinado pela CA raiz:

       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

Esses comandos geram os seguintes arquivos:

Arquivo

Finalidade

aliyun.root.crt / aliyun.root.key

Certificado e chave privada da CA raiz

sample.aliyun.com.crt / sample.aliyun.com.key

Certificado de servidor e chave privada para sample.aliyun.com

sample.aliyun.com.csr

Solicitação de assinatura de certificado (arquivo intermediário)

Etapa 2: Implantar um serviço de backend HTTPS

Esta etapa implanta um serviço de backend baseado em NGINX que termina a sessão TLS na porta 443. O ingress gateway repassa o tráfego TLS para esse serviço sem descriptografia.

Crie a configuração do NGINX

Crie um arquivo chamado mynginx.conf com o seguinte conteúdo:

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;
    server_name www.aliyun.com;

    ssl_certificate /etc/nginx-server-certs/tls.crt;
    ssl_certificate_key /etc/nginx-server-certs/tls.key;

    location / {
        return 200 'Welcome to aliyun.com without TLS Termination!';
        add_header Content-Type text/plain;
    }
  }
}

Crie recursos de suporte do Kubernetes

  1. Crie um ConfigMap para armazenar a configuração do NGINX:

       kubectl create configmap mynginx-configmap --from-file=nginx.conf=./mynginx.conf
  2. Crie um Secret para armazenar o certificado de servidor e a chave privada:

       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 proxy sidecar para o namespace default. Para mais informações, consulte Ativar injeção automática de proxy sidecar.

Implantar o serviço NGINX

Crie um arquivo chamado mynginxapp.yaml com o conteúdo abaixo e execute kubectl apply -f mynginxapp.yaml:

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

Verifique o serviço de backend

Execute o comando a seguir para enviar uma solicitação de teste do proxy sidecar ao servidor NGINX:

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

Se o servidor NGINX estiver funcionando corretamente, o corpo da resposta conterá:

Welcome to aliyun.com without TLS Termination!

Etapa 3: Crie um Istio gateway com TLS passthrough

Defina um recurso Gateway que escute na porta 443 e encaminhe o tráfego TLS para o backend sem terminação.

  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 ASM desejada. Clique em no nome da instância ou em Manage na coluna Actions.

  4. No painel de navegação à esquerda, escolha ASM Gateways > Gateway. Na página exibida, clique em Create from YAML.

  5. Selecione o namespace default e cole o YAML a seguir:

       apiVersion: networking.istio.io/v1alpha3
       kind: Gateway
       metadata:
         name: istio-mynginx-customingressgateway
       spec:
         selector:
           istio: ingressgateway  # binds to the default ingress gateway
         servers:
         - hosts:
           - 'sample.aliyun.com'
           port:
             name: https
             number: 443
             protocol: HTTPS
           tls:
             mode: PASSTHROUGH  # forward encrypted traffic without termination
  6. Clique em Create.

O novo Gateway aparece na página Gateway.

Etapa 4: Crie um virtual service para roteamento TLS

Defina um VirtualService que roteie o tráfego TLS correspondente ao host SNI sample.aliyun.com para o serviço de backend.

  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 ASM desejada. Clique em no nome da instância ou em Manage na coluna Actions.

  4. No painel de navegação à esquerda, escolha Traffic Management Center > VirtualService. Na página exibida, clique em Create from YAML.

  5. Selecione o namespace default e cole o YAML a seguir:

       apiVersion: networking.istio.io/v1alpha3
       kind: VirtualService
       metadata:
         name: istio-mynginx-customvirtualservice
       spec:
         hosts:
         - "sample.aliyun.com"
         gateways:
         - istio-mynginx-customingressgateway  # reference the Gateway from Step 3
         tls:
         - match:
           - port: 443
             sniHosts:
             - sample.aliyun.com  # route traffic by SNI hostname
           route:
           - destination:
               host: mynginxapp.default.svc.cluster.local  # backend service FQDN
               port:
                 number: 443
  6. Clique em Create.

O novo VirtualService aparece na página VirtualService.

Verifique o resultado

  1. Obtenha o endereço IP do ingress gateway por um dos métodos a seguir:

  2. Envie uma solicitação HTTPS pelo ingress gateway. Substitua <ingress-gateway-ip> pelo endereço IP obtido na etapa anterior:

       curl -v --cacert aliyun.root.crt \
         --resolve sample.aliyun.com:443:<ingress-gateway-ip> \
         https://sample.aliyun.com

    Saída esperada:

       Welcome to aliyun.com without TLS Termination!

    Isso confirma que o tráfego TLS passa pelo ingress gateway até o backend NGINX, o qual termina a sessão TLS e retorna a resposta.

Limpeza

Para remover os recursos criados neste tutorial, execute os comandos a seguir:

kubectl delete gateway istio-mynginx-customingressgateway
kubectl delete virtualservice istio-mynginx-customvirtualservice
kubectl delete service mynginxapp
kubectl delete deployment mynginxapp
kubectl delete secret nginx-server-certs
kubectl delete configmap mynginx-configmap