Concepts

Edit This Page

Certificati

Quando si utilizza l’autenticazione del certificato client, è possibile generare certificati manualmente tramite easyrsa,openssl o cfssl.

easyrsa

** easyrsa ** può generare manualmente certificati per il tuo cluster.

  1. Scaricare, decomprimere e inizializzare la versione patched di easyrsa3.

        curl -LO https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz         tar xzf easy-rsa.tar.gz         cd easy-rsa-master / easyrsa3         ./easyrsa init-pki 1. Generare una CA. (--batch imposta la modalità automatica. --req-cn default CN da usare.)

        ./easyrsa –batch “–req-cn = $ {MASTER_IP} @date +% s “build-ca nopass 1. Genera certificato e chiave del server.     L’argomento --subject-alt-name imposta i possibili IP e nomi DNS del server API     accessibile con. Il MASTER_CLUSTER_IP è solitamente il primo IP dal servizio CIDR     che è specificato come argomento --service-cluster-ip-range per il server API e     il componente del controller controller. L’argomento --days è usato per impostare il numero di giorni     dopodiché scade il certificato.     L’esempio sotto riportato assume anche che tu stia usando cluster.local come predefinito     Nome di dominio DNS

        ./easyrsa –subject-alt-name = “IP: $ {MASTER_IP},”
        ”IP: $ {} MASTER_CLUSTER_IP,”
        ”DNS: kubernetes,”
        ”DNS: kubernetes.default,”
        ”DNS: kubernetes.default.svc,”
        ”DNS: kubernetes.default.svc.cluster,”
        ”DNS: kubernetes.default.svc.cluster.local”
        –days = 10000
        build-server-full server nopass 1. Copia pki / ca.crt, pki / issued / server.crt e pki / private / server.key nella tua directory. 1. Compilare e aggiungere i seguenti parametri nei parametri di avvio del server API:

        –client-ca-file =/YourDirectory/ca.crt         –tls-cert-file =/YourDirectory/server.crt         –tls-chiave file privato=/YourDirectory/server.key

openssl

** openssl ** può generare manualmente certificati per il tuo cluster.

  1. Genera un tasto approssimativo con 2048 bit:

         openssl genrsa -out ca.key 2048 1. In base al tasto approssimativo, generare ca.crt (utilizzare -giorni per impostare il tempo effettivo del certificato):

         openssl req -x509 -new -nodes -key ca.key -subj “/ CN = $ {MASTER_IP}” -days 10000 -out ca.crt 1. Genera un server.key con 2048 bit:

         openssl genrsa -out server.key 2048 1. Creare un file di configurazione per generare una richiesta di firma del certificato (CSR).      Assicurati di sostituire i valori contrassegnati da parentesi angolari (ad esempio <MASTER_IP>)      con valori reali prima di salvarlo in un file (ad esempio csr.conf).      Si noti che il valore di MASTER_CLUSTER_IP è l’IP del cluster di servizio per il      Server API come descritto nella sottosezione precedente.      L’esempio sotto riportato assume anche che tu stia usando cluster.local come predefinito      Nome di dominio DNS

    [ req ]
    default_bits = 2048
    prompt = no
    default_md = sha256
    req_extensions = req_ext
    distinguished_name = dn

    [ dn ]
    C = <country>
    ST = <state>
    L = <city>
    O = <organization>
    OU = <organization unit>
    CN = <MASTER_IP>

    [ req_ext ]
    subjectAltName = @alt_names

    [ alt_names ]
    DNS.1 = kubernetes
    DNS.2 = kubernetes.default
    DNS.3 = kubernetes.default.svc
    DNS.4 = kubernetes.default.svc.cluster
    DNS.5 = kubernetes.default.svc.cluster.local
    IP.1 = <MASTER_IP>
    IP.2 = <MASTER_CLUSTER_IP>

    [ v3_ext ]
    authorityKeyIdentifier=keyid,issuer:always
    basicConstraints=CA:FALSE
    keyUsage=keyEncipherment,dataEncipherment
    extendedKeyUsage=serverAuth,clientAuth
    subjectAltName=@alt_names
  1. Generate the certificate signing request based on the config file:

    openssl req -new -key server.key -out server.csr -config csr.conf
    
  2. Generare il certificato del server usando ca.key, ca.crt e server.csr:

    openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \
    -CAcreateserial -out server.crt -days 10000 \
    -extensions v3_ext -extfile csr.conf
    
  3. Visualizza il certificato:

    openssl x509  -noout -text -in ./server.crt
    

Infine, aggiungi gli stessi parametri nei parametri di avvio del server API.

cfssl

** cfssl ** è un altro strumento per la generazione di certificati.

  1. Scaricare, decomprimere e preparare gli strumenti da riga di comando come mostrato di seguito.      Si noti che potrebbe essere necessario adattare i comandi di esempio in base all’hardware      architettura e versione di cfssl che stai utilizzando.

    curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o cfssl
    chmod +x cfssl
    curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o cfssljson
    chmod +x cfssljson
    curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o cfssl-certinfo
    chmod +x cfssl-certinfo
    
  2. Create a directory to hold the artifacts and initialize cfssl:

    mkdir cert
    cd cert
    ../cfssl print-defaults config > config.json
    ../cfssl print-defaults csr > csr.json
    
  3. Creare un file di configurazione JSON per generare il file CA, ad esempio, ca-config.json:

    {
      "signing": {
        "default": {
          "expiry": "8760h"
        },
        "profiles": {
          "kubernetes": {
            "usages": [
              "signing",
              "key encipherment",
              "server auth",
              "client auth"
            ],
            "expiry": "8760h"
          }
        }
      }
    }
    
  4. Creare un file di configurazione JSON per la richiesta di firma del certificato CA (CSR), ad esempio,      Ca-csr.json. Assicurarsi di sostituire i valori contrassegnati da parentesi angolari con      valori reali che si desidera utilizzare.

    {
      "CN": "kubernetes",
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names":[{
        "C": "<country>",
        "ST": "<state>",
        "L": "<city>",
        "O": "<organization>",
        "OU": "<organization unit>"
      }]
    }
    
  5. Generate CA key (ca-key.pem) and certificate (ca.pem):

    ../cfssl gencert -initca ca-csr.json | ../cfssljson -bare ca
    
  6. Creare un file di configurazione JSON per generare chiavi e certificati per l’API      server, ad esempio, server-csr.json. Assicurati di sostituire i valori tra parentesi angolari con      valori reali che si desidera utilizzare. MASTER_CLUSTER_IP è il cluster di servizio      IP per il server API come descritto nella sottosezione precedente.      L’esempio sotto riportato assume anche che tu stia usando cluster.local come predefinito      Nome di dominio DNS

    {
      "CN": "kubernetes",
      "hosts": [
        "127.0.0.1",
        "<MASTER_IP>",
        "<MASTER_CLUSTER_IP>",
        "kubernetes",
        "kubernetes.default",
        "kubernetes.default.svc",
        "kubernetes.default.svc.cluster",
        "kubernetes.default.svc.cluster.local"
      ],
      "key": {
        "algo": "rsa",
        "size": 2048
      },
      "names": [{
        "C": "<country>",
        "ST": "<state>",
        "L": "<city>",
        "O": "<organization>",
        "OU": "<organization unit>"
      }]
    }
    
  7. Generare la chiave e il certificato per il server API, che sono per impostazione predefinita      salvati nel file server-key.pem eserver.pem rispettivamente:

    ../cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \
    --config=ca-config.json -profile=kubernetes \
    server-csr.json | ../cfssljson -bare server
    

Distributing Self-Signed CA Certificate

Un nodo client può rifiutarsi di riconoscere un certificato CA autofirmato come valido. Per una distribuzione non di produzione o per una distribuzione che viene eseguita dietro una società firewall, è possibile distribuire un certificato CA autofirmato a tutti i client e aggiornare l’elenco locale per i certificati validi.

Su ciascun client, eseguire le seguenti operazioni:

$ sudo cp ca.crt /usr/local/share/ca-certificates/kubernetes.crt
$ sudo update-ca-certificates
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....
done.

Certificates API

È possibile utilizzare l’API certificates.k8s.io per eseguire il provisioning certificati x509 da utilizzare per l’autenticazione come documentato here.

Feedback