Utilizzo dei tuoi certificati TLS

Scopri come configurare il servizio Knative in modo da utilizzare i tuoi certificati SSL/TLS.

In alternativa, puoi utilizzare la funzionalità Certificati TLS gestiti, che crea e rinnova automaticamente i certificati TLS tramite Let's Encrypt

Per utilizzare i tuoi certificati, archiviali in un secret Kubernetes e configura il gateway di ingresso di Cloud Service Mesh in modo che lo utilizzi.

Prima di iniziare

  • Queste istruzioni presuppongono che tu abbia già ottenuto i certificati TLS.
  • Devi configurare un dominio personalizzato. Per maggiori dettagli, vedi Mappatura di domini personalizzati.
  • Devi configurare ciascuno dei tuoi servizi di pubblicazione Knative che utilizzano il gateway di ingresso per pubblicare il traffico esterno. Se questi servizi rivolti all'esterno non sono configurati per utilizzare i tuoi certificati TLS, non potranno verificare una connessione HTTPS e, di conseguenza, non raggiungeranno mai lo stato ready.

Archiviazione dei certificati TLS in un secret Kubernetes

Per archiviare i certificati in un segreto:

  1. Apri un terminale e vai alla directory in cui si trovano i certificati TLS.

  2. Utilizza il seguente comando per creare un segreto che memorizzi i tuoi certificati:

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

    Sostituisci:

    • INGRESS_NAMESPACE con lo spazio dei nomi del servizio di entrata istio-ingressgateway. Specifica lo spazio dei nomi istio-system se hai installato Cloud Service Mesh utilizzando la configurazione predefinita.
    • SECRET_NAME con il nome che vuoi utilizzare per il secret Kubernetes.
    • PRIVATE_KEY.pem con il nome del file che contiene la chiave privata del tuo certificato.
    • FULL_CHAIN.pem con il nome del file che contiene il tuo certificato pubblico.

Ora puoi configurare il gateway in entrata in modo che utilizzi il segreto che hai appena creato per il tuo certificato TLS.

Configurare il gateway in entrata per utilizzare i certificati

Modifica il gateway di ingresso di Cloud Service Mesh in modo da utilizzare il secret che hai creato per i tuoi certificati TLS:

  1. Apri il file YAML del gateway di ingresso in modalità di modifica eseguendo il seguente comando:

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

    Esempio di configurazione predefinita del gateway in entrata:

    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. Configura il gateway di ingresso in modo che utilizzi il segreto aggiungendo gli attributi hosts, port e tls al file YAML esistente.

    • Per configurare tutti i servizi in modo che utilizzino la stessa password: aggiungi quanto segue alla configurazione YAML e specifica "*" come valore dell'attributo hosts:

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

      Sostituisci SECRET_NAME con il nome del segreto che hai creato.

      Vedi l'esempio.

    • Per configurare singolarmente ciascuno dei tuoi servizi: aggiungi quanto segue alla configurazione YAML e specifica i valori per gli attributi hosts utilizzando il nome e lo spazio dei nomi del servizio:

      Per ogni servizio, specifica i valori per gli attributi hosts, port e 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
      

      Sostituisci:

      • SERVICE_NAME con il nome del servizio Knative serving. Ogni servizio che utilizza il gateway di ingresso per gestire il traffico esterno deve essere configurato singolarmente.
      • SERVICE_NAMESPACE con il nome dello spazio dei nomi in cui è in esecuzione il servizio.
      • CUSTOM_DOMAIN con il dominio personalizzato per cui hai configurato il servizio da utilizzare.
      • SECRET_NAME con il nome del segreto che vuoi che il servizio utilizzi. Se hai creato più secret per diversi set di certificati TLS, puoi specificare quale secret utilizza ciascun servizio.

      Vedi l'esempio.

  3. Salva le modifiche.

Ora puoi utilizzare il protocollo HTTPS per accedere ai servizi Knative serving di cui è stato eseguito il deployment.

Esempi

Configura tutti i servizi:

Questo esempio mostra come configurare tutti i servizi per utilizzare il segreto 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 i singoli servizi:

Questo esempio mostra come configurare singolarmente tutti e tre i servizi che gestiscono il traffico 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