/    /  Kubernetes – Secrets

Kubernetes – Secrets

 

User names and passwords are stored in secrets, Kubernetes objects.

Kubernetes has multiple ways to create secrets.

  • Creating from txt files.
  • Creating from yaml file.

Creating From Text File

Using the following command, you can create user names and passwords from a text file.

$ kubectl create secret generic tomcat-passwd --from-file = ./username.txt –fromfile = ./.
password.txt

Creating From Yaml File

apiVersion: v1
kind: Secret
metadata:
name: tomcat-pass
type: Opaque
data:
   password: <User Password>
   username: <User Name>

Creating the Secret

$ kubectl create –f Secret.yaml
secrets/tomcat-pass

Using Secrets

Pods or replication controllers can consume the secrets once we’ve created them

  • Environment Variable
  • Volume

Environment Variable

The secret will be set as an environment variable under the spec section of the pod yaml file.

env:
- name: SECRET_USERNAME
   valueFrom:
      secretKeyRef:
         name: my-secret
         key: tomcat-pass

Volume

spec:
   volumes:
      - name: "secrets-test"
         secret:
            secretName: tomcat-pass
   containers:
      - image: tomcat:7.0
         name: webserver
         volumeMounts:
            - mountPath: "/tmp/mysec"
            name: "secrets-test"

Secret Configuration as Environment Variable

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

We are using secrets as an environment variable in the replication controller in the above code.

Secrets As Volume Mount

apiVersion: v1
kind: pod
metadata:
   name: appname
spec:
   metadata:
      name: appname
   spec:
   volumes:
      - name: "secrets-test"
         secret:
            secretName: tomcat-pass
   containers:
      - image: tomcat: 8.0
         name: webserver
         volumeMounts:
            - mountPath: "/tmp/mysec"
            name: "secrets-test"