Gardener项目中Shoot集群的ServiceAccount配置详解
概述
在Kubernetes集群中,ServiceAccount是Pod与API Server进行身份验证的重要机制。作为Kubernetes集群管理工具,Gardener提供了灵活的配置选项来管理Shoot集群中的ServiceAccount行为。本文将深入解析如何在Gardener项目中配置Shoot集群的ServiceAccount相关参数。
基础配置
在Shoot资源定义中,可以通过以下YAML结构配置ServiceAccount相关参数:
apiVersion: core.gardener.cloud/v1beta1
kind: Shoot
spec:
kubernetes:
kubeAPIServer:
serviceAccountConfig:
issuer: foo
acceptedIssuers:
- foo1
- foo2
extendTokenExpiration: true
maxTokenExpiration: 45d
发行者(Issuer)配置
基本概念
ServiceAccount令牌的发行者(Issuer)是令牌中iss
声明的值,用于标识令牌的来源。在Kubernetes生态系统中,这通常是一个符合OpenID Connect规范的URL。
配置选项
- issuer:设置当前使用的令牌发行者
- acceptedIssuers:定义可接受的发行者列表,用于验证令牌
重要注意事项
- 默认情况下,Gardener使用集群内部域名作为发行者(如
https://api.foo.bar.example.com
) - 如果自定义了
issuer
,默认发行者仍会自动包含在acceptedIssuers
中 - 变更发行者时需谨慎处理,避免现有令牌失效
发行者变更最佳实践
当需要变更发行者时,建议按照以下步骤操作:
- 将旧发行者添加到
acceptedIssuers
列表 - 更新
issuer
为新值 - 确保所有工作负载使用短期有效的投影令牌
- 滚动更新所有Pod
- 重建所有ServiceAccount令牌Secret
- 等待至少12小时确保控制平面组件获取新令牌
- 确认所有令牌都已更新后,可从
acceptedIssuers
中移除旧发行者
令牌有效期配置
extendTokenExpiration参数
此参数对应kube-apiserver的--service-account-extend-token-expiration
标志,默认启用。主要作用是在从传统令牌向绑定服务账户令牌过渡期间,将令牌有效期延长至最多1年,确保平稳过渡。
maxTokenExpiration参数
此参数对应kube-apiserver的--service-account-max-token-expiration
标志,定义了服务账户令牌的最大有效期。
重要限制:
- 值必须在
[30d,90d]
范围内 - 低于30天可能影响集群SLO
- 高于90天违反安全最佳实践
实际应用:
- 此值为上限值,工作负载仍可使用更短的有效期
- 可在PodSpec中通过
expirationSeconds
为单个工作负载设置更短的有效期
托管服务账户发行者
Gardener提供了一种集中管理服务账户发行者的方案,通过Gardener Discovery Server实现。
启用条件
- Gardener管理员需部署并配置Gardener Discovery Server
- 通常通过gardener-operator完成部署
启用方法
通过为Shoot集群添加注解启用此功能:
authentication.gardener.cloud/issuer: managed
重要说明:
- 此功能一旦启用无法禁用
- 添加注解后需等待维护窗口或手动触发协调
- 与
.spec.kubernetes.kubeAPIServer.serviceAccountConfig.issuer
字段互斥
获取托管发行者信息
协调完成后,可通过以下命令查询托管发行者URL:
kubectl -n my-project get shoot my-shoot -o jsonpath='{.status.advertisedAddresses[?(@.name=="service-account-issuer")].url}'
迁移注意事项
从自定义发行者迁移到托管发行者时,需遵循与发行者变更相同的最佳实践,确保平稳过渡。
总结
Gardener为Shoot集群的ServiceAccount管理提供了全面的配置选项,包括发行者管理、令牌有效期控制以及托管发行者方案。合理配置这些参数可以平衡安全性与可用性,确保集群稳定运行。在实际操作中,特别是涉及发行者变更时,务必遵循推荐的最佳实践,避免对运行中的工作负载造成影响。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考