2. ServiceAccount
问题:
**· ServiceAccount 不得自动挂载 API凭据。
· **ServiceAccount 名称必须以"-sa" 结尾
清单文件
/home/candidate/KSCH00301/pod-manifest.yaml 中指定的 Pod 由于 ServiceAccount 指定错误而无法调度。
请完成以下项目:
Task
- 在现有 namespace prod 中创建一个名为backend-sa 的新ServiceAccount 确保此ServiceAccount 不自动挂载 API凭据。
- 使用/home/candidate/KSCH00301/pod-mahifest.yaml中的清单文件来创建一个 Pod。
- 最后,清理 namespace prod 中任何未使用的ServiceAccount。
正确答案
- 在现有 namespace prod 中创建一个名为backend-sa 的新ServiceAccount 确保此ServiceAccount 不自动挂载 API凭据。
root@hk8s-master01:/home/candidate/KSCH00301# vim 2.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: backend-sa ##修改名字
namespace: prod ##添加名称空间
automountServiceAccountToken: false
##创建yaml文件
root@hk8s-master01:/home/candidate/KSCH00301# kubectl apply -f 2.yaml
##检查已经创建
root@hk8s-master01:/home/candidate/KSCH00301# kubectl get serviceaccounts -n prod
NAME SECRETS AGE
backend-sa 0 4h40m
default 0 419d
web-sa 0 418d
webaccount 0 419d
- 使用/home/candidate/KSCH00301/pod-mahifest.yaml中的清单文件来创建一个 Pod。
1 apiVersion: v1
2 kind: Pod
3 metadata:
4 creationTimestamp: null
5 labels:
6 run: backend
7 name: backend
8 namespace: prod
9 spec:
10 serviceAccountName: backend-sa ##把上面的serviceaccount名字写上
11 automountServiceAccountToken: false #这行也得加上,你之前没加过
12 containers:
13 - image: ikubernetes/demoapp:v1.0
14 name: backend
15 resources: {}
##创建yaml文件
root@hk8s-master01:/home/candidate/KSCH00301# kubectl apply -f pod-manifests.yaml
##检查是否绑定搭配serviceaccount
root@hk8s-master01:/home/candidate/KSCH00301# kubectl describe pod -n prod backend | grep -i service
Service Account: backend-sa
- 最后,清理 namespace prod 中任何未使用的ServiceAccount。
##直接查询prod名称空间下的所有pod的yaml文件格式,看看哪个pod引用了serviceaccount,没引用的直接删除就行
root@hk8s-master01:/home/candidate/KSCH00301# kubectl get pod -n prod -oyaml | grep serviceAccount
{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"creationTimestamp":null,"labels":{"run":"backend"},"name":"backend","namespace":"prod"},"spec":{"containers":[{"image":"ikubernetes/demoapp:v1.0","name":"backend","resources":{}}],"serviceAccountName":"backend-sa"}}
serviceAccount: backend-sa
serviceAccountName: backend-sa
##只有backend-sa用了,其他都直接删除就可以
root@hk8s-master01:/home/candidate/KSCH00301# kubectl get serviceaccounts -n prod
NAME SECRETS AGE
backend-sa 0 5h1m
default 0 419d
web-sa 0 418d
webaccount 0 419d
##删除serviceaccount
root@hk8s-master01:/home/candidate/KSCH00301# kubectl delete serviceaccounts -n prod default
serviceaccount "default" deleted
root@hk8s-master01:/home/candidate/KSCH00301# kubectl delete serviceaccounts -n prod web-sa
serviceaccount "web-sa" deleted
root@hk8s-master01:/home/candidate/KSCH00301# kubectl delete serviceaccounts -n prod webaccount
serviceaccount "webaccount" deleted