说明¶
NewServerRunOptions
方法在Kubernetes API服务器中起到了非常重要的作用。它负责创建一个新的ServerRunOptions
实例,这个实例包含了运行API服务器所需的所有配置选项。
在Kubernetes API服务器的启动过程中,NewServerRunOptions
方法会被调用,以初始化服务器的运行选项。这些选项包括通用服务器运行选项、Etcd选项、安全服务选项、非安全服务选项、审计选项、特性选项、准入选项、认证选项、授权选项、云提供商选项、存储序列化选项和API启用选项等。
这些选项的配置将影响API服务器的运行方式,包括服务器的绑定地址和端口、服务器的证书信息、支持SNI的证书和密钥的文件路径列表等。
因此,NewServerRunOptions
方法在整个程序中起到了关键的作用,它为API服务器的运行提供了必要的配置。
源码解析¶
server_run_options.go中的NewServerRunOptions方法¶
位置: cmd/kube-apiserver/app/options/options.go
说明: NewServerRunOptions方法在Kubernetes的apiserver中被用来创建一个新的ServerRunOptions实例。
源码:
// NewServerRunOptions creates a new ServerRunOptions object with default parameters
func NewServerRunOptions() *ServerRunOptions {
s := ServerRunOptions{
// 通用服务器运行选项,包括地址、端口、认证、授权等
GenericServerRunOptions: genericoptions.NewServerRunOptions(),
// Etcd选项
Etcd: genericoptions.NewEtcdOptions(storagebackend.NewDefaultConfig(kubeoptions.DefaultEtcdPathPrefix, nil)),
//安全服务选项
SecureServing: kubeoptions.NewSecureServingOptions(),
//非安全服务选项
InsecureServing: kubeoptions.NewInsecureServingOptions(),
//审计选项
Audit: genericoptions.NewAuditOptions(),
//特性选项
Features: genericoptions.NewFeatureOptions(),
//准入选项
Admission: genericoptions.NewAdmissionOptions(),
//认证选项
Authentication: kubeoptions.NewBuiltInAuthenticationOptions().WithAll(),
//授权选项
Authorization: kubeoptions.NewBuiltInAuthorizationOptions(),
//云提供商选项
CloudProvider: kubeoptions.NewCloudProviderOptions(),
//存储序列化选项
StorageSerialization: kubeoptions.NewStorageSerializationOptions(),
//API启用选项
APIEnablement: kubeoptions.NewAPIEnablementOptions(),
EnableLogsHandler: true,
EventTTL: 1 * time.Hour,
MasterCount: 1,
EndpointReconcilerType: string(reconcilers.MasterCountReconcilerType),
KubeletConfig: kubeletclient.KubeletClientConfig{
Port: ports.KubeletPort,
ReadOnlyPort: ports.KubeletReadOnlyPort,
PreferredAddressTypes: []string{
// --override-hostname
string(api.NodeHostName),
// internal, preferring DNS if reported
string(api.NodeInternalDNS),
string(api.NodeInternalIP),
// external, preferring DNS if reported
string(api.NodeExternalDNS),
string(api.NodeExternalIP),
},
EnableHttps: true,
HTTPTimeout: time.Duration(5) * time.Second,
},
ServiceNodePortRange: kubeoptions.DefaultServiceNodePortRange,
}
// Overwrite the default for storage data format.
s.Etcd.DefaultStorageMediaType = "application/vnd.kubernetes.protobuf"
// register all admission plugins
RegisterAllAdmissionPlugins(s.Admission.Plugins)
// Set the default for admission plugins names
s.Admission.PluginNames = []string{"AlwaysAdmit"}
return &s
}
这个实例包含了运行apiserver所需要的所有配置选项。
options.go中的ServerRunOptions结构体¶
位置: cmd/kube-apiserver/app/options/options.go
说明: 这个类型是一个结构体,它包含了运行API服务器时的所有选项。
源码:
type ServerRunOptions struct {
GenericServerRunOptions *genericoptions.ServerRunOptions
Etcd *genericoptions.EtcdOptions
SecureServing *genericoptions.SecureServingOptions
InsecureServing *kubeoptions.InsecureServingOptions
Audit *genericoptions.AuditOptions
Features *genericoptions.FeatureOptions
Admission *genericoptions.AdmissionOptions
Authentication *kubeoptions.BuiltInAuthenticationOptions
Authorization *kubeoptions.BuiltInAuthorizationOptions
CloudProvider *kubeoptions.CloudProviderOptions
StorageSerialization *kubeoptions.StorageSerializationOptions
APIEnablement *kubeoptions.APIEnablementOptions
AllowPrivileged bool
EnableLogsHandler bool
EventTTL time.Duration
KubeletConfig kubeletclient.KubeletClientConfig
KubernetesServiceNodePort int
MaxConnectionBytesPerSec int64
ServiceClusterIPRange net.IPNet // TODO: make this a list
ServiceNodePortRange utilnet.PortRange
SSHKeyfile string
SSHUser string
ProxyClientCertFile string
ProxyClientKeyFile string
EnableAggregatorRouting bool
MasterCount int
EndpointReconcilerType string
}
具体参数内容如下表格所示:
参数 | 说明 |
---|---|
GenericServerRunOptions | 通用服务器运行选项,包括地址、端口、认证、授权等 |
Etcd | Etcd选项,包括地址、前缀、密钥文件等 |
SecureServing | 安全服务选项,包括地址、端口、证书文件等 |
InsecureServing | 非安全服务选项,包括地址、端口等 |
Audit | 审计选项,包括审计策略文件、审计日志文件等 |
Features | 特性选项,包括启用的特性列表 |
Admission | 准入选项,包括准入插件列表 |
Authentication | 认证选项,包括认证方式、令牌文件、OIDC选项等 |
Authorization | 授权选项,包括授权模式、Webhook配置等 |
CloudProvider | 云提供商选项,包括云提供商名称、云配置文件路径等 |
StorageSerialization | 存储序列化选项,包括存储媒体类型、默认存储版本等 |
APIEnablement | API启用选项,包括运行时配置、API组、API版本等 |
AllowPrivileged | 是否允许特权容器 |
EnableLogsHandler | 是否启用/logs处理程序 |
EventTTL | 事件的保留时间 |
KubeletConfig | Kubelet配置,包括地址类型、端口、超时等 |
KubernetesServiceNodePort | Kubernetes主服务的NodePort |
MaxConnectionBytesPerSec | 每秒最大连接字节数 |
ServiceClusterIPRange | 服务集群IP范围 |
ServiceNodePortRange | 服务NodePort范围 |
SSHKeyfile | SSH密钥文件 |
SSHUser | SSH用户 |
ProxyClientCertFile | 代理客户端证书文件 |
ProxyClientKeyFile | 代理客户端密钥文件 |
EnableAggregatorRouting | 是否启用聚合器路由 |
MasterCount | apiserver的数量 |
EndpointReconcilerType | 端点协调器类型 |
server_run_options.go中的ServerRunOptions 配置对象初始化¶
位置: k8s.io/apiserver/pkg/server/options/server_run_options.go
说明: NewServerRunOptions
是一个函数,它创建并返回一个新的ServerRunOptions
对象,并为其设置默认参数。这个函数不接受任何参数。
源码:
func NewServerRunOptions() *ServerRunOptions {
//在这个函数中,首先创建了一个新的`server.Config`对象,并将其默认值赋给了`defaults`变量。然后,使用这些默认值来初始化新的`ServerRunOptions`对象。
//具体逻辑看 :config.go中的NewConfig方法
defaults := server.NewConfig(serializer.CodecFactory{})
return &ServerRunOptions{
//- `MaxRequestsInFlight`:非变更请求在给定时间内的最大数量。当服务器超过此数时,它会拒绝请求。零表示没有限制。
MaxRequestsInFlight: defaults.MaxRequestsInFlight,
//- `MaxMutatingRequestsInFlight`:变更请求在给定时间内的最大数量。当服务器超过此数时,它会拒绝请求。零表示没有限制。
MaxMutatingRequestsInFlight: defaults.MaxMutatingRequestsInFlight,
//- `RequestTimeout`:处理程序必须保持请求打开的持续时间,超过此时间后,请求将超时。这是请求的默认超时时间,但某些特定类型的请求可能会被如`--min-request-timeout`这样的标志覆盖。
RequestTimeout: defaults.RequestTimeout,
//- `MinRequestTimeout`:处理程序必须保持请求打开的最小秒数,超过此时间后,请求将超时。目前只有观察请求处理程序遵守这个字段,它选择一个大于这个数的随机值作为连接超时,以分散负载。
MinRequestTimeout: defaults.MinRequestTimeout,
}
}
这个函数的返回值是一个指向ServerRunOptions
结构体的指针,这个结构体包含了运行API服务器时的选项。
server_run_options.go中的ServerRunOptions 通用服务器运行选项配置结构体¶
位置: k8s.io/apiserver/pkg/server/options/server_run_options.go
说明: kubernetes的apiserver中的server_run_options.go文件中的ServerRunOptions结构体是一个通用服务器运行选项配置结构体,它包含了运行API服务器时的所有选项。
源码:
// ServerRunOptions contains the options while running a generic api server.
type ServerRunOptions struct {
//用于向集群成员宣告API服务器的IP地址
AdvertiseAddress net.IP
//允许跨源资源共享(CORS)的来源列表
CorsAllowedOriginList []string
//生成此主服务器的外部化URL时使用的主机名
ExternalHost string
//在给定时间内非变更请求的最大数量
MaxRequestsInFlight int
//在给定时间内变更请求的最大数量
MaxMutatingRequestsInFlight int
//处理程序必须保持请求打开的持续时间
RequestTimeout time.Duration
//处理程序必须保持请求打开的最小秒数
MinRequestTimeout int
//以MB为单位的apiserver的内存限制
TargetRAMMB int
}
先来看一下ServerRunOptions结构体的定义:
属性名 | 类型 | 描述 |
---|---|---|
AdvertiseAddress | net.IP | 用于向集群成员宣告API服务器的IP地址 |
CorsAllowedOriginList | []string | 允许跨源资源共享(CORS)的来源列表 |
ExternalHost | string | 生成此主服务器的外部化URL时使用的主机名 |
MaxRequestsInFlight | int | 在给定时间内非变更请求的最大数量 |
MaxMutatingRequestsInFlight | int | 在给定时间内变更请求的最大数量 |
RequestTimeout | time.Duration | 处理程序必须保持请求打开的持续时间 |
MinRequestTimeout | int | 处理程序必须保持请求打开的最小秒数 |
TargetRAMMB | int | 以MB为单位的apiserver的内存限制 |
配置信息config.go中的NewConfig方法创建默认配置¶
位置: k8s.io/apiserver/pkg/server/config.go
说明: NewConfig函数是在Go语言中创建一个新的Config结构体实例的方法。这个Config结构体包含了用于配置一个通用API服务器的所有必要信息。 在NewConfig函数中,首先创建一个新的Config实例,然后设置其默认值。这些默认值包括序列化器、读写端口、请求上下文映射器、处理器链构建函数、安全等待组、API组前缀、禁用的启动后钩子、健康检查等。
源码:
// NewConfig returns a Config struct with the default values
func NewConfig(codecs serializer.CodecFactory) *Config {
return &Config{
Serializer: codecs,
ReadWritePort: 443,
RequestContextMapper: apirequest.NewRequestContextMapper(),
BuildHandlerChainFunc: DefaultBuildHandlerChain,
HandlerChainWaitGroup: new(utilwaitgroup.SafeWaitGroup),
LegacyAPIGroupPrefixes: sets.NewString(DefaultLegacyAPIPrefix),
DisabledPostStartHooks: sets.NewString(),
HealthzChecks: []healthz.HealthzChecker{healthz.PingHealthz},
EnableIndex: true,
EnableDiscovery: true,
EnableProfiling: true,
MaxRequestsInFlight: 400,
MaxMutatingRequestsInFlight: 200,
RequestTimeout: time.Duration(60) * time.Second,
MinRequestTimeout: 1800,
EnableAPIResponseCompression: utilfeature.DefaultFeatureGate.Enabled(features.APIResponseCompression),
// Default to treating watch as a long-running operation
// Generic API servers have no inherent long-running subresources
LongRunningFunc: genericfilters.BasicLongRunningRequestCheck(sets.NewString("watch"), sets.NewString()),
}
}
Config结构体¶
NewConfig
方法中初始化的Config
对象的字段如下:
字段名 | 初始化值 | 说明 |
---|---|---|
Serializer | codecs | 用于序列化和反序列化API对象的编解码器工厂 |
ReadWritePort | 443 | 读写服务器将安装的公共地址上的端口 |
RequestContextMapper | apirequest.NewRequestContextMapper() | 将请求映射到上下文 |
BuildHandlerChainFunc | DefaultBuildHandlerChain | 允许通过装饰apiHandler来构建自定义处理器链 |
HandlerChainWaitGroup | new(utilwaitgroup.SafeWaitGroup) | 允许您等待所有链处理器在服务器关闭后退出 |
LegacyAPIGroupPrefixes | sets.NewString(DefaultLegacyAPIPrefix) | 用于设置授权URL解析和验证请求的LegacyAPIGroup前缀 |
DisabledPostStartHooks | sets.NewString() | 禁用的启动后钩子集合 |
HealthzChecks | []healthz.HealthzChecker{healthz.PingHealthz} | 默认的健康检查集合 |
EnableIndex | true | 是否启用索引 |
EnableDiscovery | true | 是否启用发现 |
EnableProfiling | true | 是否启用分析 |
MaxRequestsInFlight | 400 | 并行非长时间运行请求的最大数量 |
MaxMutatingRequestsInFlight | 200 | 并行突变请求的最大数量 |
RequestTimeout | time.Duration(60) * time.Second | 请求超时时间 |
MinRequestTimeout | 1800 | 最小请求超时时间 |
EnableAPIResponseCompression | utilfeature.DefaultFeatureGate.Enabled(features.APIResponseCompression) | 是否启用API响应压缩 |
LongRunningFunc | genericfilters.BasicLongRunningRequestCheck(sets.NewString("watch"), sets.NewString()) | 判断长时间运行请求的函数 |
这个表格包含了NewConfig
方法中初始化的Config
对象的字段名,初始化值,以及对这些字段的说明。
etcd.go中的NewEtcdOptions方法创建Etcd配置EtcdOptions¶
位置: k8s.io/apiserver/pkg/server/options/etcd.go
说明: 这个方法用于创建一个新的EtcdOptions
实例,这个实例包含了用于配置etcd存储后端的所有选项。
源码:
func NewEtcdOptions(backendConfig *storagebackend.Config) *EtcdOptions {
return &EtcdOptions{
//StorageConfig:这个字段被设置为backendConfig的值,用于配置存储后端的详细信息。
StorageConfig: *backendConfig,
//DefaultStorageMediaType:这个字段被设置为"application/json",表示默认的存储媒体类型。
DefaultStorageMediaType: "application/json",
//DeleteCollectionWorkers:这个字段被设置为1,表示删除集合操作的工作线程数。
DeleteCollectionWorkers: 1,
//EnableGarbageCollection:这个字段被设置为true,表示是否启用垃圾收集。
EnableGarbageCollection: true,
//EnableWatchCache:这个字段被设置为true,表示是否启用watch缓存。
EnableWatchCache: true,
//DefaultWatchCacheSize:这个字段被设置为100,表示默认的watch缓存大小
DefaultWatchCacheSize: 100,
}
}
EtcdOptions 结构体¶
每个字段的含义是什么呢,可以参考如下所示表格 ,以下是 EtcdOptions
结构体的字段以及它们的类型和描述:
字段名 | 类型 | 描述 |
---|---|---|
StorageConfig |
storagebackend.Config |
用于配置存储后端的详细信息,如服务器列表、前缀、传输证书等 |
EncryptionProviderConfigFilepath |
string |
用于指定加密提供者配置文件的路径 |
EtcdServersOverrides |
[]string |
用于指定覆盖默认 Etcd 服务器的服务器列表 |
DefaultStorageMediaType |
string |
用于指定存储媒体类型。默认值为 "application/json" |
DeleteCollectionWorkers |
int |
用于指定删除集合操作的工作线程数 |
EnableGarbageCollection |
bool |
用于指定是否启用垃圾收集 |
EnableWatchCache |
bool |
用于指定是否启用 watch 缓存 |
DefaultWatchCacheSize |
int |
用于指定默认的 watch 缓存大小 |
WatchCacheSizes |
[]string |
用于指定每个资源的 watch 缓存大小 |
serving.go中创建安全配置SecureServingOptions¶
位置: pkg/kubeapiserver/options/serving.go
说明: 这个方法用于创建一个新的SecureServingOptions
实例,这个实例包含了用于启动一个安全(使用TLS)的API服务器所需的所有配置选项。
源码:
func NewSecureServingOptions() *genericoptions.SecureServingOptions {
return &genericoptions.SecureServingOptions{
// 服务器绑定的IP地址。
BindAddress: net.ParseIP("0.0.0.0"),
//服务器绑定的端口号。
BindPort: 6443,
//服务器的证书信息,包括证书和密钥的文件路径。
ServerCert: genericoptions.GeneratableKeyCert{
PairName: "apiserver",
CertDirectory: "/var/run/kubernetes",
},
}
}
这些选项允许配置服务器以便在安全的环境中运行。
SecureServingOptions结构体¶
SecureServingOptions
是一个结构体,它包含了用于启动一个安全(使用TLS)的API服务器所需的所有配置选项。以下是 SecureServingOptions
结构体的字段以及它们的类型和描述:
字段名 | 类型 | 描述 |
---|---|---|
BindAddress | net.IP | 服务器绑定的IP地址。默认值为 "0.0.0.0"。 |
BindPort | int | 服务器绑定的端口号。默认值为 6443。 |
ServerCert | genericoptions.GeneratableKeyCert | 服务器的证书信息,包括证书和密钥的文件路径。默认的证书目录为 "/var/run/kubernetes",默认的证书名称为 "apiserver"。 |
SNICertKeys | []genericoptions.SNICertKeyPair | 用于支持SNI的证书和密钥的文件路径列表。默认为空列表。 |
这些选项允许你配置服务器以便在安全的环境中运行,例如,你可以指定服务器的证书和密钥,以便服务器可以提供TLS连接。你还可以指定服务器应该绑定到的IP地址和端口。
GeneratableKeyCert结构体¶
GeneratableKeyCert
是一个结构体,它包含了生成证书和密钥所需的所有配置选项。以下是 GeneratableKeyCert
结构体的字段以及它们的类型和描述:
字段名 | 类型 | 描述 |
---|---|---|
CertKey | CertKey | 包含证书和密钥文件路径的结构体。 |
CACertFile | string | 可选的,包含证书链的文件路径。 |
CertDirectory | string | 将包含证书的目录。如果未明确设置证书和密钥,将使用此目录来推导出匹配的 "pair-name"。 |
PairName | string | 将与 CertDirectory 一起用来生成证书和密钥名称的名称。它将变为 CertDirectory/PairName.crt 和 CertDirectory/PairName.key。 |
serving.go中创建非安全配置NewInsecureServingOptions¶
位置: pkg/kubeapiserver/options/serving.go
说明: NewInsecureServingOptions
函数用于创建一个新的 InsecureServingOptions
实例,这个实例包含了用于启动一个非安全(不使用TLS)的API服务器所需的所有配置选项。
源码:
func NewInsecureServingOptions() *InsecureServingOptions {
return &InsecureServingOptions{
//服务器绑定的IP地址。
BindAddress: net.ParseIP("127.0.0.1"),
//服务器绑定的端口号。
BindPort: 8080,
}
}
InsecureServingOptions结构体¶
InsecureServingOptions
是一个结构体,它包含了用于启动一个非安全(不使用TLS)的API服务器所需的所有配置选项。以下是 InsecureServingOptions
结构体的字段以及它们的类型和描述:
字段名 | 类型 | 描述 |
---|---|---|
BindAddress | net.IP | 服务器绑定的IP地址。默认值为 "127.0.0.1"。 |
BindPort | int | 服务器绑定的端口号。默认值为 8080。 |
这些选项允许你配置服务器以便在非安全的环境中运行,例如,你可以指定服务器应该绑定到的IP地址和端口。
audit.go的NewAuditOptions方法¶
位置: k8s.io/apiserver/pkg/server/options/audit.go
说明
NewAuditOptions
方法用于创建一个新的AuditOptions
实例。这个实例包含了用于配置API服务器审计功能的所有选项。
在这个方法中,初始化了WebhookOptions
和LogOptions
:
WebhookOptions
:用于配置审计Webhook的选项。默认模式设置为批处理模式,批处理配置使用默认的批处理后端配置。LogOptions
:用于配置审计日志的选项。默认的日志格式设置为JSON。
这些选项允许你配置API服务器的审计功能,例如,你可以指定审计日志的格式,或者审计Webhook的工作模式等。
源码:
func NewAuditOptions() *AuditOptions {
return &AuditOptions{
//用于配置审计Webhook的选项。默认模式设置为批处理模式,批处理配置使用默认的批处理后端配置
WebhookOptions: AuditWebhookOptions{
Mode: pluginwebhook.ModeBatch,
BatchConfig: pluginwebhook.NewDefaultBatchBackendConfig(),
},
//用于配置审计日志的选项。默认的日志格式设置为JSON
LogOptions: AuditLogOptions{Format: pluginlog.FormatJson},
}
}
feature.go中的NewFeatureOptions方法创建功能配置¶
位置: k8s.io/apiserver/pkg/server/options/feature.go
说明:
NewFeatureOptions
方法位于k8s.io/apiserver/pkg/server/options/feature.go
文件中,它用于创建一个新的FeatureOptions
实例。这个实例包含了用于配置API服务器功能的所有选项。
在这个方法中,首先调用server.NewConfig(serializer.CodecFactory{})
方法创建一个新的server.Config
对象,并将其默认值赋给了defaults
变量。然后,使用这些默认值来初始化新的FeatureOptions
对象。
源码:
func NewFeatureOptions() *FeatureOptions {
defaults := server.NewConfig(serializer.CodecFactory{})
return &FeatureOptions{
//一个布尔值,表示是否启用性能分析。默认值从`server.Config`对象中获取。
EnableProfiling: defaults.EnableProfiling,
//一个布尔值,表示是否启用争用分析。默认值从`server.Config`对象中获取。
EnableContentionProfiling: defaults.EnableContentionProfiling,
//一个布尔值,表示是否启用Swagger UI。默认值从`server.Config`对象中获取。
EnableSwaggerUI: defaults.EnableSwaggerUI,
}
}
这些选项允许你配置API服务器的各种功能,例如,你可以启用或禁用性能分析,争用分析,或Swagger UI。
admission.go中的NewAdmissionOptions方法¶
位置: k8s.io/apiserver/pkg/server/options/admission.go
说明:
NewAdmissionOptions
方法位于admission.go
文件中,它用于创建一个新的AdmissionOptions
实例。这个实例包含了用于配置API服务器准入控制的所有选项。
在这个方法中,首先创建一个新的AdmissionOptions
对象,并初始化其Plugins
字段为一个新的admission.Plugins
实例。
然后
- 设置
PluginNames
字段为空字符串切片. RecommendedPluginOrder
字段为一个包含了推荐的准入控制插件顺序的字符串切片.DefaultOffPlugins
字段为一个包含了默认关闭的准入控制插件的字符串切片。- 最后,调用
server.RegisterAllAdmissionPlugins
方法注册所有的准入控制插件。
源码:
func NewAdmissionOptions() *AdmissionOptions {
options := &AdmissionOptions{
//一个`admission.Plugins`实例,用于存储所有的准入控制插件。
Plugins: admission.NewPlugins(),
//一个字符串切片,用于存储启用的准入控制插件的名称。
PluginNames: []string{},
// This list is mix of mutating admission plugins and validating
// admission plugins. The apiserver always runs the validating ones
// after all the mutating ones, so their relative order in this list
// doesn't matter.
//一个字符串切片,用于存储推荐的准入控制插件的执行顺序。
RecommendedPluginOrder: []string{lifecycle.PluginName, initialization.PluginName, mutatingwebhook.PluginName, validatingwebhook.PluginName},
//一个字符串切片,用于存储默认关闭的准入控制插件的名称。
DefaultOffPlugins: []string{initialization.PluginName, mutatingwebhook.PluginName, validatingwebhook.PluginName},
}
server.RegisterAllAdmissionPlugins(options.Plugins)
return options
}
这些选项允许你配置API服务器的准入控制,例如,你可以选择启用或禁用某个准入控制插件,或者改变准入控制插件的执行顺序。
NewBuiltInAuthenticationOptions方法创建内置认证配置¶
位置: pkg/kubeapiserver/options/authentication.go
说明:
NewBuiltInAuthenticationOptions
方法位于authentication.go
文件中,它用于创建一个新的BuiltInAuthenticationOptions
实例。这个实例包含了用于配置API服务器内置认证选项的所有设置。
在这个方法中:
- 创建一个新的
BuiltInAuthenticationOptions
对象 - 并设置其
TokenSuccessCacheTTL
字段为10秒,TokenFailureCacheTTL
字段为0秒。 - 这两个字段分别用于设置成功和失败的token在缓存中的存活时间。
这些选项允许你配置API服务器的内置认证选项,例如,你可以设置成功和失败的token在缓存中的存活时间。
源码:
func NewBuiltInAuthenticationOptions() *BuiltInAuthenticationOptions {
return &BuiltInAuthenticationOptions{
//一个时间间隔,表示成功的token在缓存中的存活时间。
TokenSuccessCacheTTL: 10 * time.Second,
//一个时间间隔,表示失败的token在缓存中的存活时间。
TokenFailureCacheTTL: 0 * time.Second,
}
}
NewBuiltInAuthorizationOptions方法创建内置授权配置¶
位置: pkg/kubeapiserver/options/authorization.go
说明: NewBuiltInAuthorizationOptions函数创建一个新的BuiltInAuthorizationOptions实例,并设置了上述参数的默认值。然后返回这个新创建的实例的指针。这个函数通常在初始化服务器配置时被调用,以设置授权选项的默认值。
源码:
func NewBuiltInAuthorizationOptions() *BuiltInAuthorizationOptions {
return &BuiltInAuthorizationOptions{
//Mode:授权模式,其默认值为authzmodes.ModeAlwaysAllow,表示默认允许所有操作。
Mode: authzmodes.ModeAlwaysAllow,
//WebhookCacheAuthorizedTTL:授权的webhook响应的缓存持续时间,默认为5分钟。
WebhookCacheAuthorizedTTL: 5 * time.Minute,
//WebhookCacheUnauthorizedTTL:未授权的webhook响应的缓存持续时间,默认为30秒
WebhookCacheUnauthorizedTTL: 30 * time.Second,
}
}
NewStorageSerializationOptions¶
位置: pkg/kubeapiserver/options/storage_versions.go
说明: NewStorageSerializationOptions函数创建一个新的StorageSerializationOptions实例,并设置了上述参数的默认值。然后返回这个新创建的实例的指针。这个函数通常在初始化存储序列化选项时被调用,以设置默认的存储版本
源码:
func NewStorageSerializationOptions() *StorageSerializationOptions {
return &StorageSerializationOptions{
//DefaultStorageVersions:默认的存储版本,其值由legacyscheme.Registry.AllPreferredGroupVersions()函数返回,表示所有首选的组版本。
DefaultStorageVersions: legacyscheme.Registry.AllPreferredGroupVersions(),
//StorageVersions:存储版本,其值也由legacyscheme.Registry.AllPreferredGroupVersions()函数返回,表示所有首选的组版本。
StorageVersions: legacyscheme.Registry.AllPreferredGroupVersions(),
}
}
NewStorageSerializationOptions¶
位置: cmd/kube-apiserver/app/options/plugins.go
说明: 准入插件(Admission Plugins)是Kubernetes中的一种机制,它们可以拦截、修改或拒绝API服务器处理的请求。这些插件在API请求持久化到etcd之前运行,因此它们可以实施各种自定义的行为和策略,例如安全性、资源配额和默认值等。 源码:
// RegisterAllAdmissionPlugins registers all admission plugins
//RegisterAllAdmissionPlugins函数接受一个指向admission.Plugins类型的指针作为参数。admission.Plugins类型是一个包含所有准入插件的注册表
//在RegisterAllAdmissionPlugins函数中,每个准入插件都有一个对应的Register函数被调用,这些Register函数将插件注册到传入的admission.Plugins实例中。例如,admit.Register(plugins)将admit插件注册到插件列表中,alwayspullimages.Register(plugins)将alwayspullimages插件注册到插件列表中,以此类推
func RegisterAllAdmissionPlugins(plugins *admission.Plugins) {
admit.Register(plugins)
//alwayspullimages.Register(plugins):这行代码注册了AlwaysPullImages准入插件。AlwaysPullImages插件可以确保每个新创建的Pod总是从镜像仓库拉取最新的镜像,即使节点上已经存在相同的镜像。这可以防止使用可能已经过时或者包含安全漏洞的镜像
alwayspullimages.Register(plugins)
//antiaffinity.Register(plugins):这行代码注册了AntiAffinity准入插件。AntiAffinity插件可以确保在同一个节点上不会运行具有相同标签的Pod,这有助于在节点故障时提高应用的可用性
antiaffinity.Register(plugins)
//`defaulttolerationseconds.Register(plugins)`:这行代码注册了DefaultTolerationSeconds准入插件。DefaultTolerationSeconds插件为每个新创建的Pod添加默认的容忍时间,这可以控制Pod在节点出现问题时的驱逐行为。
defaulttolerationseconds.Register(plugins)
//`deny.Register(plugins)`:这行代码注册了Deny准入插件。Deny插件可以拒绝所有的请求,通常用于测试。
deny.Register(plugins)
//`eventratelimit.Register(plugins)`:这行代码注册了EventRateLimit准入插件。EventRateLimit插件可以限制每个用户或者每个命名空间的事件产生速率,防止事件洪水攻击。
eventratelimit.Register(plugins)
//`exec.Register(plugins)`:这行代码注册了Exec准入插件。Exec插件可以控制哪些用户可以在Pod中执行命令。
exec.Register(plugins)
//`extendedresourcetoleration.Register(plugins)`:这行代码注册了ExtendedResourceToleration准入插件。ExtendedResourceToleration插件可以自动为使用扩展资源的Pod添加相应的容忍度,使得这些Pod可以被调度到具有这些扩展资源的节点上。
extendedresourcetoleration.Register(plugins)
//`gc.Register(plugins)`:这行代码注册了GC准入插件。GC插件可以在Pod被删除时自动清理其关联的资源,例如Secrets和ConfigMaps。
gc.Register(plugins)
//`imagepolicy.Register(plugins)`:这行代码注册了ImagePolicyWebhook准入插件。ImagePolicyWebhook插件可以根据外部webhook的策略决定是否允许使用某个镜像。
imagepolicy.Register(plugins)
//`initialresources.Register(plugins)`:这行代码注册了InitialResources准入插件。InitialResources插件可以根据历史数据自动为新创建的Pod设置资源请求和限制。
initialresources.Register(plugins)
//`limitranger.Register(plugins)`:这行代码注册了LimitRanger准入插件。LimitRanger插件可以为Pod和容器设置默认的资源请求和限制,也可以确保每个请求的资源使用在命名空间的资源配额之内。
limitranger.Register(plugins)
//`autoprovision.Register(plugins)`:这行代码注册了NamespaceAutoProvision准入插件。NamespaceAutoProvision插件可以在接收到的请求中指定的命名空间不存在时自动创建命名空间。
autoprovision.Register(plugins)
//`exists.Register(plugins)`:这行代码注册了NamespaceExists准入插件。NamespaceExists插件可以拒绝那些指定的命名空间不存在的请求。
exists.Register(plugins)
//`noderestriction.Register(plugins)`:这行代码注册了NodeRestriction准入插件。NodeRestriction插件可以限制节点可以修改的API对象和字段,以防止节点篡改其他节点或者系统的信息。
noderestriction.Register(plugins)
//`label.Register(plugins)`:这行代码注册了PersistentVolumeLabel准入插件。PersistentVolumeLabel插件可以自动为新创建的PersistentVolume添加云提供商的标签。
label.Register(plugins) // DEPRECATED in favor of NewPersistentVolumeLabelController in CCM
//`podnodeselector.Register(plugins)`:这行代码注册了PodNodeSelector准入插件。PodNodeSelector插件可以为新创建的Pod添加节点选择器,以控制Pod可以调度到哪些节点上。
podnodeselector.Register(plugins)
//`podpreset.Register(plugins)`:这行代码注册了PodPreset准入插件。PodPreset插件可以根据PodPreset资源自动为新创建的Pod添加环境变量、卷和卷挂载。
podpreset.Register(plugins)
//`podtolerationrestriction.Register(plugins)`:这行代码注册了PodTolerationRestriction准入插件。PodTolerationRestriction插件可以为新创建的Pod添加默认的容忍度,也可以限制用户可以设置的容忍度。
podtolerationrestriction.Register(plugins)
//`resourcequota.Register(plugins)`:这行代码注册了ResourceQuota准入插件。ResourceQuota插件可以限制每个命名空间可以使用的资源总量。
resourcequota.Register(plugins)
//podsecuritypolicy.Register(plugins):这行代码注册了PodSecurityPolicy准入插件。PodSecurityPolicy插件可以根据PodSecurityPolicy资源决定是否允许Pod的安全上下文设置。
podsecuritypolicy.Register(plugins)
//podpriority.Register(plugins):这行代码注册了Priority准入插件。Priority插件可以根据PriorityClass资源为新创建的Pod设置优先级
podpriority.Register(plugins)
//scdeny.Register(plugins):这行代码注册了SecurityContextDeny准入插件。SecurityContextDeny插件可以拒绝那些设置了安全上下文的请求
scdeny.Register(plugins)
//serviceaccount.Register(plugins):这行代码注册了ServiceAccount准入插件。ServiceAccount插件可以自动为新创建的Pod添加ServiceAccount和相应的Secret。
serviceaccount.Register(plugins)
//setdefault.Register(plugins):这行代码注册了StorageClassDefault准入插件。StorageClassDefault插件可以为没有指定StorageClass的PersistentVolumeClaim自动添加默认的StorageClass
setdefault.Register(plugins)
//resize.Register(plugins):这行代码注册了PersistentVolumeClaimResize准入插件。PersistentVolumeClaimResize插件可以允许用户修改PersistentVolumeClaim的大小。
resize.Register(plugins)
//pvcprotection.Register(plugins):这行代码注册了PVCProtection准入插件。PVCProtection插件可以防止在有Pod正在使用的PersistentVolumeClaim被用户删除
pvcprotection.Register(plugins)
}