[英]How do I present a custom GCP service account to kubernetes workloads?
我正在使用GKE和terraform配置高可用性kubernetes集群。 多個團隊將在群集上運行多個部署,我預計大多數部署將位於自定義命名空間中,主要是出於隔離原因。
我們的一個懸而未決的問題是如何管理群集上的GCP服務帳戶。
我可以使用自定義GCP服務帳戶創建群集,並調整權限以便它可以從GCR中提取圖像,登錄到堆棧驅動程序等。我認為此自定義服務帳戶將由GKE節點使用,而不是默認計算引擎服務帳戶。 如果我在這方面錯了,請糾正我!
每個部署都需要訪問一組不同的GCP資源(雲存儲,數據存儲,雲sql等),我希望每個部署都擁有自己的GCP服務帳戶,以便我們可以控制權限。 我還想運行pods無法訪問運行pod的節點可用的GCP服務帳戶。
那可能嗎?
我考慮了一些選擇,但我對可行性或可取性沒有信心:
GOOGLE_DEFAULT_CREDENTAILS
設置為指向它 你走在正確的軌道上。 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將根據已安裝的服務帳戶進行訪問,而不是為分配給該節點的帳戶提供服務。
有關更多信息,您可以查看鏈接:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.