Czym jest Secret w Kubernetes?¶
Jest to komponent w Kubernetes do przechowywania poufnych danych takich jak hasła, klucze API, klucze prywatne, certyfikaty.
Dane są zakodowane w Base64, a bezpieczeństwo ich przetrzymywania zależy, czy jest włączone szyfrowanie w etcd.
Warning
Dane nie są domyślnie szyfrowane, jedynie kodowane w Base64! Należy to skonfigurować po stronie klastra!
Trzeba włączyć Encryption at Rest w etcd.
Dlatego należy chociażby zakodować dane w Base64.
Zakodowanie danych w Base64¶
1. Przykład zakodowania hasła w Base64
Warning
Należy podać flagę -n dzięki której nie zostanie dodany na koniec znak nowej linii!
Gdyby była dodana, hasło podane przez administratora, a to zakodowane byłoby inne (z tym znakiem końca linii wtedy)!
np.
2. Dodajemy zakodowane hasła już bezpośrednio do manifestu Secret
Definicja Secret w manifeście¶
apiVersion: v1
kind: Secret
metadata:
name: <secret_name>
data:
<secret_key>: <base64_encoded_secret_value>
<secret_key2>: <base64_encoded_secret_value2>
Wdrożenie na klaster:
Wdrożenie Secret na Pod¶
Definicja Poda z Secret (wszystkimi zmiennymi z Secret):
apiVersion: v1
kind: Pod
metadata:
name: <pod_name>
spec:
containers:
- name: <container_name>
image: <image_name>
ports:
- containerPort: <container_port>
envFrom:
- secretRef:
name: <secret_name>
Definicja Poda z Secret (z wybraną zmienną):
apiVersion: v1
kind: Pod
metadata:
name: <pod_name>
spec:
containers:
- name: <container_name>
image: <image_name>
ports:
- containerPort: <container_port>
env:
name: <SECRET_NAME(ON POD)>
valueFrom:
secretKeyRef:
name: <defined_secret_name_on_cluster>
key: <KEY_VALUE_on_cluster>
Definicja Poda z woluminem: