實際上,我主要將kubernetes 服務帳戶與nodejs 一起使用,這工作得很好,但我有一個用go 製作的服務,但我似乎無法使其與服務帳戶一起使用(我知道服務帳戶是正確的)配置是因為我用pod 測試了它)。
我正在使用這個函式庫 //m.sbmmt.com/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: ®ion})) 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中文網其他相關文章!