Saat menggunakan autentikasi sertifikat klien, kamu dapat membuat sertifikat
secara manual melalui easyrsa
, openssl
atau cfssl
.
easyrsa dapat digunakan untuk menghasilkan sertifikat kluster 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 menggunakan cluster.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
, dan pki/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 secara manual dapat menghasilkan sertifikat untuk kluster 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 nilai MASTER_CLUSTER_IP
adalah layanan IP kluster untuk
server API seperti yang dijelaskan dalam subbagian sebelumnya.
Sampel di bawah ini juga mengasumsikan bahwa kamu menggunakan cluster.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 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
kluster IP untuk server API seperti yang dijelaskan dalam subbagian sebelumnya.
Sampel di bawah ini juga mengasumsikan bahwa kamu menggunakan cluster.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
dan server.pem
:
../cfssl gencert -ca=ca.pem -ca-key=ca-key.pem \
--config=ca-config.json -profile=kubernetes \
server-csr.json | ../cfssljson -bare server
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.
Kamu dapat menggunakan API Certificate.k8s.io
untuk menyediakan
sertifikat x509 yang digunakan untuk autentikasi seperti yang didokumentasikan
di sini.
Apakah halaman ini berguna?
Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on Stack Overflow. Open an issue in the GitHub repo if you want to report a problem or suggest an improvement.