Skip to content

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

echo -n '<hasło>' | 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.

echo -n 'haslo123' | base64

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:

kubectl apply -f <nazwa_secret-file>.yaml

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:

...
volumes:
    - name: <secret_volume>
      secret:
          secretName: <secret_name>
...