覆盖Kubernetes中部署的spring boot应用程序使用的默认服务帐户



问题说明:

我已经部署了一个spring启动应用程序,在启动时总是使用默认的计算引擎服务帐户凭据来验证应用程序,我已经创建了一个单独的服务帐户和密钥,但无法替换默认的。我尝试在部署中指定新的服务帐户。使用"serviceAccountName"字段,但仍然得到错误说服务帐户例如:"xyz"没有找到。

serviceAccountName: {{. values。serviceAccountName}}

那么我如何用特定的服务帐户覆盖计算引擎的默认服务帐户,并在deploy .yaml中定义它。

如果我在应用程序代码库中添加新服务帐户的凭据,它将工作,但这不是这样做的最佳实践,请有人帮助我解决这个问题

我的部署的片段。yaml文件:

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: helloworld
appVersion: {{ .Values.appVersion }}
name: helloworld
spec:
replicas: 1
selector:
matchLabels:
app: helloworld
template:
metadata:
labels:
app: helloworld
environment: {{ .Values.environment }}
spec:
containers:
- name: helloworld
image: {{ .Values.imageSha }}
imagePullPolicy: Always
securityContext:
allowPrivilegeEscalation: false
runAsUser: 1000
ports:
- containerPort: 8080
env:
- name: SPRING_CONFIG_LOCATION
value: "/app/deployments/config/"          
volumeMounts:
- name: application-config
mountPath: "/app/deployments/config"
readOnly: true
volumes:
- name: application-config
configMap:
name: {{ .Values.configMapName }}
items:
- key: application.properties
path: application.properties

我认为你应该使用Workload Identity,它允许从外部访问Google Cloud

Workload Identity是推荐的从运行在GKE中的应用程序访问Google Cloud服务的方式,因为它改进了安全属性和可管理性。有关从GKE访问Google Cloud api的替代方法的信息,请参阅下面的替代方法部分。

上面的指南描述得很好,我想它应该能解决你的问题。

例如,您可以查看社区教程之一-使用Kubernetes工作负载标识进行客户端-服务器授权。

在GKE中,工作负载身份特性允许这些身份也与IAM服务帐户相关联。这允许作为Kubernetes服务帐户运行的pod充当关联的服务帐户,以授权访问Google api和基于Google cloud特定的OIDC验证身份的服务。

两个文档都有示例,可以帮助您调整Workload Identity以满足您的需求。

最新更新