Kubernetes静态加密密码
时间:2020-01-09 10:34:20 来源:igfitidea点击:
说明
Kubernetes有一个内置的"secrets"对象,它使我们可以存储应用程序的敏感信息。例如,这使我们可以将后端数据库凭据与Pod规范分开。
Kubernetes机密存储在集群的etcd数据库中。虽然这为整个群集提供了访问权限,但数据库未加密。
在本教程中,我们将研究为应用程序创建新的机密,然后Pod如何获取这些机密。
然后,我们将通过确保静态密码被加密来改善密码的安全性。
配置加密提供程序
- 生成一个32字节的随机密钥,并对其进行base64编码。
head -c 32 /dev/urandom | base64
输出将类似于以下示例。记下输出,因为我们将在配置文件中使用它。
WxaW1k22mu3M/WYMIWYVOkAOrOTJ17+Q5+McAIqK3bM=
- 创建一个名为/etc/kubernetes/pki/secrets.yml的新文件
- 在其内容中添加以下内容。
kind: EncryptionConfiguration apiVersion: apiserver.config.k8s.io/v1 resources: - resources: - secrets providers: - aescbc: keys: - name: key1 secret: MnBTeg6QwRCS2/ZGynIAKtU48n+zgQHLldDIZibIuW0= - identity: {}
用我们之前创建的base64编码密钥替换key1的秘密值。
将加密提供程序配置添加到Kubernetes的API控制器
- 打开Kubernetes API服务器的配置文件。
vi /etc/kubernetes/manifests/kube-apiserver.yaml
- 查找以下部分
spec: containers: - command: - kube-apiserver - --authorization-mode=Node,RBAC [...]
并在-kube-apiserver
下添加以下行。
- --encryption-provider-config=/etc/kubernetes/pki/secrets.yaml
- 保存到清单的更改将由API控制器自动加载。无需重新启动服务。
旋转钥匙
一般的经验法则是定期旋转密钥,以确保秘密得到保护。为此,我们向加密提供程序配置文件中添加了第二个新生成的密钥,并通过删除原始密钥来完成该过程。
- 生成一个新的base64编码密钥。
head -c 32 /dev/urandom | base64
- 打开加密提供程序文件。
sudo vi /etc/kubernetes/pki/sercrets.yaml
- 将第二个密钥添加到提供程序。
kind: EncryptionConfiguration apiVersion: apiserver.config.k8s.io/v1 resources: - resources: - secrets providers: - aescbc: keys: - name: key1 secret: MnBTeg6QwRCS2/ZGynIAKtU48n+zgQHLldDIZibIuW0= - name: key2 secret: MRP2QNqGum6UowzL/aqmOG+luwn+/kQdxVuJxDjvlJI= - identity: {}
- 保存更改,然后重新启动API Controller。
- 再次打开加密提供程序文件,然后用第二个密钥替换第一个密钥并删除第二个条目。
kind: EncryptionConfiguration apiVersion: apiserver.config.k8s.io/v1 resources: - resources: - secrets providers: - aescbc: keys: - name: key1 secret: MRP2QNqGum6UowzL/aqmOG+luwn+/kQdxVuJxDjvlJI= - identity: {}
- 再次保存更改,然后重新启动API Controller。