我正在使用GKE和terraform配置高可用性kubernetes集群。多个团队将在集群上运行多个部署,我预计大多数部署将位于自定义命名空间中,主要是出于隔离原因。
我们的一个悬而未决的问题是如何管理群集上的GCP服务帐户。
我可以使用自定义GCP服务帐户创建群集,并调整权限以便它可以从GCR中提取图像,登录到堆栈驱动程序等。我认为这个自定义服务帐户将由GKE节点使用,而不是默认计算引擎服务帐户。如果我在这方面错了,请纠正我!
每个部署都需要访问一组不同的GCP资源(云存储,数据存储,云sql等),我希望每个部署都拥有自己的GCP服务帐户,以便我们可以控制权限。我还想运行pods无法访问运行pod的节点可用的GCP服务帐户。
这可能吗?
我考虑了一些选择,但我对可行性或可取性没有信心:
GOOGLE_DEFAULT_CREDENTAILS
设置为指向它答案 0 :(得分:2)
你走在正确的轨道上。 GCP服务帐户可以在GKE for POD中使用,以便为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}'
为服务帐户生成JSON文件:
gcloud iam service-accounts keys create \
--iam-account "${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \
service-account.json
使用该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"
如果要对单独部署使用各种权限,则需要创建一些具有不同权限的GCP服务帐户,为它们生成JSON令牌,并根据您的计划将它们分配给部署。 POD将根据已安装的服务帐户进行访问,而不是为分配给该节点的帐户提供服务。
有关详细信息,请查看链接: