当前位置: 首页 > 知识库问答 >
问题:

如何向kubernetes工作负载提供自定义GCP服务帐户?

闻人举
2023-03-14

我正在使用GKE和Terraform配置一个高可用的kubernetes集群。多个团队将在集群上运行多个部署,我预计大多数部署将在一个自定义命名空间中,主要是出于隔离的原因。

我们的一个开放问题是如何管理集群上的GCP服务帐户。

我可以使用自定义GCP服务帐户创建集群,并调整权限,以便它可以从GCR中提取映像,日志到stackdriver等。我认为这个自定义服务帐户将被GKE节点使用,而不是默认的compute engine服务帐户。如果我在这方面错了,请纠正我!

  1. 可以将部署的GCP服务帐户作为kubernetes机密添加到集群中,部署可以将其作为文件挂载,并将Google_Default_Credentails设置为指向它
  2. 对实例元数据API的访问可能被拒绝给POD,或者可以更改元数据API返回的服务帐户吗?
  3. 也许有一种GKE(或kubernetes)本地方法来控制提交给吊舱的服务帐户?

共有1个答案

许正平
2023-03-14

你在正确的轨道上。GCP服务帐户可以在GKE中用于PODs为GCP资源分配权限。

创建帐户:

cloud iam service-accounts create ${SERVICE_ACCOUNT_NAME} 

将IAM权限添加到服务帐户:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role='roles/${ROLE_ID}'
gcloud iam service-accounts keys create \
  --iam-account "${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
  service-account.json
kubectl create secret generic echo --from-file service-account.json
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: echo
  template:
    metadata:
      name: echo
    spec:
      containers:
        - name: echo
          image: "gcr.io/hightowerlabs/echo"
          env:
            - name: "GOOGLE_APPLICATION_CREDENTIALS"
              value: "/var/run/secret/cloud.google.com/service-account.json"
            - name: "PROJECT_ID"
              valueFrom:
                configMapKeyRef:
                  name: echo
                  key: project-id
            - name: "TOPIC"
              value: "echo"
          volumeMounts:
            - name: "service-account"
              mountPath: "/var/run/secret/cloud.google.com"
      volumes:
        - name: "service-account"
          secret:
            secretName: "echo"
    null
 类似资料:
  • 我试图创建一个服务帐户与一个已知的,固定的令牌Jenkins使用,以部署到Kubernetes的东西。我使用以下YAML创建了令牌:

  • 我想为Kubernetes服务分配一个静态(即非临时)区域IP。目前,该服务属于“LoadBalancer”类型,GCP将其公开为一个区域TCP负载平衡器。默认情况下,转发规则的IP地址是临时的。是否有任何方法可以使用现有的静态ip或按名称分配自己的地址(如使用入口/HTTP负载平衡器可能)? 我还尝试使用该服务的节点端口使用自定义静态区域IP创建自己的转发规则。我只使用实际的节点端口成功地构建了

  • 试图自学如何使用库伯内特斯,但有一些问题。 我的下一步是尝试使用LoadBalancer类型的服务来访问nginx。 我建立了一个新的集群并部署了nginx映像。 然后,我为LoadBalancer设置服务 设置完成后,我尝试使用LoadBalancer入口(我在描述LoadBalancer服务时发现)访问nginx。我收到一个此页面无法工作的错误。 不太确定我哪里出错了。 kubectl获得sv

  • 我开发了以下代码,用于自动执行我的一些实例的启动/停止任务,这些实例不需要一直运行,而是在特定范围内运行。 这是我的代码:https://github.com/maartinpii/gcp-shst 我按照谷歌云平台指南(参考:https://cloud.google.com/iam/docs/understanding-service-accounts https://cloud.google.

  • 我正在尝试在GCP中使用Python创建一个服务帐户。当我将env var GOOGLE_APPLICATION_凭证设置为JSON凭证文件,并使用以下代码时,这一切都很好: 但是,以下代码在使用Workload Identity Federation的CI-Github操作中失败: 失败与错误: 我正在使用以下Github操作向Google进行身份验证 有人能帮忙吗?

  • 我有一个Terraform用来管理我的云资源的服务帐户,我们称之为。我需要给予它足够的访问权限来创建/删除/编辑其他服务帐户,但不能更改它自己或项目中不应该接触的其他SAs。 我试着在那里添加一个条件,但看起来‘服务帐户’不是可以在条件(?)中使用的资源类型之一。下面是绑定该角色的HCL片段(我使用Terraform的事实与此无关): 当我删除该条件时,一切正常,但的权限远远超过它所需的权限。它甚