15.3. 启用 etcd 加密
您可以启用 etcd 加密来加密集群中的敏感资源。
在初始加密过程完成前,不要备份 etcd 资源。如果加密过程还没有完成,则备份可能只被部分加密。
启用 etcd 加密后,可能会出现一些更改:
- etcd 加密可能会影响几个资源的内存消耗。
- 您可能会注意到对备份性能具有临时影响,因为领导必须提供备份服务。
- 磁盘 I/O 可能会影响接收备份状态的节点。
您可以在 AES-GCM 或 AES-CBC 加密中加密 etcd 数据库。
要将 etcd 数据库从一个加密类型迁移到另一个加密类型,您可以修改 API 服务器的 spec.encryption.type
字段。将 etcd 数据迁移到新的加密类型会自动进行。
先决条件
-
使用具有
cluster-admin
角色的用户访问集群。
流程
修改
APIServer
对象:$ oc edit apiserver
将
spec.encryption.type
字段设置为aesgcm
或aescbc
:spec: encryption: type: aesgcm 1
- 1
- 设置为
aesgcm
用于 AES-GCM 加密,或设置为aescbc
用于 AES-CBC 加密。
保存文件以使改变生效。
加密过程开始。根据 etcd 数据库的大小,这个过程可能需要 20 分钟或更长时间才能完成。
验证 etcd 加密是否成功。
查看 OpenShift API 服务器的
Encrypted
状态条件,以验证其资源是否已成功加密:$ oc get openshiftapiserver -o=jsonpath='{range .items[0].status.conditions[?(@.type=="Encrypted")]}{.reason}{"\n"}{.message}{"\n"}'
在成功加密后输出显示
EncryptionCompleted
:EncryptionCompleted All resources encrypted: routes.route.openshift.io
如果输出显示
EncryptionInProgress
,加密仍在进行中。等待几分钟后重试。查看 Kubernetes API 服务器的
Encrypted
状态条件,以验证其资源是否已成功加密:$ oc get kubeapiserver -o=jsonpath='{range .items[0].status.conditions[?(@.type=="Encrypted")]}{.reason}{"\n"}{.message}{"\n"}'
在成功加密后输出显示
EncryptionCompleted
:EncryptionCompleted All resources encrypted: secrets, configmaps
如果输出显示
EncryptionInProgress
,加密仍在进行中。等待几分钟后重试。查看 OpenShift OAuth API 服务器的
Encrypted
状态条件,以验证其资源是否已成功加密:$ oc get authentication.operator.openshift.io -o=jsonpath='{range .items[0].status.conditions[?(@.type=="Encrypted")]}{.reason}{"\n"}{.message}{"\n"}'
在成功加密后输出显示
EncryptionCompleted
:EncryptionCompleted All resources encrypted: oauthaccesstokens.oauth.openshift.io, oauthauthorizetokens.oauth.openshift.io
如果输出显示
EncryptionInProgress
,加密仍在进行中。等待几分钟后重试。