为 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
...
我正在尝试为我的 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
...