因此,我正在唤醒的典型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/