如何将Kubernetes ServiceAccount Token传入容器环境变量?
可行,具体操作分两种情况:
情况1:Token来自Kubernetes自动生成的ServiceAccount Secret
Kubernetes会为你创建的test-sat-account自动生成一个包含Token的Secret(名称格式为test-sat-account-token-xxxx,可通过kubectl get secrets查看实际名称),你可以直接在Deployment的环境变量中引用这个Secret的token字段,无需额外挂载卷:
apiVersion: apps/v1 kind: Deployment metadata: name: your-dotnet-deployment spec: replicas: 1 selector: matchLabels: app: dotnet-app template: metadata: labels: app: dotnet-app spec: serviceAccountName: test-sat-account containers: - name: dotnet-container image: your-dotnet-image:tag env: - name: SATToken valueFrom: secretKeyRef: name: test-sat-account-token-xxxx # 替换为实际的Secret名称 key: token
情况2:Token来自自定义的TokenProjection(已挂载到/var/run/secrets/tokens)
如果你的Token是通过tokenProjection方式挂载到指定路径的(比如设置了自定义过期时间),可以通过容器启动命令读取文件内容并注入环境变量:
apiVersion: apps/v1 kind: Deployment metadata: name: your-dotnet-deployment spec: replicas: 1 selector: matchLabels: app: dotnet-app template: metadata: labels: app: dotnet-app spec: serviceAccountName: test-sat-account volumes: - name: sat-token projected: sources: - serviceAccountToken: path: token expirationSeconds: 7200 # 你的自定义过期时间 containers: - name: dotnet-container image: your-dotnet-image:tag volumeMounts: - name: sat-token mountPath: /var/run/secrets/tokens readOnly: true command: ["/bin/sh", "-c"] args: ["export SATToken=$(cat /var/run/secrets/tokens/token) && exec dotnet YourService.dll"]
注意:这种方式需要容器镜像中包含/bin/sh和cat工具(大多数Linux镜像都自带),如果是极简镜像可能需要提前安装相关工具。
内容的提问来源于stack exchange,提问作者Abhijit
相关产品推荐
相关产品推荐

