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.
- Scaricare, decomprimere e inizializzare la versione patched di easyrsa3.
curl -LO https://dl.k8s.io/easy-rsa/easy-rsa.tar.gz tar xzf easy-rsa.tar.gz cd easy-rsa-master / easyrsa3 ./easyrsa init-pki
- 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
- Genera certificato e chiave del server.
L'argomento
--subject-alt-name
imposta i possibili IP e nomi DNS del server API accessibile con. IlMASTER_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 usandocluster.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
- Copia
pki / ca.crt
,pki / issued / server.crt
epki / private / server.key
nella tua directory. - 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.
- Genera un tasto approssimativo con 2048 bit:
openssl genrsa -out ca.key 2048
- 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
- Genera un server.key con 2048 bit:
openssl genrsa -out server.key 2048
-
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 esempiocsr.conf
). Si noti che il valore diMASTER_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 usandocluster.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
-
Generate the certificate signing request based on the config file:
openssl req -new -key server.key -out server.csr -config csr.conf
-
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 -sha256
-
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.
-
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
-
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
-
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" } } } }
-
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>" }] }
-
Generate CA key (
ca-key.pem
) and certificate (ca.pem
):../cfssl gencert -initca ca-csr.json | ../cfssljson -bare ca
-
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 usandocluster.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>" }] }
-
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
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.