Quando o gateway de entrada do Service Mesh (ASM) recebe tráfego externo via HTTPS, o handshake TLS adiciona sobrecarga de processamento ao pod do gateway. Para ativar o HTTPS e o carregamento dinâmico de certificados, vincule um certificado TLS à instância do Classic Load Balancer (CLB) do gateway de entrada. Essa configuração encerra o TLS no nível do balanceador de carga. A instância CLB descriptografa as requisições HTTPS recebidas e encaminha HTTP em texto simples para o pod do gateway, transferindo o processamento TLS e centralizando o gerenciamento de certificados.
Como funciona
A terminação TLS no nível da CLB separa a criptografia do roteamento da aplicação:
Client ──HTTPS (port 443)──> CLB instance ──HTTP (port 80)──> Ingress gateway pod
(TLS termination)
A instância CLB gerencia toda a descriptografia TLS. O pod do gateway de entrada recebe apenas tráfego HTTP em texto simples na porta 80. Essa arquitetura oferece dois benefícios:
Redução da carga do gateway: Os handshakes TLS e a descriptografia ocorrem na instância CLB, e não no pod do gateway.
Gerenciamento centralizado de certificados: Gerencie os certificados por meio do Certificate Management Service em vez de configurá-los individualmente em cada gateway.
Pré-requisitos
Etapa 1: Preparar um certificado TLS
Para vincular um certificado à instância CLB, você precisa de um arquivo de certificado e de uma chave privada. Escolha uma das opções abaixo conforme a disponibilidade de um certificado existente.
Opção A: Usar um certificado existente
Caso já possua um certificado e uma chave privada para seu domínio (por exemplo, aliyun.com), nomeie os arquivos da seguinte forma:
Chave privada:
aliyun.com.keyCertificado:
aliyun.com.crt
Pule para Carregar o certificado no Certificate Management Service.
Opção B: Gerar um certificado autoassinado
Se você não tiver um certificado, utilize o OpenSSL para gerar um certificado raiz autoassinado 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
Esse comando gera dois arquivos:
|
Arquivo |
Descrição |
|
|
Chave privada RSA de 2048 bits |
|
|
Certificado X.509 autoassinado válido por 365 dias |
Carregar o certificado no Certificate Management Service
Faça login no console do Server Load Balancer CLB.
No painel de navegação à esquerda, escolha Server Load Balancer CLB > Certificate Management.
Na página Certificate Management, clique em Create Certificate.
No painel Create Certificate, selecione Alibaba Cloud Issued Certificate e clique em Create SSL Certificate na parte inferior da lista de certificados.
Você será redirecionado para a página do Digital Certificate Management Service. No painel de navegação à esquerda, escolha Certificate Management > SSL Certificate Management.
Na aba Upload Certificate, clique em Upload Certificate.
-
Defina o Certificate Name como
aliyun.come carregue o certificado raiz e a chave privada nos campos Certificate File e Certificate Private Key. Clique em OK.Ignore o aviso sobre a cadeia de certificados para certificados autoassinados.
Após concluir o upload, anote o ID do certificado. Esse ID será necessário na Etapa 2.
Para mais informações sobre o upload de certificados, consulte Selecionar Alibaba Cloud Issued Certificate.
Etapa 2: Criar um listener HTTPS
Configure o YAML do gateway de entrada para criar um listener HTTPS na porta 443. A instância CLB descriptografa o tráfego HTTPS e o encaminha como HTTP para a porta 80 do pod do gateway de entrada.
Para obter mais detalhes, consulte Usar KubeAPI para gerenciar gateways de entrada.
-
Adicione a seguinte configuração ao arquivo
ingressgateway.yaml. Substitua o placeholder pelo valor real. Campos principais de configuração:Placeholder
Descrição
Exemplo
<your-cert-id>ID do certificado obtido na Etapa 1
123456789Campo
Valor
Finalidade
ports[1].port443Expõe HTTPS na porta 443
ports[1].targetPort80Encaminha o tráfego descriptografado para o pod do gateway na porta 80
alibaba-cloud-loadbalancer-cert-idID do certificado
Vincula o certificado TLS à instância CLB
alibaba-cloud-loadbalancer-protocol-porthttps:443Ativa o protocolo HTTPS na porta 443
spec: ... ports: - name: http-0 port: 80 protocol: HTTP targetPort: 80 - name: https-1 port: 443 protocol: HTTPS targetPort: 80 ... serviceAnnotations: service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "<your-cert-id>" service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: 'https:443' ... serviceType: LoadBalancer -
Implante o gateway de entrada:
kubectl apply -f ingressgateway.yaml
Etapa 3: Verificar o acesso HTTPS
Após implantar o gateway de entrada, verifique se o listener HTTPS funciona corretamente.
Faça login no console do ASM.
No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.
Na página Mesh Management, clique no nome da instância ASM desejada.
No painel de navegação à esquerda, escolha ASM Gateways > Ingress Gateway.
Na página Ingress Gateway, localize o Endpoint do gateway alvo.
-
Defina o endereço IP do gateway como variável de ambiente. Substitua
<endpoint-ip-address>pelo valor do Endpoint obtido na etapa anterior.export INGRESS_IP=<endpoint-ip-address> -
Envie uma requisição HTTPS de teste. Saída esperada: O código de status
HTTP/2 200confirma que o listener HTTPS está operacional. A instância CLB descriptografa o tráfego criptografado e o encaminha como HTTP em texto simples para o cluster.curl -k -H "Host:a.aliyun.com" \ --resolve "a.aliyun.com:443:${INGRESS_IP}" \ https://a.aliyun.com/productpage -IHTTP/2 200 date: Fri, 13 Jan 2023 07:11:45 GMT content-type: text/html; charset=utf-8 content-length: 5294 vary: Accept-Encoding x-envoy-upstream-service-time: 23