在不存在的情况下将“ serviceAccountName”设置为“ default”

时间:2019-07-16 22:41:24

标签: kubernetes kubernetes-deployment

因此,我正在唤醒的典型k8s部署文件如下所示:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    ...
  name: ${service-name}
spec:
  replicas: 1
  strategy:
    ...
  template:
    metadata:
       ...
    spec:
      serviceAccountName: test
      ...

目标是创建可以访问同一serviceAccount的多个服务。 当test存在于

中时,此结构可以正常工作
kubectl get serviceaccount

问题是,如果命名空间中不存在serviceAccountName(出于任何原因),如何将default设置为test serviceAccount? 我不想使部署失败

我基本上需要拥有

serviceAccountName: {test:-default}

P.S。显然,我可以为serviceAccountName分配一个变量并从外部解析yaml文件,但想看看是否有更好的选择

1 个答案:

答案 0 :(得分:1)

只要您要在集群中运行此验证,唯一的方法就是使用MutatingAdmissionWebhook

在存在etcd之前,它将拦截与MutatingWebhookConfiguration中定义的规则匹配的请求。 MutatingAdmissionWebhook通过向Webhook服务器发送接纳请求来执行变异。 Webhook服务器只是遵循API的普通http服务器。

因此,您可以验证服务帐户是否存在,如果不存在,则设置默认值sa。

这是weebhook的example,它可以验证并设置自定义标签。

有关Admission Controller Webhooks

的更多信息