Error pod UDCA

Gejala

Setelah mengupgrade Apigee hybrid, pod Universal Data Collection Agent (UDCA) dan Connect Agent Anda akan menampilkan error masalah izin.

Pesan error

Pod UDCA Anda menampilkan error ini di log:

Permission 'apigee.runtimeconfigs.get' denied on resource 
'organizations/org-example/runtimeConfig' (or it may not 
exist)\\\",\\n  \\\"status\\\": \\\"PERMISSION_DENIED\\

Selain itu, pod Management API for Runtime (MART) Anda akan menampilkan error ini terkait Connect Agent:

Permission 'apigeeconnect.endpoints.connect' denied on resource 
'//apigeeconnect.googleapis.com/projects/org-example/endpoints/APIGEE_MART' 
(or it may not exist).

Langkah-langkah diagnosis umum

Kumpulkan skrip Apigee hybrid must-gather dari cluster Anda dan file overrides.yaml untuk cluster.

Kemungkinan penyebab

Penyebab Deskripsi
Kredensial salah Anda mungkin telah memasukkan kredensial yang salah dalam file overrides.yaml.
File SA berada di direktori yang salah File Akun Layanan (SA) Anda mungkin berada di luar direktori $APIGEE_HELM_CHARTS_HOME.

Penyebab 1: Kredensial salah

serviceAccountPath atau serviceAccountRef yang digunakan dalam file overrides.yaml untuk pod UDCA, MART, dan Connect Agent salah. Hal ini mungkin karena file overrides.yaml dibuat melalui otomatisasi atau skrip kustom, seperti menggunakan Terraform.

Diagnosis

  1. Verifikasi peran dan izin IAM yang ditetapkan ke akun layanan yang Anda gunakan.

    gcloud iam service-accounts get-iam-policy SERVICE_ACCOUNT_EMAIL
    gcloud projects get-iam-policy PROJECT_ID
    

    Dengan:

    • SERVICE_ACCOUNT_EMAIL adalah alamat email akun layanan.
    • PROJECT_ID adalah project Google Cloud yang terkait dengan akun layanan.
  2. Tinjau file overrides.yaml Anda untuk memastikan akun layanan yang dirujuk cocok dengan akun yang digunakan dalam kebijakan dan peran IAM project.

Contoh

Contoh kebijakan IAM yang berfungsi untuk akun layanan untuk penyiapan non-prod:

gcloud iam service-accounts get-iam-policy apigee-non-prod@org-example.

Contoh output:

bindings:
- members:
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-cassandra-backup-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-cassandra-default]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-cassandra-guardrails-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-connect-agent-org-example-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-mart-org-example-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-metrics-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-runtime-org-example-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-synchronizer-org-example-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-udca-org-example-sa]
  - serviceAccount:org-example.svc.id.goog[apigee/apigee-watcher-org-example-sa]
  role: roles/iam.workloadIdentityUser
etag: BwYw33-1N8s=
version: 1

Contoh memvalidasi peran:

gcloud projects get-iam-policy org-example

Contoh output:

bindings:
- members:
  - serviceAccount:apigee-non-prod@org-example.
  role: roles/apigee.analyticsAgent
- members:
  - serviceAccount:apigee-non-prod@org-example.
  role: roles/apigee.runtimeAgent
- members:
  - serviceAccount:apigee-non-prod@org-example.
  role: roles/apigee.synchronizerManager
- members:
  - serviceAccount:apigee-non-prod@org-example.
  role: roles/apigeeconnect.Agent
- members:
  - serviceAccount:apigee-non-prod@org-example.
  role: roles/storage.objectAdmin

Untuk produksi, jalankan perintah yang sama terhadap akun layanan produksi untuk apigee-udca dan periksa peran IAM yang cocok dengan bagian penginstalan.

Resolusi

Jika file akun layanan yang digunakan di overrides.yaml Anda tidak cocok dengan akun layanan yang benar dalam binding dan peran IAM project, Anda harus menghapus dan membuat ulang akun layanan, serta memperbaiki file akun layanan yang digunakan di overrides.yaml.

Penyebab 2: File SA berada di direktori yang salah

Masalah ini terjadi saat menyiapkan diagram helm dan membuat akun layanan.

Diagnosis

Periksa lokasi file kredensial akun layanan Anda untuk memastikan file tersebut berada di direktori diagram helm yang benar. File JSON akun layanan harus berada di direktori berikut:

  • $APIGEE_HELM_CHARTS_HOME/apigee-datastore
  • $APIGEE_HELM_CHARTS_HOME/apigee-telemetry
  • $APIGEE_HELM_CHARTS_HOME/apigee-org
  • $APIGEE_HELM_CHARTS_HOME/apigee-env

Contoh

Misalnya, periksa direktori diagram helm dengan mencantumkan direktori apigee-datastore, dan lakukan hal yang sama untuk direktori apigee-org, apigee-env, dan apigee-telemetry.

Contoh Perintah:

Pastikan Anda berada di direktori yang benar:

pwd

Contoh output:

/usr/local/home/example/Hybrid/helm-charts
├── apigee-datastore
│   ├── org-example-apigee-non-prod.json
│   └── templates
├── apigee-env
│   ├── org-example-apigee-non-prod.json
│   └── templates
├── apigee-ingress-manager
│   └── templates
├── apigee-operator
│   ├── etc
│   │   ├── crds
│   │   │   ├── crd
│   │   │   │   ├── bases
│   │   │   │   └── patches
│   │   │   └── default
│   │   ├── examples
│   │   │   └── helmfiles
│   │   └── tools
│   │       └── service-accounts
│   │           ├── org-example-apigee-cassandra.json
│   │           ├── org-example-apigee-logger.json
│   │           ├── org-example-apigee-mart.json
│   │           ├── org-example-apigee-metrics.json
│   │           ├── org-example-apigee-runtime.json
│   │           ├── org-example-apigee-synchronizer.json
│   │           ├── org-example-apigee-udca.json
│   │           └── org-example-apigee-watcher.json
│   └── templates
├── apigee-org
│   ├── org-example-apigee-non-prod.json
│   └── templates
├── apigee-redis
│   └── templates
├── apigee-telemetry
│   ├── org-example-apigee-non-prod.json
│   └── templates
├── apigee-virtualhost
│   ├── certs
│   └── templates
└── cluster-check
29 directories, 12 files

Resolusi

Salin file Akun Layanan ke dalam empat direktori (apigee-datastore, apigee-telemetry, apigee-org, dan apigee-env) sesuai lokasi hierarki contoh di atas, lalu jalankan ulang diagram helm.

Penyiapan akun layanan