Essa medida criptografa os dados transmitidos entre clientes e o gateway, impedindo que partes não autorizadas interceptem ou adulterem informações sensíveis. Ela oferece uma defesa robusta contra ataques man-in-the-middle, essencial para proteger aplicações web modernas e serviços de API.
Pré-requisitos
Seus serviços estão expostos por meio de um gateway MSE Ingress. Para mais informações, consulte Acessar serviços em clusters ACK usando um gateway MSE Ingress e Acessar serviços em clusters ACK Serverless usando um gateway MSE Ingress.
-
É necessário ter um certificado digital confiável. Obtenha-o das seguintes formas:
Adquira um certificado no Alibaba Cloud Certificate Management Service. Para mais informações, consulte Adquirir um certificado comercial.
Utilize um certificado adquirido de outra Autoridade Certificadora (CA).
Gere um certificado autoassinado localmente.
Métodos de configuração
O MSE Ingress oferece suporte a dois métodos para configurar certificados HTTPS: o método Kubernetes Secret e o método do console MSE.
|
Item de comparação |
Método Kubernetes Secret |
Método do console MSE |
|
Cenários |
|
|
|
Prioridade |
Baixa |
Alta |
|
Cross-namespace |
Não suportado. |
Suportado. |
|
Atualizar certificado |
Substitua o conteúdo do Kubernetes Secret. |
Substitua o certificado no console MSE ou implante um certificado de substituição a partir do console do Alibaba Cloud Certificate Management Service. |
Instale o controlador MSE Ingress
Pré-requisitos
O MSE Ingress Controller pode ser instalado em clusters gerenciados ACK, clusters ACK Serverless e clusters ACS.
Para clusters gerenciados ACK ou clusters ACK Serverless, clique em neste link de autorização. Para clusters ACS, clique em neste link de autorização para autorizar o MSE Ingress Controller.
Um pool de nós deve estar criado.
-
Um cluster de contêineres na versão 1.18 ou posterior deve estar criado. Para mais informações, consulte Criar um cluster gerenciado ACK, Criar um cluster ACK Serverless ou Criar um cluster ACS.
NotaSe a versão do seu cluster for anterior à 1.18, atualize o cluster. Para mais informações, consulte Atualizar manualmente um cluster.
Procedimento
Faça login no Console de Gerenciamento do Container Service. No painel de navegação à esquerda, escolha Clusters.
Na página Clusters, clique em no nome do cluster desejado. No painel de navegação à esquerda, clique em Add-ons.
Na página Component Management, insira
msena caixa de pesquisa. No cartão MSE Ingress Controller, clique em Install.-
Na caixa de diálogo Install Component MSE Ingress Controller, configure os parâmetros e clique em Confirm.
NotaEscolha entre Create uma nova instância de gateway nativo da nuvem MSE ou Use an existing uma já existente.
Se uma verificação de pré-requisito falhar durante a instalação, conceda permissões ao MSE Ingress Controller.
-
Após a instalação do componente, um recurso MseIngressConfig chamado
mse-ingress-premium-{clusterid}e uma instância de gateway chamadamse-ingress-premium-{clusterid}são criados por padrão.Acesse Workloads > Custom Resources, selecione a aba Resource Object Browser e pesquise por
mseno API Group. Na linha MseIngressConfig, clique em YAML Edit na coluna Actions para verificar o status doMseIngressConfig. Aguarde de 3 a 5 minutos e certifique-se de que o statusphaseseja Listening. Isso indica que o gateway nativo da nuvem está em execução e ouvindo automaticamente recursos Ingress com a IngressClassmseno cluster. Se ostatusda instância MSE não estiver visível no editor YAML, verifique se existe um pool de nós para o cluster.O status do MseIngressConfig passa pelos seguintes estados: Pending > Running > Listening.
Pending: O gateway nativo da nuvem está sendo criado. Esse processo pode levar até 3 minutos.
Running: O gateway nativo da nuvem foi criado e está em execução.
Listening: O gateway nativo da nuvem está em execução e ouvindo recursos Ingress no cluster.
Failed: O gateway nativo da nuvem está em um estado inválido. Verifique a mensagem no campo Status para obter mais detalhes.
ImportanteNo modo Create, a instalação do MSE Ingress Controller cria um recurso MseIngressConfig por padrão. O ciclo de vida desse recurso está vinculado à instância do gateway nativo da nuvem MSE. Não exclua o recurso MseIngressConfig a menos que seja necessário. A exclusão desse recurso também remove a instância associada do gateway nativo da nuvem MSE.
Se já existir um recurso IngressClass chamado
mseno cluster antes da instalação do MSE Ingress Controller, a instalação não criará automaticamente um recurso MseIngressConfig nem uma instância de gateway nativo da nuvem MSE.
Implantar o serviço de backend
Faça login no Console de Gerenciamento do Container Service. No painel de navegação à esquerda, escolha Clusters.
Na página Clusters, clique em no nome do cluster desejado. No painel de navegação à esquerda, escolha .
-
Na página Stateless, clique em Create from YAML. Use o YAML a seguir para implantar um Deployment chamado httpbin e um Service chamado httpbin.
apiVersion: apps/v1 kind: Deployment metadata: name: httpbin namespace: default spec: replicas: 1 selector: matchLabels: app: httpbin template: metadata: labels: app: httpbin version: v1 spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/mse-ingress/go-httpbin args: - "--version=v1" imagePullPolicy: Always name: httpbin --- apiVersion: v1 kind: Service metadata: name: httpbin namespace: default spec: ports: - port: 8080 protocol: TCP selector: app: httpbin
Configure o certificado HTTPS
Kubernetes Secret
Configure um certificado HTTPS para um domínio referenciando um Kubernetes Secret, seguindo a semântica nativa do Ingress.
-
Prepare um certificado de domínio. Este exemplo utiliza um certificado autoassinado.
NotaPara ambientes de produção, substitua a chave e o certificado de exemplo pelos seus reais.
-
Execute o comando a seguir para gerar um arquivo de certificado chamado
tls.crte um arquivo de chave privada chamadotls.key.openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=foo.bar.com/O=foo.bar.com" -
Crie um Secret para armazenar o certificado TLS.
Faça login no Console de Gerenciamento do Container Service. No painel de navegação à esquerda, escolha Clusters.
Na página Clusters, clique em no nome do seu cluster. No painel de navegação à esquerda, escolha .
Clique em Create. No painel Create, defina o Name como
tls-test, defina o Type como Type, cole o conteúdo detls.crtetls.keynas caixas de texto correspondentes e clique em Create.
-
-
Crie um MSE Ingress e configure o certificado HTTPS para o domínio
foo.bar.com.No painel de navegação à esquerda, escolha Network > Ingresses.
-
Na página Ingresses, clique em Create Ingress. Na caixa de diálogo Create Ingress, configure o Ingress.
Parâmetro
Descrição
Exemplo
Gateway Type
Selecione MSE Ingress. Para comparar os tipos de gateway, consulte Comparação entre Nginx Ingress, ALB Ingress, APIG Ingress e MSE Ingress.
MSE Ingress
Name
Nome personalizado para o Ingress.
test
Ingress Class
Classe de recurso relevante.
mse
Rule
Clique em + Add Rule para adicionar regras de roteamento.
-
Domain: Domínio da rota.
-
Path Mapping: Configure os seguintes parâmetros.
-
Path: Caminho da URL do serviço.
-
Match Rule:
-
Prefix Match (Prefix): Corresponde ao prefixo do caminho da URL da requisição.
-
Exact Match (Exact): Corresponde exatamente ao caminho da URL da requisição.
-
Implementation Specific (ImplementationSpecific): A lógica de correspondência é determinada pela implementação do controlador Ingress.
Para mais informações, consulte Uso avançado do ALB Ingress.
-
-
Service: Kubernetes Service de destino.
-
Port: Porta a ser exposta para o serviço.
-
-
É possível configurar vários caminhos sob o mesmo domínio. Clique em + Add Path para adicionar um novo caminho.
-
Domain: foo.bar.com
-
Path Mapping:
-
Path: /
-
Match Rule: Prefix Match (Prefix)
-
Service: httpbin
-
Port: 8080
-
TLS Configuration
Ative o TLS para proteger o serviço de roteamento.
-
Domain: Domínio do certificado TLS.
-
Secret: Selecione o Secret correspondente.
Nota
Se este campo ficar vazio, o certificado será configurado por descoberta automática.
Para criar um novo Secret, execute as etapas a seguir:
-
Ao lado do campo Secret, clique em Create.
-
Na caixa de diálogo Create Secret, especifique o Name, Cert e Key, e clique em OK.
-
Na lista suspensa Secret, selecione o Secret criado.
-
Clique em + Add TLS Configuration para adicionar várias configurações TLS.
-
Domain: foo.bar.com
-
Secret: tls-test
-
Mantenha as outras configurações com seus valores padrão. Ao terminar, clique em OK no canto inferior esquerdo da página Create Ingress.
-
Teste o tráfego HTTPS executando o comando a seguir. Substitua
x.x.x.xpelo endereço IP do seu gateway, disponível na página Ingresses.NotaComo este exemplo usa um certificado autoassinado e o domínio não está registrado em um provedor DNS, use a flag
--resolvepara resolver manualmente o domínio para o endereço IP do gateway e a flag-kpara ignorar a verificação de validade do certificado.curl -v -k https://foo.bar.com/version --resolve "foo.bar.com:443:x.x.x.x"A saída esperada é mostrada abaixo:
* Connected to foo.bar.com (X.X.X.X) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/cert.pem CApath: none * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Change cipher spec (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: CN=foo.bar.com; O=foo.bar.com * start date: Jan 17 06:47:23 2024 GMT * expire date: Jan 16 06:47:23 2025 GMT * issuer: CN=foo.bar.com; O=foo.bar.com * SSL certificate verify result: self signed certificate (18), continuing anyway. > GET /version HTTP/1.1 > Host: foo.bar.com > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < date: Wed, 17 Jan 2024 07:49:39 GMT < content-length: 53 < content-type: text/plain; charset=utf-8 < req-cost-time: 3 < req-arrive-time: 1705477779046 < resp-start-time: 1705477779049 < x-envoy-upstream-service-time: 2 < server: istio-envoy < version: v1 hostname: httpbin-xxxxxx
Console MSE
Com este método, você configura o certificado diretamente no console MSE, portanto, não é necessário referenciar um Kubernetes Secret no manifesto do Ingress.
Para o mesmo domínio, o método do console MSE tem precedência sobre o método Kubernetes Secret. Se você configurar um certificado para o mesmo domínio tanto no console MSE quanto em um Kubernetes Ingress, o certificado do console MSE será utilizado.
Prepare um certificado de domínio e faça o upload dele no Alibaba Cloud Certificate Management Service. Para mais informações, consulte Fazer upload, sincronizar e compartilhar certificados SSL. Se o seu certificado já estiver hospedado no Alibaba Cloud Certificate Management Service, pule esta etapa.
-
Crie um domínio e configure o certificado.
Faça login no console MSE e selecione uma região na barra de menu superior.
No painel de navegação à esquerda, escolha Cloud-native Gateway > Gateways e clique em no ID da instância de gateway desejada.
No painel de navegação à esquerda, clique em Routes e selecione a aba Domain.
Clique em Add Domain. Adicione um Domain, defina o Protocol como HTTPS e selecione o certificado correspondente.
-
Adicione um serviço.
Na página Route Management da instância MSE, selecione a aba Service e clique em Add Service.
Defina Service Sources como Container Service. Selecione um Namespaces com base no seu ambiente. Na Service List, selecione o serviço
httpbincriado anteriormente e clique em OK.
-
Crie uma rota.
Na página Route Management da instância MSE, selecione a aba Routes e clique em Create Route.
Selecione o Domain adicionado, escolha o Backend Service da etapa anterior e clique em Save and Publish.
-
Teste o tráfego HTTPS. Execute o comando a seguir, substituindo
x.x.x.xpelo endereço IP do seu gateway, disponível na página da instância de gateway.NotaSe você estiver usando um certificado autoassinado e o domínio não estiver registrado em um provedor DNS, use a flag
--resolvepara resolver manualmente o domínio para o endereço IP do gateway e a flag-kpara ignorar a verificação de validade do certificado.Substitua
<Your-DomainName>pelo seu nome de domínio real.curl -v -k https://<Your-DomainName>/version --resolve "<Your-DomainName>:443:x.x.x.x"A saída esperada é mostrada abaixo:
* Connected to ********** (X.X.X.X) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/cert.pem CApath: none * TLSv1.2 (OUT), TLS handshake, Client hello (1): * TLSv1.2 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS change cipher, Change cipher spec (1): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: CN=*********; O=********** * start date: Jan 17 06:47:23 2024 GMT * expire date: Jan 16 06:47:23 2025 GMT * issuer: CN=**********; O=********** * SSL certificate verify result: self signed certificate (18), continuing anyway. > GET /version HTTP/1.1 > Host: ********** > User-Agent: curl/7.64.1 > Accept: */* > < HTTP/1.1 200 OK < date: Wed, 17 Jan 2024 08:16:27 GMT < content-length: 46 < content-type: text/plain; charset=utf-8 < req-cost-time: 5 < req-arrive-time: 1705479387567 < resp-start-time: 1705479387573 < x-envoy-upstream-service-time: 4 < server: istio-envoy < version: v1 hostname: httpbin-xxxxxx