Usa tus propios certificados TLS

Obtén información sobre cómo configurar la entrega de Knative para usar tus propios certificados SSL/TLS.

Como alternativa, puedes usar la función de certificados TLS administrados, que crea y renueva de forma automática los certificados TLS a través de Let's Encrypt.

Para usar tus propios certificados, almacena tus certificados TLS en un Secret de Kubernetes y, luego, configura la puerta de enlace de entrada de Anthos Service Mesh para usar ese Secret.

Antes de comenzar

  • En estas instrucciones se supone que ya obtuviste los certificados TLS.
  • Debes configurar un dominio personalizado. Para obtener más información, consulta Asigna dominios personalizados.
  • Debes configurar cada uno de los servicios de entrega de Knative que usan la puerta de enlace de entrada para entregar tráfico externo. Si estos servicios externos no están configurados para usar tus certificados TLS, los servicios no podrán verificar una conexión HTTPS y, por lo tanto, nunca alcanzarán el estado ready.

Almacena certificados TLS en un Secret de Kubernetes

Para almacenar los certificados en un Secret, haz lo siguiente:

  1. Abre una terminal y navega hasta el directorio en el que se encuentran los certificados TLS.

  2. Usa el siguiente comando para crear un Secret que almacene tus certificados:

    kubectl create --namespace INGRESS_NAMESPACE secret tls SECRET_NAME \
      --key PRIVATE_KEY.pem \
      --cert FULL_CHAIN.pem
    

    Reemplaza lo siguiente:

    • INGRESS_NAMESPACE por el espacio de nombres de tu servicio de entrada, istio-ingressgateway. Especifica el espacio de nombres istio-system si instalaste Anthos Service Mesh con la configuración predeterminada.
    • SECRET_NAME por el nombre que deseas usar para tu Secret de Kubernetes.
    • PRIVATE_KEY.pem por el nombre del archivo que contiene la clave privada del certificado.
    • FULL_CHAIN.pem por el nombre del archivo que contiene el certificado público.

Ahora puedes configurar la puerta de enlace de entrada a fin de usar el Secret que acabas de crear para tu certificado TLS.

Configura la puerta de enlace de entrada para usar tus certificados

Modifica la puerta de enlace de entrada de Anthos Service Mesh a fin de usar el Secret que creaste para tus certificados TLS:

  1. Ejecuta el siguiente comando para abrir el archivo YAML de la puerta de enlace de entrada en modo de edición:

    kubectl edit gateway knative-ingress-gateway --namespace knative-serving

    Ejemplo de la configuración predeterminada de la puerta de enlace de entrada:

    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      ...
      # other skipped configuration
      ...
    spec:
      selector:
        istio: ingressgateway
      servers:
      - hosts:
        - '*'
        port:
          name: http
          number: 80
          protocol: HTTP
    
  2. Agrega los atributos hosts, port y tls al YAML existente para configurar la puerta de enlace de entrada a fin de usar tu Secret.

    • Para configurar todos los servicios a fin de que usen el mismo Secret, agrega lo siguiente a la configuración de YAML y especifica "*" como el valor del atributo hosts:

      ...
      # other skipped configuration
      ...
      - hosts:
        - "*"
        port:
          name: https
          number: 443
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: SECRET_NAME
      

      Reemplaza SECRET_NAME por el nombre del Secret que creaste.

      Consulta el ejemplo 2.

    • Para configurar cada uno de tus servicios de forma individual, agrega lo siguiente a la configuración de YAML y especifica los valores para los atributos hosts mediante el nombre y el espacio de nombres del servicio:

      Para cada servicio, debes especificar los valores de los atributos hosts, port y tls:

      ...
      # other skipped configuration
      ...
      - hosts:
        - SERVICE_NAME.SERVICE_NAMESPACE.CUSTOM_DOMAIN
        port:
          number: 443
          name: https-SERVICE_NAME
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: SECRET_NAME
      

      Reemplaza lo siguiente:

      • SERVICE_NAME por el nombre del servicio de entrega de Knative. Cada servicio que use la puerta de enlace de entrada para entregar tráfico externo debe configurarse de forma individual.
      • SERVICE_NAMESPACE por el nombre del espacio de nombres en el que se ejecuta el servicio.
      • CUSTOM_DOMAIN por el dominio personalizado para el que configuraste el servicio.
      • SECRET_NAME por el nombre del Secret que deseas que use el servicio. Si creaste varios Secrets para diferentes conjuntos de certificados TLS, puedes especificar qué Secret usa cada servicio.

      Consulta el ejemplo

  3. Guarda los cambios.

Ahora puedes usar el protocolo HTTPS para acceder a los servicios de entrega de Knative implementados.

Ejemplos

Configura todos los servicios:

En este ejemplo, se muestra cómo configurar todos los servicios para usar el Secret TLSsecret:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  ...
  # other skipped configuration
  ...
spec:
  selector:
    istio: ingressgateway
  servers:
    - hosts:
      - "*"
      port:
        name: http
        number: 80
        protocol: HTTP
    - hosts:
      - "*"
      port:
        name: https
        number: 443
        protocol: HTTPS
      tls:
        mode: SIMPLE
        credentialName: TLSsecret
Configura servicios individuales:

En este ejemplo, se muestra cómo configurar de forma individual los tres Services que entregan tráfico de Internet:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  ...
  # other skipped configuration
  ...
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - "*"
    port:
      name: http
      number: 80
      protocol: HTTP
  - hosts:
    - prodservice.prodnamespace.my-custom-domain.com
    port:
      number: 443
      name: https-prodservice
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: TLSsecret
  - hosts:
    - experiment.namespace.my-custom-domain.com
    port:
      number: 443
      name: https-experiment
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: TLSsecret
  - hosts:
    - fallbackservice.anothernamespace.my-custom-domain.com
    port:
      number: 443
      name: https-fallbackservice
      protocol: HTTPS
    tls:
      mode: SIMPLE
      credentialName: anotherTLSsecret