真题解析

题目

Context

  • ServiceAccount 不得自动挂载 API 凭据

  • ServiceAccount 名称必须以 ".sa" 结尾

清单文件 /home/candidate/KSCH00301/pod-manifest.yaml 中指定的 Pod 由于 ServiceAccount 指定错误而无法调度。

请完成以下项目:

Task

  1. 在现有 namespace prod 中创建一个名为 backend-sa 的新 ServiceAccount 确保此 ServiceAccount 不自动挂载 API 凭据。

  2. 使用 /home/candidate/KSCH00301/pod-manifest.yaml 中的清单文件来创建一个 Pod。

  3. 最后,清理 namespace prod 中任何未使用的 ServiceAccount。

解析

创建 SA

# vim backend-sa.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: prod
  name: backend-sa
automountServiceAccountToken: false

kubectl create -f backend-sa.yaml

创建 Pod

# vim pod-manifest.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: backend
  name: backend
  namespace: prod
spec:
  serviceAccountName: backend-sa  # 添加此项配置
  containers:
  - image: nginx
    name: backend
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
# 创建 Pod
kubectl create -f pod-manifest.yaml

# 验证
kubectl get pod backend -n prod -o yaml | grep -i service
  enableServiceLinks: true
  serviceAccount: backend-sa
  serviceAccountName: backend-sa

删除未使用的 SA

# 查看 namespace 为 prod 下的所有 SA
kubectl get sa -n prod
NAME         SECRETS   AGE
backend-sa   0         22m
default      0         33m

# 查看 namespace 为 prod 下正在运行的 Pod 中所使用的 SA
kubectl get pod -n prod -o yaml | grep -i "serviceaccount:"
    serviceAccount: backend-sa

# 根据上述查询结果可知,backend-sa 在使用,故删除其它 SA
kubectl delete sa default -n prod 

Last updated