Kubernetes - Segreti
I segreti possono essere definiti come oggetti Kubernetes utilizzati per archiviare dati sensibili come nome utente e password con crittografia.
Esistono diversi modi per creare segreti in Kubernetes.
- Creazione da file txt.
- Creazione da file yaml.
Creazione da file di testo
Per creare segreti da un file di testo come nome utente e password, dobbiamo prima memorizzarli in un file txt e utilizzare il seguente comando.
$ kubectl create secret generic tomcat-passwd –-from-file = ./username.txt –fromfile = ./.
password.txt
Creazione da file Yaml
apiVersion: v1
kind: Secret
metadata:
name: tomcat-pass
type: Opaque
data:
password: <User Password>
username: <User Name>
Creare il segreto
$ kubectl create –f Secret.yaml
secrets/tomcat-pass
Usare i segreti
Una volta creati i segreti, può essere utilizzato in un pod o nel controller di replica come:
- Variabile d'ambiente
- Volume
Come variabile d'ambiente
Per utilizzare il segreto come variabile d'ambiente, useremo env nella sezione delle specifiche del file pod yaml.
env:
- name: SECRET_USERNAME
valueFrom:
secretKeyRef:
name: mysecret
key: tomcat-pass
Come volume
spec:
volumes:
- name: "secretstest"
secret:
secretName: tomcat-pass
containers:
- image: tomcat:7.0
name: awebserver
volumeMounts:
- mountPath: "/tmp/mysec"
name: "secretstest"
Configurazione segreta come variabile d'ambiente
apiVersion: v1
kind: ReplicationController
metadata:
name: appname
spec:
replicas: replica_count
template:
metadata:
name: appname
spec:
nodeSelector:
resource-group:
containers:
- name: appname
image:
imagePullPolicy: Always
ports:
- containerPort: 3000
env: -----------------------------> 1
- name: ENV
valueFrom:
configMapKeyRef:
name: appname
key: tomcat-secrets
Nel codice sopra, sotto env definizione, stiamo usando i segreti come variabile di ambiente nel controller di replica.
Segreti come volume di montaggio
apiVersion: v1
kind: pod
metadata:
name: appname
spec:
metadata:
name: appname
spec:
volumes:
- name: "secretstest"
secret:
secretName: tomcat-pass
containers:
- image: tomcat: 8.0
name: awebserver
volumeMounts:
- mountPath: "/tmp/mysec"
name: "secretstest"