在配合使用高版本k8s和低版本k8s的时候遇到了serviceAccount报错的问题 No API token found for service account "default", retry after the token is automatically created and added to the service account
大概看了眼代码,k8s的apiserver在创建pod的时候会看这个pod有没有自己指定serviceaccount这个项目,如果没有的话就用默认的default serviceaccount ,然后mount到pod的/var/run/secrets/kubernetes.io/serviceaccount
其中有个步骤是去找这个serviceAccount的secret信息,但是很不幸的是我用的是高版本的apiserver和低版本的controller,没有自动创建这个出来。而且其实我也用不到这个功能
1 |
|
也看到有个方法
src/k8s.io/kubernetes/plugin/pkg/admission/serviceaccount/admission.go
可以给这个namespace下的serviceaccount加个1
2
3
4
5
6
7
8
9
10
11
12
13
func shouldAutomount(sa *api.ServiceAccount, pod *api.Pod) bool {
// Pod's preference wins
if pod.Spec.AutomountServiceAccountToken != nil {
return *pod.Spec.AutomountServiceAccountToken
}
// Then service account's
if sa.AutomountServiceAccountToken != nil {
return *sa.AutomountServiceAccountToken
}
// Default to true for backwards compatibility
return true
}
https://tonybai.com/2017/03/03/access-api-server-from-a-pod-through-serviceaccount/