O cert-manager é um sistema de gerenciamento do ciclo de vida de certificados que automatiza solicitações e implantações. Utilize o cert-manager para emitir certificados destinados a um gateway do ASM. Essa abordagem permite proteger com HTTPS os services acessados pelo gateway, garantindo a criptografia dos dados em trânsito. Este tópico descreve como usar o cert-manager para gerenciar certificados de gateways.
Informações básicas
O cert-manager emite certificados autoassinados e certificados validados por DNS, possibilitando o acesso a services via HTTPS através de um gateway do ASM. As diferenças entre esses dois tipos de certificado são:
Certificados autoassinados oferecem criptografia, mas não verificam identidade. Embora permitam acessar o gateway do ASM via HTTPS usando ferramentas de linha de comando, navegadores web não confiam neles e exibem avisos de segurança que impedem o acesso direto.
Certificados validados por DNS são emitidos por uma autoridade certificadora (CA) confiável, fornecendo tanto criptografia quanto verificação de identidade. Por oferecerem maior segurança e serem reconhecidos pelos navegadores, permitem acessar o gateway do ASM via HTTPS tanto por ferramentas de linha de comando quanto por navegadores web.
Caso encontre erros ao utilizar o cert-manager em um cluster de plano de dados do ASM, participe do grupo do DingTalk (ID: 30421250) para obter suporte.
Pré-requisitos
Instale o cert-manager
Instale o Helm na sua máquina local. Para mais informações, consulte Helm.
Conecte-se ao seu cluster usando kubectl. Para mais informações, consulte Obtain the kubeconfig file of a cluster and use kubectl to connect to the cluster.
-
Execute o comando abaixo para criar o namespace do cert-manager:
kubectl create namespace cert-manager -
Execute o comando a seguir para adicionar o repositório de charts do cert-manager:
helm repo add jetstack https://charts.jetstack.io -
Atualize o repositório de charts do cert-manager executando este comando:
helm repo update -
Instale o cert-manager com o seguinte comando:
NotaA versão do cert-manager deve ser compatível com a sua versão do Kubernetes. Consulte Supported Releases para verificar a compatibilidade entre versões.
helm install \ cert-manager jetstack/cert-manager \ --namespace cert-manager \ --version v1.14 \ --set installCRDs=true
Emitir um certificado autoassinado
Etapa 1: Gerar um certificado autoassinado
-
Crie um arquivo chamado issuer.yaml com o conteúdo a seguir.
-
Para criar uma CA autoassinada capaz de emitir certificados de carga de trabalho, execute:
kubectl apply -f issuer.yaml -n istio-system -
Verifique se o Secret do certificado foi criado executando o comando abaixo:
kubectl get secret -n istio-systemSaída esperada:
NAME TYPE DATA AGE istio-ingressgateway-certs kubernetes.io/tls 3 68m
Etapa 2: Verifique o acesso via HTTPS
Implante a aplicação httpbin. Para mais detalhes, consulte Deploy the httpbin application.
-
Modifique o Gateway da aplicação httpbin.
Essa modificação pode ser feita via linha de comando utilizando o arquivo kubeconfig da sua instância do ASM, ou diretamente no console do ASM alterando o YAML na página Gateway. Consulte Manage Gateway rules para mais informações.
O exemplo de YAML a seguir adiciona um listener HTTPS na porta 443, utilizando o certificado gerado pelo cert-manager.
apiVersion: networking.istio.io/v1beta1 kind: Gateway metadata: name: httpbin namespace: default spec: selector: istio: ingressgateway servers: - hosts: - '*' port: name: test number: 80 protocol: HTTP - hosts: - '*' port: name: https number: 443 protocol: HTTPS tls: credentialName: istio-ingressgateway-certs mode: SIMPLE -
Obtenha o endereço IP do gateway de entrada com este comando:
kubectl get svc -n istio-system -l istio=ingressgateway -
Acesse a aplicação httpbin via HTTPS executando:
curl -k --resolve istio-ingressgateway-certs:443:${ASM_GATEWAY_IP} https://istio-ingressgateway-certs/status/418 -IUma solicitação bem-sucedida retorna o código de status 418. O domínio usado para acessar o gateway é
istio-ingressgateway-certs, correspondente aocommonNamedefinido no recurso Certificate.