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: Opaque
Data
====
MYSQL_ROOT_PASSWORD: 8 bytes
apiVersion: v1
kind: Pod
metadata:
name: pod-secret
spec:
containers:
- name: secret-test
image: busybox
command: [ "/bin/sh", "-c", "sleep 3600" ]
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: secret-mysql
key: MYSQL_ROOT_PASSWORD
volumeMounts:
- name: volume-secret
mountPath: /etc/mysql
volumes:
- name: volume-secret
secret:
secretName: secret-mysql
restartPolicy: 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
/ #