Heim > Backend-Entwicklung > Golang > Wie verwende ich ein Kubernetes-Dienstkonto in Golang?

Wie verwende ich ein Kubernetes-Dienstkonto in Golang?

WBOY
Freigeben: 2024-02-08 20:57:16
nach vorne
1169 Leute haben es durchsucht

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

Frageninhalt

Eigentlich verwende ich hauptsächlich das Kubernetes-Dienstkonto mit NodeJS und das funktioniert gut, aber ich habe einen Dienst in Go erstellt und kann ihn scheinbar nicht mit dem Dienstkonto zum Laufen bringen (ich kenne den Dienst). (das Konto ist korrekt konfiguriert, da ich es mit dem Pod getestet habe).

Ich verwende diese Bibliothek https://www.php.cn/link/2ce2b048fbba1c28933b3b167650dc3d

Bisher habe ich Folgendes versucht:

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

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

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

Und das (nur für den Fall):

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

  svc := s3.new(sess)
Nach dem Login kopieren

Im ersten Fall erhalte ich folgende Fehlermeldung:

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
Nach dem Login kopieren

Im zweiten Fall habe ich einen allgemeinen Berechtigungsfehler erhalten.

Ich habe die Dokumentation gelesen und noch ein paar Dinge ausprobiert (die hier vielleicht nicht relevant sind), aber ich kann mir nicht vorstellen, dass es funktioniert, vielleicht weil ich nicht viel Erfahrung mit Golang habe.


Richtige Antwort


Hier sind einige Möglichkeiten, wie Sie versuchen können, Ihren Go-Dienst mit einem Dienstkonto auf Kubernetes zum Laufen zu bringen:

Stellen Sie sicher, dass Ihr Go-Dienst korrekt für die Verwendung des Kubernetes-Dienstkontos konfiguriert ist. Dies kann erreicht werden, indem überprüft wird, ob das Dienstkonto korrekt als Volume in der Pod-Definition bereitgestellt ist und ob der Dienst die Anmeldeinformationen vom Volume lesen kann.

Stellen Sie sicher, dass das von Ihnen verwendete AWS SDK for Go (https://github.com/aws/aws-sdk-go) für die Verwendung der richtigen Anmeldeinformationen konfiguriert ist. Das SDK unterstützt mehrere Methoden zur Bereitstellung von Anmeldeinformationen, einschließlich Umgebungsvariablen, gemeinsam genutzten Anmeldeinformationsdateien und IAM-Rollen.

Sie können versuchen, k8s.io/client-go 库代替 AWS SDK für Go zu verwenden, das Ihnen hilft, sich mit einem Kubernetes-Dienstkonto bei der Kubernetes-API zu authentifizieren und die für das AWS SDK erforderlichen Anmeldeinformationen zu erhalten.

Wenn Sie ein Kubernetes-Dienstkonto zur Authentifizierung bei einem externen Dienst wie AWS verwenden, müssen Sie möglicherweise auch eine IAM-Rolle konfigurieren, um dem Dienstkonto den Zugriff auf die erforderlichen Ressourcen zu ermöglichen.

Überprüfen Sie noch einmal, ob Ihr Go-Dienst das Kubernetes-Dienstkonto-Token korrekt verwendet und es als Authentifizierungstoken an das AWS SDK übergibt.

Sie können auch versuchen, die k8s.io/client-go-Bibliothek zu verwenden, um an das Geheimnis zu gelangen und es in Ihrem Go-Code zu verwenden.

Das obige ist der detaillierte Inhalt vonWie verwende ich ein Kubernetes-Dienstkonto in Golang?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage