Ich bin die Bereitstellung von Java-Anwendung bei Google Kubernetes-Engine. Die Anwendung wird ordnungsgemäß gestartet, schlägt jedoch fehl, wenn versucht wird, Daten anzufordern. Ausnahme ist "DatastoreException, fehlende oder unzureichende Berechtigungen". Ich habe ein Dienstkonto mit der Rolle "Besitzer" erstellt und den Dienstkontoschlüssel für kubernetes bereitgestellt. Hier ist, wie ich anwenden Kubernetes Einsatz:Kubernetes-Anwendung löst DatastoreException, fehlende oder unzureichende Berechtigungen aus. Service-Key-Datei zur Verfügung gestellt
# delete old secret
kubectl delete secret google-key --ignore-not-found
# file with key
kubectl create secret generic google-key --from-file=key.json
kubectl apply -f prod-kubernetes.yml
Hier Bereitstellung config:
apiVersion: v1
kind: Service
metadata:
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
name: user
labels:
app: user
spec:
type: NodePort
ports:
- port: 8000
name: user
targetPort: 8000
nodePort: 32756
selector:
app: user
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: userdeployment
spec:
replicas: 1
template:
metadata:
labels:
app: user
spec:
volumes:
- name: google-cloud-key
secret:
secretName: google-key
containers:
- name: usercontainer
image: gcr.io/proj/user:v1
imagePullPolicy: Always
volumeMounts:
- name: google-cloud-key
mountPath: /var/secrets/google
env:
- name: GOOGLE_APPLICATION_CREDENTIALS
value: /var/secrets/google/key.json
ports:
- containerPort: 8000
Ich frage mich, warum es nicht funktioniert? Ich habe diese Konfiguration in der vorherigen Bereitstellung verwendet und hatte Erfolg. UPD: Ich habe sichergestellt, dass /var/secrets/google/key.json
bei Pod vorhanden sind. Ich drucke Files.exists (System.getEnv ("GOOGLE_APPLICATION_CREDENTIALS")), um zu protokollieren. Ich drucke auch Inhalt dieser Datei - es scheint nicht beschädigt.