在 Openshift 上使用 RabbitMQ Kubernetes Operator
概述
本文档详细介绍了在部署 RabbitMQ Kubernetes Operator(即 Cluster Operator 和 Messaging Topology Operator)时需要考虑的 Openshift 特有事项。需要注意的是,这些注意事项也适用于商业版 VMware Tanzu RabbitMQ Standby Replication Operator(请注意,该 Operator 仅包含在 VMware Tanzu RabbitMQ for Kubernetes 商业产品中)。
在大多数情况下,在 Openshift 上使用这些 Operator 的用户体验与在其他环境下相同;以下指南详细介绍了利用 Openshift 安全实践所需的额外工作,并说明了这些 Operator 在 Openshift 上的工作方式。
安装 Operator 的 RBAC 权限
为了安装这些 Operator,您需要以具备以下资源 CRUD 权限的用户身份通过 Openshift 集群认证:
- Namespace
- CustomResourceDefinition
- Deployment
- ServiceAccount
- Role
- ClusterRole
- RoleBinding
- ClusterRoleBinding
- Service
- ValidatingWebhookConfiguration
之后,您可以使用该用户按常规方式运行安装说明。
对任意用户 ID 的支持
Openshift 在运行 Pod 时使用任意分配的用户 ID (UID)。每个 Openshift 项目都会被分配一个 UID 范围,默认情况下,如果 Pod 以该范围之外的用户身份运行,则会启动失败。有关更多信息,请参阅 Openshift 文档。
在 Openshift 上部署 Operator 时,用于运行 Operator 二进制文件的 Pod 将使用 Openshift 所分配范围内的任意 UID 运行。这是默认行为,无需对 Operator 清单进行任何修改即可实现。
在部署 RabbitmqClusters 时,若要利用相同的安全特性,还需要进行一些额外的工作。默认情况下,RabbitMQ Cluster Operator 部署的 RabbitmqCluster Pod 具有固定的非 root UID。若要在 Openshift 上进行部署,必须覆盖这些 Pod 的安全上下文(Security Context)。这必须针对每个部署的 RabbitmqCluster,通过 override 字段来完成。
apiVersion: rabbitmq.com/v1beta1
kind: RabbitmqCluster
metadata:
...
spec:
...
override:
statefulSet:
spec:
template:
spec:
securityContext: {}
containers:
- name: rabbitmq
securityContext: {}
initContainers:
- name: setup-container
securityContext: {}
这将把 Pod 的 securityContext 重置为默认值,并确保 RabbitMQ Pod 在 Openshift 中也被分配了任意用户 ID。