Pendahuluan
Pada tahun 2020, Google Chrome mengubah perilaku SameSite=None
cookie untuk meminta aktivasi Secure
pilihan. Akibatnya, pengujian klien UI Web yang backend API-nya berjalan di kluster Kubernetes lokal sekarang memerlukan akses HTTPS.
Dalam tutorial ini, Anda akan mempelajari cara mendapatkan akses HTTPS dengan membuat sertifikat yang ditandatangani sendiri untuk Kubernetes menggunakan metode cert-manager, CFSSL, Easy-RSA, dan OpenSSL.
Prasyarat
- Cluster Kubernetes (Anda dapat membuatnya menggunakan minikube)
- alat baris perintah kubectl terpasang
Membuat Sertifikat melalui cert-manager
Sebagai pengontrol manajemen sertifikat Kubernetes asli, pengelola sertifikat add-on adalah cara paling umum untuk membuat sertifikat yang ditandatangani sendiri.
Langkah 1:Instal cert-manager
Untuk menginstal cert-manager, pertama buat namespace untuknya:
kubectl create namespace cert-manager
Selanjutnya, gunakan kubectl apply
perintah dan yaml
file tersedia online untuk menginstal add-on:
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.13.1/cert-manager.yaml
Langkah 2:Buat Penerbit Sertifikat
Buat ruang nama di mana Anda akan membuat sertifikat:
kubectl create namespace [namespace]
Selanjutnya, tetapkan penerbit sertifikat dengan mengetikkan perintah multi-baris berikut ke terminal:
kubectl apply -n [namespace] -f <(echo "
apiVersion: cert-manager.io/v1alpha2
kind: Issuer
metadata:
name: [issuer-name]
spec:
selfSigned: {}
")
Keluaran mengonfirmasi pembuatan penerbit yang berhasil:
Penerbit yang dibuat dengan cara ini hanya berfungsi untuk namespace saat ini. Jika Anda ingin dapat meminta sertifikat dari namespace mana pun dalam sebuah cluster, buat resource Kubernetes khusus yang disebut ClusterIssuer
menggunakan selfsigned-issuer.yaml
. yang tersedia berkas:
kubectl apply -f https://gist.githubusercontent.com/t83714/51440e2ed212991655959f45d8d037cc/raw/7b16949f95e2dd61e522e247749d77bc697fd63c/selfsigned-issuer.yaml
Langkah 3:Buat Sertifikat
Hasilkan sertifikat yang ditandatangani sendiri dengan mengetikkan perintah multi-baris berikut ke terminal:
kubectl apply -n [namespace]-f <(echo '
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
name: [certificate-name]
spec:
secretName: [secret-name]
dnsNames:
- "*.[namespace].svc.cluster.local"
- "*.[namespace]"
issuerRef:
name: [issuer-name]
')
Keluaran mengonfirmasi bahwa pembuatan berhasil:
Untuk memeriksa sertifikat yang Anda buat, ketik:
kubectl -n [namespace] get certificate
Untuk melihat informasi tentang Rahasia, gunakan get secret
perintah:
kubectl -n [namespace] get secret [secret-name]
Tiga kunci yang terdapat dalam rahasia ini adalah ca.crt
, tls.crt
, dan tls.key
. Untuk seluruh Rahasia, ketik:
kubectl -n [namespace] get secret [secret-name] -o yaml
Langkah 4:Uji Sertifikat
Gunakan perintah berikut untuk menguji validitas sertifikat:
openssl x509 -in <(kubectl -n [namespace] get secret \
first-tls -o jsonpath='{.data.tls\.crt}' | base64 -d) \
-text -noout
X509v3 Subject Alternative Name
baris harus berisi dnsNames
yang Anda berikan selama pembuatan sertifikat.
Membuat Sertifikat melalui CFSSL
Alat umum lainnya untuk membuat dan memverifikasi sertifikat yang ditandatangani sendiri adalah CFSSL . Alat ini terdiri dari empat program:
cfssl
– utilitas baris perintah untuk manajemen paket CFSSL.multirootca
– server otoritas sertifikat.mkbundle
– pembuat bundel kumpulan sertifikat.cfssljson
– pembuat sertifikat yang menggunakanjson
keluaran daricfssl
danmultirootca
.
Langkah-langkah di bawah ini menunjukkan cara membuat sertifikat yang ditandatangani sendiri menggunakan CFSSL.
Langkah 1:Instal CFSSL menggunakan Go
Untuk menginstal CFSSL, pertama, Anda perlu menginstal paket bahasa Go yang diperlukan. Ketik perintah berikut:
sudo apt install golang
Kemudian, gunakan sintaks Go untuk mengunduh cfssl
:
go get -u github.com/cloudflare/cfssl/cmd/cfssl
Selanjutnya, salin file dari ~/go/bin
ke folder yang sesuai:
sudo cp ~/go/bin/cfssl /usr/local/bin/cfssl
Terakhir, ulangi proses dengan cfssljson
:
go get -u github.com/cloudflare/cfssl/cmd/cfssljson
sudo cp ~/go/bin/cfssljson /usr/local/bin/cfssljson
Langkah 2:Buat Otoritas Sertifikat
Setelah Anda menginstal program, lanjutkan dengan membuat otoritas sertifikat yang ditandatangani sendiri (CA). Contoh di bawah ini membuat file bernama ca.json
.
File mendefinisikan yang berikut:
CN
– Nama umum untuk otoritasalgo
– algoritma yang digunakan untuk sertifikatsize
– ukuran algoritma dalam bitC
– NegaraL
– Lokalitas (kota)ST
– Negara bagian atau provinsiO
– OrganisasiOU
– Unit Organisasi
Contoh di bawah adalah untuk organisasi yang disebut “Contoh Perusahaan” dan unit organisasinya “Contoh Perusahaan Root CA” yang berbasis di New York, NY, Amerika Serikat.
{
"CN": "Example Company Root CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"L": "New York",
"ST": "New York",
"O": "Example Company",
"OU": "Example Company Root CA"
}
]
}
Buat dan simpan json
file dalam editor teks. Kemudian, gunakan untuk menghasilkan ca.pem
dan ca-key.pem
file dengan mengetikkan cfssl
berikut ini perintah:
cfssl gencert -initca ca.json | cfssljson -bare ca
Langkah 3:Buat File Konfigurasi
Untuk melanjutkan, buat cfssl.json
berkas konfigurasi. File tersebut memberikan detail tentang tanggal kedaluwarsa sertifikat dan penggunaan untuk profil terpisah (peer, server, dan klien).
cfssl.json
akan terlihat seperti ini:
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"intermediate_ca": {
"usages": [
"signing",
"digital signature",
"key encipherment",
"cert sign",
"crl sign",
"server auth",
"client auth"
],
"expiry": "8760h",
"ca_constraint": {
"is_ca": true,
"max_path_len": 0,
"max_path_len_zero": true
}
},
"peer": {
"usages": [
"signing",
"digital signature",
"key encipherment",
"client auth",
"server auth"
],
"expiry": "8760h"
},
"server": {
"usages": [
"signing",
"digital signing",
"key encipherment",
"server auth"
],
"expiry": "8760h"
},
"client": {
"usages": [
"signing",
"digital signature",
"key encipherment",
"client auth"
],
"expiry": "8760h"
}
}
}
}
Simpan file dan keluar.
Langkah 4:Buat Otoritas Sertifikat Menengah
json
lainnya file yang harus Anda buat adalah intermediate-ca.json
. Ini mendefinisikan otoritas sertifikat perantara dan terlihat mirip dengan ca.json
. yang dibuat sebelumnya :
{
"CN": " Example Company Intermediate CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"L": "New York",
"ST": "New York",
"O": "Example Company",
"OU": "Example Company Intermediate CA"
}
],
"ca": {
"expiry": "42720h"
}
}
Langkah 5:Tandatangani Sertifikat
Setelah membuat kedua file, ketik perintah berikut untuk membuat intermediate_ca.pem
, intermediate_ca.csr
dan intermediate_ca-key.pem
file, dan menandatangani CA perantara:
cfssl gencert -initca intermediate-ca.json | cfssljson -bare intermediate_ca
Kemudian, tanda tangani sertifikat menggunakan CA dan file konfigurasi cfssl.json:
cfssl sign -ca ca.pem -ca-key ca-key.pem -config cfssl.json -profile intermediate_ca intermediate_ca.csr | cfssljson -bare intermediate_ca
Langkah 6:Buat Sertifikat Host
Untuk membuat sertifikat host untuk profil rekan, server, dan klien, buat host1.json
file dengan informasi yang diperlukan tentang host.
{
"CN": "host.example-company.com",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"L": "New York",
"O": "Example Company",
"OU": "Example Company Intermediate CA",
"ST": "New York"
}
],
"hosts": [
"host1.example-company.com",
"localhost"
]
}
Sekarang, buat sertifikat menggunakan file konfigurasi yang Anda buat. Untuk sertifikat rekan yang memungkinkan komunikasi antar server, ketik:
cfssl gencert -ca intermediate_ca.pem -ca-key intermediate_ca-key.pem -config cfssl.json -profile=peer host1.json | cfssljson -bare host-1-peer
Untuk membuat sertifikat server, ketik:
cfssl gencert -ca intermediate_ca.pem -ca-key intermediate_ca-key.pem -config cfssl.json -profile=server host1.json | cfssljson -bare host-1-server
Sintaks untuk sertifikat klien, yang tidak sering diperlukan tetapi didukung oleh beberapa sistem, adalah:
cfssl gencert -ca intermediate_ca.pem -ca-key intermediate_ca-key.pem -config cfssl.json -profile=client host1.json | cfssljson -bare host-1-client
Keluaran masing-masing mengkonfirmasi keberhasilan pembuatan sertifikat.
Membuat Sertifikat melalui Easy-RSA
RSA Mudah adalah utilitas populer untuk membuat otoritas sertifikat root, meminta dan menandatangani sertifikat.
Langkah 1:Instal Easy-RSA
Untuk mengunduh paket Easy-RSA, Anda memerlukan curl. Jika Anda belum menginstal curl, instal dengan mengetik:
sudo apt install curl
Sekarang, ketik perintah curl berikut:
Curl -LO https://storage.googleapis.com/kubernetes-release/easy-rsa/easy-rsa.tar.gz
Buka paket arsip yang Anda unduh:
tar xzf easy-rsa.tar.gz
Buka easy-rsa-3.0.1/easyrsa3
direktori:
cd easy-rsa-master/easyrsa3
Setelah Anda berada di folder, ketik perintah berikut untuk menyelesaikan pengaturan Easy-RSA:
./easyrsa init-pki
Langkah 2:Buat CA yang Ditandatangani Sendiri
Untuk memulai pembuatan CA yang ditandatangani sendiri, gunakan perintah ini:
./easyrsa build-ca
Sistem meminta Anda mengetikkan frasa sandi PEM untuk mengenkripsi ca.key
mengajukan. Selanjutnya, prompt mengharuskan Anda memasukkan informasi tentang CA yang Anda buat.
Langkah 3:Buat Sertifikat dan Kunci Server
Langkah selanjutnya adalah membuat sertifikat dan kunci server menggunakan perintah multi-baris yang ditunjukkan di bawah ini. --subject-alt-name
opsi menyetel alamat IP dan nama DNS untuk mengakses server API.
--days
opsi mengontrol panjang validitas sertifikat.
cluster.local
adalah nama domain DNS default.
./easyrsa --subject-alt-name="IP:[master-IP-address]," \
"IP:[master-cluster-IP-address]," \
"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
Sistem meminta Anda untuk mengulangi frasa sandi yang Anda buat di langkah sebelumnya. Kemudian, output mengonfirmasi bahwa database telah diperbarui dengan entri baru. Salin pki/ca.crt
, pki/issued/server.crt
dan pki/private/server.key
file ke direktori Anda.
Membuat Sertifikat melalui OpenSSL
OpenSSL memungkinkan Anda membuat sertifikat TLS secara manual. Langkah-langkah berikut menunjukkan cara menggunakan OpenSSL untuk menghasilkan kunci dan sertifikat untuk cluster Anda.
Langkah 1:Instal OpenSSL
OpenSSL alat ini biasanya sudah diinstal sebelumnya pada sistem Linux. Periksa apakah Anda telah menginstalnya dengan mengetik:
openssl version -a
Outputnya terlihat seperti ini:
Jika Anda mendapatkan pesan yang mengatakan bahwa Anda tidak memiliki OpenSSL di sistem Anda, instal alat tersebut dengan manajer paket distribusi Anda.
Misalnya:
sudo apt install openssl
Langkah 2:Buat File Sertifikat
Gunakan perintah berikut untuk menghasilkan kunci terenkripsi RSA 2048-bit untuk penandatanganan sertifikat:
openssl genrsa -out ca.key 2048
Sekarang, gunakan ca.key
untuk menghasilkan ca.crt
. Gunakan -days
opsi untuk mengatur panjang validitas sertifikat:
openssl req -x509 -new -nodes -key ca.key -subj "/CN=[master-ip-address]" -days [number] -out ca.crt
Jika tidak terjadi kesalahan, perintah tidak menghasilkan keluaran.
Terakhir, buat server.key
file dengan enkripsi RSA 2048-bit:
openssl genrsa -out server.key 2048
Langkah 3:Buat File Konfigurasi Sertifikat
Buat csr.conf
file konfigurasi untuk menghasilkan Permintaan Penandatanganan Sertifikat (CSR). Contoh file di bawah ini juga mengasumsikan bahwa Anda 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 = [company]
OU = [organization-unit]
CN = [common-name]
[ 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
[email protected]_names
Pastikan Anda mengganti penjelasan dalam tanda kurung siku dengan nilai sebenarnya. Simpan file dan gunakan untuk membuat permintaan penandatanganan sertifikat:
openssl req -new -key server.key -out server.csr -config csr.conf
Perintah tidak menghasilkan keluaran, tetapi membuat server.csr
berkas.
Langkah 4:Buat Sertifikat
Gunakan file yang Anda buat pada langkah sebelumnya bersama dengan ca.key
dan ca.crt
untuk membuat sertifikat server:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key \
-CAcreateserial -out server.crt -days 10000 \
-extensions v3_ext -extfile csr.conf
Output dari perintah multi-baris ini mengonfirmasi pembuatan sertifikat dan mencantumkan data Anda dari file konfigurasi:
Untuk melihat sertifikat yang Anda buat, ketik:
openssl x509 -noout -text -in ./server.crt