Kubernetes 头盔补丁默认服务帐户

Kubernetes 头盔补丁默认服务帐户,kubernetes,kubernetes-helm,Kubernetes,Kubernetes Helm,我有一个掌舵图,可以用来将用户列表添加到我的集群中,但我想修改我的default服务帐户,以包含一个镜像拉秘密。头盔中似乎没有任何补丁功能 安装后钩子是我能做的最好的方法吗?如果我正确理解您的意思,那么更改helm后面的默认服务(实际上是服务器端:tiller)的方法是纯粹的Kubernetes,就像下面的命令一样,只是修补与helm相关的部署资源对象: kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":

我有一个掌舵图,可以用来将用户列表添加到我的集群中,但我想修改我的
default
服务帐户,以包含一个镜像拉秘密。头盔中似乎没有任何补丁功能


安装后钩子是我能做的最好的方法吗?

如果我正确理解您的意思,那么更改helm后面的默认服务(实际上是服务器端:tiller)的方法是纯粹的Kubernetes,就像下面的命令一样,只是修补与helm相关的部署资源对象:

kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"<YOUR_SVC_ACCOUNT>"}}}}'  
kubectl补丁部署——名称空间kube-system-tiller部署-p'{“spec”:{“template”:{“spec”:{“servicecomport”:“}}}”

我也有同样的问题。我所做的是:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: default
  namespace: YOUR_NAMESPACE
rules:
- apiGroups:
  - ""
  resources:
  - serviceaccounts
  verbs:
  - get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: default
  namespace: YOUR_NAMESPACE
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: default
subjects:
- kind: ServiceAccount
  name: default
  namespace: YOUR_NAMESPACE
然后:

apiVersion: batch/v1
kind: Job
metadata:
  name: create-image-pull-secret
  annotations:
    "helm.sh/hook": pre-install
    "helm.sh/hook-delete-policy": hook-succeeded
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: k8s
        image: google/cloud-sdk
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh","-c", "kubectl patch serviceaccount default -p '{\"imagePullSecrets\": [{\"name\": \"YOUR_SECRET_NAME\"}]}'"]

请注意,我使用了一个
预安装
挂钩。我这样做是因为我需要imagePullSecret为我的子依赖项工作。另外,patch命令允许使用一个还不存在的秘密名称。

按照@tproenca所说的,我遇到了一个类似的问题,并通过创建一个名为
patch.yml
的模板文件修复了它,该文件包含以下内容:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  annotations:
    "helm.sh/hook": pre-install
    "helm.sh/hook-weight": "-5"
    "helm.sh/hook-delete-policy": hook-succeeded
  name: default
  namespace: {{ .Release.Name }}
rules:
- apiGroups:
  - ""
  resources:
  - serviceaccounts
  verbs:
  - get
  - patch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  annotations:
    "helm.sh/hook": pre-install
    "helm.sh/hook-weight": "-5"
    "helm.sh/hook-delete-policy": hook-succeeded
  name: default
  namespace: {{ .Release.Name }}
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: default
subjects:
- kind: ServiceAccount
  name: default
  namespace: {{ .Release.Name }}
---
apiVersion: batch/v1
kind: Job
metadata:
  name: patch-sa
  annotations:
    "helm.sh/hook": pre-install
    "helm.sh/hook-delete-policy": hook-succeeded
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
      - name: sa
        image: google/cloud-sdk
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c", "kubectl patch serviceaccount default -p '{\"imagePullSecrets\": [{\"name\": \"secret-key\"}]}'"]

这样,在第一次安装时,您就不必像helm那样手动将角色/角色绑定资源添加到您的命名空间中并将其删除。

Sorry@Nepoumucen问题更多的是:“通过helm图表,如何轻松地修补现有用户。尤其是k8s pods的默认服务帐户。”我认为您还需要在角色和rolebinding上添加预安装钩子注释(并使用钩子权重来确保正确的执行顺序),否则在运行补丁作业时访问权限将不可用