Pesquisa de site

Use certificados Let's Encrypt SSL em entradas/rotas do OpenShift 4.x


No Red Hat OpenShift Container Platform, os certificados são usados para criptografar comunicações com os aplicativos expostos usando rotas/entrada, bem como acesso ao console web. Ao implementar o OpenShift Container Platform, o instalador gerará automaticamente certificados autoassinados que são configurados para uso em cluster sem quaisquer personalizações adicionais. Ao usar certificados autoassinados, você verá frequentemente avisos de segurança sobre certificados desconhecidos na maioria dos navegadores da Web ao acessar o Web Console ou qualquer aplicativo exposto via HTTPS.

Recomenda-se usar certificados adequados, assinados por uma CA conhecida para criptografar os endpoints da API e os aplicativos expostos nas rotas. Let’s Encrypt é uma opção viável para obter certificados seguros gratuitamente, a beleza do código aberto! Estou executando um cluster OpenShift 4.8 em meu ambiente de laboratório. No OpenShift 4.x, o processo de atualização ou alteração dos certificados autoassinados gerados e o tempo de configuração do cluster foram simplificados e são razoavelmente diretos.

Neste artigo, orientamos você no processo de obtenção de certificados SSL Let's Encrypt e seu uso em um cluster OpenShift 4.x. Os principais requisitos para esta configuração são:

  • Um cluster OpenShift/OKD 4.x em execução
  • URL do endpoint da API (exemplo – api.ocp4.example.com)
  • Domínio curinga do controlador de entrada (exemplo – apps.ocp4.example.com)
  • Acesso ao OpenShift Cluster com oc como usuário administrador

Etapa 1: Instale o git na máquina Bastion

Precisamos do git para extrair a fonte do projeto acme.sh do Github.

Instale git e openssl em sua máquina Bastion usando os comandos compartilhados abaixo:

# CentOS / Fedora
sudo yum -y install git openssl openssl-devel socat

# UBuntu / Debian
sudo apt update
sudo apt install git openssl socat

Etapa 1: Baixe o código do projeto acme.sh

Usaremos a ferramenta clienteacme.sh para solicitar certificados Let’s Encrypt em nossa máquina Bastion. O cliente do protocolo ACME é escrito puramente na linguagem Shell (Unix shell), sem dependências de python. Possui suporte para certificados SAN e curinga. Na verdade, solicitaremos certificados Wildcard Let’s Encrypt para nosso domínio Wildcard do Ingress Controller.

Clone o repositório GitHub acme.sh.

cd ~/
git clone https://github.com/acmesh-official/acme.sh.git

Mude seu diretório de trabalho atual para acme.sh:

cd acme.sh

Etapa 3: Configure DNS API/CNAME em seu provedor DNS

Como solicitaremos um certificado Wildcard, é necessário obter suas credenciais da API DNS para geração automatizada de certificados com acme.sh.

Se o seu provedor de DNS oferecer suporte ao acesso à API, poderemos usar essa API para emitir automaticamente os certificados.

Abaixo está uma lista de provedores de DNS suportados com documentação adequada:

  • Provedores de API suportados por Acme.sh

Usando credenciais da API DNS

Verifique todos os provedores de DNS atualmente suportados pelo projeto acme.sh no link abaixo:

  • Documentação da API DNS Acme.sh

Configurações da Cloudflare

Como meu domínio está hospedado na Cloudflare e sua API de domínio oferece dois métodos para emitir certificados automaticamente.

  1. Usando a chave de API global
  2. Usando token de API cloudflare

Vou usar o primeiro método.

Faça login no cloudflare e selecione o domínio usado pelo cluster OpenShift.

Nas seções da API, copie e salve seu ID da zona e ID da conta informações.

Clique no link “Obter seu token de API para gerar o token de autenticação de API. Na próxima tela, use o link “Criar Token”.

Preencha as informações de geração do token de API:

  • Use o modelo “Editar DNS da zona

  • Selecione as opções conforme mostrado na captura de tela. Em Recursos da zona, selecione Domínio OpenShift específico.

Clique no botão “Criar Token ” para gerar o token.

Copie o token gerado para um local seguro. Os comandos curl impressos podem ser usados para testar se o token está funcionando.

Usando o modo DNS Alias

Suponha que seu provedor de DNS não forneça acesso API, você pode usar o modo de geração de alias de DNS:

  • Documentação do modo de alias DNS Acme.sh

Ao trabalhar com o modo DNS Alias e formato de arquivo de zona DNS padrão (como ISC BIND ou NSD), a configuração é semelhante a esta:

_acme-challenge.example.com	IN	CNAME	_acme-challenge.aliasDomainForValidationOnly.com.

Onde :

  • example.com é o domínio principal que não tem acesso à API
  • aliasDomainForValidationOnly é outro domínio que possui uma API DNS compatível

Emissão de certificado ao usar o modo DNS Alias:

acme.sh --issue  \
  -d  example.com --challenge-alias aliasDomainForValidationOnly.com --dns dns_cf

Etapa 4: gerar certificados Let's Encrypt usando acme.sh

Salve as variáveis no arquivo de configurações da API DNS:

# For CLoudflare
$ vim dnsapi/dns_cf.sh
CF_Token="xxxx"
CF_Account_ID="yyyy"
CF_Zone_ID="zzzz"

Se você não quiser salvar as credenciais da API em um arquivo, o comando de exportação pode ser usado para efeito apenas na sessão atual:

export CF_Token="xxxx"
export CF_Account_ID="yyyy"
export CF_Zone_ID="zzzz"

Solicitando certificados Let's Encrypt

Certifique-se de estar conectado ao Red Hat OpenShift Cluster como um usuário com permissões de administrador de cluster

$ oc whoami
system:admin

Obtenha o nome de domínio totalmente qualificado do OpenShift API Endpoint e defina-o como a variável OCP_API_DOMAIN:

export OCP_API_DOMAIN=$(oc whoami --show-server | cut -f 2 -d ':' | cut -f 3 -d '/' | sed 's/-api././')
echo $OCP_API_DOMAIN

Obtenha o domínio curinga configurado pelo OpenShift e salve em uma variável OCP_WILDCARD_DOMAIN:

export OCP_WILDCARD_DOMAIN=$(oc get ingresscontroller default -n openshift-ingress-operator -o jsonpath='{.status.domain}')
echo $OCP_WILDCARD_DOMAIN

Crie um diretório onde os certificados gerados serão salvos:

export CERTDIR=$HOME/openshift_certificates
mkdir -p ${CERTDIR}

Registre uma conta na acme substituindo [email  pelo seu endereço de e-mail.

$ ~/acme.sh/acme.sh --register-account -m [email 
[Fri Aug 20 15:08:18 UTC 2021] No EAB credentials found for ZeroSSL, let's get one
[Fri Aug 20 15:08:19 UTC 2021] Registering account: https://acme.zerossl.com/v2/DV90
[Fri Aug 20 15:08:20 UTC 2021] Registered
[Fri Aug 20 15:08:20 UTC 2021] ACCOUNT_THUMBPRINT='zPovRxBENz8E2uu1MgimKIQo2wsDKo1lxtZsXD6rl9Q'

A próxima etapa é gerar certificados Let's Encrypt SSL:

${HOME}/acme.sh/acme.sh --issue --dns dns_cf -d ${OCP_API_DOMAIN} -d *.${OCP_WILDCARD_DOMAIN} --debug
  • dns_cf é o provedor DNS da Cloudflare. Escolha o correto para sua configuração.

Aqui está a saída da minha geração de comando.

[Fri Aug 20 15:07:28 UTC 2021] Using CA: https://acme.zerossl.com/v2/DV90
[Fri Aug 20 15:07:28 UTC 2021] Create account key ok.
[Fri Aug 20 15:07:28 UTC 2021] No EAB credentials found for ZeroSSL, let's get one
[Fri Aug 20 15:07:28 UTC 2021] acme.sh is using ZeroSSL as default CA now.
[Fri Aug 20 15:07:28 UTC 2021] Please update your account with an email address first.
[Fri Aug 20 15:07:28 UTC 2021] acme.sh --register-account -m [email 
[Fri Aug 20 15:07:28 UTC 2021] See: https://github.com/acmesh-official/acme.sh/wiki/ZeroSSL.com-CA
[Fri Aug 20 15:07:28 UTC 2021] Please add '--debug' or '--log' to check more details.
[Fri Aug 20 15:07:28 UTC 2021] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh
debian@debian-bullseye-01:~$ ${HOME}/acme.sh/acme.sh --install --accountemail [email 
[Fri Aug 20 15:07:45 UTC 2021] Installing to /home/debian/.acme.sh
cp: -r not specified; omitting directory 'acme.sh'
[Fri Aug 20 15:07:45 UTC 2021] Install failed, can not copy acme.sh
debian@debian-bullseye-01:~$ ${HOME}/acme.sh/acme.sh --register-account -m [email 
debian@debian-bullseye-01:~$ ${HOME}/acme.sh/acme.sh --register-account -m [email 
[Fri Aug 20 15:08:18 UTC 2021] No EAB credentials found for ZeroSSL, let's get one
[Fri Aug 20 15:08:19 UTC 2021] Registering account: https://acme.zerossl.com/v2/DV90
[Fri Aug 20 15:08:20 UTC 2021] Registered
[Fri Aug 20 15:08:20 UTC 2021] ACCOUNT_THUMBPRINT='zPovRxBENz8E2uu1MgimKIQo2wsDKo1lxtZsXD6rl9Q'
debian@debian-bullseye-01:~$ ${HOME}/acme.sh/acme.sh  --issue --dns dns_cf --ocsp-must-staple --keylength 4096 -d api.ocp4.example.com -d '*.apps.ocp4.example.com'
[Fri Aug 20 15:09:19 UTC 2021] Using CA: https://acme.zerossl.com/v2/DV90
[Fri Aug 20 15:09:19 UTC 2021] Creating domain key
[Fri Aug 20 15:09:20 UTC 2021] The domain key is here: /home/debian/.acme.sh/api.ocp4.example.com/api.ocp4.example.com.key
[Fri Aug 20 15:09:20 UTC 2021] Multi domain='DNS:api.ocp4.example.com,DNS:*.apps.ocp4.example.com'
[Fri Aug 20 15:09:21 UTC 2021] Getting domain auth token for each domain
[Fri Aug 20 15:09:24 UTC 2021] Getting webroot for domain='api.ocp4.example.com'
[Fri Aug 20 15:09:24 UTC 2021] Getting webroot for domain='*.apps.ocp4.example.com'
[Fri Aug 20 15:09:24 UTC 2021] Adding txt value: oo99OcEtcMb8grxu2JQP5ZnewwDWRi-A0RmuWhMWgA8 for domain:  _acme-challenge.api.ocp4.example.com
[Fri Aug 20 15:09:26 UTC 2021] Adding record
[Fri Aug 20 15:09:27 UTC 2021] Added, OK
[Fri Aug 20 15:09:27 UTC 2021] The txt record is added: Success.
[Fri Aug 20 15:09:27 UTC 2021] Adding txt value: GKGuROuRJoetS8aNbxvwTFAYzL3CDkj_ZTE5IrpqYsI for domain:  _acme-challenge.apps.ocp4.example.com
[Fri Aug 20 15:09:29 UTC 2021] Adding record
[Fri Aug 20 15:09:30 UTC 2021] Added, OK
[Fri Aug 20 15:09:30 UTC 2021] The txt record is added: Success.
[Fri Aug 20 15:09:30 UTC 2021] Let's check each DNS record now. Sleep 20 seconds first.
[Fri Aug 20 15:09:51 UTC 2021] You can use '--dnssleep' to disable public dns checks.
[Fri Aug 20 15:09:51 UTC 2021] See: https://github.com/acmesh-official/acme.sh/wiki/dnscheck
[Fri Aug 20 15:09:51 UTC 2021] Checking api.ocp4.example.com for _acme-challenge.api.ocp4.example.com
[Fri Aug 20 15:09:51 UTC 2021] Domain api.ocp4.example.com '_acme-challenge.api.ocp4.example.com' success.
[Fri Aug 20 15:09:51 UTC 2021] Checking apps.ocp4.example.com for _acme-challenge.apps.ocp4.example.com
[Fri Aug 20 15:09:52 UTC 2021] Domain apps.ocp4.example.com '_acme-challenge.apps.ocp4.example.com' success.
[Fri Aug 20 15:09:52 UTC 2021] All success, let's return
[Fri Aug 20 15:09:52 UTC 2021] Verifying: api.ocp4.example.com
[Fri Aug 20 15:09:52 UTC 2021] Processing, The CA is processing your order, please just wait. (1/30)
[Fri Aug 20 15:09:55 UTC 2021] Success
[Fri Aug 20 15:09:55 UTC 2021] Verifying: *.apps.ocp4.example.com
[Fri Aug 20 15:09:55 UTC 2021] Processing, The CA is processing your order, please just wait. (1/30)
[Fri Aug 20 15:09:58 UTC 2021] Success
[Fri Aug 20 15:09:58 UTC 2021] Removing DNS records.
[Fri Aug 20 15:09:58 UTC 2021] Removing txt: oo99OcEtcMb8grxu2JQP5ZnewwDWRi-A0RmuWhMWgA8 for domain: _acme-challenge.api.ocp4.example.com
[Fri Aug 20 15:10:02 UTC 2021] Removed: Success
[Fri Aug 20 15:10:02 UTC 2021] Removing txt: GKGuROuRJoetS8aNbxvwTFAYzL3CDkj_ZTE5IrpqYsI for domain: _acme-challenge.apps.ocp4.example.com
[Fri Aug 20 15:10:05 UTC 2021] Removed: Success
[Fri Aug 20 15:10:05 UTC 2021] Verify finished, start to sign.
[Fri Aug 20 15:10:05 UTC 2021] Lets finalize the order.
[Fri Aug 20 15:10:05 UTC 2021] Le_OrderFinalize='https://acme.zerossl.com/v2/DV90/order/d7mmBjsYkrrP6ccyi7Q7_w/finalize'
[Fri Aug 20 15:10:06 UTC 2021] Order status is processing, lets sleep and retry.
[Fri Aug 20 15:10:06 UTC 2021] Retry after: 15
[Fri Aug 20 15:10:22 UTC 2021] Polling order status: https://acme.zerossl.com/v2/DV90/order/d7mmBjsYkrrP6ccyi7Q7_w
[Fri Aug 20 15:10:23 UTC 2021] Downloading cert.
[Fri Aug 20 15:10:23 UTC 2021] Le_LinkCert='https://acme.zerossl.com/v2/DV90/cert/d5CJh8QMzGOPRzgJKfL8Nw'
[Fri Aug 20 15:10:24 UTC 2021] Cert success.
-----BEGIN CERTIFICATE-----
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
OV4=
-----END CERTIFICATE-----
[Fri Aug 20 15:10:24 UTC 2021] Your cert is in: /home/debian/.acme.sh/api.ocp4.example.com/api.ocp4.example.com.cer
[Fri Aug 20 15:10:24 UTC 2021] Your cert key is in: /home/debian/.acme.sh/api.ocp4.example.com/api.ocp4.example.com.key
[Fri Aug 20 15:10:24 UTC 2021] The intermediate CA cert is in: /home/debian/.acme.sh/api.ocp4.example.com/ca.cer
[Fri Aug 20 15:10:24 UTC 2021] And the full chain certs is there: /home/debian/.acme.sh/api.ocp4.example.com/fullchain.cer

Vamos salvar os certificados no diretório que criamos.

${HOME}/acme.sh/acme.sh --install-cert -d ${OCP_API_DOMAIN} -d *.${OCP_WILDCARD_DOMAIN} --cert-file ${CERTDIR}/cert.pem --key-file ${CERTDIR}/key.pem --fullchain-file ${CERTDIR}/fullchain.pem --ca-file ${CERTDIR}/ca.cer

Saída de execução do comando se for bem-sucedida.

[Fri Aug 20 15:18:11 UTC 2021] Installing cert to: /home/debian/openshift_certificates/cert.pem
[Fri Aug 20 15:18:11 UTC 2021] Installing CA to: /home/debian/openshift_certificates/ca.cer
[Fri Aug 20 15:18:11 UTC 2021] Installing key to: /home/debian/openshift_certificates/key.pem
[Fri Aug 20 15:18:11 UTC 2021] Installing full chain to: /home/debian/openshift_certificates/fullchain.pem

Etapa 5: Instale o Let's Encrypt Certificates no OpenShift Ingress Controller

O OpenShift Ingress Controller consome certificados armazenados em um objeto secreto. O segredo deve ser criado no namespace openshift-ingress .

Crie um segredo no projeto openshift-ingress:

oc -n openshift-ingress create secret tls router-certs --cert=${CERTDIR}/fullchain.pem --key=${CERTDIR}/key.pem 

Saída de criação secreta:

secret/router-certs created

Depois disso, atualizamos o recurso personalizado para o controlador de entrada localizado no projeto openshift-ingress-operator e denominado default :

$ oc get ingresscontroller -n openshift-ingress-operator
NAME      AGE
default   2d6h

Atualize o recurso personalizado executando o comando abaixo:

oc -n openshift-ingress-operator patch ingresscontroller default  --type=merge --patch='{"spec": { "defaultCertificate": { "name": "router-certs" }}}'

Saída esperada do comando:

ingresscontroller.operator.openshift.io/default patched

Os pods do roteador no openshift-ingress devem ser reiniciados automaticamente em breve:

$ oc get pods -n openshift-ingress
NAME                              READY   STATUS    RESTARTS   AGE
router-default-7b7d5bb68f-4lzft   1/1     Running   0          2m11s
router-default-7b7d5bb68f-x44lb   1/1     Running   0          2m49s

Agora geramos certificados Let’s Encrypt SSL aplicados no roteador Ingress. Os certificados também são usados pelos aplicativos expostos usando a rota padrão e o Red Hat OpenShift Cluster Web Console e outros serviços, como a pilha de monitoramento.

Etapa 6: Instalando Certificados no Red Hat OpenShift API Endpoint (Opcional)

Você também pode aplicar os certificados no API Endpoint. Pessoalmente não executei esta etapa!.

O OpenShift API Server também espera os certificados em um segredo. Devemos criar o segredo dos certificados no projeto openshift-config.

$ oc get secret -n openshift-config
NAME                                      TYPE                                  DATA   AGE
builder-dockercfg-nxjhg                   kubernetes.io/dockercfg               1      2d6h
builder-token-mc5fj                       kubernetes.io/service-account-token   4      2d6h
builder-token-wd9nc                       kubernetes.io/service-account-token   4      2d6h
default-dockercfg-t7h6m                   kubernetes.io/dockercfg               1      2d6h
default-token-4vsjs                       kubernetes.io/service-account-token   4      2d6h
default-token-gsmt9                       kubernetes.io/service-account-token   4      2d6h
deployer-dockercfg-hmfmz                  kubernetes.io/dockercfg               1      2d6h
deployer-token-b9t58                      kubernetes.io/service-account-token   4      2d6h
deployer-token-khbdh                      kubernetes.io/service-account-token   4      2d6h
etcd-client                               kubernetes.io/tls                     2      2d6h
etcd-metric-client                        kubernetes.io/tls                     2      2d6h
etcd-metric-signer                        kubernetes.io/tls                     2      2d6h
etcd-signer                               kubernetes.io/tls                     2      2d6h
initial-service-account-private-key       Opaque                                1      2d6h
pull-secret                               kubernetes.io/dockerconfigjson        1      2d6h
webhook-authentication-integrated-oauth   Opaque                                1      2d6h

Crie um segredo chamado api-certs

oc -n openshift-config create secret tls api-certs --cert=${CERTDIR}/fullchain.pem --key=${CERTDIR}/key.pem 

Confirme se o segredo foi criado com sucesso:

secret/api-certs created

Execute o comando abaixo para aplicar os certificados no endpoint da API

oc patch apiserver cluster --type merge --patch="{\"spec\": {\"servingCerts\": {\"namedCertificates\": [ { \"names\": [  \"$OCP_API_DOMAIN\"  ], \"servingCertificate\": {\"name\": \"api-certs\" }}]}}}"

Como renovar os certificados gerados

Você não é obrigado a renovar os certificados manualmente, pois eles serão renovados automaticamente a cada 60 dias.

No entanto, você também pode forçar a renovação de um certificado:

export OCP_API_DOMAIN=$(oc whoami --show-server | cut -f 2 -d ':' | cut -f 3 -d '/' | sed 's/-api././')
export OCP_WILDCARD_DOMAIN=$(oc get ingresscontroller default -n openshift-ingress-operator -o jsonpath='{.status.domain}')
~/acme.sh/acme.sh --renew -d ${OCP_API_DOMAIN} -d *.${OCP_WILDCARD_DOMAIN} --force

Mais guias sobre OpenShift:

  • Como implantar o OpenShift Container Platform 4.x no hipervisor KVM
  • Como instalar o servidor Jenkins no Kubernetes | OpenShift
  • Atualizar chaves SSH do cluster do OpenShift 4.x após a instalação
  • Configurar endereço IPv4 estático em servidores OpenShift 4.x CoreOS
  • Como listar e aprovar CSR pendente no OpenShift 4.x

Artigos relacionados: