我希望我的所有豆荚都有相同的kubernetes服务帐户令牌,这样我的缓存代理就可以将来自单个部署的所有请求视为等效的。
我总是想当然地认为,我将在kubernetes名称空间中自动生成这些服务帐户令牌,最后带有一个随机字符串,如下所示:
service-account-token-qrs88x
我以为这会自动进入我所有的豆荚中,但似乎每个豆荚都有自己的标记。
我可以创建一个令牌,我有一个可靠的名称,但我想知道是否可以通过使用这些自动生成的令牌秘密作为部署的一部分来节省一些额外的配置,而不是每个吊舱都获得自己的令牌。
如果我不能在一个吊舱内可靠地使用service-account-token-qrs88x,那么它有什么意义呢?
发布于 2022-08-18 19:10:52
我以为这会自动进入我所有的豆荚中,但似乎每个豆荚都有自己的标记。
不,每个名称空间都只有default,它可能是您创建随机服务帐户的部署。
默认服务帐户绑定到名称空间中的每个名称空间,因此可以将权限分配给默认的pod,因为名称空间中的pod已经使用了这个权限。
kubectl create rolebinding default-view \
--clusterrole=view \
--serviceaccount=default:default \
--namespace=default这只是一个例子,你可以根据你的需要来分配基础。
每个Kubernetes安装都有一个名为default的服务帐户,它与每个运行的pod相关联。类似地,为了使pods能够调用内部API端点,有一个名为Kubernetes的ClusterIP服务。这种组合使内部进程能够调用API端点。
默认的秘密挂载到/tmp/secrets/kubernetes.io/serviceaccount/token
因此,如果您想使用服务令牌(例如,该服务帐户允许服务使用AWS s3、或某些GCP服务),那么您应该创建另一个服务并允许pod使用该服务。
这将创建名为myserviceaccount的服务帐户。
apiVersion: v1
kind: ServiceAccount
metadata:
name: myserviceaccount
annotations:
eks.amazonaws.com/role-arn: {{ .Values.ses_role_arn }}
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: {{ include "helm-chart.name" . }}
helm.sh/chart: {{ include "helm-chart.chart" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}吊舱应该参考这个服务帐户。
spec:
imagePullSecrets:
- name: {{ include "helm-chart.fullname" . }}
volumes:
- name: heap-dumps
emptyDir: {}
serviceAccountName: myserviceaccount
containers:.....


或者您可以从默认服务令牌中使用作为env的令牌,这样就不会对令牌名称进行中继。
apiVersion: v1
kind: Secret
metadata:
name: default-token
annotations:
kubernetes.io/service-account.name: default
type: kubernetes.io/service-account-token
---
apiVersion: v1
kind: Pod
metadata:
name: secret-env-pod
spec:
containers:
- name: mycontainer
image: nginx
env:
- name: KUBERNETES_TOKEN
valueFrom:
secretKeyRef:
name: default-token
key: token
restartPolicy: Neverhttps://stackoverflow.com/questions/73407929
复制相似问题