Obtén certificados TLS: Un ejemplo

Este tema solo se proporciona como ejemplo. En él, se explica cómo obtener un certificado TLS de la autoridad certificada (CA) Let's Encrypt. Estos pasos se proporcionan principalmente como un ejemplo a seguir si no tienes otra manera de obtener un certificado o un par de claves que esté autorizado por una CA. En el ejemplo, se muestra cómo generar certificados con la CA Let's Encrypt, el cliente de Certbot y Cloud DNS de Google Cloud Platform.

Dónde puedes usar estos certificados

Debes proporcionar certificados TLS para dos puertas de enlace de entrada de Istio que se exponen fuera del clúster:

Puerta de enlace Requisito de TLS
Puerta de enlace de entrada del entorno de ejecución Puedes usar un par de claves o certificado autofirmado o certificados TLS autorizados.
Puerta de enlace de entrada de MART (opcional cuando no se usa Apigee Connect) Requiere un par de claves/certificado TLS autorizado o un secreto de Kubernetes.
Consulta también Conexiones externas.

Requisitos

Necesitarás un nombre de dominio que obtuviste mediante un registrador de nombres de dominio. Puedes registrar un nombre de dominio mediante Google Domains o a través de otro registrador de dominios que elijas.

Configura Cloud DNS

Para obtener certificados TLS autorizados, debes tener un nombre de dominio calificado. En los siguientes pasos, se explica cómo usar Google Cloud DNS para obtener un nombre de dominio y administrar tus servidores de dominio.
  1. Abre la consola de Google Cloud y accede con la cuenta que creaste en el Paso 1: Crea una cuenta de Google Cloud.
  2. Selecciona el proyecto que creaste en el Paso 2: Crea un proyecto de GCP.
  3. Si aún no lo hiciste, habilita la API de Cloud DNS. Consulta Habilita las API.
  4. Crea una dirección IP estática:
    • Si estás en GKE, sigue las instrucciones en Reserva una dirección IP externa estática a fin de crear una dirección IP estática puedan usar los procesos externos para comunicarse con la entrada del entorno de ejecución híbrido. Puedes asignar a la dirección el nombre que desees, por ejemplo: apigee-hybrid-runtime. Cuando termines, usarás el número de IP en la configuración del clúster del siguiente paso. Por ejemplo: 34.66.75.196
    • Si estás en Anthos GKE, sigue las instrucciones en la documentación de Anthos GKE para crear una dirección IP estática.
  5. Obtén la IP externa que acabas de reservar.
  6. Crea un conjunto de registros para el extremo de entorno de ejecución de Istio. Esta es la dirección para realizar llamadas a la API a la puerta de enlace híbrida. Ingresa la IP externa que obtuviste en el paso anterior y agrega un prefijo al nombre de dominio, como example-endpoint. Para obtener instrucciones, consulta Crea un registro nuevo.
    1. Crea una zona pública administrada. Para obtener instrucciones, consulta Crea una zona pública administrada.
    2. Crea un conjunto nuevo de registros con:
      • Nombre de DNS: el nombre del extremo con el que se comunicarán las llamadas a la API externas, como api-services o example-endpoint
      • Tipo de registro de recursos: A
      • TTL y UnidadTTL: Acepta los valores predeterminados.
      • Dirección IP: la IP estática que creaste.
  7. La vista Detalles de la zona mostrará una lista de los cuatro servidores DNS de preferencia, como los datos NS de tu zona nueva. Copia los datos del registro DNS, como se muestra en el siguiente ejemplo:

  8. Regresa a la página del dominio en tu registrador (por ejemplo, Google Domains).
  9. Selecciona tu dominio.
  10. Selecciona DNS.
  11. En la sección Servidores de nombres, haz clic en Editar.
  12. Ingresa los servidores de nombres de dominio que copiaste de la página Servicios de red de Cloud DNS. Por ejemplo:

Ahora, Google Cloud DNS administrará los registros DNS de tu dominio.

Instala Certbot en una VM

Ahora que configuraste Cloud DNS para administrar tus servidores de dominio, instalarás el cliente Certbot con el complemento dns_google en una VM de Cloud. El cliente te permite obtener certificados autorizados para tu dominio desde un extremo Let's Encrypt.

  1. Abre la consola de Google Cloud y accede con la cuenta que creaste en el Paso 1: Crea una cuenta de Google Cloud.
  2. Selecciona el proyecto que creaste en el Paso 2: Crea un proyecto de GCP.
  3. Selecciona IAM y administración > Cuenta de servicio (IAM & admin > Service accounts).

    En la vista de cuentas de servicio, se muestra una lista de las cuentas de servicio del proyecto.

  4. Para crear una cuenta de servicio nueva, haz clic en + Crear cuenta de servicio (+ Create Service Account) en la parte superior de la vista.

    Aparecerá la vista Detalles de la cuenta de servicio (Service account details).

  5. En el campo Nombre de la cuenta de servicio (Service account name), ingresa el nombre de la cuenta de servicio.

    De forma opcional, puedes agregar una descripción en el campo Descripción de la cuenta de servicio (Service account description). Las descripciones son útiles a fin de recordarte para qué se usa una cuenta de servicio específica.

  6. Haga clic en Crear.

    GCP crea una cuenta de servicio nueva y muestra la vista Permisos de cuenta de servicio (Service account permissions). Usa esta vista para asignar una función a tu cuenta de servicio nueva.

  7. Haz clic en la lista desplegable Seleccionar una función.
  8. Selecciona la función Propietario del proyecto.
  9. Haga clic en Continuar.
  10. Haga clic en Listo.
  11. En GCP Console, selecciona Compute Engine > Instancias de VM.
  12. Crea una instancia de VM llamada certmanager.
  13. En la sección Disco de arranque, elige CentOS7 y 20 GB para la unidad persistente SSD.
  14. Establece la cuenta de servicio como la que creaste antes.
  15. Instala Certbot y el complemento dns_google en la máquina y ejecuta el cliente de Certbot:
      sudo su -
      yum -y install yum-utils
      yum install certbot -y
      yum install certbot-dns-google -y
      certbot certonly --dns-google -d *.your_domain_name,*.your_domain_name --server https://acme-v02.api.letsencrypt.org/directory
      

    Por ejemplo:

    sudo su -
    yum -y install yum-utils
    yum install certbot -y
    yum install certbot-dns-google -y
    certbot certonly --dns-google -d *.apigee-hybrid-docs.net,*.apigee-hybrid-docs.net --server https://acme-v02.api.letsencrypt.org/directory
  16. Ahora puedes encontrar tu certificado autorizado y los archivos de claves privadas en este directorio: cd /etc/letsencrypt/live/your_domain_name/

    Por ejemplo:

    cd /etc/letsencrypt/live/apigee-hybrid-docs.net
    ls
      cert.pem  chain.pem  fullchain.pem  privkey.pem  README
  17. Copia los archivos fullchain.pem y privkey.pem en tu máquina local.
  18. Opcional: Crea un Secret de Kubernetes con el par de claves o el certificado. Consulta las instrucciones en la Opción 2: Secret de Kubernetes en Configura TLS y mTLS, en la entrada de Istio.
  19. Actualiza tu archivo de anulaciones para que apunte al certificado y a la clave privada. Para hostAliases, usa el nombre de DNS que creaste antes.

    Por ejemplo:

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: my-env-group
        sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
        sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
    
    mart: # Assuming you are not using Apigee Connect
      nodeSelector:
        key: cloud.google.com/gke-nodepool
        value: apigee-runtime
      sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
      sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
      replicaCountMin: 1
      replicaCountMax: 1

    O, si usas Secrets de Kubernetes:

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: my-env-group
        tlsMode: SIMPLE  # Note: SIMPLE is the default, MUTUAL is also an available value.
        sslSecret: myorg-test-policy-secret"
    
    mart: # Assuming you are not using Apigee Connect
      nodeSelector:
        key: cloud.google.com/gke-nodepool
        value: apigee-runtime
        sslSecret: myorg-test-policy-secret"
      replicaCountMin: 1
      replicaCountMax: 1
    
    ...  
  20. Aplica los cambios:

    Si cambiaste la configuración mart, aplica los siguientes cambios:

    apigeectl apply -f your_overrides_file --all-envs

    Si cambiaste la configuración envs, aplica los siguientes cambios:

    apigeectl apply -f your_overrides_file --all-envs
  21. Prueba la configuración

    Implementa y prueba un proxy, como se explica en Crea e implementa un proxy de API nuevo.