为 kubernetes pod 指定带有命名空间的服务帐户名称

Specify service account name with namespace for kubernetes pod

我正在尝试为我的 kubernetes 集群使用工作流标识。我已使用新名称space 创建了服务帐户。我的问题是当我尝试在 pod 部署 YML 上添加服务帐户名称时无法指定名称 space。

以下是我的 pod spect 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-scheduler
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test-scheduler
  template:
    metadata:
      labels:
        app: test-scheduler
    spec:
      serviceAccountName: test-na/test-k8-sa
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true"
      containers:
        - name: test-scheduler
          image: gcr.io/PROJECT_ID/IMAGE:TAG
          ports:
            - name: scheduler-port
              containerPort: 8002
              protocol: TCP
          env:
            - name: NAMESPACE
              value: test-scheduler
            - name: CONTAINER_NAME
              value: test-scheduler
---
apiVersion: v1
kind: Service
metadata:
  name: test-scheduler
spec:
  selector:
    app: test-scheduler
  ports:
    - port: 8002
      protocol: TCP
      targetPort: scheduler-port 

当我使用 github 操作部署此代码时,出现此错误:

The Deployment "test-scheduler" is invalid: spec.template.spec.serviceAccountName: Invalid value: "test-na/test-k8-sa": a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.',

当我在这样的文件中删除名称space时:

serviceAccountName: test-k8-sa

它搜索默认名称 space 上的服务帐户但失败了。

我的问题是在 kubernetes 中使用服务帐户指定自定义名称space的正确方法是什么?

我可以开始使用默认名称,但我倾向于保留名称space。我看到了一些关于服务帐户文件的参考,但我真的不明白如何使用它们。

顺便说一句,我正在使用这个指南https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity#gcloud_3

您可以在 default 中创建一个服务帐户并将其附加到 Role 和 Biding 到另一个名称空间

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: reader-default
  namespace: <Namespace - 2>
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: pod-reader
subjects:
- kind: ServiceAccount
  name: default-service-account
  namespace: <ANOTHER NAMESPACE OR DEFAULT>

...I have created the service account on a new namespace. My issue is that I am not able to specify the name space when I am trying to add the service account name on the pod deployment YML.

要将创建的服务帐户分配给您的部署,您可以在与服务帐户相同的命名空间中创建部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-scheduler
  namespace: test-na  # <-- add this line with the namespace where the service account resides
spec:
  ...
  template:
    ...
    spec:
      serviceAccountName: test-k8-sa
      ...