Skip to content

Commit c69afa2

Browse files
authored
Merge pull request #22924 from danninov/id/distribute-credentials-secure
Add ID localization distribute-credentials-secure
2 parents cc677c8 + 589279a commit c69afa2

File tree

6 files changed

+321
-0
lines changed

6 files changed

+321
-0
lines changed
Lines changed: 253 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,253 @@
1+
---
2+
title: Mendistribusikan Kredensial dengan Aman Menggunakan Secret
3+
content_type: task
4+
weight: 50
5+
min-kubernetes-server-version: v1.6
6+
---
7+
8+
<!-- overview -->
9+
Laman ini menjelaskan bagaimana cara menginjeksi data sensitif, seperti kata sandi (_password_) dan kunci enkripsi, ke dalam Pod.
10+
11+
12+
## {{% heading "prerequisites" %}}
13+
14+
15+
{{< include "task-tutorial-prereqs.md" >}}
16+
17+
### Mengubah data rahasia kamu ke dalam representasi Base64
18+
19+
Misalnya kamu mempunyai dua buah data rahasia: sebuah nama pengguna `my-app` dan kata sandi
20+
`39528$vdg7Jb`. Pertama, gunakan alat penyandian Base64 untuk mengubah nama pengguna kamu dan kata sandi ke dalam representasi Base64. Berikut ini contoh menggunakan program Base64 yang umum digunakan:
21+
22+
```shell
23+
echo -n 'my-app' | base64
24+
echo -n '39528$vdg7Jb' | base64
25+
```
26+
27+
Hasil keluaran menampilkan representasi Base64 dari nama pengguna kamu yaitu `bXktYXBw`,
28+
dan representasi Base64 dari kata sandi kamu yaitu `Mzk1MjgkdmRnN0pi`.
29+
30+
{{< caution >}}
31+
Gunakan alat yang telah dipercayai oleh OS kamu untuk menghindari risiko dari penggunaan alat eksternal.
32+
{{< /caution >}}
33+
34+
<!-- steps -->
35+
36+
## Membuat Secret
37+
38+
Berikut ini adalah berkas konfigurasi yang dapat kamu gunakan untuk membuat Secret yang akan menampung nama pengguna dan kata sandi kamu:
39+
40+
{{< codenew file="pods/inject/secret.yaml" >}}
41+
42+
1. Membuat Secret
43+
44+
```shell
45+
kubectl apply -f https://k8s.io/examples/pods/inject/secret.yaml
46+
```
47+
48+
1. Melihat informasi dari Secret:
49+
50+
```shell
51+
kubectl get secret test-secret
52+
```
53+
54+
Hasil keluaran:
55+
56+
```
57+
NAME TYPE DATA AGE
58+
test-secret Opaque 2 1m
59+
```
60+
61+
1. Melihat informasi detil dari Secret:
62+
63+
```shell
64+
kubectl describe secret test-secret
65+
```
66+
67+
Hasil keluaran:
68+
69+
```
70+
Name: test-secret
71+
Namespace: default
72+
Labels: <none>
73+
Annotations: <none>
74+
75+
Type: Opaque
76+
77+
Data
78+
====
79+
password: 13 bytes
80+
username: 7 bytes
81+
```
82+
83+
### Membuat Secret langsung dengan kubectl
84+
85+
Jika kamu ingin melompati langkah penyandian dengan Base64, kamu dapat langsung membuat Secret yang sama dengan menggunakan perintah `kubectl create secret`. Contohnya:
86+
87+
```shell
88+
kubectl create secret generic test-secret --from-literal='username=my-app' --from-literal='password=39528$vdg7Jb'
89+
```
90+
91+
Tentu saja ini lebih mudah. Pendekatan yang mendetil setiap langkah di atas bertujuan untuk mendemonstrasikan apa yang sebenarnya terjadi pada setiap langkah.
92+
93+
94+
## Membuat Pod yang memiliki akses ke data Secret melalui Volume
95+
96+
Berikut ini adalah berkas konfigurasi yang dapat kamu gunakan untuk membuat Pod:
97+
98+
{{< codenew file="pods/inject/secret-pod.yaml" >}}
99+
100+
1. Membuat Pod:
101+
102+
```shell
103+
kubectl apply -f https://k8s.io/examples/pods/inject/secret-pod.yaml
104+
```
105+
106+
1. Verifikasikan apakah Pod kamu sudah berjalan:
107+
108+
```shell
109+
kubectl get pod secret-test-pod
110+
```
111+
112+
Hasil keluaran:
113+
```
114+
NAME READY STATUS RESTARTS AGE
115+
secret-test-pod 1/1 Running 0 42m
116+
```
117+
118+
1. Gunakan _shell_ untuk masuk ke dalam Container yang berjalan di dalam Pod kamu:
119+
```shell
120+
kubectl exec -i -t secret-test-pod -- /bin/bash
121+
```
122+
123+
1. Data Secret terekspos ke Container melalui Volume yang dipasang (_mount_) pada
124+
`/etc/secret-volume`.
125+
126+
Di dalam _shell_ kamu, tampilkan berkas yang ada di dalam direktori `/etc/secret-volume`:
127+
```shell
128+
# Jalankan ini di dalam shell dalam Container
129+
ls /etc/secret-volume
130+
```
131+
Hasil keluaran menampilkan dua buah berkas, masing-masing untuk setiap data Secret:
132+
```
133+
password username
134+
```
135+
136+
1. Di dalam _shell_ kamu, tampilkan konten dari berkas `username` dan `password`:
137+
```shell
138+
# Jalankan ini di dalam shell dalam Container
139+
echo "$( cat /etc/secret-volume/username )"
140+
echo "$( cat /etc/secret-volume/password )"
141+
```
142+
Hasil keluarannya adalah nama pengguna dan kata sandi kamu:
143+
```
144+
my-app
145+
39528$vdg7Jb
146+
```
147+
148+
## Mendefinisikan variabel lingkungan Container menggunakan data Secret
149+
150+
### Mendefinisikan variabel lingkungan Container menggunakan data dari Secret tunggal
151+
152+
* Definisikan variabel lingkungan sebagai pasangan _key-value_ pada Secret:
153+
154+
```shell
155+
kubectl create secret generic backend-user --from-literal=backend-username='backend-admin'
156+
```
157+
158+
* Tentukan nilai `backend-username` yang didefinisikan di Secret ke variabel lingkungan `SECRET_USERNAME` di dalam spesifikasi Pod.
159+
160+
{{< codenew file="pods/inject/pod-single-secret-env-variable.yaml" >}}
161+
162+
* Membuat Pod:
163+
164+
```shell
165+
kubectl create -f https://k8s.io/examples/pods/inject/pod-single-secret-env-variable.yaml
166+
```
167+
168+
* Di dalam _shell_ kamu, tampilkan konten dari variabel lingkungan `SECRET_USERNAME` dari Container
169+
170+
```shell
171+
kubectl exec -i -t env-single-secret -- /bin/sh -c 'echo $SECRET_USERNAME'
172+
```
173+
174+
Hasil keluarannya
175+
```
176+
backend-admin
177+
```
178+
179+
### Mendefinisikan variabel lingkungan Container dengan data dari multipel Secret
180+
181+
* Seperti contoh sebelumnya, buat Secret terlebih dahulu.
182+
183+
```shell
184+
kubectl create secret generic backend-user --from-literal=backend-username='backend-admin'
185+
kubectl create secret generic db-user --from-literal=db-username='db-admin'
186+
```
187+
188+
* Definisikan variabel lingkungan di dalam spesifikasi Pod.
189+
190+
{{< codenew file="pods/inject/pod-multiple-secret-env-variable.yaml" >}}
191+
192+
* Membuat Pod:
193+
194+
```shell
195+
kubectl create -f https://k8s.io/examples/pods/inject/pod-multiple-secret-env-variable.yaml
196+
```
197+
198+
* Di dalam _shell_ kamu, tampilkan konten dari variabel lingkungan Container
199+
200+
```shell
201+
kubectl exec -i -t envvars-multiple-secrets -- /bin/sh -c 'env | grep _USERNAME'
202+
```
203+
Hasil keluarannya
204+
```
205+
DB_USERNAME=db-admin
206+
BACKEND_USERNAME=backend-admin
207+
```
208+
209+
210+
## Mengonfigurasi semua pasangan _key-value_ di dalam Secret sebagai variabel lingkungan Container
211+
212+
{{< note >}}
213+
Fitur ini tersedia mulai dari Kubernetes v1.6 dan yang lebih baru.
214+
{{< /note >}}
215+
216+
* Membuat Secret yang berisi banyak pasangan _key-value_
217+
218+
```shell
219+
kubectl create secret generic test-secret --from-literal=username='my-app' --from-literal=password='39528$vdg7Jb'
220+
```
221+
222+
* Gunakan envFrom untuk mendefinisikan semua data Secret sebagai variabel lingkungan Container. _Key_ dari Secret akan mennjadi nama variabel lingkungan di dalam Pod.
223+
224+
{{< codenew file="pods/inject/pod-secret-envFrom.yaml" >}}
225+
226+
* Membuat Pod:
227+
228+
```shell
229+
kubectl create -f https://k8s.io/examples/pods/inject/pod-secret-envFrom.yaml
230+
```
231+
232+
* Di dalam _shell_ kamu, tampilkan variabel lingkungan Container `username` dan `password`
233+
234+
```shell
235+
kubectl exec -i -t envfrom-secret -- /bin/sh -c 'echo "username: $username\npassword: $password\n"'
236+
```
237+
238+
Hasil keluarannya
239+
```
240+
username: my-app
241+
password: 39528$vdg7Jb
242+
```
243+
244+
### Referensi
245+
246+
* [Secret](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#secret-v1-core)
247+
* [Volume](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#volume-v1-core)
248+
* [Pod](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#pod-v1-core)
249+
250+
## {{% heading "whatsnext" %}}
251+
252+
* Pelajari lebih lanjut [Secret](/id/docs/concepts/configuration/secret/).
253+
* Pelajari lebih lanjut [Volume](/id/docs/concepts/storage/volumes/).
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: envvars-multiple-secrets
5+
spec:
6+
containers:
7+
- name: envars-test-container
8+
image: nginx
9+
env:
10+
- name: BACKEND_USERNAME
11+
valueFrom:
12+
secretKeyRef:
13+
name: backend-user
14+
key: backend-username
15+
- name: DB_USERNAME
16+
valueFrom:
17+
secretKeyRef:
18+
name: db-user
19+
key: db-username
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: envfrom-secret
5+
spec:
6+
containers:
7+
- name: envars-test-container
8+
image: nginx
9+
envFrom:
10+
- secretRef:
11+
name: test-secret
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: env-single-secret
5+
spec:
6+
containers:
7+
- name: envars-test-container
8+
image: nginx
9+
env:
10+
- name: SECRET_USERNAME
11+
valueFrom:
12+
secretKeyRef:
13+
name: backend-user
14+
key: backend-username
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: secret-test-pod
5+
spec:
6+
containers:
7+
- name: test-container
8+
image: nginx
9+
volumeMounts:
10+
# nama harus sesuai dengan nama Volume di bawah ini
11+
- name: secret-volume
12+
mountPath: /etc/secret-volume
13+
# Data Secret diekspos ke Container di dalam Pod melalui Volume
14+
volumes:
15+
- name: secret-volume
16+
secret:
17+
secretName: test-secret
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: test-secret
5+
data:
6+
username: bXktYXBw
7+
password: Mzk1MjgkdmRnN0pi

0 commit comments

Comments
 (0)