kube-apiserver 参数
kube-apiserver对外暴露了Kubernetes API。它是的 Kubernetes 前端控制层。
参数名 | 含义 | 默认值 | |
---|---|---|---|
通用参数 | ======================================================================================================== | ===== | |
advertise-address | 用于向集群通告 apiserver 的 IP 地址。该地址必须可由集群的其余组件访问。 | 如果为空,则使用--bind-address。 如果未指定--bind-address,将使用主机的默认接口。 | |
cloud-provider-gce-lb-src-cidrs | CIDRs opened in GCE firewall for LB traffic proxy & health checks | default 130.211.0.0/22,209.85.152.0/22,209.85.204.0/22,35.191.0.0/16 | |
cors-allowed-origins | List of allowed origins for CORS, comma separated. An allowed origin can be a regular expression to support subdomain matching. | ||
default-not-ready-toleration-seconds | notReady 容忍时间,NoExecute that is added by default to every pod that does not already have such a toleration. | 300 | |
default-unreachable-toleration-seconds | unreachable 容忍时间,NoExecute that is added by default to every pod that does not already have such a toleration. | 300 | |
external-hostname | The hostname to use when generating externalized URLs for this master (e.g. Swagger API Docs). | ||
feature-gates | 一组key = value对,用于描述特征处于alpha / experimental状态 | ||
master-service-namespace | 废弃:the namespace from which the kubernetes master services should be injected into pods | default | |
max-mutating-requests-inflight | 在给定时间内的最大 mutating 请求数。 当服务器超过此值时,它会拒绝请求。 0表示无限制。 | 200 | |
max-requests-inflight | 在给定时间内的最大 non-mutating 请求数。 当服务器超过此值时,它会拒绝请求。 0表示无限制。 | 400 | |
min-request-timeout | 表示处理程序在请求超时之前必须至少链接多久。 目前只有监视请求处理程序能处理该值,会选择高于此数字的随机值作为连接超时,以分散负载。 | 1800 | |
request-timeout | 表示处理程序在请求超时之前必须至少链接多久。这是默认请求超时,但可能会被其他参数覆盖,比如 min-request-timeout | 1m | |
target-ram-mb | apiserver的内存限制(MB)用于配置缓存大小等 | ||
etcd 参数 | ======================================================================================================== | ===== | |
default-watch-cache-size | 默认监视缓存大小。0 表示对于没有设置默认监视大小的资源,将禁用监视缓存。 | 100 | |
delete-collection-workers | DeleteCollection调用时生成的worker数。被用来加速命名空间清理。 | 1 | |
enable-garbage-collector | 启用通用垃圾收集器。必须与kube-controller-manager的相应参数一起使用。 | true | |
encryption-provider-config | 配置etcd中存储secrets的加密程序的文件 | ||
etcd-cafile | 保护etcd通信的SSL证书颁发机构文件 | ||
etcd-certfile | 用于保护etcd通信的SSL认证文件 | ||
etcd-compaction-interval | 压缩请求的间隔。如果为0,则禁用来自apiserver的压缩请求。 | 5m0s | |
etcd-count-metric-poll-period | Frequency of polling etcd for number of resources per type 。0 表示禁用 metric collection | 1m0s | |
etcd-keyfile | 用于保护etcd通信的SSL密钥文件 | ||
etcd-prefix | etcd中所有资源路径的前缀 | / registry | |
etcd-servers | 要连接的etcd服务器列表(scheme:// ip:port),逗号分隔。 | ||
etcd-servers-overrides | 每个资源的etcd服务器覆盖,逗号分隔。单个覆盖格式:group / resource#servers,servers是URL,用分号分隔。 | ||
storage-backend | 存储后端的持久性 | etcd3 | |
storage-media-type | 存储对象的媒体类型。 某些仅支持特定媒体类型的资源或存储后端将忽略此设置。 | application/vnd.kubernetes.protobuf | |
watch-cache | 在apiserver中启用监视缓存 | true | |
watch-cache-sizes | 每个资源的监视缓存大小列表,以逗号分隔。格式:resource [.group] #size。启用监视缓存时生效。 一些资源有系统默认值,其他默认为 default-watch-cache-size | ||
安全服务参数 | ======================================================================================================== | ===== | |
bind-address | 监听安全端口的IP地址,接口必须可由集群的其他组件以及CLI / Web客户端访问。 | 如果空白,将使用接口(所有IPv4接口为0.0.0.0,所有IPv6接口为::) | (默认0.0.0.0) |
cert-dir | TLS证书所在的目录。如果提供了--tls-cert-file和--tls-private-key-file,则将忽略此参数。 | / var / run / kubernetes | |
http2-max-streams-per-connection | api server 提供给 client 在HTTP / 2连接中的最大 stream 数。0 表示用golang的默认值。 | ||
secure-port | 使用身份验证和授权为HTTPS提供服务的端口。无法使用0关闭 | 6443 | |
tls-cert-file | 包含HTTPS的默认x509证书的文件。 CA证书,如果有的话,在服务器证书之后连接。如果启用了HTTPS服务,但是 --tls-cert-file和--tls-private-key-file 未提供,则会为公共地址生成自签名证书和密钥,并将其保存到--cert-dir指定的目录中。 | ||
tls-cipher-suites | 密码套件列表。如果省略,将使用默认的Go密码套件。 | ||
tls-min-version | 支持最低TLS版本。 可能的值:VersionTLS10,VersionTLS11,VersionTLS12 | ||
tls-private-key-file | 与 --tls-cert-file 匹配的默认x509私钥。 | ||
tls-sni-cert-key | 一对x509证书和私钥文件路径。示例:“example.crt,example.key” | [] | |
非安全参数 | ======================================================================================================== | ===== | |
insecure-bind-address | (已弃用:此参数在将来的版本中删除。)用于提供--insecure-port的IP地址(对于所有IPv4接口设置为0.0.0.0,对于所有IPv6接口设置为::) | 默认为127.0.0.1 | |
insecure-port | (已弃用:此参数将在以后的版本中删除。)用于提供不安全,未经身份验证的访问的端口。 | 8080 | |
审计参数 | ======================================================================================================== | ===== | |
audit-dynamic-configuration | 启用动态审计配置。此功能还需要 DynamicAuditing 特征门开启 | ||
audit-log-batch-buffer-size | 批处理写前存储缓冲区的大小。仅用于批处理模式。 | 10000 | |
audit-log-batch-max-size | 批次的最大大小。仅用于批处理模式。 | 1 | |
audit-log-batch-max-wait | 强制写入未达到最大大小的批处理之前等待的时间。仅用于批处理模式。 | ||
audit-log-batch-throttle-burst | 如果之前未使用限流QPS,则表示在同一时刻发送的最大请求数。仅用于批处理模式。 | ||
audit-log-batch-throttle-enable | 启用批量限流限制。仅用于批处理模式。 | ||
audit-log-batch-throttle-qps | 每秒最大平均批次数。仅用于批处理模式。 | ||
audit-log-format | 审核日志的格式。 “legacy”表示每个事件1行。 “json”表示结构化的json格式。 | legacy,json | |
audit-log-maxage | 保留旧审核日志文件的最大天数 | ||
audit-log-maxbackup | 要保留的最大审核日志文件数 | ||
audit-log-maxsize | 审计日志文件回滚前的最大大小(兆字节)。 | ||
audit-log-mode | 发送审计事件的策略。Blocking 表示发送事件应阻塞服务器响应。批处理导致后端缓冲并异步写入事件。 | 阻止 | |
audit-log-path | 所有发送到 apiserver 的请求都将记录到此文件中。 '-'表示标准输出。 不指定此参数会禁用日志后端 | ||
audit-log-truncate-enabled | 是否启用事件和批截断 | ||
audit-log-truncate-max-batch-size | 发送到底层后端的批处理的最大大小。实际的序列化大小可以大于几百个字节。如果批次超过此限制,则会将其拆分为多个批量较小的批次 | 10485760 | |
audit-log-truncate-max-event-size | 发送到底层后端的审计事件的最大大小。如果事件的大小大于此数字,则删除第一个请求和响应,如果还不够小,事件将被丢弃。 | 102400 | |
audit-log-version | 用于序列化写入日志的审核事件的API组和版本。 | audit.k8s.io/v1 | |
audit-policy-file | 定义审核策略配置的文件的路径。 | ||
audit-webhook-batch-buffer-size | 在批处理和写入之前存储事件的缓冲区的大小。仅用于批处理模式 | 10000 | |
audit-webhook-batch-max-size | 批次的最大大小。仅用于批处理模式。 | 400 | |
audit-webhook-batch-max-wait | 强制写入未达到最大大小的批处理之前的等待时间。仅用于批处理模式。 | 30s | |
audit-webhook-batch-throttle-burst | 如果之前未使用ThrottleQPS,则表示在同一时刻发送的最大请求数。仅用于批处理模式。 | 默认15 | |
audit-webhook-batch-throttle-enable | 启用批量限制。仅用于批处理模式。 | true | |
audit-webhook-batch-throttle-qps | 每秒最大平均批次数。仅用于批处理模式。 | 10 | |
audit-webhook-config-file | 定义审计 webhook 配置的 kubeconfi g格式文件的路径。 | ||
audit-webhook-initial-backoff | 重试第一个失败请求之前等待的时间。 (默认10秒) | ||
audit-webhook-mode | 定义缓冲策略。batch - 缓冲事件并分批异步处理它们。这是默认值。blocking - 阻止API服务器响应处理每个单独的事件。blocking-strict - 与阻止相同,但在RequestReceived阶段的审核日志记录期间出现故障时,对apiserver的整个请求将失败 | batch | |
audit-webhook-truncate-enabled | 启用事件和批截断 | ||
audit-webhook-truncate-max-batch-size | 发送到底层后端的批处理的最大大小。实际的序列化大小可以大几百个字节。如果批次超过此限制,则会将其拆分为多个批量较小的批次。 | 1048 | |
audit-webhook-truncate-max-event-size | 发送到基础后端的审计事件的最大大小。 如果事件的大小大于此数字,则删除第一个请求和响应,如果还不够大小,事件将被丢弃。 | 102400 | |
audit-webhook-version | 序列化写入webhook的审核事件的API组和版本。 | audit.k8s.io/v1 | |
功能参数 | ======================================================================================================== | ===== | |
contention-profiling | 如果启用了性能分析,则启用锁争用分析 | ||
enable-swagger-ui | 在 apiserver 的/swagger-ui上启用swagger ui | ||
profiling | 通过Web界面启用性能分析 host:port/debug/pprof/ | true | |
认证参数 | ======================================================================================================== | ===== | |
anonymous-auth | 启用对访问 API server 安全端口的匿名请求。没有被其他身份验证方法拒绝的请求被视为匿名请求。 | true | |
api-audiences | API的标识符。service account token 验证器将验证对 API 使用的 token 是否是列表中的一个。如果启动了 service-account-issuer 参数,但 api-audiences 参数没有使用,该字段默认为包含发行者URL的单元素列表。 | ||
authentication-token-webhook-cache-ttl | 缓存身份验证策略的时间 | 2m0s | |
authentication-token-webhook-config-file | 一个描述如何访问远程 webhook 服务的 kubeconfig 文件。API server 将查询远程服务以确定 bearer token。 | ||
basic-auth-file | 启用基本身份验证 | ||
client-ca-file | 启用客户端证书认证。该参数引用的文件中必须包含一个或多个证书颁发机构,用于验证提交给该组件的客户端证书。如果客户端证书已验证,则用其中的 Common Name 作为请求的用户名 | ||
enable-bootstrap-token-auth | 启用 Bootstrap Token Authenticator。启用该功能时, Controller Manager 上的 --controllers 参数必须启用 TokenCleaner。允许“kube-system” 中的“bootstrap.kubernetes.io/token”类型的 secret 用于 TLS 引导身份验证。 | ||
oidc-ca-file | OpenID服务器的证书将由 oidc-ca-file 的进行验证 | 主机的根CA集。 | |
oidc-client-id | 如果设置了oidc-issuer-url,则必须设置OpenID Connect客户端的客户端ID。所有的 token 必须为其颁发的客户端 ID | ||
oidc-groups-claim | JWT声明使用的用户组。该参数目前 experimental。 | ||
oidc-group-prefix | 所有组都将以该值作为前缀,防止与其他身份验证策略冲突。 | ||
oidc-issuer-url | OpenID发行者的URL,仅接受HTTPS方案。如果设置了,它将用于验证OIDC JSON Webtoken(JWT)。 | ||
oidc-required-claim | 一个键值对用于描述IDtoken中必要的声明。如果设置,则验证该声明是否以匹配值存在于IDtoken中。重复此参数以指定多个claim。 | ||
oidc-signing-algs | JOSE非对称签名算法的列表。不包含在此列表中的以“alg”开头的JWT将被拒绝。该值由RFC 7518定义 | [RS256] | |
oidc-username-claim | 把OpenID声明作为用户名。注意,除了default('sub')之外的声明不是唯一的,也不是不可变的。此参数 experimental, | sub | |
oidc-username-prefix | 所有用户名将以此值作为前缀。如果没有提供,除了“email”之外的用户名声明会由 issuer URL作为前缀,以避免冲突。“-”表示跳过前缀 | ||
requestheader-allowed-names | Common Name 列表。如果设置了,则在检查用户名的请求 header 之前, 必须提供指定列表中 Common Name 的有效客户端证书。如果为空,则允许使用任何 Common Name。 | ||
requestheader-client-ca-file | PEM 编码的证书包。在检查用户名的请求 header 之前,必须针对指定文件中的证书颁发机构提交并验证有效的客户端证书 | ||
requestheader-extra-headers-prefix | 要检查的请求头前缀列表。建议使用 X-Remote-Extra- | ||
requestheader-group-headers | 要检查组的请求头列表。建议采用X-Remote组。 | ||
requestheader-username-header | 要检查用户名的请求头列表。一般使用X-Remote-User | ||
service-account-issuer | service account token 发布者的标识符。发布者将在发布的token的“iss”字段中声明该标识符。该值是字符串或URI。 | ||
service-account-key-file | 包含PEM编码的x509 RSA或ECDSA私钥或公钥的文件,用于验证ServiceAccounttoken。指定的文件可以包含多个键,参数可以用不同的文件多次指定。如果未指定,则使用--tls-private-key-file。如果使用--service-account-signing-key参数,必须有该参数 | ||
service-account-lookup | 如果启用,从 API 中删除掉的 token 将被撤销 | true | |
service-account-max-token-expiration | service account token 发布者创建token的最长有效期。如果请求一个有效期限大于此值的其他合法 TokenRequest,将发布一个有效期为此值的token。 | ||
token-auth-file | 该文件是一个至少包含3列的csv文件:token,用户名,用户uid,后跟可选的组名。API server 从文件读取 bearer token,请求的 Authorization header 中要包含 Bearer token 的值。token无限期地持续,并且如果不重新启动 API Server,则无法更改token列表。该文件通过 token authentication 保证 API server 安全端口的安全。 | ||
授权参数 | ======================================================================================================== | ===== | |
authorization-mode | 在安全端口上执行授权的有序插件列表。(AlwaysAllow,AlwaysDeny,ABAC,Webhook,RBAC,Node) | AlwaysAllow | |
authorization-policy-file | 具有csv格式的授权策略的文件,与--authorization-mode = ABAC 一起使用。 | ||
authorization-webhook-cache-authorized-ttl | 缓存 webhook 授权程序的“授权”响应的持续时间。 | 5m0s | |
authorization-webhook-cache-unauthorized-ttl | 缓存 webhook 授权程序的“未授权”响应的持续时间。 | 30秒 | |
authorization-webhook-config-file | 使用 kubeconfig 格式的webhook配置文件,与--authorization-mode = Webhook一起使用。 API服务器将查询远程服务以确定对 API server 的安全端口的访问。 | ||
云提供商参数 | ======================================================================================================== | ===== | |
cloud-config | 云提供商提供配置文件的路径。 没有配置文件就使用空字符串。 | ||
cloud-provider | 云服务提供商。 没有提供者就使用空字符串。 | ||
API启用参数 | ======================================================================================================== | ===== | |
runtime-config | 一组key = value对,可能传给apiserver的运行时配置。 |
||
准入参数 | ======================================================================================================== | ===== | |
admission-control | 插件顺序无先后。(已弃用:使用--enable-admission-plugins或--disable-admission-plugins代替。将在以后的版本中删除。) | ||
admission-control-config-file | 具有准入控制配置的文件。 | ||
disable-admission-plugins | 禁用位于默认启用的插件列表的插件。插件顺序无先后。 | ||
enable-admission-plugins | 除了默认启用的插件之外应该启用的插件插件。插件顺序无先后。默认插件列表:(NamespaceLifecycle, LimitRanger, ServiceAccount, Priority,DefaultTolerationSeconds, DefaultStorageClass, PersistentVolumeClaimResize, MutatingAdmissionWebhook, ValidatingAdmissionWebhook, ResourceQuota) | ||
其他参数 | ======================================================================================================== | ===== | |
allow-privileged | 如果为true,则允许特权容器。 | FALSE | |
apiserver-count | 集群中运行的 api server 数量,必须为正数。 (在启用--endpoint-reconciler-type = master-count时使用。) | 1 | |
enable-aggregator-routing | 将聚合器请求路由到端点IP而不是集群IP。 | ||
enable-logs-handler | 如果为true,为 apiserver 日志安装 /logs 处理程序。 |
true | |
endpoint-reconciler-type | 使用端点协调器 | lease | |
event-ttl | 保留事件的时间。 | 1h0m0s | |
kubelet-certificate-authority | 证书颁发机构的证书文件的路径。 | ||
kubelet-client-certificate | TLS 客户端证书文件的路径。 | ||
kubelet-client-key | TLS 客户端密钥文件的路径。 | ||
kubelet-HTTPS | 使用 https 进行kubelet连接。 | 默认为true | |
kubelet-preferred-address-types | 用于kubelet连接的首选NodeAddressType的列表。 | [Hostname,InternalDNS,InternalIP,ExternalDNS,ExternalIP] | |
kubelet-read-only-port | 弃用:kubelet端口。 | 10255 | |
kubelet-timeout | kubelet 操作超时时间。 | 5s | |
kubernetes-service-node-port | 如果非零,则Kubernetes主服务(apiserver创建/维护的)是 NodePort 类型,使用此值作为端口的值。如果为零,则为Kubernetes主服务将是ClusterIP类型。 | ||
max-connection-bytes-per-sec | 如果非零,则将每个用户连接限制为此字节数/秒。目前仅适用于长时间运行的请求。 | ||
proxy-client-cert-file | 在一个必须验证聚合器或kube-apiserver的身份的请求中,用来验证的客户端证书,包括api-server的请求代理给以及对webhook准入插件的调用。此证书包括来自--requestheader-client-ca-file中的CA的签名。该CA在kube-system命名空间的 “extension-apiserver-authentication” 配置文件中。被 kube-aggregator 调用的组件应该使用该CA来执行其TLS验证。 | ||
proxy-client-key-file | 客户端证书的私钥,用于在请求期间必须证明聚合器或kube-apiserver的身份时。包括api-server的请求代理给以及对webhook准入插件的调用。 | ||
service-account-signing-key-file | 包含service accounttoken颁发者的当前私钥的文件路径。发行人将使用此私钥签署已发行的IDtoken。 (需要'TokenRequest') | ||
service-cluster-ip-range | CIDR表示IP范围,用于分配服务集群IP。这不能与分配给pod节点的IP重叠。 | 10.0.0.0/24 | |
service-node-port-range | 为 NodePort 可见的服务保留的端口范围。包含两个端点。 | 30000-32767 | |
全局参数 | ======================================================================================================== | ===== | |
alsologtostderr | 日志信息同时输出到stderr及文件 | ||
help | 帮助 | ||
log-backtrace-at | 当日志命中行文件时:N,触发堆栈跟踪 | 0 | |
log-dir | 如果非空,则在此目录中写入日志文件 | ||
log-file | 如果非空,请使用此日志文件 | ||
log-flush-frequency | 日志刷新之间的最大秒数 | 5s | |
logtostderr | 日志信息输出到stderr 而不是文件 | true | |
skip-headers | 避免在日志消息中使用头前缀 | ||
stderrthreshold | 等于或高于此阈值的日志发布到stderr | 2 | |
v | 日志的日志级别 | ||
version版本 | 打印版本信息并退出 | true | |
vmodule | 模式列表=N文件筛选日志记录 |
参数分类解释
审计参数:
详见: https://kubernetes.io/docs/tasks/debug-application-cluster/audit/
- 审计提供了一组与安全相关的按时间顺序排列的记录,记录了各个用户,管理员或系统其他组件影响系统的活动顺序。
- 每个请求在每个阶段都会生成一个事件,然后根据某个策略对其进行预处理并写入后端。策略确定记录的内容,后端保留记录。
- 审计后端将审计事件持久保存到外部存储。
- Kube-apiserver提供三个后端:记录后端,将事件写入磁盘;Webhook后端,它将事件发送到外部API;动态后端,通过AuditSink API对象配置webhook后端。
- 每个请求都可以用相关的“阶段”记录。
1、RequestReceived :审计处理程序收到请求后立即生成的事件的阶段,以及在处理程序链下委托之前生成事件的阶段。
2、ResponseStarted:一旦发送响应头,但在发送响应主体之前。此阶段仅针对长时间运行的请求(例如监视)生成。
3、ResponseComplete: 响应正文已完成,不再发送字节。
4、Panic:发生异常时产生的事件。
审核日志记录功能会增加API服务器的内存消耗,因为为每个请求存储了审核所需的某些上下文。此外,内存消耗取决于审计日志记录配置。
认证参数:
详见 https://kubernetes.io/docs/reference/access-authn-authz/authentication/
- 建立TLS后,HTTP请求将移至“身份验证”步骤。认证器的输入是整个HTTP请求,认证步骤通常只检查 headers 或客户端证书。
- 身份验证模块包括客户端证书,密码和普通token,bootstrap token和 JWT token(用于 service accounts)。
- 当启用了多个认证模块时,一个认证模块成功认证后将短路请求,不会进行剩余模块的认证。API server 不能保证认证的顺序。
- 如果请求无法通过身份验证,则会被HTTP状态码 401 拒绝。
- 如果请求通过身份验证,插件会尝试将以下属性关联到请求上:
1、用户名:标识最终用户的字符串。常用值可能是 kube-admin 或 [email protected]。
2、UID:标识最终用户的字符串,比用户名更加一致且唯一。
3、组:一组将用户和常规用户组相关联的字符串。system:authenticated 组包含在所有已验证用户的组列表中。
4、额外字段:包含其他有用认证信息的字符串列表的映射。 - Kubernetes usernames 用于访问控制决策和日志记录,但它不是 user 对象,也不会在其对象库中存储用户名或有关用户的其他信息。
认证器分类:
(1)509 客户端证书:
启用方法:--client-ca-file=SOMEFILE
验证方法:引用的文件必须包含一个或多个证书颁发机构,用于验证提交给 API server 的客户端证书。
验证后:使用 subject 的 Common Name(CN)作为请求的用户名。客户端证书还可以使用证书的 organization 字段来指示用户的组成员身份。
(2)静态 Token 文件:
启用方法:--token-auth-file=SOMEFILE 。(token 文件是一个 csv 文件,每行至少包含三列:token、用户名、用户 uid,其次是可选的组名。token 会无限期地持续下去,并且不重新启动 API server 的话就无法更改token列表。)
验证方法:
API server 从文件读取 bearer token,期望请求的 Authorization header 中包含 Bearer token 的值。
(3)Bootstrap Token Authenticator:
启用方法: --enable-bootstrap-token-auth;Controller Manager 的 --controllers 参数启用 TokenCleaner 。
验证方法:Kubernetes 中包含了一个名为 Bootstrap Token 的动态管理的 bearer token。这些 token 使用 Secret 存储在 kube-system namespace 中,在那里它们可以被动态管理和创建。Controller Manager 中包含了 TokenCleaner 控制器,用于在 bootstrap token 过期时将其删除。这些 token 的形式是 [a-z0-9]{6}.[a-z0-9]{16}。第一部分是 Token ID,第二部分是 Token Secret。
验证后:请求将被认证为 system:bootstrap:
。被包含在 system:bootstrappers
组中。
详细可参考
https://kubernetes.io/docs/reference/access-authn-authz/bootstrap-tokens/
(4)静态密码文件
启用方法:--basic-auth-file=SOMEFILE。基本身份验证凭证将无限期地保留,不重启API服务器无法更改密码。目前仅支持基本身份验证。基本身份认证是一个 csv 文件,至少包含3列:密码、用户名、用户 ID、组名(可选)。
验证方法:需要Authorization header 中包含 Basic BASE64ENCODED(USER:PASSWORD) 的值。
(5)Service Account Token
Service account 是一个自动启用的验证器,它使用签名的 bearer token 来验证请求。该插件包括两个可选参数:
- --service-account-key-file 一个包含签名 bearer token 的 PEM 编码文件。如果未指定,将使用 API server 的 TLS 私钥。
- service-account-lookup 如果启用,从 API 中删除掉的 token 将被撤销。
Service account 通常由 API server 自动创建,并通过 ServiceAccount 注入控制器,关联到集群中运行的 Pod 上。Bearer token 挂载到 pod 中,并允许集群进程与 API server 通信。 帐户可以使用 PodSpec 的 serviceAccountName 字段显式地与Pod关联。
# 使用 kubectl create serviceaccount (NAME) 命令。这将在当前的 namespace 和相关连的 secret 中创建一个 service account。
$ kubectl create serviceaccount jenkins
# 创建出的 secret 中拥有 API server 的公共 CA 和前面的 JSON Web Token(JWT),secret 基于 base64 编码。
$ kubectl get secret jenkins-token-1yvwg -o yaml
apiVersion: v1
data:
ca.crt: (APISERVER'S CA BASE64 ENCODED)
namespace: ZGVmYXVsdA==
token: (BEARER TOKEN BASE64 ENCODED)
kind: Secret
metadata:
# ...
type: kubernetes.io/service-account-token
经过签名的 JWT 可以用作 bearer token 与给定的 service account 进行身份验证,在请求中放置 bearer token。
验证后:用户名 system:serviceaccount:(NAMESPACE):(SERVICEACCOUNT),组 system:serviceaccounts 和 system:serviceaccounts:(NAMESPACE)。
(6)OpenID Connect Token
OpenID Connect 是由 OAuth2 供应商提供的 OAuth2,特别是 Azure Active Directory、Salesforce 和 Google。
https://jimmysong.io/kubernetes-handbook/guide/authentication.html#openid-connect-token
(7)Webhook Token 认证
Webhook 认证是用来认证 bearer token 的 hook。
https://jimmysong.io/kubernetes-handbook/guide/authentication.html#webhook-token-%E8%AE%A4%E8%AF%81
(8)认证代理
可以配置 API server 从请求 header 的值中识别用户,例如 X-Remote-User。这样的设计是用来与请求 header 值的验证代理结合使用。
https://jimmysong.io/kubernetes-handbook/guide/authentication.html#%E8%AE%A4%E8%AF%81%E4%BB%A3%E7%90%86
(9)匿名请求
未被其他已配置身份验证方法拒绝的请求将被视为匿名请求,用户名:system:anonymous
、组名:system:unuthenticated
ABAC 和 RBAC 授权人需要明确授权 system:annoymous 或 system:unauthenticated 组,因此授予对 * 用户或 * 组访问权的传统策略规则不包括匿名用户。
授权参数:
RBAC模式: https://kubernetes.io/docs/reference/access-authn-authz/rbac/
ABAC模式: https://kubernetes.io/docs/reference/access-authn-authz/abac/
Node模式: https://kubernetes.io/docs/reference/access-authn-authz/node/
Node模式:
- 为了获得Node授权者的授权,kubelet必须使用凭证说明它在system:nodes组中,用户名为system:node:
,该格式应该与为 kubelet 作为 kubelet TLS 引导的创建的标识相匹配。 - Node 授权者可以允许 kubelet 执行 以下 API 操作:
1、读操作:服务、端点、节点、Pod、Secret、ConfigMap、persistent volume claims、绑定到kubelet节点的pod相关的持久卷
2、写操作:节点和节点状态、pod和pod状态、事件
3、与认证相关的操作:对TLS引导的certificationsigningrequests API的读/写访问权限、能够为委派的身份验证/授权检查创建tokenreviews和subjectaccessreviews
API启用参数:
https://kubernetes.io/docs/reference/using-api/api-overview/
准入参数:
https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/
准入控制器在请求经过身份验证和授权之后、对象持久化之前,拦截对Kubernetes API服务器的请求。控制器被编译为 kube-apiserver二进制文件,只能由集群管理员配置。
准入控制器可以是“validating”,“mutating”或两者。变异控制器可以修改他们 admit 的对象; 验证控制器不会。
准入控制过程分两个阶段进行。在第一阶段,运行 mutating admission controllers。在第二阶段,运行 validating admission controllers。有些控制器会运行两次。如果任一阶段中的任何控制器拒绝请求,则立即拒绝整个请求,并向最终用户返回错误。
准入控制器有时可能具有副作用,即,作为请求处理的一部分来改变相关资源。比如增加配额使用量。任何副作用都需要相应的回收或协调过程。
NodeRestriction:
- 限制 kubelet 修改 node 和 pod 对象的权限。 为了启用该功能,kubelet 要使用
system: nodes
组中的证书。用户名如下system:node:
。这种 kubelet只允许修改自己节点的 API 对象 和 绑定在该节点上的 POD API 对象。 - 对于 Kubernetes 1.11+, kubelet 不能修改其NodeAPI对象中的污点。
- 对于 Kubernetes 1.13+, kubelet 不能删除其NodeAPI对象,并强制对其前缀kubernetes.io/或k8s.io/前缀下的标签进行修改。
- 未来版本可能会添加其他限制,以确保kubelet具有正确操作所需的最小权限集。