Skip to content

Commit 8fef0e2

Browse files
authored
Merge pull request #21712 from ariscahyadi/id-local-task-pull-image
ID localization for pull-image-private-registry task.
2 parents 71ebd87 + d8c12dd commit 8fef0e2

File tree

2 files changed

+223
-0
lines changed

2 files changed

+223
-0
lines changed
Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
---
2+
title: Menarik Image dari Register Pribadi
3+
content_type: task
4+
weight: 100
5+
---
6+
7+
<!-- overview -->
8+
9+
Laman ini menunjukkan cara membuat Pod dengan menggunakan Secret untuk menarik _image_ dari sebuah
10+
register atau repositori pribadi untuk Docker.
11+
12+
13+
## {{% heading "prerequisites" %}}
14+
15+
16+
* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
17+
18+
* Untuk melakukan latihan ini, kamu memerlukan sebuah
19+
[nama pengguna (ID) Docker](https://docs.docker.com/docker-id/) dan kata sandi (_password_).
20+
21+
22+
<!-- steps -->
23+
24+
## Masuk (_login_) ke Docker {#masuk-ke-docker}
25+
26+
Pada laptop kamu, kamu harus melakukan autentikasi dengan register untuk menarik _image_ pribadi:
27+
28+
```shell
29+
docker login
30+
```
31+
32+
Ketika diminta, masukkan nama pengguna dan kata sandi Docker kamu.
33+
34+
Proses _login_ membuat atau memperbarui berkas `config.json` yang menyimpan sebuah _token_ otorisasi.
35+
36+
Lihatlah berkas `config.json`:
37+
38+
39+
```shell
40+
cat ~/.docker/config.json
41+
```
42+
43+
Keluaran berisi bagian yang serupa dengan ini:
44+
45+
```json
46+
{
47+
"auths": {
48+
"https://index.docker.io/v1/": {
49+
"auth": "c3R...zE2"
50+
}
51+
}
52+
}
53+
```
54+
55+
{{< note >}}
56+
Jika kamu menggunakan tempat penyimpanan kredensial (_credential_) untuk Docker, maka kamu tidak akan melihat entri `auth` tetapi entri `credsStore` dengan nama tempat penyimpanan sebagai nilainya.
57+
{{< /note >}}
58+
59+
## Membuat Secret berdasarkan kredensial Docker yang sudah ada {#register-secret-kredensial-yang-ada}
60+
61+
Klaster Kubernetes menggunakan Secret dari tipe `docker-registry` untuk melakukan autentikasi dengan
62+
register Container untuk menarik _image_ pribadi.
63+
64+
Jika kamu sudah menjalankan `docker login`, kamu dapat menyalin kredensial itu ke Kubernetes:
65+
66+
```shell
67+
kubectl create secret generic regcred \
68+
--from-file=.dockerconfigjson=<path/to/.docker/config.json> \
69+
--type=kubernetes.io/dockerconfigjson
70+
```
71+
72+
Jika kamu memerlukan lebih banyak kontrol (misalnya, untuk mengatur Namespace atau label baru pada Secret)
73+
maka kamu dapat menyesuaikan Secret tersebut sebelum menyimpannya.
74+
Pastikan untuk:
75+
76+
77+
- Mengatur nama dari pokok (_item_) data menjadi `.dockerconfigjson`
78+
- Melakukan enkode secara _base64_ dari Dockerfile (berkas Docker) dan memindahkan urutan huruf (_string_) tersebut, secara tidak terputus sebagai nilai untuk bidang `data[".dockerconfigjson"]`
79+
- Mengatur `type` menjadi `kubernetes.io/dockerconfigjson`
80+
81+
Sebagai contoh:
82+
83+
```yaml
84+
apiVersion: v1
85+
kind: Secret
86+
metadata:
87+
name: myregistrykey
88+
namespace: awesomeapps
89+
data:
90+
.dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
91+
type: kubernetes.io/dockerconfigjson
92+
```
93+
94+
Jika kamu mendapat pesan kesalahan `error: no objects passed to create`, ini berarti pengkodean _base64_ dari urutan huruf tersebut tidak valid.
95+
Jika kamu mendapat pesan kesalahan seperti `Secret "myregistrykey" is invalid: data[.dockerconfigjson]: invalid value ...`, ini berarti
96+
enkode _base64_ dari urutan huruf dalam data tersebut sukses didekodekan, tetapi tidak bisa diuraikan menjadi berkas `.docker/config.json`.
97+
98+
## Membuat Secret dengan memberikan kredensial pada baris perintah
99+
100+
Buatlah Secret ini, dan berilah nama `regcred`:
101+
102+
```shell
103+
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
104+
```
105+
106+
dimana:
107+
108+
* `<your-registry-server>` merupakan FQDN dari register privat Docker kamu. (https://index.docker.io/v1/ untuk DockerHub)
109+
* `<your-name>` adalah nama pengguna Docker kamu.
110+
* `<your-pword>` adalah kata sandi Docker kamu.
111+
* `<your-email>` adalah alamat email Docker kamu.
112+
113+
Kamu telah berhasil mengatur kredensial untuk Docker kamu pada klaster sebagai sebuah Secret yang dipanggil dengan nama `regcred`.
114+
115+
{{< note >}}
116+
117+
Mengetik Secret pada baris perintah dapat menyimpannya dalam riwayat (_history_) dari _shell_ kamu tanpa perlindungan, dan
118+
Secret tersebut mungkin juga terlihat oleh pengguna lain dalam PC kamu selama perintah `kubectl` sedang berjalan.
119+
{{< /note >}}
120+
121+
122+
## Menginspeksi Secret `regcred` {#menginspeksi-secret-regcred}
123+
124+
Untuk memahami isi Secret `regcred` yang baru saja kamu buat, mulailah dengan melihat Secret dalam format YAML:
125+
126+
```shell
127+
kubectl get secret regcred --output=yaml
128+
```
129+
Keluarannya akan seperti ini:
130+
131+
```yaml
132+
apiVersion: v1
133+
kind: Secret
134+
metadata:
135+
...
136+
name: regcred
137+
...
138+
data:
139+
.dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
140+
type: kubernetes.io/dockerconfigjson
141+
```
142+
143+
Nilai dari bidang `.dockerconfigjson` merupakan representasi dalam _base64_ dari kredensial Docker kamu.
144+
145+
Untuk memahami apa yang ada dalam bidang `.dockerconfigjson`, ubahlah data Secret menjadi format yang bisa terbaca:
146+
147+
```shell
148+
kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
149+
```
150+
151+
Keluarannya akan seperti ini:
152+
153+
```json
154+
{"auths":{"your.private.registry.example.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"[email protected]","auth":"c3R...zE2"}}}
155+
```
156+
157+
Untuk memahami apa yang ada dalam bidang `auth`, ubahlah data Secret menjadi format yang bisa terbaca:
158+
159+
```shell
160+
echo "c3R...zE2" | base64 --decode
161+
```
162+
163+
Keluarannya, nama pengguna dan kata sandi yang digabungkan dengan tanda `:`, seperti dibawah ini:
164+
165+
```none
166+
janedoe:xxxxxxxxxxx
167+
```
168+
169+
Perhatikan bahwa data Secret berisi token otorisasi yang serupa dengan berkas `~/.docker/config.json` lokal kamu.
170+
171+
Kamu telah berhasil menetapkan kredensial Docker kamu sebagai sebuah Secret yang dipanggil dengan `regcred` pada klaster.
172+
173+
174+
## Membuat Pod yang menggunakan Secret kamu
175+
176+
177+
Berikut ini adalah berkas konfigurasi untuk Pod yang memerlukan akses ke kredensial Docker kamu pada `regcred`:
178+
179+
{{< codenew file="pods/private-reg-pod.yaml" >}}
180+
181+
Unduh berkas diatas:
182+
183+
```shell
184+
wget -O my-private-reg-pod.yaml https://k8s.io/examples/pods/private-reg-pod.yaml
185+
```
186+
187+
Dalam berkas `my-private-reg-pod.yaml`, ubah `<your-private-image>` dengan tautan ke _image_ dalam register pribadi seperti ini:
188+
189+
```none
190+
your.private.registry.example.com/janedoe/jdoe-private:v1
191+
```
192+
193+
Untuk menarik _image_ dari register pribadi, Kubernetes memerlukan kredensial.
194+
Bidang `imagePullSecrets` dalam berkas konfigurasi menentukan bahwa Kubernetes harus mendapatkan kredensial dari Secret yang bernama `regcred`.
195+
196+
Buatlah Pod yang menggunakan Secret kamu, dan verifikasi bahwa Pod tersebut berjalan:
197+
198+
```shell
199+
kubectl apply -f my-private-reg-pod.yaml
200+
kubectl get pod private-reg
201+
```
202+
203+
204+
## {{% heading "whatsnext" %}}
205+
206+
207+
* Pelajari lebih lanjut tentang [Secret](/id/docs/concepts/configuration/secret/).
208+
* Pelajari lebih lanjut tentang [menggunakan register pribadi](/id/docs/concepts/containers/images/#menggunakan-register-privat).
209+
* Pelajari lebih lanjut tentang [menambahkan Secret untuk menarik _image_ ke dalam sebuah akun service](/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account).
210+
* Lihatlah [kubectl create secret docker-registry](/docs/reference/generated/kubectl/kubectl-commands/#-em-secret-docker-registry-em-).
211+
* Lihatlah [Secret](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#secret-v1-core).
212+
* Lihatlah bidang `imagePullSecrets` dari [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core).
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: private-reg
5+
spec:
6+
containers:
7+
- name: private-reg-container
8+
image: <image-pribadi-kamu>
9+
imagePullSecrets:
10+
- name: regcred
11+

0 commit comments

Comments
 (0)