第 4 章 其他概念
4.1. 身份验证
4.1.1. 概述
身份验证层识别与 OpenShift Container Platform API 请求关联的用户。然后,授权层使用与请求用户相关的信息来确定是否应允许该请求。
作为管理员,您可以使用 主(master)配置文件 配置身份验证。
4.1.2. 用户和组
OpenShift Container Platform 中的用户是可以向 OpenShift Container Platform API 发出请求的实体。通常,这代表与 OpenShift Container Platform 交互的开发人员或管理员的帐户。
用户可以分配到一个或多个组中,每个组代表特定的用户集合。在 管理授权策略 时,可以同时为多个用户授予权限,例如允许访问 项目内 的对象,而不必逐一向用户授予权限。
除了显式定义的组外,还有 OpenShift 自动调配的 系统组或虚拟组。在 查看集群绑定 时可以看到它们。
在默认虚拟组集合中,特别注意以下内容:
虚拟组 | 描述 |
---|---|
system:authenticated | 自动与所有经过身份验证的用户关联。 |
system:authenticated:oauth | 自动与所有使用 OAuth 访问令牌经过身份验证的用户关联。 |
system:unauthenticated | 自动与所有未经身份验证的用户关联。 |
4.1.3. API 身份验证
对 OpenShift Container Platform API 的请求通过以下方式进行身份验证:
- OAuth 访问令牌
-
使用 <master>
/oauth/authorize 和
端点从 OpenShift Container Platform OAuth 服务器获取。<master>/
oauth/token -
作为
Authorization 发送:Bearer…
标头发送。 -
以
base64url.bearer.authorization.k8s.io.<base64url-encoded-token>
形式,作为 websocket 请求的 websocket 子协议标头发送。
-
使用 <master>
- X.509 客户端证书
- 需要与 API 服务器的 HTTPS 连接。
- 由 API 服务器针对可信证书颁发机构捆绑包进行验证。
- API 服务器创建证书并分发到控制器,以对自身进行身份验证。
任何具有无效访问令牌或无效证书的请求都会被身份验证层以 401 错误形式拒绝。
如果没有出示访问令牌或证书,身份验证层会将 system:anonymous
虚拟用户和 system:unauthenticated
虚拟组分配给请求。这使得授权层能够决定匿名用户可以发出哪些(如有)请求。
4.1.3.1. 模拟(Impersonation)
对 OpenShift Container Platform API 的请求可以包含 Impersonate-User 标头,这表示请求者希望像来自指定用户一样处理请求。您可以通过在请求中添加 --as=<user>
标志来模拟用户。
在用户 A 可以模拟用户 B 之前,用户 A 通过了身份验证。然后,进行授权检查以确保 User A 可以模仿名为 User B 的用户。如果用户 A 请求模拟服务帐户 system:serviceaccount:namespace:name,OpenShift Container Platform 会确认 User A 可以模仿名为 name 的 serviceaccount 在 命名空间中。如果检查失败,请求会失败,并显示 403(Forbidden)错误代码。
默认情况下,项目管理员和编辑器可以模拟其命名空间中的服务帐户。sudoers 角色允许用户模拟 system:admin,后者具有集群管理员权限。通过模拟 system:admin,可以在用户管理集群时提供一定的拼写错误(而非安全性)的保护。例如,运行 oc delete nodes --all
会失败,但运行 oc delete nodes --all --as=system:admin
会失败。您可以运行以下命令来授予该权限的用户:
$ oc create clusterrolebinding <any_valid_name> --clusterrole=sudoer --user=<username>
如果您需要代表用户创建项目请求,请在命令中包含 --as=<user> --as-group=<group1> --as-group=<group2>
标志。因为 system:authenticated:oauth
是唯一可以创建项目请求的 bootstrap 组,所以您必须模拟该组,如下例所示:
$ oc new-project <project> --as=<user> \ --as-group=system:authenticated --as-group=system:authenticated:oauth
4.1.4. OAuth
OpenShift Container Platform master 包含内置的 OAuth 服务器。用户获取 OAuth 访问令牌来对自身进行 API 身份验证。
当用户请求新的 OAuth 令牌时,OAuth 服务器使用配置的 身份提供程序 来确定发出请求的人员的身份。
然后,它会确定该身份所映射到的用户,为该用户创建一个访问令牌,再返回要使用的令牌。
4.1.4.1. OAuth 客户端
每个对 OAuth 令牌的请求都必须指定要接收和使用令牌的 OAuth 客户端。启动 OpenShift Container Platform API 时会自动创建以下 OAuth 客户端:
OAuth 客户端 | 使用方法 |
---|---|
openshift-web-console | 为 Web 控制台请求令牌。 |
openshift-browser-client |
使用可处理交互式登录的用户代理,在 |
openshift-challenging-client |
使用可处理 |
注册其他客户端:
$ oc create -f <(echo ' kind: OAuthClient apiVersion: oauth.openshift.io/v1 metadata: name: demo 1 secret: "..." 2 redirectURIs: - "http://www.example.com/" 3 grantMethod: prompt 4 ')
- 1
- OAuth 客户端
的名称
用作提交对 <master>/oauth/authorize 和
的请求时的<master>/
oauth/tokenclient_id
参数。 - 2
- 在提出对
<master>/oauth/token
的请求时,secret
将作为client_secret
参数使用。 - 3
- 在对
<master>/oauth/authorize
和<master>/oauth/token
的请求中指定的redirect_uri
参数必须等于redirectURIs
中的某一 URI(或使用它作为前缀)。 - 4
grantMethod
用于确定当此客户端请求了令牌且还未被用户授予访问权限时应采取的操作。使用 Grant 选项中看到的相同值。
4.1.4.2. 服务帐户作为 OAuth 客户端
服务帐户可用作受约束形式的 OAuth 客户端。服务帐户只能请求范围的子集,允许访问服务帐户本身的命名空间内的一些基本用户信息和基于角色的功能:
-
user:info
-
user:check-access
-
role:<any_role>:<serviceaccount_namespace>
-
role:<any_role>:<serviceaccount_namespace>:!
在将服务帐户用作 OAuth 客户端时:
-
client_id
是system:serviceaccount:<serviceaccount_namespace>:<serviceaccount_name>
。 client_secret
可以是该服务帐户的任何 API 令牌。例如:$ oc sa get-token <serviceaccount_name>
-
要获取
WWW-Authenticate
质询,请将服务帐户上的serviceaccounts.openshift.io/oauth-want-challenges
注解设置为 true。 -
redirect_uri
必须与服务帐户上的注解匹配。服务帐户的重定向 URI 作为 OAuth 客户端提供了更多信息。
4.1.4.3. 重定向作为 OAuth 客户端的服务帐户的 URI
注解键必须具有前缀 serviceaccounts.openshift.io/oauth-redirecturi.
或 serviceaccounts.openshift.io/oauth-redirectreference.
,例如:
serviceaccounts.openshift.io/oauth-redirecturi.<name>
采用最简单形式时,注解可用于直接指定有效的重定向 URI。例如:
"serviceaccounts.openshift.io/oauth-redirecturi.first": "https://example.com" "serviceaccounts.openshift.io/oauth-redirecturi.second": "https://other.com"
上例中的 first
和 second
后缀用于分隔两个有效的重定向 URI。
在更复杂的配置中,静态重定向 URI 可能还不够。例如,您可能希望路由的所有入口都被视为有效。这时可使用通过 serviceaccounts.openshift.io/oauth-redirectreference.
前缀的动态重定向 URI。
例如:
"serviceaccounts.openshift.io/oauth-redirectreference.first": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}"
由于此注解的值包含序列化 JSON 数据,因此在扩展格式中可以更轻松地查看:
{ "kind": "OAuthRedirectReference", "apiVersion": "v1", "reference": { "kind": "Route", "name": "jenkins" } }
您现在可以看到,OAuthRedirectReference
允许引用名为 jenkins
的路由。因此,该路由的所有入口现在都被视为有效。OAuthRedirectReference
的完整规格是:
{ "kind": "OAuthRedirectReference", "apiVersion": "v1", "reference": { "kind": ..., 1 "name": ..., 2 "group": ... 3 } }
可以合并这两个注解前缀,来覆盖引用对象提供的数据。例如:
"serviceaccounts.openshift.io/oauth-redirecturi.first": "custompath" "serviceaccounts.openshift.io/oauth-redirectreference.first": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}"
first
后缀用于将注解绑在一起。假设 jenkins
路由的入口为 https://example.com,现在 https://example.com/custompath 被视为有效,但 https://example.com 视为无效。部分提供覆盖数据的格式如下:
类型 | 语法 |
---|---|
Scheme | "https://" |
主机名 | "//website.com" |
端口 | "//:8000" |
路径 | "examplepath" |
指定主机名覆盖将替换被引用对象的主机名数据,这不一定是需要的行为。
以上语法的任何组合都可以使用以下格式进行合并:
<scheme:>//<hostname><:port>/<path>
同一对象可以被多次引用,以获得更大的灵活性:
"serviceaccounts.openshift.io/oauth-redirecturi.first": "custompath" "serviceaccounts.openshift.io/oauth-redirectreference.first": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}" "serviceaccounts.openshift.io/oauth-redirecturi.second": "//:8000" "serviceaccounts.openshift.io/oauth-redirectreference.second": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}"
假设名为 jenkins
的路由具有入口 https://example.com,则 https://example.com:8000 和 https://example.com/custompath 都被视为有效。
可以同时使用静态和动态注解,以实现所需的行为:
"serviceaccounts.openshift.io/oauth-redirectreference.first": "{\"kind\":\"OAuthRedirectReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"Route\",\"name\":\"jenkins\"}}" "serviceaccounts.openshift.io/oauth-redirecturi.second": "https://other.com"
4.1.4.3.1. OAuth 的 API 事件
在有些情况下,API 服务器会返回一个 unexpected condition 错误消息;若不直接访问 API 主日志,很难对此消息进行调试。该错误的基本原因被有意遮挡,以避免向未经身份验证的用户提供有关服务器状态的信息。
这些错误的子集与服务帐户 OAuth 配置问题有关。这些问题在非管理员用户可查看的事件中捕获。OAuth 期间遇到 unexpected condition 服务器错误时,可运行 oc get events
在 ServiceAccount
下查看这些事件。
以下示例警告缺少正确 OAuth 重定向 URI 的服务帐户:
$ oc get events | grep ServiceAccount
输出示例
1m 1m 1 proxy ServiceAccount Warning NoSAOAuthRedirectURIs service-account-oauth-client-getter system:serviceaccount:myproject:proxy has no redirectURIs; set serviceaccounts.openshift.io/oauth-redirecturi.<some-value>=<redirect> or create a dynamic URI using serviceaccounts.openshift.io/oauth-redirectreference.<some-value>=<reference>
运行 oc describe sa/<service-account-name>
可以报告与给定服务帐户名称相关的任何 OAuth 事件。
$ oc describe sa/proxy | grep -A5 Events
输出示例
Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 3m 3m 1 service-account-oauth-client-getter Warning NoSAOAuthRedirectURIs system:serviceaccount:myproject:proxy has no redirectURIs; set serviceaccounts.openshift.io/oauth-redirecturi.<some-value>=<redirect> or create a dynamic URI using serviceaccounts.openshift.io/oauth-redirectreference.<some-value>=<reference>
下方列出可能的事件错误:
无重定向 URI 注解或指定了无效的 URI
Reason Message NoSAOAuthRedirectURIs system:serviceaccount:myproject:proxy has no redirectURIs; set serviceaccounts.openshift.io/oauth-redirecturi.<some-value>=<redirect> or create a dynamic URI using serviceaccounts.openshift.io/oauth-redirectreference.<some-value>=<reference>
指定了无效的路由
Reason Message NoSAOAuthRedirectURIs [routes.route.openshift.io "<name>" not found, system:serviceaccount:myproject:proxy has no redirectURIs; set serviceaccounts.openshift.io/oauth-redirecturi.<some-value>=<redirect> or create a dynamic URI using serviceaccounts.openshift.io/oauth-redirectreference.<some-value>=<reference>]
指定了无效的引用类型
Reason Message NoSAOAuthRedirectURIs [no kind "<name>" is registered for version "v1", system:serviceaccount:myproject:proxy has no redirectURIs; set serviceaccounts.openshift.io/oauth-redirecturi.<some-value>=<redirect> or create a dynamic URI using serviceaccounts.openshift.io/oauth-redirectreference.<some-value>=<reference>]
缺少 SA 令牌
Reason Message NoSAOAuthTokens system:serviceaccount:myproject:proxy has no tokens
4.1.4.3.1.1. 因为可能的错误配置导致的示例 API 事件
以下步骤代表用户可以进入出现问题状态的一种方法,以及如何调试或修复问题:
将服务帐户用作 OAuth 客户端,创建项目。
为代理服务帐户对象创建 YAML,并确保它使用路由
代理
:$ vi serviceaccount.yaml
添加以下示例代码:
apiVersion: v1 kind: ServiceAccount metadata: name: proxy annotations: serviceaccounts.openshift.io/oauth-redirectreference.primary: '{"kind":"OAuthRedirectReference","apiVersion":"v1","reference":{"kind":"Route","name":"proxy"}}'
为路由对象创建 YAML,以创建与代理的安全连接:
$ vi route.yaml
添加以下示例代码:
apiVersion: route.openshift.io/v1 kind: Route metadata: name: proxy spec: to: name: proxy tls: termination: Reencrypt apiVersion: v1 kind: Service metadata: name: proxy annotations: service.alpha.openshift.io/serving-cert-secret-name: proxy-tls spec: ports: - name: proxy port: 443 targetPort: 8443 selector: app: proxy
为部署配置创建 YAML 以作为 sidecar 启动代理:
$ vi proxysidecar.yaml
添加以下示例代码:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: proxy spec: replicas: 1 selector: matchLabels: app: proxy template: metadata: labels: app: proxy spec: serviceAccountName: proxy containers: - name: oauth-proxy image: openshift3/oauth-proxy imagePullPolicy: IfNotPresent ports: - containerPort: 8443 name: public args: - --https-address=:8443 - --provider=openshift - --openshift-service-account=proxy - --upstream=http://localhost:8080 - --tls-cert=/etc/tls/private/tls.crt - --tls-key=/etc/tls/private/tls.key - --cookie-secret=SECRET volumeMounts: - mountPath: /etc/tls/private name: proxy-tls - name: app image: openshift/hello-openshift:latest volumes: - name: proxy-tls secret: secretName: proxy-tls
创建三个对象:
$ oc create -f serviceaccount.yaml
$ oc create -f route.yaml
$ oc create -f proxysidecar.yaml
运行
oc edit sa/proxy
以编辑服务帐户,并将serviceaccounts.openshift.io/oauth-redirectreference
注解更改为指向不存在的路由。apiVersion: v1 imagePullSecrets: - name: proxy-dockercfg-08d5n kind: ServiceAccount metadata: annotations: serviceaccounts.openshift.io/oauth-redirectreference.primary: '{"kind":"OAuthRedirectReference","apiVersion":"v1","reference":{"kind":"Route","name":"notexist"}}' ...
查看服务的 OAuth 日志以查找服务器错误:
The authorization server encountered an unexpected condition that prevented it from fulfilling the request.
运行
oc get events
来查看ServiceAccount
事件:$ oc get events | grep ServiceAccount
输出示例
23m 23m 1 proxy ServiceAccount Warning NoSAOAuthRedirectURIs service-account-oauth-client-getter [routes.route.openshift.io "notexist" not found, system:serviceaccount:myproject:proxy has no redirectURIs; set serviceaccounts.openshift.io/oauth-redirecturi.<some-value>=<redirect> or create a dynamic URI using serviceaccounts.openshift.io/oauth-redirectreference.<some-value>=<reference>]
4.1.4.4. 集成
所有对 OAuth 令牌的请求都包括对 <master>/oauth/authorize
的请求。大多数身份验证集成在此端点前放置身份验证代理,或者将 OpenShift Container Platform 配置为针对后备 身份提供程序 验证凭证。对 <master>/oauth/authorize
的请求可能来自不能显示交互式登录页面的用户代理,如 CLI。因此,除了交互式登录流程外,OpenShift Container Platform 也支持使用 WWW-Authenticate
质询进行验证。
如果在 <master>/oauth/authorize
端点前面放置身份验证代理,它会向未经身份验证的非浏览器用户代理发送 WWW-Authenticate
质询,而不是显示交互式登录页面或重定向到交互式登录流程。
为防止浏览器客户端遭受跨站点请求伪造(CSRF)攻击,只有在请求中存在 X-CSRF-Token
标头时,才应发送基本身份验证质询。希望接收基本 WWW-Authenticate
质询的客户端应将此标头设置为非空值。
如果身份验证代理不支持 WWW-Authenticate
质询,或者如果 OpenShift Container Platform 配置为使用不支持 WWW-Authenticate 质询的身份提供程序,用户可以使用浏览器访问 <master> /oauth/token/request
来手动获取访问令牌。
4.1.4.5. OAuth Server Metadata
在 OpenShift Container Platform 中运行的应用可能需要发现有关内置 OAuth 服务器的信息。例如,他们可能需要发现没有手工配置的 <master>
服务器的地址。为此,OpenShift Container Platform 实施了 IETF OAuth 2.0 授权服务器元数据草案规范。
因此,集群中运行的任何应用程序都可以向 https://openshift.default.svc/.well-known/oauth-authorization-server 发出 GET
请求来获取以下信息:
{ "issuer": "https://<master>", 1 "authorization_endpoint": "https://<master>/oauth/authorize", 2 "token_endpoint": "https://<master>/oauth/token", 3 "scopes_supported": [ 4 "user:full", "user:info", "user:check-access", "user:list-scoped-projects", "user:list-projects" ], "response_types_supported": [ 5 "code", "token" ], "grant_types_supported": [ 6 "authorization_code", "implicit" ], "code_challenge_methods_supported": [ 7 "plain", "S256" ] }
- 1
- 2
- 授权服务器的授权端点的 URL。参见 RFC 6749。
- 3
- 授权服务器的令牌端点的 URL。参见 RFC 6749。
- 4
- 包含此授权服务器支持的 OAuth 2.0 RFC 6749 范围值列表的 JSON 数组。请注意,并非所有支持的范围值都会公告。
- 5
- 包含此授权服务器支持的 OAuth 2.0
response_type
值列表的 JSON 数组。使用的数组值与response_types
参数(根据 RFC 7591 中“OAuth 2.0 Dynamic Client Registration Protocol”定义)使用的数组值相同。 - 6
- 包含此授权服务器支持的 OAuth 2.0 授权类型值列表的 JSON 数组。使用的数组值与通过
grant_types
参数(根据 RFC 7591 中“OAuth 2.0 Dynamic Client Registration Protocol”定义)使用的数组值相同。 - 7
- 包含此授权服务器支持的 PKCE RFC 7636 代码质询方法列表的 JSON 数组。
code_challenge_method
参数中使用的代码质询方法值在 RFC 7636 第 4.3 节中定义。有效的代码质询方法值是在 IANA PKCE Code Challenge Methods 注册表中注册的值。请参阅 IANA OAuth 参数。
4.1.4.6. 获取 OAuth 令牌
OAuth 服务器支持标准的授权代码授权和隐式授权 OAuth 授权流。
运行以下命令,使用授权代码授权方法请求 OAuth 令牌:
$ curl -H "X-Remote-User: <username>" \ --cacert /etc/origin/master/ca.crt \ --cert /etc/origin/master/admin.crt \ --key /etc/origin/master/admin.key \ -I https://<master-address>/oauth/authorize?response_type=token\&client_id=openshift-challenging-client | grep -oP "access_token=\K[^&]*"
在使用隐式授权流 (response_type=token
) 以及配置为请求 WWW-Authenticate 质询
(如 openshift-challenging-client
)的 client_id 以请求 OAuth 令牌时,可能来自 /oauth/authorize
的服务器响应及它们的处理方式如下方所列:
状态 | 内容 | 客户端响应 |
---|---|---|
302 |
|
使用 |
302 |
|
失败,或向用户显示 |
302 |
其他 | 接续重定向操作,并使用这些规则处理结果 |
401 |
|
在识别了类型时(如 |
401 |
没有 | 无法进行质询身份验证。失败,并显示响应正文(可能包含用于获取 OAuth 令牌的链接或备用方法详情) |
其他 | 其他 | 失败,或可向用户显示响应正文 |
使用隐式授权流请求 OAuth 令牌:
$ curl -u <username>:<password> 'https://<master-address>:8443/oauth/authorize?client_id=openshift-challenging-client&response_type=token' -skv / 1 / -H "X-CSRF-Token: xxx" 2
输出示例
* Trying 10.64.33.43...
* Connected to 10.64.33.43 (10.64.33.43) port 8443 (#0)
* found 148 certificates in /etc/ssl/certs/ca-certificates.crt
* found 592 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256
* server certificate verification SKIPPED
* server certificate status verification SKIPPED
* common name: 10.64.33.43 (matched)
* server certificate expiration date OK
* server certificate activation date OK
* certificate public key: RSA
* certificate version: #3
* subject: CN=10.64.33.43
* start date: Thu, 09 Aug 2018 04:00:39 GMT
* expire date: Sat, 08 Aug 2020 04:00:40 GMT
* issuer: CN=openshift-signer@1531109367
* compression: NULL
* ALPN, server accepted to use http/1.1
* Server auth using Basic with user 'developer'
> GET /oauth/authorize?client_id=openshift-challenging-client&response_type=token HTTP/1.1
> Host: 10.64.33.43:8443
> Authorization: Basic ZGV2ZWxvcGVyOmRzc2Zkcw==
> User-Agent: curl/7.47.0
> Accept: */*
> X-CSRF-Token: xxx
>
< HTTP/1.1 302 Found
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Expires: Fri, 01 Jan 1990 00:00:00 GMT
< Location:
https://10.64.33.43:8443/oauth/token/implicit#access_token=gzTwOq_mVJ7ovHliHBTgRQEEXa1aCZD9lnj7lSw3ekQ&expires_in=86400&scope=user%3Afull&token_type=Bearer 1
< Pragma: no-cache
< Set-Cookie: ssn=MTUzNTk0OTc1MnxIckVfNW5vNFlLSlF5MF9GWEF6Zm55Vl95bi1ZNE41S1NCbFJMYnN1TWVwR1hwZmlLMzFQRklzVXRkc0RnUGEzdnBEa0NZZndXV2ZUVzN1dmFPM2dHSUlzUmVXakQ3Q09rVXpxNlRoVmVkQU5DYmdLTE9SUWlyNkJJTm1mSDQ0N2pCV09La3gzMkMzckwxc1V1QXpybFlXT2ZYSmI2R2FTVEZsdDBzRjJ8vk6zrQPjQUmoJCqb8Dt5j5s0b4wZlITgKlho9wlKAZI=; Path=/; HttpOnly; Secure
< Date: Mon, 03 Sep 2018 04:42:32 GMT
< Content-Length: 0
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host 10.64.33.43 left intact
要只查看 OAuth 令牌值,请运行以下命令:
$ curl -u <username>:<password> / 'https://<master-address>:8443/oauth/authorize?client_id=openshift-challenging-client&response_type=token' / 1 -skv -H "X-CSRF-Token: xxx" --stderr - | grep -oP "access_token=\K[^&]*" 2
输出示例
hvqxe5aMlAzvbqfM2WWw3D6tR0R2jCQGKx0viZBxwmc
您还可以使用 Code Grant
方法请求令牌。
4.1.4.7. Prometheus 身份验证指标
OpenShift Container Platform 在身份验证尝试过程中捕获以下 Prometheus 系统指标:
-
openshift_auth_basic_password_count
统计oc login
用户名和密码的尝试次数。 -
openshift_auth_basic_password_count_result
按照结果(success 或 error)统计oc login
用户名和密码尝试次数。 -
openshift_auth_form_password_count
统计 web 控制台登录尝试次数。 -
openshift_auth_form_password_count_result
统计 web 控制台登录尝试次数(包括成功和失败的登陆尝试)。 -
openshift_auth_password_total
统计oc login
和 web 控制台登录尝试总次数。