|
| 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). |
0 commit comments