Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Ative o HTTPS em um gateway do ASM

Última atualização: Jul 04, 2026

Ative o HTTPS em um gateway do ASM para fornecer acesso criptografado a clientes externos. Os gateways do ASM suportam carregamento dinâmico de certificados, o que permite configurar chaves privadas, certificados de servidor e certificados raiz em tempo real. Essa abordagem evita reinicializar o gateway ou depender de montagens de volume de Secret, reduzindo a complexidade operacional e eliminando o risco de interrupções de serviço. Além disso, os gateways do ASM monitoram e gerenciam vários pares de certificados e chaves privadas, oferecendo comunicação flexível e segura para diferentes hosts e aumentando a segurança na transmissão de dados.

Pré-requisitos

Informações de fundo

O Istio suporta carregamento dinâmico de certificados. A chave privada, o certificado de servidor e o certificado raiz necessários para o Transport Layer Security (TLS) podem ser configurados dinamicamente sem reiniciar o gateway. Um gateway do ASM monitora Secrets em seu namespace e os carrega dinamicamente por meio do recurso personalizado (CR) Gateway. O uso de HTTPS em um gateway do ASM oferece os seguintes benefícios:

  • O gateway de entrada adiciona, exclui ou atualiza dinamicamente os certificados, chaves privadas ou certificados raiz correspondentes sem necessidade de reinicialização.

  • Não é necessário montar volumes de Secret. Após criar um Secret do Kubernetes, o gateway do ASM o detecta e envia o certificado, a chave privada ou o certificado raiz para o gateway de entrada.

  • Um gateway do ASM monitora múltiplos pares de certificados e chaves privadas. Basta criar Secrets para vários hosts e atualizar a configuração do Gateway.

Etapa 1: Prepare certificados e chaves privadas

Ao usar um nome de domínio, talvez seja necessário um registro ICP (Internet Content Provider) para garantir o acesso público. Este tópico usa aliyun.com como exemplo para gerar um certificado e uma chave privada e salvá-los posteriormente como um Secret.

Se você já tiver um certificado e uma chave privada para aliyun.com, renomeie a chave para aliyun.com.key e o certificado para aliyun.com.crt. Caso contrário, 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. Crie um Secret ou certificado conforme a versão da sua instância do ASM.

    • Para instâncias do ASM anteriores à v1.17

      Com o kubeconfig do cluster do gateway de entrada, execute o comando abaixo para criar um Secret contendo o certificado e a chave privada no namespace istio-system.

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

      O nome do Secret não deve começar com istio ou prometheus e não pode conter o campo token.

    • Para instâncias do ASM v1.17 e posteriores

      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 no nome da instância do ASM desejada. No painel de navegação à esquerda, escolha ASM Gateways > Certificate Management.

      3. Na página Certificate Management, clique em Create. No painel Certificate Information, defina os parâmetros abaixo e clique em OK.

        Parâmetro

        Descrição

        Name

        Insira um nome para o certificado. Neste exemplo, utiliza-se myexample-credential.

        Public Key Certificate

        Conteúdo do arquivo aliyun.com.crt gerado na subetapa 2.

        Private Key

        Conteúdo do arquivo aliyun.com.key gerado na subetapa 2.

Etapa 2: Defina o serviço de backend para a.aliyun.com

O serviço de backend neste exemplo usa NGINX. Para o serviço de backend a.aliyun.com, as requisições ao caminho /hello retornam a string Welcome to a.aliyun.com! com código de status 200. Abaixo está o conteúdo do arquivo myexample-nginx.conf.

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 80;
    location /hello {
        return 200 'Welcome to a.aliyun.com!';
        add_header Content-Type text/plain;
    }
  }
}
  1. Com o kubeconfig do cluster do gateway de entrada, execute o comando abaixo para criar um ConfigMap do Kubernetes para a configuração do servidor NGINX.

    kubectl create configmap myexample-nginx-configmap --from-file=nginx.conf=./myexample-nginx.conf
  2. Ative a injeção automática de proxy sidecar para o namespace padrão. Para mais informações, consulte Ativar injeção automática de proxy sidecar.

  3. Crie um arquivo chamado myexampleapp.yaml com o conteúdo a seguir. Em seguida, execute o comando kubectl apply -f myexampleapp.yaml para criar o serviço de backend do domínio a.aliyun.com.

    Visualizar YAML

    apiVersion: v1
    kind: Service
    metadata:
      name: myexampleapp
      labels:
        app: myexampleapp
    spec:
      ports:
      - port: 80
        protocol: TCP
      selector:
        app: myexampleapp
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myexampleapp
    spec:
      selector:
        matchLabels:
          app: myexampleapp
      replicas: 1
      template:
        metadata:
          labels:
            app: myexampleapp
        spec:
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
            volumeMounts:
            - name: nginx-config
              mountPath: /etc/nginx
              readOnly: true
          volumes:
          - name: nginx-config
            configMap:
              name: myexample-nginx-configmap

Etapa 3: Defina o serviço de backend para b.aliyun.com

O serviço de backend deste exemplo usa httpbin.

  1. Crie um arquivo chamado httpbin.example.yaml e copie o conteúdo abaixo para ele.

    Visualizar YAML

    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
    spec:
      ports:
      - name: http
        port: 8000
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          containers:
          - image: docker.io/citizenstig/httpbin
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  2. Com o kubeconfig do cluster onde reside o pod do gateway de entrada, execute o comando abaixo para criar o serviço de backend do domínio b.aliyun.com.

    kubectl apply -f httpbin.example.yaml

Etapa 4: Crie um recurso Gateway

  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 no nome da instância do ASM. No painel de navegação à esquerda, escolha ASM Gateways > Gateway. Na página exibida, clique em Create from YAML.

  3. Na página Create, selecione o namespace desejado (neste exemplo, default) e qualquer Scenario Template. Em seguida, insira o YAML abaixo e clique em Create.

    Visualizar YAML

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: mysdsgateway
    spec:
      selector:
        istio: ingressgateway # use istio default ingress gateway
      servers:
      - port:
          number: 443
          name: https
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: myexample-credential # must be the same as secret
        hosts:
        - '*.aliyun.com'
                                    

    Após criar o recurso, o novo gateway aparece na página Gateway.

Etapa 5: Crie VirtualServices

  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 no nome da instância do ASM. No painel de navegação à esquerda, escolha Traffic Management Center > VirtualService. Na página exibida, clique em Create from YAML.

  3. Na página Create, selecione os Namespaces desejados e qualquer Scenario Template. Em seguida, insira o YAML abaixo e clique em Create.

    Visualizar YAML

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: mysdsgateway-myexamplevs
    spec:
      hosts:
      - "a.aliyun.com"
      gateways:
      - mysdsgateway
      http:
      - match:
        - uri:
            exact: /hello
        route:
        - destination:
            host: myexampleapp.default.svc.cluster.local
            port:
              number: 80      

    Repita esta etapa para criar um VirtualService para b.aliyun.com.

    Visualizar YAML

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: mysdsgateway-httpbinvs
    spec:
      hosts:
      - "b.aliyun.com"
      gateways:
      - mysdsgateway
      http:
      - match:
        - uri:
            prefix: /status
        - uri:
            prefix: /delay
        route:
        - destination:
            port:
              number: 8000
            host: httpbin.default.svc.cluster.local        

    Após criar os serviços virtuais, eles aparecem na página VirtualService.

Verifique os resultados

Obtenha o endereço do serviço do gateway de entrada

Acesse o gateway de entrada via linha de comando

  • Execute o comando abaixo para acessar o serviço a.aliyun.com via HTTPS.

    curl -k -H Host:a.aliyun.com --resolve a.aliyun.com:443:{REPLACE_WITH_THE_INGRESS_GATEWAY_IP_ADDRESS}  https://a.aliyun.com/hello

    Saída esperada:

    Welcome to a.aliyun.com!
  • Execute o comando abaixo para acessar o serviço b.aliyun.com via HTTPS.

    curl -k -H Host:b.aliyun.com --resolve b.aliyun.com:443:{REPLACE_WITH_THE_INGRESS_GATEWAY_IP_ADDRESS}  https://b.aliyun.com/status/418  

    Saída esperada:

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

Operações relacionadas

Atualize o certificado do gateway

Para atualizar o certificado montado em um gateway, crie um novo Secret no plano de dados e altere o valor do campo credentialName no recurso Gateway para o nome do novo Secret. O gateway monta automaticamente o novo Secret. Este exemplo demonstra como criar um Secret chamado new-istio-ingressgateway-certs para o servidor example.com.

  1. Crie um certificado cujo emissor seja myexample.

    1. Na ferramenta OpenSSL, 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=example.com' -keyout example.root.key -out example.root.crt
    2. Execute os comandos a seguir para gerar um certificado de servidor e uma chave privada para o servidor example.com.

      openssl req -out example.com.csr -newkey rsa:2048 -nodes -keyout example.com.key -subj "/CN=example.com/O=myexample organization"
      openssl x509 -req -days 365 -CA example.root.crt -CAkey example.root.key -set_serial 0 -in example.com.csr -out example.com.crt
    3. Obtenha o arquivo kubeconfig do cluster e use kubectl para conectar-se ao cluster.

    4. Execute o comando abaixo para criar um Secret chamado new-istio-ingressgateway-certs.

      kubectl create -n istio-system secret tls new-istio-ingressgateway-certs --key example.com.key --cert example.com.crt
  2. Execute o comando abaixo no cluster para excluir o Secret do certificado antigo.

    kubectl delete secret  istio-ingressgateway-certs -n istio-system
  3. Atualize o recurso Gateway.

    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 no nome da instância do ASM. No painel de navegação à esquerda, escolha ASM Gateways > Gateway.

    3. Na página Gateway, localize o recurso Gateway desejado e clique em View YAML na coluna Actions.

    4. Na caixa de diálogo edit, altere o valor de credentialName para o nome do novo Secret de certificado, new-istio-ingressgateway-certs, e clique em OK.

  4. Verifique se o certificado do gateway foi atualizado.

    1. Execute o comando abaixo para visualizar as informações atuais do certificado no cluster.

      kubectl exec istio-ingressgateway-xxxx -n istio-system -- curl localhost:15000/config_dump  > ingressgateway_dump.yaml
    2. Execute o comando abaixo para imprimir e buscar o certificado new-istio-ingressgateway-certs.

      cat ingressgateway_dump.yaml | grep new-istio-ingressgateway-certs -A 3

      Saída esperada:

      "name": "kubernetes://new-istio-ingressgateway-certs",
          "tls_certificate": {
            "certificate_chain": {
              "inline_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t..."
            }
          }

      Copie o conteúdo após o parâmetro inline_bytes para obter o certificado codificado em Base64.

    3. Execute o comando abaixo na sua ferramenta de linha de comando local para decodificar o certificado em Base64.

      echo <Base64-encoded-certificate-content> | base64 --decode
    4. Salve o conteúdo decodificado como um arquivo test.com.crt.

    5. Execute o comando abaixo na ferramenta OpenSSL para visualizar a organização do certificado.

      openssl x509 -in test.com.crt -text -noout

      Saída esperada:

      Certificate:
          Data:
              Version: 1 (0x0)
              Serial Number: 0 (0x0)
              Signature Algorithm: sha256WithRSAEncryption
              Issuer: O = myexample Inc., CN = example.com
              Validity
                  Not Before: Mar 17 03:20:27 2022 GMT
                  Not After : Mar 17 03:20:27 2023 GMT
              Subject: CN = example.com, O = myexample organization

      Note que a organização foi alterada com sucesso para myexample, o que indica que o certificado do gateway foi atualizado corretamente.