安装OpenShift Container Platform后,您可以根据需要进一步扩展和自定义集群,包括采取步骤为用户做好准备。
OpenShift Container Platform控制平面包含一个内置的OAuth服务器。开发人员和管理员获取OAuth访问令牌以向API进行身份验证。
作为管理员,您可以在安装集群后配置OAuth以指定身份提供程序。
默认情况下,集群中只存在kubeadmin
用户。要指定身份提供程序,您必须创建一个描述该身份提供程序的自定义资源(CR),并将其添加到集群。
OpenShift Container Platform用户名中包含 |
您可以配置以下类型的身份提供程序
身份提供程序 | 描述 |
---|---|
配置 |
|
配置 |
|
配置 |
|
为用户配置 |
|
配置 |
|
配置 |
|
配置 |
|
使用Google的OpenID Connect集成配置 |
|
配置 |
定义身份提供程序后,您可以使用RBAC定义和应用权限。
以下参数对所有身份提供者通用
参数 | 描述 |
---|---|
|
提供者名称作为前缀添加到提供者用户名,以形成身份名称。 |
|
定义新身份在登录时如何映射到用户。输入以下值之一:
|
添加或更改身份提供者时,您可以通过将mappingMethod 参数设置为add 来将新提供者的身份映射到现有用户。 |
以下自定义资源 (CR) 显示了用于配置身份提供者的参数和默认值。此示例使用 htpasswd 身份提供者。
apiVersion: config.openshift.io/v1
kind: OAuth
metadata:
name: cluster
spec:
identityProviders:
- name: my_identity_provider (1)
mappingMethod: claim (2)
type: HTPasswd
htpasswd:
fileData:
name: htpass-secret (3)
1 | 此提供者名称作为前缀添加到提供者用户名,以形成身份名称。 |
2 | 控制在此提供者的身份和User 对象之间如何建立映射。 |
3 | 包含使用htpasswd 生成的现有秘密文件。 |
了解并应用基于角色的访问控制。
基于角色的访问控制 (RBAC) 对象决定用户是否允许在项目中执行给定操作。
集群管理员可以使用集群角色和绑定来控制谁拥有对 OpenShift Container Platform 平台本身和所有项目的不同访问级别。
开发人员可以使用本地角色和绑定来控制谁可以访问他们的项目。请注意,授权与身份验证是分开的步骤,身份验证更多的是确定执行操作者的身份。
授权使用以下方式管理:
授权对象 | 描述 |
---|---|
规则 |
对一组对象的一组允许的动词集。例如,用户或服务帐户是否可以 |
角色 |
规则集合。您可以将用户和组关联或绑定到多个角色。 |
绑定 |
用户和/或组与角色之间的关联。 |
RBAC 角色和绑定有两个级别来控制授权
RBAC 级别 | 描述 |
---|---|
集群 RBAC |
适用于所有项目的规则和绑定。集群角色存在于集群范围内,而集群角色绑定只能引用集群角色。 |
本地 RBAC |
作用域为给定项目的规则和绑定。虽然本地角色仅存在于单个项目中,但本地角色绑定可以同时引用集群和本地角色。 |
集群角色绑定是在集群级别存在的绑定。角色绑定存在于项目级别。要让用户查看项目,必须使用本地角色绑定将集群角色查看绑定到用户。只有在集群角色不提供特定情况所需的权限集时,才创建本地角色。
这种两级层次结构允许通过集群角色在多个项目中重用,同时允许通过本地角色在单个项目内进行自定义。
在评估期间,将同时使用集群角色绑定和本地角色绑定。例如:
检查集群范围的“允许”规则。
检查本地绑定的“允许”规则。
默认情况下拒绝。
OpenShift Container Platform 包含一组默认集群角色,您可以将其绑定到集群范围或本地范围的用户和组。
不建议手动修改默认集群角色。对这些系统角色的修改可能会阻止集群正常运行。 |
默认集群角色 | 描述 |
---|---|
|
项目管理员。如果在本地绑定中使用,则 |
|
可以获取有关项目和用户的基本信息的使用者。 |
|
超级用户,可以在任何项目中执行任何操作。当与本地绑定中的用户绑定时,他们对配额和项目中每个资源上的每个操作都具有完全控制权。 |
|
可以获取基本集群状态信息的使用者。 |
|
可以获取或查看大多数对象但不能修改它们的使用者。 |
|
可以修改项目中的大多数对象,但没有查看或修改角色或绑定的权限的使用者。 |
|
可以创建自己项目的使用者。 |
|
不能进行任何修改,但可以查看项目中大多数对象的使用者。他们无法查看或修改角色或绑定。 |
注意本地绑定和集群绑定之间的区别。例如,如果您使用本地角色绑定将cluster-admin
角色绑定到用户,则该用户似乎具有集群管理员的权限。情况并非如此。将cluster-admin
绑定到项目中的用户仅向该用户授予该项目的超级管理员权限。该用户拥有集群角色admin
的权限,以及一些其他权限,例如能够编辑该项目的速率限制。此绑定在 Web 控制台 UI 中可能会令人困惑,它不会列出绑定到真实集群管理员的集群角色绑定。但是,它确实列出了您可以用来在本地绑定cluster-admin
的本地角色绑定。
下图说明了集群角色、本地角色、集群角色绑定、本地角色绑定、用户、组和服务帐户之间的关系。
|
OpenShift Container Platform 使用以下方法评估授权:
用户名和用户所属的组列表。
您执行的操作。在大多数情况下,这包括:
项目:您访问的项目。项目是 Kubernetes 命名空间,带有附加注释,允许用户社区在与其他社区隔离的情况下组织和管理其内容。
动词:操作本身:get
、list
、create
、update
、delete
、deletecollection
或watch
。
资源名称:您访问的 API 端点。
完整的绑定列表,用户或组与角色之间的关联。
OpenShift Container Platform 使用以下步骤评估授权:
使用身份和项目范围的操作查找适用于用户或其组的所有绑定。
使用绑定来查找所有适用的角色。
使用角色查找所有适用的规则。
将操作与每个规则进行检查以查找匹配项。
如果找不到匹配的规则,则默认拒绝操作。
请记住,用户和组可以同时关联或绑定到多个角色。 |
项目管理员可以使用 CLI 查看本地角色和绑定,包括每个角色关联的动词和资源矩阵。
绑定到项目管理员的集群角色通过本地绑定在项目中受到限制。它不像授予**cluster-admin**或**system:admin**的集群角色那样在集群范围内绑定。 集群角色是在集群级别定义的角色,但可以在集群级别或项目级别绑定。 |
默认的 admin、edit、view 和 cluster-reader 集群角色支持集群角色聚合,其中每个角色的集群规则会在创建新规则时动态更新。此功能仅在您通过创建自定义资源扩展 Kubernetes API 时才相关。
Kubernetes *命名空间*提供了一种在集群中限定资源范围的机制。Kubernetes 文档包含有关命名空间的更多信息。
命名空间为以下方面提供了唯一的范围:
命名资源,以避免基本的命名冲突。
向受信任用户委派管理权限。
限制社区资源消耗的能力。
系统中的大多数对象都由命名空间限定范围,但有些对象除外,并且没有命名空间,包括节点和用户。
一个*项目*是一个带有附加注释的 Kubernetes 命名空间,它是管理常规用户访问资源的中心工具。项目允许用户社区隔离其他社区来组织和管理其内容。用户必须由管理员授予对项目的访问权限,或者如果允许创建项目,则自动访问他们自己的项目。
项目可以具有单独的name
、displayName
和description
。
强制性的name
是项目的唯一标识符,在使用 CLI 工具或 API 时最显眼。最大名称长度为 63 个字符。
可选的displayName
是项目在 Web 控制台中显示的方式(默认为name
)。
可选的description
可以是对项目的更详细描述,也显示在 Web 控制台中。
每个项目都限定其自身的一组:
对象 | 描述 |
---|---|
|
Pod、服务、复制控制器等。 |
|
用户可以或不可以对对象执行操作的规则。 |
|
可以限制的每种对象类型的配额。 |
|
服务账户会自动使用指定的访问权限来访问项目中的对象。 |
集群管理员可以创建项目并将项目的管理权限委派给用户社区的任何成员。集群管理员还可以允许开发人员创建他们自己的项目。
开发人员和管理员可以使用 CLI 或 Web 控制台与项目交互。
OpenShift Container Platform 带有一些默认项目,以openshift-
开头的项目对用户至关重要。这些项目托管作为 Pod 运行的主控组件和其他基础设施组件。在这些命名空间中创建的具有关键 Pod 批注的 Pod 被视为关键 Pod,并且 kubelet 会保证其准入。为这些命名空间中的主控组件创建的 Pod 已被标记为关键 Pod。
不要在默认项目中运行工作负载或共享对默认项目的访问权限。默认项目保留用于运行核心集群组件。 以下默认项目被认为是高度特权的: |
您可以使用oc
CLI 和oc describe
命令查看集群角色和绑定。
安装oc
CLI。
获得查看集群角色和绑定的权限。
在集群范围内绑定了cluster-admin
默认集群角色的用户可以对任何资源执行任何操作,包括查看集群角色和绑定。
要查看集群角色及其关联的规则集
$ oc describe clusterrole.rbac
Name: admin
Labels: kubernetes.io/bootstrapping=rbac-defaults
Annotations: rbac.authorization.kubernetes.io/autoupdate: true
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
.packages.apps.redhat.com [] [] [* create update patch delete get list watch]
imagestreams [] [] [create delete deletecollection get list patch update watch create get list watch]
imagestreams.image.openshift.io [] [] [create delete deletecollection get list patch update watch create get list watch]
secrets [] [] [create delete deletecollection get list patch update watch get list watch create delete deletecollection patch update]
buildconfigs/webhooks [] [] [create delete deletecollection get list patch update watch get list watch]
buildconfigs [] [] [create delete deletecollection get list patch update watch get list watch]
buildlogs [] [] [create delete deletecollection get list patch update watch get list watch]
deploymentconfigs/scale [] [] [create delete deletecollection get list patch update watch get list watch]
deploymentconfigs [] [] [create delete deletecollection get list patch update watch get list watch]
imagestreamimages [] [] [create delete deletecollection get list patch update watch get list watch]
imagestreammappings [] [] [create delete deletecollection get list patch update watch get list watch]
imagestreamtags [] [] [create delete deletecollection get list patch update watch get list watch]
processedtemplates [] [] [create delete deletecollection get list patch update watch get list watch]
routes [] [] [create delete deletecollection get list patch update watch get list watch]
templateconfigs [] [] [create delete deletecollection get list patch update watch get list watch]
templateinstances [] [] [create delete deletecollection get list patch update watch get list watch]
templates [] [] [create delete deletecollection get list patch update watch get list watch]
deploymentconfigs.apps.openshift.io/scale [] [] [create delete deletecollection get list patch update watch get list watch]
deploymentconfigs.apps.openshift.io [] [] [create delete deletecollection get list patch update watch get list watch]
buildconfigs.build.openshift.io/webhooks [] [] [create delete deletecollection get list patch update watch get list watch]
buildconfigs.build.openshift.io [] [] [create delete deletecollection get list patch update watch get list watch]
buildlogs.build.openshift.io [] [] [create delete deletecollection get list patch update watch get list watch]
imagestreamimages.image.openshift.io [] [] [create delete deletecollection get list patch update watch get list watch]
imagestreammappings.image.openshift.io [] [] [create delete deletecollection get list patch update watch get list watch]
imagestreamtags.image.openshift.io [] [] [create delete deletecollection get list patch update watch get list watch]
routes.route.openshift.io [] [] [create delete deletecollection get list patch update watch get list watch]
processedtemplates.template.openshift.io [] [] [create delete deletecollection get list patch update watch get list watch]
templateconfigs.template.openshift.io [] [] [create delete deletecollection get list patch update watch get list watch]
templateinstances.template.openshift.io [] [] [create delete deletecollection get list patch update watch get list watch]
templates.template.openshift.io [] [] [create delete deletecollection get list patch update watch get list watch]
serviceaccounts [] [] [create delete deletecollection get list patch update watch impersonate create delete deletecollection patch update get list watch]
imagestreams/secrets [] [] [create delete deletecollection get list patch update watch]
rolebindings [] [] [create delete deletecollection get list patch update watch]
roles [] [] [create delete deletecollection get list patch update watch]
rolebindings.authorization.openshift.io [] [] [create delete deletecollection get list patch update watch]
roles.authorization.openshift.io [] [] [create delete deletecollection get list patch update watch]
imagestreams.image.openshift.io/secrets [] [] [create delete deletecollection get list patch update watch]
rolebindings.rbac.authorization.k8s.io [] [] [create delete deletecollection get list patch update watch]
roles.rbac.authorization.k8s.io [] [] [create delete deletecollection get list patch update watch]
networkpolicies.extensions [] [] [create delete deletecollection patch update create delete deletecollection get list patch update watch get list watch]
networkpolicies.networking.k8s.io [] [] [create delete deletecollection patch update create delete deletecollection get list patch update watch get list watch]
configmaps [] [] [create delete deletecollection patch update get list watch]
endpoints [] [] [create delete deletecollection patch update get list watch]
persistentvolumeclaims [] [] [create delete deletecollection patch update get list watch]
pods [] [] [create delete deletecollection patch update get list watch]
replicationcontrollers/scale [] [] [create delete deletecollection patch update get list watch]
replicationcontrollers [] [] [create delete deletecollection patch update get list watch]
services [] [] [create delete deletecollection patch update get list watch]
daemonsets.apps [] [] [create delete deletecollection patch update get list watch]
deployments.apps/scale [] [] [create delete deletecollection patch update get list watch]
deployments.apps [] [] [create delete deletecollection patch update get list watch]
replicasets.apps/scale [] [] [create delete deletecollection patch update get list watch]
replicasets.apps [] [] [create delete deletecollection patch update get list watch]
statefulsets.apps/scale [] [] [create delete deletecollection patch update get list watch]
statefulsets.apps [] [] [create delete deletecollection patch update get list watch]
horizontalpodautoscalers.autoscaling [] [] [create delete deletecollection patch update get list watch]
cronjobs.batch [] [] [create delete deletecollection patch update get list watch]
jobs.batch [] [] [create delete deletecollection patch update get list watch]
daemonsets.extensions [] [] [create delete deletecollection patch update get list watch]
deployments.extensions/scale [] [] [create delete deletecollection patch update get list watch]
deployments.extensions [] [] [create delete deletecollection patch update get list watch]
ingresses.extensions [] [] [create delete deletecollection patch update get list watch]
replicasets.extensions/scale [] [] [create delete deletecollection patch update get list watch]
replicasets.extensions [] [] [create delete deletecollection patch update get list watch]
replicationcontrollers.extensions/scale [] [] [create delete deletecollection patch update get list watch]
poddisruptionbudgets.policy [] [] [create delete deletecollection patch update get list watch]
deployments.apps/rollback [] [] [create delete deletecollection patch update]
deployments.extensions/rollback [] [] [create delete deletecollection patch update]
catalogsources.operators.coreos.com [] [] [create update patch delete get list watch]
clusterserviceversions.operators.coreos.com [] [] [create update patch delete get list watch]
installplans.operators.coreos.com [] [] [create update patch delete get list watch]
packagemanifests.operators.coreos.com [] [] [create update patch delete get list watch]
subscriptions.operators.coreos.com [] [] [create update patch delete get list watch]
buildconfigs/instantiate [] [] [create]
buildconfigs/instantiatebinary [] [] [create]
builds/clone [] [] [create]
deploymentconfigrollbacks [] [] [create]
deploymentconfigs/instantiate [] [] [create]
deploymentconfigs/rollback [] [] [create]
imagestreamimports [] [] [create]
localresourceaccessreviews [] [] [create]
localsubjectaccessreviews [] [] [create]
podsecuritypolicyreviews [] [] [create]
podsecuritypolicyselfsubjectreviews [] [] [create]
podsecuritypolicysubjectreviews [] [] [create]
resourceaccessreviews [] [] [create]
routes/custom-host [] [] [create]
subjectaccessreviews [] [] [create]
subjectrulesreviews [] [] [create]
deploymentconfigrollbacks.apps.openshift.io [] [] [create]
deploymentconfigs.apps.openshift.io/instantiate [] [] [create]
deploymentconfigs.apps.openshift.io/rollback [] [] [create]
localsubjectaccessreviews.authorization.k8s.io [] [] [create]
localresourceaccessreviews.authorization.openshift.io [] [] [create]
localsubjectaccessreviews.authorization.openshift.io [] [] [create]
resourceaccessreviews.authorization.openshift.io [] [] [create]
subjectaccessreviews.authorization.openshift.io [] [] [create]
subjectrulesreviews.authorization.openshift.io [] [] [create]
buildconfigs.build.openshift.io/instantiate [] [] [create]
buildconfigs.build.openshift.io/instantiatebinary [] [] [create]
builds.build.openshift.io/clone [] [] [create]
imagestreamimports.image.openshift.io [] [] [create]
routes.route.openshift.io/custom-host [] [] [create]
podsecuritypolicyreviews.security.openshift.io [] [] [create]
podsecuritypolicyselfsubjectreviews.security.openshift.io [] [] [create]
podsecuritypolicysubjectreviews.security.openshift.io [] [] [create]
jenkins.build.openshift.io [] [] [edit view view admin edit view]
builds [] [] [get create delete deletecollection get list patch update watch get list watch]
builds.build.openshift.io [] [] [get create delete deletecollection get list patch update watch get list watch]
projects [] [] [get delete get delete get patch update]
projects.project.openshift.io [] [] [get delete get delete get patch update]
namespaces [] [] [get get list watch]
pods/attach [] [] [get list watch create delete deletecollection patch update]
pods/exec [] [] [get list watch create delete deletecollection patch update]
pods/portforward [] [] [get list watch create delete deletecollection patch update]
pods/proxy [] [] [get list watch create delete deletecollection patch update]
services/proxy [] [] [get list watch create delete deletecollection patch update]
routes/status [] [] [get list watch update]
routes.route.openshift.io/status [] [] [get list watch update]
appliedclusterresourcequotas [] [] [get list watch]
bindings [] [] [get list watch]
builds/log [] [] [get list watch]
deploymentconfigs/log [] [] [get list watch]
deploymentconfigs/status [] [] [get list watch]
events [] [] [get list watch]
imagestreams/status [] [] [get list watch]
limitranges [] [] [get list watch]
namespaces/status [] [] [get list watch]
pods/log [] [] [get list watch]
pods/status [] [] [get list watch]
replicationcontrollers/status [] [] [get list watch]
resourcequotas/status [] [] [get list watch]
resourcequotas [] [] [get list watch]
resourcequotausages [] [] [get list watch]
rolebindingrestrictions [] [] [get list watch]
deploymentconfigs.apps.openshift.io/log [] [] [get list watch]
deploymentconfigs.apps.openshift.io/status [] [] [get list watch]
controllerrevisions.apps [] [] [get list watch]
rolebindingrestrictions.authorization.openshift.io [] [] [get list watch]
builds.build.openshift.io/log [] [] [get list watch]
imagestreams.image.openshift.io/status [] [] [get list watch]
appliedclusterresourcequotas.quota.openshift.io [] [] [get list watch]
imagestreams/layers [] [] [get update get]
imagestreams.image.openshift.io/layers [] [] [get update get]
builds/details [] [] [update]
builds.build.openshift.io/details [] [] [update]
Name: basic-user
Labels: <none>
Annotations: openshift.io/description: A user that can get basic information about projects.
rbac.authorization.kubernetes.io/autoupdate: true
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
selfsubjectrulesreviews [] [] [create]
selfsubjectaccessreviews.authorization.k8s.io [] [] [create]
selfsubjectrulesreviews.authorization.openshift.io [] [] [create]
clusterroles.rbac.authorization.k8s.io [] [] [get list watch]
clusterroles [] [] [get list]
clusterroles.authorization.openshift.io [] [] [get list]
storageclasses.storage.k8s.io [] [] [get list]
users [] [~] [get]
users.user.openshift.io [] [~] [get]
projects [] [] [list watch]
projects.project.openshift.io [] [] [list watch]
projectrequests [] [] [list]
projectrequests.project.openshift.io [] [] [list]
Name: cluster-admin
Labels: kubernetes.io/bootstrapping=rbac-defaults
Annotations: rbac.authorization.kubernetes.io/autoupdate: true
PolicyRule:
Resources Non-Resource URLs Resource Names Verbs
--------- ----------------- -------------- -----
*.* [] [] [*]
[*] [] [*]
...
要查看当前的集群角色绑定集,其中显示绑定到各种角色的用户和组
$ oc describe clusterrolebinding.rbac
Name: alertmanager-main
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: alertmanager-main
Subjects:
Kind Name Namespace
---- ---- ---------
ServiceAccount alertmanager-main openshift-monitoring
Name: basic-users
Labels: <none>
Annotations: rbac.authorization.kubernetes.io/autoupdate: true
Role:
Kind: ClusterRole
Name: basic-user
Subjects:
Kind Name Namespace
---- ---- ---------
Group system:authenticated
Name: cloud-credential-operator-rolebinding
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: cloud-credential-operator-role
Subjects:
Kind Name Namespace
---- ---- ---------
ServiceAccount default openshift-cloud-credential-operator
Name: cluster-admin
Labels: kubernetes.io/bootstrapping=rbac-defaults
Annotations: rbac.authorization.kubernetes.io/autoupdate: true
Role:
Kind: ClusterRole
Name: cluster-admin
Subjects:
Kind Name Namespace
---- ---- ---------
Group system:masters
Name: cluster-admins
Labels: <none>
Annotations: rbac.authorization.kubernetes.io/autoupdate: true
Role:
Kind: ClusterRole
Name: cluster-admin
Subjects:
Kind Name Namespace
---- ---- ---------
Group system:cluster-admins
User system:admin
Name: cluster-api-manager-rolebinding
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: cluster-api-manager-role
Subjects:
Kind Name Namespace
---- ---- ---------
ServiceAccount default openshift-machine-api
...
您可以使用oc
CLI 和oc describe
命令查看本地角色和绑定。
安装oc
CLI。
获得查看本地角色和绑定的权限
在集群范围内绑定了cluster-admin
默认集群角色的用户可以对任何资源执行任何操作,包括查看本地角色和绑定。
在本地绑定了admin
默认集群角色的用户可以查看和管理该项目中的角色和绑定。
要查看当前的本地角色绑定集,其中显示绑定到当前项目各种角色的用户和组
$ oc describe rolebinding.rbac
要查看其他项目的本地角色绑定,请向命令添加-n
标志
$ oc describe rolebinding.rbac -n joe-project
Name: admin
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: admin
Subjects:
Kind Name Namespace
---- ---- ---------
User kube:admin
Name: system:deployers
Labels: <none>
Annotations: openshift.io/description:
Allows deploymentconfigs in this namespace to rollout pods in
this namespace. It is auto-managed by a controller; remove
subjects to disa...
Role:
Kind: ClusterRole
Name: system:deployer
Subjects:
Kind Name Namespace
---- ---- ---------
ServiceAccount deployer joe-project
Name: system:image-builders
Labels: <none>
Annotations: openshift.io/description:
Allows builds in this namespace to push images to this
namespace. It is auto-managed by a controller; remove subjects
to disable.
Role:
Kind: ClusterRole
Name: system:image-builder
Subjects:
Kind Name Namespace
---- ---- ---------
ServiceAccount builder joe-project
Name: system:image-pullers
Labels: <none>
Annotations: openshift.io/description:
Allows all pods in this namespace to pull images from this
namespace. It is auto-managed by a controller; remove subjects
to disable.
Role:
Kind: ClusterRole
Name: system:image-puller
Subjects:
Kind Name Namespace
---- ---- ---------
Group system:serviceaccounts:joe-project
您可以使用oc adm
管理员 CLI 管理角色和绑定。
将角色绑定到用户或组会向用户或组授予角色授予的访问权限。您可以使用oc adm policy
命令向用户和组添加和删除角色。
您可以将任何默认集群角色绑定到项目中的本地用户或组。
向特定项目中的用户添加角色
$ oc adm policy add-role-to-user <role> <user> -n <project>
例如,您可以通过运行以下命令将admin
角色添加到joe
项目中的alice
用户
$ oc adm policy add-role-to-user admin alice -n joe
或者,您可以应用以下 YAML 将角色添加到用户
|
查看本地角色绑定并在输出中验证添加。
$ oc describe rolebinding.rbac -n <project>
例如,要查看joe
项目的本地角色绑定
$ oc describe rolebinding.rbac -n joe
Name: admin
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: admin
Subjects:
Kind Name Namespace
---- ---- ---------
User kube:admin
Name: admin-0
Labels: <none>
Annotations: <none>
Role:
Kind: ClusterRole
Name: admin
Subjects:
Kind Name Namespace
---- ---- ---------
User alice (1)
Name: system:deployers
Labels: <none>
Annotations: openshift.io/description:
Allows deploymentconfigs in this namespace to rollout pods in
this namespace. It is auto-managed by a controller; remove
subjects to disa...
Role:
Kind: ClusterRole
Name: system:deployer
Subjects:
Kind Name Namespace
---- ---- ---------
ServiceAccount deployer joe
Name: system:image-builders
Labels: <none>
Annotations: openshift.io/description:
Allows builds in this namespace to push images to this
namespace. It is auto-managed by a controller; remove subjects
to disable.
Role:
Kind: ClusterRole
Name: system:image-builder
Subjects:
Kind Name Namespace
---- ---- ---------
ServiceAccount builder joe
Name: system:image-pullers
Labels: <none>
Annotations: openshift.io/description:
Allows all pods in this namespace to pull images from this
namespace. It is auto-managed by a controller; remove subjects
to disable.
Role:
Kind: ClusterRole
Name: system:image-puller
Subjects:
Kind Name Namespace
---- ---- ---------
Group system:serviceaccounts:joe
1 | alice 用户已添加到admins RoleBinding 。 |
您可以为项目创建本地角色,然后将其绑定到用户。
要为项目创建本地角色,请运行以下命令
$ oc create role <name> --verb=<verb> --resource=<resource> -n <project>
在此命令中,请指定
<name>
,本地角色的名称
<verb>
,应用于角色的动词的逗号分隔列表
<resource>
,角色适用的资源
<project>
,项目名称
例如,要创建一个允许用户查看blue
项目中 Pod 的本地角色,请运行以下命令
$ oc create role podview --verb=get --resource=pod -n blue
要将新角色绑定到用户,请运行以下命令
$ oc adm policy add-role-to-user podview user2 --role-namespace=blue -n blue
您可以创建一个集群角色。
要创建集群角色,请运行以下命令
$ oc create clusterrole <name> --verb=<verb> --resource=<resource>
在此命令中,请指定
<name>
,本地角色的名称
<verb>
,应用于角色的动词的逗号分隔列表
<resource>
,角色适用的资源
例如,要创建一个允许用户查看 Pod 的集群角色,请运行以下命令
$ oc create clusterrole podviewonly --verb=get --resource=pod
使用以下操作管理用户或组的本地角色绑定关联角色时,可以使用-n
标志指定项目。如果未指定,则使用当前项目。
您可以使用以下命令进行本地 RBAC 管理。
命令 | 描述 |
---|---|
|
指示哪些用户可以对资源执行操作。 |
|
将指定的角色绑定到当前项目中的指定用户。 |
|
从当前项目中的指定用户中删除给定的角色。 |
|
删除当前项目中的指定用户及其所有角色。 |
|
将给定的角色绑定到当前项目中的指定组。 |
|
从当前项目中的指定组中删除给定的角色。 |
|
删除当前项目中的指定组及其所有角色。 |
您还可以使用以下操作管理集群角色绑定。这些操作不使用-n
标志,因为集群角色绑定使用非命名空间资源。
命令 | 描述 |
---|---|
|
将给定的角色绑定到集群中所有项目的指定用户。 |
|
从集群中所有项目的指定用户中删除给定的角色。 |
|
将给定的角色绑定到集群中所有项目的指定组。 |
|
从集群中所有项目的指定组中删除给定的角色。 |
cluster-admin
角色是执行OpenShift Container Platform集群管理员级任务(例如修改集群资源)所必需的。
您必须已创建要定义为集群管理员的用户。
将用户定义为集群管理员
$ oc adm policy add-cluster-role-to-user cluster-admin <user>
在 OpenShift Container Platform 4.17 之前,未经身份验证的组可以访问某些集群角色。从 OpenShift Container Platform 4.17 之前的版本更新的集群会保留未经身份验证的组对此类访问的权限。 |
出于安全原因,OpenShift Container Platform 4.17 不允许未经身份验证的组默认访问集群角色。
在某些情况下,可能需要将system:unauthenticated
添加到集群角色。
集群管理员可以将未经身份验证的用户添加到以下集群角色
system:scope-impersonation
system:webhook
system:oauth-token-deleter
self-access-reviewer
修改未经身份验证的访问权限时,请务必验证是否符合您组织的安全标准。 |
作为集群管理员,您可以通过创建集群角色绑定,将未经身份验证的用户添加到 OpenShift Container Platform 中的以下集群角色。未经身份验证的用户无权访问非公共集群角色。这应仅在必要时在特定用例中执行。
您可以将未经身份验证的用户添加到以下集群角色
system:scope-impersonation
system:webhook
system:oauth-token-deleter
self-access-reviewer
修改未经身份验证的访问权限时,请务必验证是否符合您组织的安全标准。 |
您可以作为具有cluster-admin
角色的用户访问集群。
您已安装 OpenShift CLI(oc
)。
创建一个名为add-<cluster_role>-unauth.yaml
的 YAML 文件,并添加以下内容
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
name: <cluster_role>access-unauthenticated
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: <cluster_role>
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: system:unauthenticated
运行以下命令应用配置
$ oc apply -f add-<cluster_role>.yaml
安装过程完成后,OpenShift Container Platform 会创建一个集群管理员kubeadmin
。
此用户会自动应用cluster-admin
角色,并被视为集群的 root 用户。密码是动态生成的,对您的 OpenShift Container Platform 环境唯一。安装完成后,密码将显示在安装程序的输出中。例如
INFO Install complete!
INFO Run 'export KUBECONFIG=<your working directory>/auth/kubeconfig' to manage the cluster with 'oc', the OpenShift CLI.
INFO The cluster is ready when 'oc login -u kubeadmin -p <provided>' succeeds (wait a few minutes).
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.demo1.openshift4-beta-abcorp.com
INFO Login to the console with user: kubeadmin, password: <provided>
如果您镜像了 Operator 目录以用于断开连接的集群,则可以使用镜像的目录中的 Operator 填充 OperatorHub。您可以使用镜像过程生成的清单来创建所需的ImageContentSourcePolicy
和CatalogSource
对象。
将 Operator 目录内容镜像到镜像注册表后,创建所需的ImageContentSourcePolicy
(ICSP) 对象。ICSP 对象配置节点以在 Operator 清单中存储的镜像引用和镜像注册表之间进行转换。
在可以访问断开连接的集群的主机上,运行以下命令创建 ICSP,以指定清单目录中的imageContentSourcePolicy.yaml
文件
$ oc create -f <path/to/manifests/dir>/imageContentSourcePolicy.yaml
其中<path/to/manifests/dir>
是镜像内容清单目录的路径。
现在,您可以创建一个CatalogSource
对象来引用您的镜像索引镜像和 Operator 内容。
向 OpenShift Container Platform 集群添加目录源可使用户发现和安装 Operator。集群管理员可以创建一个CatalogSource
对象来引用索引镜像。OperatorHub 使用目录源来填充用户界面。
或者,您可以使用 Web 控制台管理目录源。在**管理** → **集群设置** → **配置** → **OperatorHub** 页面中,单击**来源**选项卡,您可以在此处创建、更新、删除、禁用和启用各个来源。 |
您已构建并向注册表推送了索引镜像。
您可以作为具有cluster-admin
角色的用户访问集群。
创建一个引用您的索引镜像的CatalogSource
对象。如果您使用oc adm catalog mirror
命令将您的目录镜像到目标注册表,则可以使用清单目录中生成的catalogSource.yaml
文件作为起点。
根据您的规格修改以下内容并将其保存为catalogSource.yaml
文件
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
name: my-operator-catalog (1)
namespace: openshift-marketplace (2)
spec:
sourceType: grpc
grpcPodConfig:
securityContextConfig: <security_mode> (3)
image: <registry>/<namespace>/redhat-operator-index:v4.17 (4)
displayName: My Operator Catalog
publisher: <publisher_name> (5)
updateStrategy:
registryPoll: (6)
interval: 30m
1 | 如果您在上传到注册表之前将内容镜像到本地文件,请从metadata.name 字段中删除任何反斜杠 (/ ) 字符,以避免在创建对象时出现“无效资源名称”错误。 |
2 | 如果您希望目录源对所有命名空间中的用户全局可用,请指定openshift-marketplace 命名空间。否则,您可以为目录指定不同的命名空间,使其仅在该命名空间中可用。 |
3 | 指定legacy 或restricted 的值。如果未设置该字段,则默认值为legacy 。在未来的 OpenShift Container Platform 版本中,计划将默认值设置为restricted 。如果您的目录无法在restricted 权限下运行,建议您手动将此字段设置为legacy 。 |
4 | 指定您的索引镜像。如果您在镜像名称后指定了一个标签,例如:v4.17 ,则目录源 pod 将使用Always 的镜像拉取策略,这意味着 pod 始终会在启动容器之前拉取镜像。如果您指定了摘要,例如@sha256:<id> ,则镜像拉取策略为IfNotPresent ,这意味着 pod 只有在节点上不存在镜像时才会拉取镜像。 |
5 | 指定发布目录的您的姓名或组织名称。 |
6 | 目录源可以自动检查新版本以保持最新。 |
使用该文件创建CatalogSource
对象
$ oc apply -f catalogSource.yaml
验证以下资源是否已成功创建。
检查 Pod
$ oc get pods -n openshift-marketplace
NAME READY STATUS RESTARTS AGE
my-operator-catalog-6njx6 1/1 Running 0 28s
marketplace-operator-d9f549946-96sgr 1/1 Running 0 26h
检查目录源
$ oc get catalogsource -n openshift-marketplace
NAME DISPLAY TYPE PUBLISHER AGE
my-operator-catalog My Operator Catalog grpc 5s
检查包清单
$ oc get packagemanifest -n openshift-marketplace
NAME CATALOG AGE
jaeger-product My Operator Catalog 93s
您现在可以从 OpenShift Container Platform Web 控制台的**OperatorHub**页面安装 Operator。
OperatorHub 是一个用于发现 Operator 的用户界面;它与 Operator Lifecycle Manager (OLM) 协同工作,后者在集群上安装和管理 Operator。
作为集群管理员,您可以使用 OpenShift Container Platform Web 控制台或 CLI 从 OperatorHub 安装 Operator。将 Operator 订阅到一个或多个命名空间可使集群上的开发人员可以使用该 Operator。
在安装过程中,您必须确定 Operator 的以下初始设置
选择**集群上的所有命名空间(默认)**可在所有命名空间中安装 Operator,或者选择单个命名空间(如果可用)仅在选定的命名空间中安装 Operator。此示例选择**所有命名空间…**使所有用户和项目都可以使用 Operator。
如果 Operator 可通过多个渠道获得,您可以选择要订阅的渠道。例如,要从**稳定**渠道部署(如果可用),请从列表中选择它。
您可以选择自动或手动更新。
如果您为已安装的 Operator 选择自动更新,则当所选渠道中提供该 Operator 的新版本时,Operator Lifecycle Manager (OLM) 会在无需人工干预的情况下自动升级正在运行的 Operator 实例。
如果您选择手动更新,则当有更新版本的 Operator 可用时,OLM 会创建一个更新请求。然后,您作为集群管理员必须手动批准该更新请求才能将 Operator 更新到新版本。
您可以使用 OpenShift Container Platform Web 控制台从 OperatorHub 安装和订阅 Operator。
使用具有cluster-admin
权限的帐户访问 OpenShift Container Platform 集群。
在 Web 控制台中导航到**Operators → OperatorHub**页面。
滚动或在**按关键字筛选**框中键入关键字以查找所需的 Operator。例如,键入jaeger
以查找 Jaeger Operator。
您还可以按**基础设施功能**筛选选项。例如,如果您想查看在断开连接的环境(也称为受限网络环境)中工作的 Operator,请选择**断开连接**。
选择 Operator 以显示其他信息。
选择社区 Operator 会发出警告,提示 Red Hat 不认证社区 Operator;您必须在继续之前确认警告。 |
阅读有关 Operator 的信息,然后单击**安装**。
在**安装 Operator**页面上,配置您的 Operator 安装
如果您要安装特定版本的 Operator,请从列表中选择**更新渠道**和**版本**。您可以浏览任何渠道中 Operator 的各种版本,查看该渠道和版本的元数据,并选择要安装的确切版本。
版本选择默认为所选渠道的最新版本。如果选择了渠道的最新版本,则默认启用**自动**批准策略。否则,在未安装所选渠道的最新版本时,需要**手动**批准。 使用**手动**批准安装 Operator 会导致在命名空间中安装的所有 Operator 都使用**手动**批准策略,并且所有 Operator 都会一起更新。如果您想独立更新 Operator,请将 Operator 安装到单独的命名空间中。 |
确认 Operator 的安装模式
**集群上的所有命名空间(默认)**会在默认的openshift-operators
命名空间中安装 Operator,以监视并使其可用于集群中的所有命名空间。此选项并不总是可用。
**集群上的特定命名空间**允许您选择要安装 Operator 的特定单个命名空间。Operator 将仅监视并在该单个命名空间中可用。
对于启用了令牌身份验证的云提供商集群
如果集群使用 AWS 安全令牌服务(在 Web 控制台中显示为 **STS 模式**),请在 **角色 ARN** 字段中输入您的服务帐户的 AWS IAM 角色的 Amazon 资源名称 (ARN)。要创建角色的 ARN,请按照准备 AWS 帐户中描述的过程操作。
如果集群使用 Microsoft Entra 工作负载 ID(在 Web 控制台中显示为 **工作负载标识/联合身份模式**),请在相应的字段中添加客户端 ID、租户 ID 和订阅 ID。
如果集群使用 Google Cloud Platform 工作负载身份(在 Web 控制台中显示为 **GCP 工作负载标识/联合身份模式**),请在相应的字段中添加项目编号、池 ID、提供商 ID 和服务帐户电子邮件。
对于 **更新批准**,请选择 **自动** 或 **手动** 批准策略。
如果 Web 控制台显示集群使用 AWS STS、Microsoft Entra 工作负载 ID 或 GCP 工作负载身份,则必须将 **更新批准** 设置为 **手动**。 不建议使用自动批准更新的订阅,因为在更新之前可能需要进行权限更改。使用手动批准更新的订阅可确保管理员有机会验证更高版本的权限,采取必要的步骤,然后进行更新。 |
单击 **安装** 以使操作员可用于此 OpenShift Container Platform 集群上的选定命名空间。
如果您选择了 **手动** 批准策略,则订阅的升级状态将保持为 **正在升级**,直到您查看并批准安装计划。
在 **安装计划** 页面上批准后,订阅升级状态将变为 **最新**。
如果您选择了 **自动** 批准策略,则升级状态应在无需干预的情况下变为 **最新**。
订阅的升级状态为 **最新** 后,选择 **操作员** → **已安装的操作员** 以验证已安装操作员的集群服务版本 (CSV) 最终是否显示。相关命名空间中的 **状态** 最终应变为 **成功**。
对于 **所有命名空间…** 安装模式,状态在 `openshift-operators` 命名空间中变为 **成功**,但如果您在其他命名空间中检查,则状态为 **已复制**。 |
如果未成功
检查 `openshift-operators` 项目(如果选择了 **特定命名空间…** 安装模式,则为其他相关命名空间)中 **工作负载** → **Pod** 页面上报告问题的任何 Pod 的日志,以便进一步进行故障排除。
安装操作员后,元数据将指示已安装的通道和版本。
仍然可以使用 **通道** 和 **版本** 下拉菜单在此目录上下文中查看其他版本元数据。 |
您可以使用 CLI 从 OperatorHub 安装操作员,而不是使用 OpenShift Container Platform Web 控制台。使用 `oc` 命令创建或更新 `Subscription` 对象。
对于 `SingleNamespace` 安装模式,您还必须确保在相关命名空间中存在适当的操作员组。由 `OperatorGroup` 对象定义的操作员组选择目标命名空间,以便为与操作员组位于同一命名空间中的所有操作员生成所需的 RBAC 访问权限。
在大多数情况下,此过程的 Web 控制台方法更可取,因为它会在后台自动执行任务,例如在选择 `SingleNamespace` 模式时自动处理 `OperatorGroup` 和 `Subscription` 对象的创建。 |
使用具有cluster-admin
权限的帐户访问 OpenShift Container Platform 集群。
您已安装 OpenShift CLI(oc
)。
查看 OperatorHub 中集群可用的操作员列表
$ oc get packagemanifests -n openshift-marketplace
NAME CATALOG AGE
3scale-operator Red Hat Operators 91m
advanced-cluster-management Red Hat Operators 91m
amq7-cert-manager Red Hat Operators 91m
# ...
couchbase-enterprise-certified Certified Operators 91m
crunchy-postgres-operator Certified Operators 91m
mongodb-enterprise Certified Operators 91m
# ...
etcd Community Operators 91m
jaeger Community Operators 91m
kubefed Community Operators 91m
# ...
记下您所需操作员的目录。
检查您所需的操作员以验证其支持的安装模式和可用的通道。
$ oc describe packagemanifests <operator_name> -n openshift-marketplace
# ...
Kind: PackageManifest
# ...
Install Modes: (1)
Supported: true
Type: OwnNamespace
Supported: true
Type: SingleNamespace
Supported: false
Type: MultiNamespace
Supported: true
Type: AllNamespaces
# ...
Entries:
Name: example-operator.v3.7.11
Version: 3.7.11
Name: example-operator.v3.7.10
Version: 3.7.10
Name: stable-3.7 (2)
# ...
Entries:
Name: example-operator.v3.8.5
Version: 3.8.5
Name: example-operator.v3.8.4
Version: 3.8.4
Name: stable-3.8 (2)
Default Channel: stable-3.8 (3)
1 | 指示支持哪些安装模式。 |
2 | 示例通道名称。 |
3 | 如果未指定通道,则默认选择的通道。 |
您可以通过运行以下命令以 YAML 格式打印操作员的版本和通道信息:
|
如果在命名空间中安装了多个目录,请运行以下命令以查找特定目录中操作员的可用版本和通道:
$ oc get packagemanifest \
--selector=catalog=<catalogsource_name> \
--field-selector metadata.name=<operator_name> \
-n <catalog_namespace> -o yaml
如果您未指定操作员的目录,如果满足以下条件,则运行 `oc get packagemanifest` 和 `oc describe packagemanifest` 命令可能会返回来自意外目录的包:
|
如果您打算安装的操作员支持 `AllNamespaces` 安装模式,并且您选择使用此模式,请跳过此步骤,因为 `openshift-operators` 命名空间默认情况下已设置了适当的操作员组,名为 `global-operators`。
如果您打算安装的操作员支持 `SingleNamespace` 安装模式,并且您选择使用此模式,则必须确保在相关命名空间中存在适当的操作员组。如果不存在,您可以按照以下步骤创建一个:
每个命名空间只能有一个操作员组。有关更多信息,请参阅“操作员组”。 |
为 `SingleNamespace` 安装模式创建一个 `OperatorGroup` 对象 YAML 文件,例如 `operatorgroup.yaml`。
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: <operatorgroup_name>
namespace: <namespace> (1)
spec:
targetNamespaces:
- <namespace> (1)
1 | 对于 `SingleNamespace` 安装模式,请对 `metadata.namespace` 和 `spec.targetNamespaces` 字段使用相同的 ` |
创建 `OperatorGroup` 对象:
$ oc apply -f operatorgroup.yaml
创建 `Subscription` 对象以将命名空间订阅到操作员。
为 `Subscription` 对象创建一个 YAML 文件,例如 `subscription.yaml`。
如果您想订阅操作员的特定版本,请将 `startingCSV` 字段设置为所需的版本,并将 `installPlanApproval` 字段设置为 `Manual` 以防止操作员在目录中存在更高版本时自动升级。有关详细信息,请参阅以下“具有特定起始操作员版本的示例 `Subscription` 对象”。 |
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: <subscription_name>
namespace: <namespace_per_install_mode> (1)
spec:
channel: <channel_name> (2)
name: <operator_name> (3)
source: <catalog_name> (4)
sourceNamespace: <catalog_source_namespace> (5)
config:
env: (6)
- name: ARGS
value: "-v=10"
envFrom: (7)
- secretRef:
name: license-secret
volumes: (8)
- name: <volume_name>
configMap:
name: <configmap_name>
volumeMounts: (9)
- mountPath: <directory_name>
name: <volume_name>
tolerations: (10)
- operator: "Exists"
resources: (11)
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
nodeSelector: (12)
foo: bar
1 | 对于默认的 `AllNamespaces` 安装模式用法,请指定 `openshift-operators` 命名空间。或者,如果您已创建自定义全局命名空间,则可以指定该命名空间。对于 `SingleNamespace` 安装模式用法,请指定相关的单个命名空间。 |
2 | 要订阅的通道名称。 |
3 | 要订阅的操作员名称。 |
4 | 提供操作员的目录源名称。 |
5 | 目录源的命名空间。对于默认的 OperatorHub 目录源,请使用 `openshift-marketplace`。 |
6 | `env` 参数定义必须存在于 OLM 创建的 pod 中所有容器中的环境变量列表。 |
7 | `envFrom` 参数定义用于填充容器中环境变量的源列表。 |
8 | `volumes` 参数定义必须存在于 OLM 创建的 pod 上的卷列表。 |
9 | volumeMounts 参数定义了由 OLM 创建的 Pod 中所有容器都必须存在的一组卷挂载。如果 volumeMount 引用了一个不存在的 volume ,则 OLM 将无法部署 Operator。 |
10 | tolerations 参数定义了由 OLM 创建的 Pod 的容忍列表。 |
11 | resources 参数定义了由 OLM 创建的 Pod 中所有容器的资源限制。 |
12 | nodeSelector 参数定义了由 OLM 创建的 Pod 的节点选择器。 |
Subscription
对象示例apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: example-operator
namespace: example-operator
spec:
channel: stable-3.7
installPlanApproval: Manual (1)
name: example-operator
source: custom-operators
sourceNamespace: openshift-marketplace
startingCSV: example-operator.v3.7.10 (2)
1 | 如果您的指定版本被目录中的更高版本取代,请将批准策略设置为 Manual 。此计划可以防止自动升级到更高版本,并在启动 CSV 完成安装之前需要手动批准。 |
2 | 设置 Operator CSV 的特定版本。 |
对于启用了令牌身份验证的云提供商集群(例如 Amazon Web Services (AWS) 安全令牌服务 (STS)、Microsoft Entra 工作负载 ID 或 Google Cloud Platform 工作负载身份),请按照以下步骤配置您的 Subscription
对象
确保 Subscription
对象设置为手动更新批准
Subscription
对象示例kind: Subscription
# ...
spec:
installPlanApproval: Manual (1)
1 | 不建议使用自动批准更新的订阅,因为在更新之前可能需要进行权限更改。使用手动批准更新的订阅可确保管理员有机会验证更高版本的权限,采取必要的步骤,然后进行更新。 |
在 Subscription
对象的 config
部分中包含相关的云提供商特定字段
如果集群处于 AWS STS 模式,请包含以下字段
Subscription
对象示例kind: Subscription
# ...
spec:
config:
env:
- name: ROLEARN
value: "<role_arn>" (1)
1 | 包含角色 ARN 详情。 |
如果集群处于工作负载 ID 模式,请包含以下字段
Subscription
对象示例kind: Subscription
# ...
spec:
config:
env:
- name: CLIENTID
value: "<client_id>" (1)
- name: TENANTID
value: "<tenant_id>" (2)
- name: SUBSCRIPTIONID
value: "<subscription_id>" (3)
1 | 包含客户端 ID。 |
2 | 包含租户 ID。 |
3 | 包含订阅 ID。 |
如果集群处于 GCP 工作负载身份模式,请包含以下字段
Subscription
对象示例kind: Subscription
# ...
spec:
config:
env:
- name: AUDIENCE
value: "<audience_url>" (1)
- name: SERVICE_ACCOUNT_EMAIL
value: "<service_account_email>" (2)
其中
<audience>
由管理员在 GCP 中创建,当他们设置 GCP 工作负载身份时,AUDIENCE
值必须是以下格式的预格式化 URL
//iam.googleapis.com/projects/<project_number>/locations/global/workloadIdentityPools/<pool_id>/providers/<provider_id>
<service_account_email>
SERVICE_ACCOUNT_EMAIL
值是在 Operator 操作期间模拟的 GCP 服务帐户电子邮件,例如
<service_account_name>@<project_id>.iam.gserviceaccount.com
运行以下命令创建 Subscription
对象
$ oc apply -f subscription.yaml
如果您将 installPlanApproval
字段设置为 Manual
,请手动批准挂起的安装计划以完成 Operator 安装。有关更多信息,请参阅“手动批准挂起的 Operator 更新”。
此时,OLM 现在已经知道所选的 Operator。目标命名空间中应该会出现 Operator 的集群服务版本 (CSV),并且 Operator 提供的 API 应该可以创建。
运行以下命令检查已安装 Operator 的 Subscription
对象的状态
$ oc describe subscription <subscription_name> -n <namespace>
如果您为 SingleNamespace
安装模式创建了 Operator 组,请运行以下命令检查 OperatorGroup
对象的状态
$ oc describe operatorgroup <operatorgroup_name> -n <namespace>