Sertifikat
Saat menggunakan autentikasi sertifikat klien, kamu dapat membuat sertifikat
secara manual melalui easyrsa
, openssl
atau cfssl
.
easyrsa
easyrsa dapat digunakan untuk menghasilkan sertifikat klaster kamu secara manual.
-
Unduh, buka paket, dan inisialisasi versi tambal 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
-
Hasilkan CA. (
--batch
untuk atur mode otomatis.--req-cn
untuk menggunakan default CN.)./easyrsa --batch "--req-cn=${MASTER_IP}@`date +%s`" build-ca nopass
-
Hasilkan sertifikat dan kunci server. Argumen
--subject-alt-name
digunakan untuk mengatur alamat IP dan nama DNS yang dapat diakses oleh server API.MASTER_CLUSTER_IP
biasanya merupakan IP pertama dari CIDR service cluster yang diset dengan argumen--service-cluster-ip-range
untuk server API dan komponen manajer pengontrol. Argumen--days
digunakan untuk mengatur jumlah hari masa berlaku sertifikat. Sampel di bawah ini juga mengasumsikan bahwa kamu menggunakancluster.local
sebagai nama domain DNS default../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
-
Salin
pki/ca.crt
,pki/issued/server.crt
, danpki/private/server.key
ke direktori kamu. -
Isi dan tambahkan parameter berikut ke dalam parameter mulai server API:
--client-ca-file=/yourdirectory/ca.crt --tls-cert-file=/yourdirectory/server.crt --tls-private-key-file=/yourdirectory/server.key
openssl
openssl secara manual dapat menghasilkan sertifikat untuk klaster kamu.
-
Hasilkan ca.key dengan 2048bit:
openssl genrsa -out ca.key 2048
-
Hasilkan ca.crt berdasarkan ca.key (gunakan -days untuk mengatur waktu efektif sertifikat):
openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt
-
Hasilkan server.key dengan 2048bit:
openssl genrsa -out server.key 2048
-
Buat file konfigurasi untuk menghasilkan Certificate Signing Request (CSR). Pastikan untuk mengganti nilai yang ditandai dengan kurung sudut (mis.
<MASTER_IP>
) dengan nilai sebenarnya sebelum menyimpan ke file (mis.csr.conf
). Perhatikan bahwa nilaiMASTER_CLUSTER_IP
adalah layanan IP klaster untuk server API seperti yang dijelaskan dalam subbagian sebelumnya. Sampel di bawah ini juga mengasumsikan bahwa kamu menggunakancluster.local
sebagai nama domain DNS default.[ 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
-
Hasilkan permintaan penandatanganan sertifikat berdasarkan file konfigurasi:
openssl req -new -key server.key -out server.csr -config csr.conf
-
Hasilkan sertifikat server menggunakan ca.key, ca.crt dan 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
-
Lihat sertifikat:
openssl x509 -noout -text -in ./server.crt
Terakhir, tambahkan parameter yang sama ke dalam parameter mulai server API.
cfssl
cfssl adalah alat lain untuk pembuatan sertifikat.
-
Unduh, buka paket dan siapkan command line tools seperti yang ditunjukkan di bawah ini. Perhatikan bahwa kamu mungkin perlu menyesuaikan contoh perintah berdasarkan arsitektur perangkat keras dan versi cfssl yang kamu gunakan.
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
-
Buat direktori untuk menyimpan artifacts dan inisialisasi cfssl:
mkdir cert cd cert ../cfssl print-defaults config > config.json ../cfssl print-defaults csr > csr.json
-
Buat file konfigurasi JSON untuk menghasilkan file CA, misalnya,
ca-config.json
:{ "signing": { "default": { "expiry": "8760h" }, "profiles": { "kubernetes": { "usages": [ "signing", "key encipherment", "server auth", "client auth" ], "expiry": "8760h" } } } }
-
Buat file konfigurasi JSON untuk CA certificate signing request (CSR), misalnya,
ca-csr.json
. Pastikan untuk mengganti nilai yang ditandai dengan kurung sudut dengan nilai sebenarnya yang ingin kamu gunakan.{ "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names":[{ "C": "<country>", "ST": "<state>", "L": "<city>", "O": "<organization>", "OU": "<organization unit>" }] }
-
Hasilkan kunci CA (
ca-key.pem
) dan sertifikat (ca.pem
):../cfssl gencert -initca ca-csr.json | ../cfssljson -bare ca
-
Buat file konfigurasi JSON untuk menghasilkan kunci dan sertifikat untuk API server, misalnya,
server-csr.json
. Pastikan untuk mengganti nilai dalam kurung sudut dengan nilai sebenarnya yang ingin kamu gunakan.MASTER_CLUSTER_IP
adalah layanan klaster IP untuk server API seperti yang dijelaskan dalam subbagian sebelumnya. Sampel di bawah ini juga mengasumsikan bahwa kamu menggunakancluster.local
sebagai nama domain DNS default.{ "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>" }] }
-
Buat kunci dan sertifikat untuk server API, yang mana awalnya di simpan masing-masing ke dalam file
server-key.pem
danserver.pem
:../cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \ --config=ca-config.json -profile=kubernetes \ server-csr.json | ../cfssljson -bare server
Distribusi Sertifikat Self-Signed CA
Node klien dapat menolak untuk mengakui sertifikat CA yang ditandatangani sendiri sebagai valid. Untuk deployment non-produksi, atau untuk deployment yang berjalan di belakang firewall perusahaan, kamu dapat mendistribusikan sertifikat CA yang ditandatangani sendiri untuk semua klien dan refresh daftar lokal untuk sertifikat yang valid.
Pada setiap klien, lakukan operasi berikut:
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.
Sertifikat API
Kamu dapat menggunakan API Certificate.k8s.io
untuk menyediakan
sertifikat x509 yang digunakan untuk autentikasi seperti yang didokumentasikan
di sini.