Kubernetes 之 Secret
Secret 的定義
Secret 解決了密碼、token、秘鑰等敏感數據的配置問題,它避免了把這些敏感數據直接暴露在鏡像或者 Pod 的配置文件中。但是它只是一種相對安全的策略,我們還是可以在容器內找到這些信息。
Secret 的認證方式
認證方式 | 描述 |
---|---|
Generic | 用來給通用字符串進行加密 |
TLS | 用來加密 HTTPS、SSH 等密鑰 |
Docker Registry | 用來加密 Docker 倉庫登錄憑證 |
Secret 的使用
Secret 也存在多種加密類型,我們用其最常見的Base64
加密方式Opaque
。
apiVersion: v1
kind: Secret
metadata:name: secret-mysql
type: Opaque
data:MYSQL_ROOT_PASSWORD: Q2hhbmdlTWU=
root@k8s-master1:~# kubectl describe secret/secret-mysql
Name: secret-mysql
Namespace: default
Labels: <none>
Annotations: <none>Type: OpaqueData
====
MYSQL_ROOT_PASSWORD: 8 bytes
apiVersion: v1
kind: Pod
metadata:name: pod-secret
spec:containers:- name: secret-testimage: busyboxcommand: [ "/bin/sh", "-c", "sleep 3600" ]env:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: secret-mysqlkey: MYSQL_ROOT_PASSWORDvolumeMounts:- name: volume-secretmountPath: /etc/mysqlvolumes:- name: volume-secretsecret:secretName: secret-mysqlrestartPolicy: Never
root@k8s-master1:~# kubectl exec -it pod-secret -- /bin/sh
/ # env
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=pod-secret
SHLVL=1
HOME=/root
MYSQL_ROOT_PASSWORD=ChangeMe
TERM=xterm
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
/ # cat /etc/mysql/MYSQL_ROOT_PASSWORD
ChangeMe
/ #