簡體   English   中英

如何向kubernetes工作負載提供自定義GCP服務帳戶?

[英]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服務帳戶。

那可能嗎?

我考慮了一些選擇,但我對可行性或可取性沒有信心:

  1. 部署的GCP服務帳戶可以作為kubernetes機密添加到群集,部署可以將其作為文件掛載,並將GOOGLE_DEFAULT_CREDENTAILS設置為指向它
  2. 也許可以拒絕對實例的元數據API進行訪問,或者可以更改元數據API返回的服務帳戶?
  3. 也許有一種GKE(或kubernetes)本地方式來控制呈現給pod的服務帳戶?

你走在正確的軌道上。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM