私はGoogleのkubernetesエンジンでJavaアプリケーションを展開しています。アプリケーションは正しく開始しますが、データを要求しようとすると失敗します。例外は "DatastoreException、MissingまたはPermissions"です。私は "Owner"ロールを持つサービスアカウントを作成し、kubernetesにサービスアカウントキーを提供しました。ここで私はkubernetes展開を適用する方法である:ここではkubernetesアプリケーションがDatastoreExceptionをスローしました。サービスキーファイルを提供
# 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
は、展開の設定です:
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
それが機能しない理由かしら?私は以前の展開でこの設定を使用して成功しました。 UPD:ポッドに/var/secrets/google/key.json
が存在することを確認しました。 Files.exists(System.getEnv( "GOOGLE_APPLICATION_CREDENTIALS"))を出力してログに記録します。私もこのファイルの内容を印刷します - それは壊れていないようです。