【问题标题】:Override Default Service account used by spring boot app deployed in Kubernetes覆盖部署在 Kubernetes 中的 Spring Boot 应用程序使用的默认服务帐户
【发布时间】:2021-06-01 17:03:01
【问题描述】:

问题陈述:

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

serviceAccountName:{{ .Values.serviceAccountName }}

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

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

我的 deployment.yaml 文件的 sn-p:

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

【问题讨论】:

  • 显示您的代码和部署文件。您可以更改分配给计算引擎的默认服务帐户,但这是在 Google Cloud 控制台中完成的,而不是在您的部署文件中。如果您实际上是指应用程序默认凭据,那么您可以在代码中或通过环境变量 GOOGLE_APPLICATION_CREDENTIALS=full_path_service_account_file 指定服务帐户 JSON 密钥文件名。
  • 请提供更多详细信息,您正在使用 Helm 部署此部署吗?您想在已部署 SA 时更改 SA,还是希望使用新 SA 部署它?您的环境和配置的详细信息会有所帮助。
  • 是的,我正在使用 helm 进行部署,我将使用部署文件代码更新问题,因此通过上述配置,当我的应用程序启动时,它使用默认计算引擎凭据进行身份验证,但我有一个特定的服务帐户和 json 密钥所以应用程序应该使用这个密钥来进行身份验证,而不是默认的

标签: spring-boot kubernetes google-cloud-platform google-kubernetes-engine


【解决方案1】:

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

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

上面的指南描述得很好,我认为它应该可以解决您的问题。

对于其他示例,您可以查看社区教程之一 - Using Kubernetes Workload Identity for client-server authorization

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

两个文档都有示例,可以帮助您根据需要调整 Workload Identity

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-03
    • 2014-06-09
    • 2019-10-20
    • 1970-01-01
    • 2018-12-28
    • 2020-11-27
    • 2019-04-02
    • 2019-05-15
    相关资源
    最近更新 更多