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})
Und das (nur für den Fall):
region := os.getenv("amazon_region") sess := session.must(session.newsession(&aws.config{region: ®ion})) svc := s3.new(sess)
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
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.
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!