$ oc edit apiserver
默认情况下,OpenShift Container Platform 中的 etcd 数据未加密。您可以为集群启用 etcd 加密,以提供额外的数 据安全层。例如,如果 etcd 备份暴露给不正确的方,它可以帮助保护敏感数据丢失。
启用 etcd 加密后,以下 OpenShift API 服务器和 Kubernetes API 服务器资源将被加密:
密钥
配置映射
路由
OAuth 访问令牌
OAuth 授权令牌
启用 etcd 加密后,将创建加密密钥。您必须拥有这些密钥才能从 etcd 备份中恢复。
Etcd 加密仅加密值,不加密密钥。资源类型、命名空间和对象名称未加密。 如果在备份期间启用了 etcd 加密,则 |
以下加密类型受支持,用于在 OpenShift Container Platform 中加密 etcd 数据:
使用带有 PKCS#7 填充和 32 字节密钥的 AES-CBC 执行加密。加密密钥每周轮换一次。
使用带有随机 nonce 和 32 字节密钥的 AES-GCM 执行加密。加密密钥每周轮换一次。
您可以启用 etcd 加密来加密集群中的敏感资源。
在初始加密过程完成之前,请勿备份 etcd 资源。如果加密过程未完成,则备份可能仅部分加密。 启用 etcd 加密后,可能会发生以下几种变化:
|
您可以使用 AES-GCM 或 AES-CBC 加密来加密 etcd 数据库。
要将 etcd 数据库从一种加密类型迁移到另一种加密类型,您可以修改 API 服务器的 |
以具有cluster-admin
角色的用户身份访问集群。
修改APIServer
对象
$ oc edit apiserver
将spec.encryption.type
字段设置为aesgcm
或aescbc
spec:
encryption:
type: aesgcm (1)
1 | 对于 AES-GCM 加密,设置为aesgcm ;对于 AES-CBC 加密,设置为aescbc 。 |
保存文件以应用更改。
加密过程开始。此过程的完成时间可能需要 20 分钟或更长时间,具体取决于 etcd 数据库的大小。
验证 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
,则加密仍在进行中。请等待几分钟后再试。
您可以禁用集群中 etcd 数据的加密。
以具有cluster-admin
角色的用户身份访问集群。
修改APIServer
对象
$ oc edit apiserver
将encryption
字段类型设置为identity
spec:
encryption:
type: identity (1)
1 | identity 类型是默认值,表示不执行任何加密。 |
保存文件以应用更改。
解密过程开始。此过程的完成时间可能需要 20 分钟或更长,具体取决于集群的大小。
验证 etcd 解密是否成功。
查看 OpenShift API 服务器的Encrypted
状态条件,以验证其资源是否已成功解密。
$ oc get openshiftapiserver -o=jsonpath='{range .items[0].status.conditions[?(@.type=="Encrypted")]}{.reason}{"\n"}{.message}{"\n"}'
解密成功后,输出显示DecryptionCompleted
DecryptionCompleted
Encryption mode set to identity and everything is decrypted
如果输出显示DecryptionInProgress
,则解密仍在进行中。请等待几分钟后再试。
查看 Kubernetes API 服务器的Encrypted
状态条件,以验证其资源是否已成功解密。
$ oc get kubeapiserver -o=jsonpath='{range .items[0].status.conditions[?(@.type=="Encrypted")]}{.reason}{"\n"}{.message}{"\n"}'
解密成功后,输出显示DecryptionCompleted
DecryptionCompleted
Encryption mode set to identity and everything is decrypted
如果输出显示DecryptionInProgress
,则解密仍在进行中。请等待几分钟后再试。
查看 OpenShift OAuth API 服务器的Encrypted
状态条件,以验证其资源是否已成功解密。
$ oc get authentication.operator.openshift.io -o=jsonpath='{range .items[0].status.conditions[?(@.type=="Encrypted")]}{.reason}{"\n"}{.message}{"\n"}'
解密成功后,输出显示DecryptionCompleted
DecryptionCompleted
Encryption mode set to identity and everything is decrypted
如果输出显示DecryptionInProgress
,则解密仍在进行中。请等待几分钟后再试。