apiserver 参数 kubernetes v1.13.0

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的运行时配置。 <group> / <version>(或核心组的<version>)键可用于打开/关闭特定的api版本。 api / all是控制所有api版本的特殊键,默认设置为false,除非你知道你做了什么。 api / legacy已弃用,我们将来会将其删除,请停止使用它。
准入参数 ======================================================================================================== =====
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 或 jane@example.com
    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:<Token ID> 。被包含在 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:<nodeName>,该格式应该与为 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:<nodeName>。这种 kubelet只允许修改自己节点的 API 对象 和 绑定在该节点上的 POD API 对象。
  • 对于 Kubernetes 1.11+, kubelet 不能修改其NodeAPI对象中的污点。
  • 对于 Kubernetes 1.13+, kubelet 不能删除其NodeAPI对象,并强制对其前缀kubernetes.io/或k8s.io/前缀下的标签进行修改。
  • 未来版本可能会添加其他限制,以确保kubelet具有正确操作所需的最小权限集。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335