Menarik Image dari Register Pribadi
Laman ini menunjukkan cara membuat Pod dengan menggunakan Secret untuk menarik image dari sebuah register atau repositori pribadi untuk Docker.
Sebelum kamu memulai
-
Kamu harus memiliki klaster Kubernetes, dan perangkat baris perintah kubectl juga harus dikonfigurasikan untuk berkomunikasi dengan klastermu. Jika kamu belum memiliki klaster, kamu dapat membuatnya dengan menggunakan minikube, atau kamu juga dapat menggunakan salah satu dari tempat mencoba Kubernetes berikut ini:
Untuk melihat versi, tekankubectl version
. -
Untuk melakukan latihan ini, kamu memerlukan sebuah nama pengguna (ID) Docker dan kata sandi (password).
Masuk (login) ke Docker
Pada laptop kamu, kamu harus melakukan autentikasi dengan register untuk menarik image pribadi:
docker login
Ketika diminta, masukkan nama pengguna dan kata sandi Docker kamu.
Proses login membuat atau memperbarui berkas config.json
yang menyimpan sebuah token otorisasi.
Lihatlah berkas config.json
:
cat ~/.docker/config.json
Keluaran berisi bagian yang serupa dengan ini:
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "c3R...zE2"
}
}
}
auth
tetapi entri credsStore
dengan nama tempat penyimpanan sebagai nilainya.
Membuat Secret berdasarkan kredensial Docker yang sudah ada
Klaster Kubernetes menggunakan Secret dari tipe docker-registry
untuk melakukan autentikasi dengan
register Container untuk menarik image pribadi.
Jika kamu sudah menjalankan docker login
, kamu dapat menyalin kredensial itu ke Kubernetes:
kubectl create secret generic regcred \
--from-file=.dockerconfigjson=<path/to/.docker/config.json> \
--type=kubernetes.io/dockerconfigjson
Jika kamu memerlukan lebih banyak kontrol (misalnya, untuk mengatur Namespace atau label baru pada Secret) maka kamu dapat menyesuaikan Secret tersebut sebelum menyimpannya. Pastikan untuk:
- Mengatur nama dari pokok (item) data menjadi
.dockerconfigjson
- Melakukan enkode secara base64 dari Dockerfile (berkas Docker) dan memindahkan urutan huruf (string) tersebut, secara tidak terputus sebagai nilai untuk bidang
data[".dockerconfigjson"]
- Mengatur
type
menjadikubernetes.io/dockerconfigjson
Sebagai contoh:
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
namespace: awesomeapps
data:
.dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson
Jika kamu mendapat pesan kesalahan error: no objects passed to create
, ini berarti pengkodean base64 dari urutan huruf tersebut tidak valid.
Jika kamu mendapat pesan kesalahan seperti Secret "myregistrykey" is invalid: data[.dockerconfigjson]: invalid value ...
, ini berarti
enkode base64 dari urutan huruf dalam data tersebut sukses didekodekan, tetapi tidak bisa diuraikan menjadi berkas .docker/config.json
.
Membuat Secret dengan memberikan kredensial pada baris perintah
Buatlah Secret ini, dan berilah nama regcred
:
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
dimana:
<your-registry-server>
merupakan FQDN dari register privat Docker kamu. (https://index.docker.io/v1/ untuk DockerHub)<your-name>
adalah nama pengguna Docker kamu.<your-pword>
adalah kata sandi Docker kamu.<your-email>
adalah alamat email Docker kamu.
Kamu telah berhasil mengatur kredensial untuk Docker kamu pada klaster sebagai sebuah Secret yang dipanggil dengan nama regcred
.
kubectl
sedang berjalan.
Menginspeksi Secret regcred
Untuk memahami isi Secret regcred
yang baru saja kamu buat, mulailah dengan melihat Secret dalam format YAML:
kubectl get secret regcred --output=yaml
Keluarannya akan seperti ini:
apiVersion: v1
kind: Secret
metadata:
...
name: regcred
...
data:
.dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
type: kubernetes.io/dockerconfigjson
Nilai dari bidang .dockerconfigjson
merupakan representasi dalam base64 dari kredensial Docker kamu.
Untuk memahami apa yang ada dalam bidang .dockerconfigjson
, ubahlah data Secret menjadi format yang bisa terbaca:
kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
Keluarannya akan seperti ini:
{"auths":{"your.private.registry.example.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"[email protected]","auth":"c3R...zE2"}}}
Untuk memahami apa yang ada dalam bidang auth
, ubahlah data Secret menjadi format yang bisa terbaca:
echo "c3R...zE2" | base64 --decode
Keluarannya, nama pengguna dan kata sandi yang digabungkan dengan tanda :
, seperti dibawah ini:
janedoe:xxxxxxxxxxx
Perhatikan bahwa data Secret berisi token otorisasi yang serupa dengan berkas ~/.docker/config.json
lokal kamu.
Kamu telah berhasil menetapkan kredensial Docker kamu sebagai sebuah Secret yang dipanggil dengan regcred
pada klaster.
Membuat Pod yang menggunakan Secret kamu
Berikut ini adalah berkas konfigurasi untuk Pod yang memerlukan akses ke kredensial Docker kamu pada regcred
:
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image: <image-pribadi-kamu>
imagePullSecrets:
- name: regcred
Unduh berkas diatas:
wget -O my-private-reg-pod.yaml https://k8s.io/examples/pods/private-reg-pod.yaml
Dalam berkas my-private-reg-pod.yaml
, ubah <your-private-image>
dengan tautan ke image dalam register pribadi seperti ini:
your.private.registry.example.com/janedoe/jdoe-private:v1
Untuk menarik image dari register pribadi, Kubernetes memerlukan kredensial.
Bidang imagePullSecrets
dalam berkas konfigurasi menentukan bahwa Kubernetes harus mendapatkan kredensial dari Secret yang bernama regcred
.
Buatlah Pod yang menggunakan Secret kamu, dan verifikasi bahwa Pod tersebut berjalan:
kubectl apply -f my-private-reg-pod.yaml
kubectl get pod private-reg
Selanjutnya
- Pelajari lebih lanjut tentang Secret.
- Pelajari lebih lanjut tentang menggunakan register pribadi.
- Pelajari lebih lanjut tentang menambahkan Secret untuk menarik image ke dalam sebuah akun service.
- Lihatlah kubectl create secret docker-registry.
- Lihatlah Secret.
- Lihatlah bidang
imagePullSecrets
dari PodSpec.