Kubernetes - ความลับ

ความลับสามารถกำหนดเป็นออบเจ็กต์ Kubernetes ที่ใช้ในการจัดเก็บข้อมูลที่ละเอียดอ่อนเช่นชื่อผู้ใช้และรหัสผ่านด้วยการเข้ารหัส

มีหลายวิธีในการสร้างความลับใน Kubernetes

  • สร้างจากไฟล์ txt
  • สร้างจากไฟล์ yaml

การสร้างจากไฟล์ข้อความ

ในการสร้างความลับจากไฟล์ข้อความเช่นชื่อผู้ใช้และรหัสผ่านอันดับแรกเราต้องเก็บไว้ในไฟล์ txt และใช้คำสั่งต่อไปนี้

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

การสร้างจากไฟล์ Yaml

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

การสร้างความลับ

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

การใช้ความลับ

เมื่อเราสร้างความลับแล้วก็สามารถใช้ในพ็อดหรือตัวควบคุมการจำลองเป็น -

  • ตัวแปรสภาพแวดล้อม
  • Volume

เป็นตัวแปรสภาพแวดล้อม

ในการใช้ความลับเป็นตัวแปรสภาพแวดล้อมเราจะใช้ env ภายใต้ส่วนข้อมูลจำเพาะของไฟล์ pod yaml

env:
- name: SECRET_USERNAME
   valueFrom:
      secretKeyRef:
         name: mysecret
         key: tomcat-pass

เป็น Volume

spec:
   volumes:
      - name: "secretstest"
         secret:
            secretName: tomcat-pass
   containers:
      - image: tomcat:7.0
         name: awebserver
         volumeMounts:
            - mountPath: "/tmp/mysec"
            name: "secretstest"

การกำหนดค่าความลับเป็นตัวแปรสภาพแวดล้อม

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

ในรหัสด้านบนภายใต้ env นิยามเราใช้ความลับเป็นตัวแปรสภาพแวดล้อมในตัวควบคุมการจำลอง

ความลับเป็น Volume Mount

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"