Asking for help? Comment out what you need so we can get more information to help you!
apiVersion: apiserver.config.k8s.io/v1beta1
kind: AuthenticationConfiguration
# 使用 JWT 兼容令牌对 Kubernetes 用户进行身份认证的认证组件列表,允许的最大认证组件数量为 64。
jwt:
- issuer:
# url 在所有认证组件中必须是唯一的。
# url 不得与 --service-account-issuer 中配置的颁发者冲突。
url: https://keycloak/realms/IAM 。
# discoveryURL(如果指定)将覆盖用于获取发现信息的 URL,而不是使用 “{url}/.well-known/openid-configuration”。
# 系统会使用所给的配置值,因此如果需要,“/.well-known/openid-configuration” 必须包含在 discoveryURL 中。
#
# 取回的发现信息中的 “issuer” 字段必须与 AuthenticationConfiguration 中的
# “issuer.url” 字段匹配,并被用于验证所呈现的 JWT 中的 “iss” 声明。
# 这适用于众所周知的端点和 jwks 端点托管在与颁发者不同的位置(例如集群本地)的场景。
# discoveryURL 必须与 url 不同(如果指定),并且在所有认证组件中必须是唯一的。
discoveryURL: https://keycloak/realms/IAM/.well-known/openid-configuration
# PEM 编码的 CA 证书用于在获取发现信息时验证连接。
# 如果未设置,将使用系统验证程序。
# 与 --oidc-ca-file 标志引用的文件内容的值相同。
certificateAuthority: /etc/kubernetes/keycloak-ca.crt
# audiences 是 JWT 必须发布给的一组可接受的受众。
# 至少其中一项必须与所提供的 JWT 中的 “aud” 声明相匹配。
audiences:
- kubernetes # 与 --oidc-client-id 一致。
- account
# 当指定多个受众时,需要将此字段设置为 “MatchAny”。
audienceMatchPolicy: MatchAny
# 用于验证令牌声明以对用户进行身份认证的规则。
claimValidationRules:
# 与 --oidc-required-claim key=value 一致
- claim: email_verified
requiredValue: true
# 你可以使用表达式来验证声明,而不是仅仅靠 claim 和 requiredValue 来执行检查。
# expression 是一个计算结果为布尔值的 CEL 表达式。
# 所有表达式的计算结果必须为 true 才能使验证成功。
- expression: 'claims.email_verified != true'
# message 用来定制验证失败时在 API 服务器日志中看到的错误消息。
message: email must valified
- expression: 'claims.exp - claims.nbf <= 86400'
message: total token lifetime must not exceed 24 hours
claimMappings:
# username 表示用户名属性的选项。
# 这是唯一必需的属性。
username:
# 与 --oidc-username-claim 相同,与 username.expression 互斥。
claim: "preferred_username"
# 与 --oidc-username-prefix 相同,与 username.expression 互斥。
# 如果设置了username.claim,则需要username.prefix。
# 如果不需要前缀,可显式将其设置为 ""。
prefix: "oidc"
# 与 username.claim 和 username.prefix 互斥。
# expression 是计算结果为字符串的 CEL 表达式。
#
# 1. 如果 username.expression 使用 “claims.email”,则必须在 username.expression
# 或 extra[*].valueExpression 或 ClaimValidationRules[*].expression 中使用 “claims.email_verified”。
# 与 username.claim 设置为 “email” 时自动应用的验证相匹配的示例声明验证规则表达式是
# “claims.?email_verified.orValue(true)”。
# 2. 如果根据 username.expression 断言的用户名是空字符串,则身份认证请求将失败。
expression: '"oidc/"+claims.preferred_username'
# groups 代表 groups 属性的一个选项。
groups:
# 与 --oidc-groups-claim 相同,与 groups.express 互斥。
claim: "user_groups"
# 与 --oidc-groups-prefix 相同。与 groups.express 互斥。
# 如果设置了 groups.claim,则需要 groups.prefix。
# 如果不需要前缀,则显式将其设置为 ""。
prefix: "oidc"
# 与 groups.claim 和 groups.prefix 互斥。
# expression 是一个计算结果为字符串或字符串列表的 CEL 表达式。
expression: 'claims.user_groups.split(",")'
# uid 表示 uid 属性的一个选项。
uid:
# 与 uid.expression 互斥。
claim: 'preferred_username'
# 与 uid.claim 互斥
# expression 是计算结果为字符串的 CEL 表达式。
expression: 'claims.preferred_username'
# 应用于最终用户对象的验证规则。
userValidationRules:
# expression 是一个计算结果为布尔值的 CEL 表达式。
# 所有表达式的计算结果必须为 true,用户才有效。
- expression: "!user.username.startsWith('system:')"
# Message 自定义验证失败时在 API 服务器日志中看到的错误消息。
message: 'username cannot used reserved system: prefix'
- expression: "user.groups.all(group, !group.startsWith('system:'))"
message: 'groups cannot used reserved system: prefix'
when I use - --authentication-config=/etc/kubernetes/authentication-config.yaml
the apiserver can not started?
Cluster information:
Kubernetes version:
Cloud being used: (put bare-metal if not on a public cloud)
Installation method:
Host OS:
CNI and version:
CRI and version:
You can format your yaml by highlighting it and pressing Ctrl-Shift-C, it will make your output easier to read.