Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Coletar métricas de aplicações em malha via mTLS

Última atualização: Jun 28, 2026

Ao ativar o TLS mútuo (mTLS) no Service Mesh (ASM), o proxy sidecar intercepta todo o tráfego de entrada das suas aplicações. Consequentemente, o acesso à porta que expõe as métricas da aplicação também deve ocorrer via mTLS. Para serviços críticos, proteger a coleta de métricas é tão importante quanto criptografar a comunicação entre serviços. Este tópico utiliza uma instância do Service Mesh (ASM) implantada com o Prometheus Operator para demonstrar como coletar métricas de aplicações em uma malha de serviços via mTLS.

Importante

Se você utilizar o Application Real-Time Monitoring Service (ARMS) da Alibaba Cloud para coletar métricas, a versão do agente deve ser 1.1.20 ou posterior. Faça login no console do ARMS. No painel de navegação à esquerda, clique em Integration Management. Localize seu cluster na lista e, na coluna Actions, clique em Configure Agent para visualizar a versão do agente Prometheus e atualizá-la, se necessário.

Pré-requisitos

A aplicação de exemplo Bookinfo está implantada. Para mais informações, consulte Implantar uma aplicação no cluster associado à sua instância do ASM.

Configurar o Prometheus para coletar métricas via TLS

Para superar a autenticação TLS imposta pelo proxy sidecar, o Prometheus precisa usar um certificado emitido pelo certificado raiz da instância do ASM. Utilize a capacidade de montagem de certificados do proxy sidecar para isso. Ao definir anotações específicas para o pod do Prometheus, configure o proxy sidecar para montar o certificado emitido pelo plano de controle do ASM em um volume compartilhado. Em seguida, o contêiner do Prometheus acessa o certificado e a chave ao montar esse volume compartilhado. As etapas a seguir descrevem esse processo:

  1. Adicione o volume istio-certs ao pod do Prometheus.

    volumes:
    - emptyDir:
        medium: Memory
      name: istio-certs
  2. Adicione as duas annotation s a seguir ao pod do Prometheus.

    annotations:
      proxy.istio.io/config: |
        proxyMetadata:
          OUTPUT_CERTS: /etc/istio-output-certs
      sidecar.istio.io/userVolumeMount: '[{"name": "istio-certs", "mountPath": "/etc/istio-output-certs"}]'
    • proxy.istio.io/config: Especifica a configuração do proxy, onde proxyMetadata.OUTPUT_CERTS armazena os certificados e chaves no caminho /etc/istio-output-certs.

    • sidecar.istio.io/userVolumeMount: Monta um volume no caminho /etc/istio-output-certs dentro do contêiner do proxy sidecar.

  3. Monte o volume istio-certs no caminho /etc/prom-certs/ do contêiner do Prometheus para permitir que ele obtenha os certificados e chaves gravados pelo proxy sidecar nesse local.

    volumeMounts:
    - mountPath: /etc/prom-certs/
      name: istio-certs
  4. Na configuração de coleta, especifique quais workloads usam TLS para iniciar solicitações de coleta de métricas e forneça o caminho do certificado. Apenas workloads com proxy sidecar injetado exigem essa configuração.

    Este tópico usa um ambiente com Prometheus Operator como exemplo.

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: productpage
      labels:
        app: productpage
        team: bookinfo
    spec:
      selector:
        matchLabels:
          app: productpage
      endpoints:
      - port: http-9080
        interval: 30s
        path: /metrics
        scheme: https
        tlsConfig:
          caFile: /etc/prom-certs/root-cert.pem
          certFile: /etc/prom-certs/cert-chain.pem
          keyFile: /etc/prom-certs/key.pem
          insecureSkipVerify: true

    No yaml anterior, o campo labels define a coleta de métricas para a aplicação productpage e especifica seu endpoint de coleta. Na definição do endpoint, as configurações relacionadas ao TLS são:

    • scheme: https: Indica que a requisição é enviada via HTTPS.

    • tlsConfig: Define os caminhos dos arquivos para o certificado, certificado da CA e chave.

    • insecureSkipVerify: true: Permite acesso com autenticação insegura, pois o Prometheus não suporta o esquema de nomenclatura de identidade do Istio.

Essa configuração permite que o Prometheus monte o certificado e a chave fornecidos pelo proxy sidecar e os utilize para iniciar requisições TLS.

Procedimento

Etapa 1: Instalar o Prometheus Operator

  1. Clone o repositório de código-fonte do Prometheus Operator do GitHub para sua máquina local executando o comando abaixo.

    git clone https://github.com/prometheus-operator/prometheus-operator.git
  2. Instale o Prometheus Operator executando o seguinte comando.

    cd prometheus-operator/
    kubectl create -f bundle.yaml
  3. Verifique o status dos pods executando este comando.

    kubectl get pods

    Saída esperada:

    NAME                                     READY   STATUS        RESTARTS   
    prometheus-operator-58dd988c9c-qhrrp     2/2     Running       0      

    Essa saída indica que o Prometheus Operator foi instalado com sucesso.

Etapa 2: Implantar o Prometheus usando um CR

  1. Salve o yaml a seguir em um arquivo local chamado prometheus.yaml.

    O yaml inclui a declaração da instância do Prometheus, além do ServiceAccount, ClusterRole e ClusterRoleBinding necessários. A configuração do Deployment contém as definições de montagem de volume de certificado descritas em Configurar o Prometheus para coletar métricas via TLS.

    Nota

    Os recursos personalizados (CRs) relacionados ao Prometheus fornecidos neste tópico servem apenas para fins de demonstração. Ajuste-os conforme seu ambiente de produção.

    Prometheus.yaml

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: prometheus-full-access
      namespace: default
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: prometheus-full-access
    rules:
    - apiGroups: [""]
      resources:
      - nodes
      - nodes/metrics
      - services
      - endpoints
      - pods
      verbs: ["get", "list", "watch"]
    - apiGroups:
      - extensions
      - apps
      resources:
      - deployments
      - replicasets
      verbs: ["get", "list", "watch"]
    - apiGroups: [""]
      resources:
      - configmaps
      verbs: ["get"]
    - nonResourceURLs: ["/metrics"]
      verbs: ["get"]
    ---
    apiVersion: monitoring.coreos.com/v1
    kind: Prometheus
    metadata:
      name: default
      labels:
        prometheus: default
    spec:
      logLevel: debug
      podMetadata:
        annotations:
          traffic.sidecar.istio.io/includeInboundPorts: ""
          traffic.sidecar.istio.io/includeOutboundIPRanges: ""
          proxy.istio.io/config: |  # configure an env variable `OUTPUT_CERTS` to write certificates to the given folder
            proxyMetadata:
              OUTPUT_CERTS: /etc/istio-output-certs
          sidecar.istio.io/userVolumeMount: '[{"name": "istio-certs", "mountPath": "/etc/istio-output-certs"}]'
      volumes:
      - emptyDir:
          medium: Memory
        name: istio-certs
      volumeMounts:
      - mountPath: /etc/prom-certs/
        name: istio-certs
      replicas: 2
      version: v2.26.0
      serviceAccountName: prometheus-full-access
      serviceMonitorSelector:
        matchLabels:
          team: bookinfo
      ruleSelector:
        matchLabels:
          role: alert-rules
          prometheus: example
  2. Aplique o arquivo prometheus.yaml no cluster executando o comando abaixo.

    kubectl apply -f prometheus.yaml
  3. Verifique se a instância do Prometheus iniciou corretamente executando o seguinte comando.

    kubectl get pods

    Saída esperada:

    NAME                                   READY   STATUS    RESTARTS
    prometheus-default-0                   3/3     Running   0 
    prometheus-default-1                   3/3     Running   0  
    prometheus-operator-58dd988c9c-qhrrp   2/2     Running   0  

    A saída mostra que os pods prometheus-default-0 e prometheus-default-1 estão em execução.

Etapa 3: Definir regras de coleta usando ServiceMonitor

  1. Salve o yaml a seguir em um arquivo local chamado service-monitor.yaml.

    Esse arquivo yaml contém a declaração da API ServiceMonitor, que descreve como coletar métricas do workload. O arquivo exibe o caminho do certificado e a configuração de scheme mencionados em Configurar uma instância do Prometheus para coletar métricas TLS.

    Nota

    Os CRs relacionados ao Prometheus fornecidos neste tópico servem apenas para fins de demonstração. Ajuste-os conforme seu ambiente de produção.

    iVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: productpage
      labels:
        app: productpage
        team: bookinfo
    spec:
      selector:
        matchLabels:
          app: productpage
      endpoints:
      - port: http-9080
        interval: 30s
        path: /metrics
        scheme: https
        tlsConfig:
          caFile: /etc/prom-certs/root-cert.pem
          certFile: /etc/prom-certs/cert-chain.pem
          keyFile: /etc/prom-certs/key.pem
          insecureSkipVerify: true
  2. Aplique o arquivo service-monitor.yaml no cluster executando o comando a seguir.

    kubectl apply -f service-monitor.yaml

Etapa 4: Acessar a UI do Prometheus e verificar métricas

  1. Configure o encaminhamento de porta da sua porta local 9090 para a porta 9090 do serviço prometheus-operated executando o comando abaixo.

    kubectl port-forward svc/prometheus-operated 9090
  2. Insira localhost:9090 no navegador para abrir a interface web do Prometheus.

    A interface de consulta do Prometheus será aberta. Insira uma expressão de consulta na caixa de entrada Expression, clique em Execute para executar a consulta e visualize os resultados na aba Table ou Graph.

  3. Na barra de menu superior, selecione Status > Target para visualizar o status do alvo de monitoramento.

    Nota

    Se um alvo for coletado via TLS, ele pode inicialmente apresentar o status "Unavailable". Isso ocorre caso o TLS esteja configurado, mas as definições de autenticação estejam incorretas.

    Confirme se o State do alvo está como Up, o que indica que as métricas estão sendo coletadas com sucesso.

  4. Na barra de menu superior, clique em Graph, insira python_gc_objects_collected_total na caixa de texto de consulta e clique em Execute à direita.

    Após a conclusão da consulta, os dados da métrica reportada serão exibidos.

    Os resultados aparecem na visualização Table, agrupados pela tag generation em três registros (gerações 0, 1 e 2). Esses registros correspondem ao número total de objetos coletados por cada uma das três gerações de coleta de lixo (GC) do Python.