首頁 >後端開發 >Golang >如何在 golang 中使用 kubernetes 服務帳號?

如何在 golang 中使用 kubernetes 服務帳號?

WBOY
WBOY轉載
2024-02-08 20:57:161173瀏覽

如何在 golang 中使用 kubernetes 服务帐户?

問題內容

實際上,我主要將kubernetes 服務帳戶與nodejs 一起使用,這工作得很好,但我有一個用go 製作的服務,但我似乎無法使其與服務帳戶一起使用(我知道服務帳戶是正確的)配置是因為我用pod 測試了它)。

我正在使用這個函式庫 https://www.php.cn/link/2ce2b048fbba1c28933b3b167650dc3d

#到目前為止我嘗試過這個:

  sess := session.must(session.newsession())

  creds := stscreds.newcredentials(sess, os.getenv("aws_role_arn"))

  svc := s3.new(sess, &aws.config{credentials: creds})

還有這個(以防萬一):

  region := os.getenv("amazon_region")
  sess := session.must(session.newsession(&aws.config{region: &region}))

  svc := s3.new(sess)

對於第一種情況,我收到以下錯誤:

AccessDenied: User: arn:aws:sts::xxxxxxxx:assumed-role/staging-worker-node/i-0xxxxxxxxx is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::xxxxxxxx:role/EKSServiceAccount-app

對於第二種情況,我遇到了一般權限錯誤。

我閱讀了文件並嘗試了更多的東西(這可能與這裡無關),但我看不到讓它工作,也許是因為我對 golang 沒有太多經驗。


正確答案


您可以嘗試透過以下幾種方式讓 Go 服務與 Kubernetes 上的服務帳戶搭配使用:

驗證您的 Go 服務是否已正確設定為使用 Kubernetes 服務帳戶。這可以透過檢查服務帳戶是否正確安裝為 Pod 定義中的磁碟區以及服務是否能夠從該磁碟區讀取憑證來完成。

確保您使用的 AWS SDK for Go (https://github.com /aws/aws-sdk-go) 配置為使用正確的憑證。 SDK 支援多種提供憑證的方法,包括環境變數、共用憑證檔案和 IAM 角色。

您可以嘗試使用k8s.io/client-go 庫代替AWS SDK for Go,這將幫助您使用Kubernetes 服務帳戶透過Kubernetes API 進行驗證並取得AWS開發工具包所需的憑證。

如果您使用 Kubernetes 服務帳戶向 AWS 等外部服務進行驗證,您可能還需要設定 IAM 角色,以允許服務帳戶存取必要的資源。

仔細檢查您的 Go 服務是否正確使用 Kubernetes 服務帳戶令牌並將其作為身分驗證令牌傳遞給 AWS 開發工具包。

您也可以嘗試使用 k8s.io/client-go 函式庫來取得秘密並在您的 go 程式碼中使用它。

以上是如何在 golang 中使用 kubernetes 服務帳號?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除