kubernetes - 在不存在的情况下将 `serviceAccountName`设置为 `default`

标签 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}

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

最佳答案

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

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

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

这是weebhook的example,用于验证和设置自定义标签。

有关Admission Controller Webhooks的更多信息

关于kubernetes - 在不存在的情况下将 `serviceAccountName`设置为 `default`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57066342/

相关文章:

kubernetes - Helm 套件选项(--set)|更新数组的第 N 个键值

Kubernetes 配置映射 : import from file as many values instead of as one?

kubernetes - 我可以强制 Kubernetes 不要在同一节点中运行超过 X 个 pod 副本吗?

python - 使用 patch_namespaced_deployment 从部署中删除卷不起作用

kubernetes - GKE 集群自动扩缩器陷入初始化状态

kubernetes - 如何将防火墙规则添加到 gke 服务?

kubernetes - VirtualService 和 DestinationRule Istio 资源的正确命名空间

kubernetes - 如何允许(sidecar)容器在 Kubernetes 部署中终止而不重新启动?

kubernetes - 为什么在 Kuberntes 部署/容器定义中需要端口/容器端口?

git - Kubernetes Gitrepo数量-自动重新部署?