Halaman ini menjelaskan cara memecahkan masalah error umum yang mungkin Anda alami saat mendaftarkan cluster ke armada atau menghubungkan ke cluster di luar Google Cloud menggunakan konsol Google Cloud , Google Cloud CLI, atau kubectl
melalui gateway Connect.
Cluster lokal dan cluster di cloud publik lainnya bergantung pada Connect Agent untuk membuat dan mempertahankan koneksi antara cluster dan project Google Cloud Anda, serta untuk menangani permintaan Kubernetes. Jika Anda melihat error seperti "Agen Tidak Dapat Dijangkau" atau "Gagal terhubung ke panel kontrol cluster", hal ini dapat menunjukkan masalah pada Agen Connect.
Mengumpulkan log Connect Agent
Saat Anda mendaftarkan cluster di luar Google Cloud, cluster tersebut akan menggunakan Connect Agent untuk menangani komunikasi antara cluster dan project host fleet Anda. Connect Agent adalah Deployment, gke-connect-agent
, yang biasanya diinstal di cluster Anda di namespace
gke-connect
. Mengumpulkan log dari Connect Agent ini dapat berguna untuk memecahkan masalah pendaftaran dan koneksi.
Anda dapat mengambil log Agen dengan menjalankan perintah berikut (sesuaikan jumlah baris jika perlu):
kubectl logs -n gke-connect -l app=gke-connect-agent --tail=-1
Untuk mendapatkan informasi tentang setiap Connect Agent yang berjalan di cluster project Anda:
kubectl describe deployment --all-namespaces -l app=gke-connect-agent
Koneksi yang berhasil akan memiliki entri yang mirip dengan contoh di bawah:
2019/02/16 17:28:43.312056 dialer.go:244: dialer: dial: connected to gkeconnect.googleapis.com:443 2019/02/16 17:28:43.312279 tunnel.go:234: serve: opening egress stream... 2019/02/16 17:28:43.312439 tunnel.go:248: serve: registering endpoint="442223602236", shard="88d2bca5-f40a-11e8-983e-42010a8000b2" {"Params":{"GkeConnect":{"endpoint_class":1,"metadata":{"Metadata":{"Default":{"manifest_version":"234227867"}}}}}} ... 2019/02/16 17:28:43.312656 tunnel.go:259: serve: serving requests...
Mengumpulkan log GKE Identity Service
Memeriksa log GKE Identity Service dapat membantu jika Anda mengalami masalah dengan Google Grup atau dukungan pihak ketiga untuk gateway Connect. Metode pembuatan log ini hanya berlaku untuk cluster dalam deployment Google Distributed Cloud di VMware atau bare metal.
Tingkatkan kejelasan log GKE Identity Service dengan mengedit resource kustom clientconfig menggunakan perintah berikut:
kubectl edit deployment -n anthos-identity-service
dan menambahkan tanda
vmodule
di bagian kolomcontainers
seperti berikut:spec: containers: ... - command: - --vmodule=cloud/identity/hybrid/charon/*=9
Mulai ulang pod GKE Identity Service dengan menghapusnya menggunakan perintah berikut:
kubectl delete pods -l k8s-app=ais -n anthos-identity-service
Pod akan muncul kembali dalam beberapa detik.
Setelah pod dimulai ulang, jalankan perintah asli yang menampilkan respons yang tidak terduga untuk mengisi log pod GKE Identity Service dengan detail selengkapnya.
Simpan output log ini ke file menggunakan perintah berikut:
kubectl logs -l k8s-app=ais -n anthos-identity-service --tail=-1 > gke_id_service_logs.txt
Jika grup yang diharapkan tidak ada di log pod GKE Identity Service, verifikasi penyiapan untuk cluster sudah benar. Jika ada masalah lain terkait Layanan Identitas GKE, lihat Memecahkan masalah akses pengguna atau Memecahkan masalah penyiapan tingkat fleet.
tls: oversized record
error
- Gejala
Anda mungkin mengalami error seperti ini:
... dialer: dial: connection to gkeconnect.googleapis.com:443 failed after 388.080605ms: serve: egress call failed: rpc error: code = Unauthenticated desc = transport: oauth2: cannot fetch token: Post https://oauth2.googleapis.com/token: proxyconnect tcp: tls: oversized record received with length 20527
- Kemungkinan penyebab
Hal ini dapat berarti bahwa Connect Agent mencoba terhubung melalui HTTPS ke proxy khusus HTTP. Connect Agent hanya mendukung proxy HTTP berbasis CONNECT.
- Resolusi
Anda perlu mengonfigurasi ulang variabel lingkungan proxy ke berikut ini:
http_proxy=http://[PROXY_URL]:[PROXY_PORT] https_proxy=http://[PROXY_URL]:[PROXY_PORT]
oauth2: cannot fetch token
error
- Gejala
Anda mungkin mengalami error seperti ini:
... dialer: dial: connection to gkeconnect.googleapis.com:443 failed after 388.080605ms: serve: egress call failed: rpc error: code = Unauthenticated desc = transport: oauth2: cannot fetch token: Post https://oauth2.googleapis.com/token: read tcp 192.168.1.40:5570->1.1.1.1:80 read: connection reset by peer
- Kemungkinan penyebab
Hal ini dapat berarti bahwa proxy HTTP upstream mereset koneksi, kemungkinan besar karena URL tertentu ini tidak diizinkan oleh proxy HTTP Anda. Dalam contoh di atas, 1.1.1.1:80 adalah alamat proxy HTTP.
- Resolusi
Pastikan daftar yang diizinkan untuk proxy HTTP Anda menyertakan URL/domain berikut:
gkeconnect.googleapis.com oauth2.googleapis.com/token www.googleapis.com/oauth2/v1/certs
Error crash dan memulai ulang pod Connect Agent
- Gejala
Anda mungkin mengalami error "Agen Tidak Dapat Dijangkau" yang terjadi sesekali di konsol Google Cloud untuk cluster Anda dan/atau Anda mungkin mendapati bahwa Pod telah dimulai ulang beberapa kali:
$ kubectl get pods -n gke-connect NAME READY STATUS RESTARTS AGE gke-connect-agent-20230706-03-00-6b8f75dd58-dzwmt 1/1 Running 5 99m
Untuk memecahkan masalah perilaku ini, deskripsikan Pod untuk melihat apakah status terakhirnya dihentikan karena error kehabisan memori (OOMKilled).:
kubectl describe pods/gke-connect-agent-20230706-03-00-6b8f75dd58-dzwmt -n gke-connect
<some details skipped..>
Last State: Terminated
Reason: OOMKilled
- Kemungkinan penyebab
- Secara default, Pod Connect Agent memiliki batas RAM 256 MiB. Jika cluster telah menginstal banyak workload, beberapa permintaan dan respons mungkin tidak dapat ditangani seperti yang diharapkan.
- Resolusi
Perbarui deployment Connect Agent dan berikan batas memori yang lebih tinggi, misalnya:
containers: name: gke-connect-agent-20230706-03-00 resources: limits: memory: 512Mi
PermissionDenied
error
- Gejala
Anda mungkin mengalami error seperti ini:
tunnel.go:250: serve: recv error: rpc error: code = PermissionDenied desc = The caller does not have permission dialer.go:210: dialer: dial: connection to gkeconnect.googleapis.com:443 failed after 335.153278ms: serve: receive request failed: rpc error: code = PermissionDenied desc = The caller does not have permission dialer.go:150: dialer: connection done: serve: receive request failed: rpc error: code = PermissionDenied desc = The caller does not have permission dialer.go:228: dialer: backoff: 1m14.1376766s
- Kemungkinan penyebab
Hal ini dapat berarti Anda belum mengikat peran Identity and Access Management (IAM) yang diperlukan ke Google Cloud akun layanan yang Anda buat untuk mengizinkan Agen Connect terhubung ke Google. Akun Google Cloud layanan memerlukan peran IAM
gkehub.connect
.Hal ini juga dapat terjadi jika Anda menghapus dan membuat ulang akun layanan dengan nama yang sama. Google CloudAnda juga perlu menghapus dan membuat ulang pengikatan peran IAM dalam kasus tersebut. Lihat Menghapus dan membuat ulang akun layanan untuk mengetahui informasi selengkapnya.
- Resolusi
Ikat peran
gkehub.connect
ke akun layanan Anda (perhatikan bahwa perangkehub.admin
tidak memiliki izin yang tepat untuk terhubung dan tidak dimaksudkan untuk digunakan oleh akun layanan).Misalnya, untuk project bernama
my-project
dan akun layanan Google Cloudbernamagkeconnect@my-project.
, Anda akan menjalankan perintah berikut untuk mengikat peran ke akun layanan:gcloud projects add-iam-policy-binding my-project --member \ serviceAccount:gkeconnect@my-project. \ --role "roles/gkehub.connect"
Anda dapat melihat dan memverifikasi bahwa izin akun layanan telah diterapkan ke akun layanan Google Cloud dengan memeriksa output perintah berikut, dan Anda akan melihat
role: roles/gkehub.connect
terikat ke Akun layanan Google Cloud terkait.gcloud projects get-iam-policy my-project
Error saat mengikat peran IAM ke akun layanan Google Cloud
- Gejala
Anda mungkin mengalami error seperti ini:
ERROR: (gcloud.projects.add-iam-policy-binding) PERMISSION_DENIED: Service Management API has not been used in project [PROJECT_ID] before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/servicemanagement.googleapis.com/overview?project=[PROJECT_ID] then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
- Kemungkinan penyebab
Anda mungkin tidak memiliki izin IAM untuk menjalankan perintah
gcloud projects add-iam-policy-binding
.- Resolusi
Anda harus memiliki izin
resourcemanager.projects.setIamPolicy
Jika memiliki peranProject IAM Admin
,Owner
, atauEditor
, Anda akan dapat menjalankan perintah. Jika kebijakan keamanan internal melarang Anda menjalankan perintah, hubungi administrator Anda.
Error dari clock sistem yang tidak akurat
- Gejala
Anda mungkin mengalami error seperti ini:
acceptCall: failed to parse token in req [rpc_id=1]: Token used before issued [rpc_id=1]
- Kemungkinan penyebab
Pesan log biasanya menunjukkan bahwa ada perbedaan waktu pada cluster. Token yang dikeluarkan cluster memiliki stempel waktu yang tidak sinkron sehingga token ditolak.
- Resolusi
Untuk melihat apakah jam tidak disinkronkan dengan benar, Anda dapat menjalankan perintah
date
di cluster dan membandingkannya dengan waktu standar. Biasanya pergeseran beberapa detik akan menyebabkan masalah ini. Untuk mengatasi masalah ini, sinkronkan ulang jam cluster Anda.
Tidak dapat melihat beban kerja di konsol Google Cloud
- Gejala
Di log Connect Agent, Anda mungkin melihat error berikut:
"https://10.0.10.6:443/api/v1/nodes" YYYY-MM-DDTHH mm:ss.sssZ http.go:86: GET "https://10.0.10.6:443/api/v1/pods" YYYY-MM-DDTHH mm:ss.sssZ http.go:139: Response status: "403 Forbidden" YYYY-MM-DDTHH mm:ss.sssZ http.go:139: Response status: "403 Forbidden"`
- Kemungkinan penyebab
Log ini menunjukkan bahwa Google Cloud berupaya mengakses cluster menggunakan kredensial yang Anda berikan selama pendaftaran. Error 403 menunjukkan bahwa kredensial tidak memiliki izin yang diperlukan untuk mengakses cluster.
- Resolusi
Periksa token dan akun yang terikat dengannya, serta pastikan token tersebut memiliki izin yang sesuai di cluster.
Batas waktu konteks terlampaui
- Gejala
Anda mungkin mengalami error seperti ini:
2019/03/06 21:08:43.306625 dialer.go:235: dialer: dial: connecting to gkeconnect.googleapis.com:443... 2019/03/06 21:09:13.306893 dialer.go:240: dialer: dial: unable to connect to gkeconnect.googleapis.com:443: context deadline exceeded 2019/03/06 21:09:13.306943 dialer.go:183: dialer: connection done: context deadline exceeded
- Kemungkinan penyebab
Error ini menunjukkan masalah jaringan TCP tingkat rendah di mana Connect Agent tidak dapat berkomunikasi dengan gkeconnect.googleapis.com.
- Resolusi
Verifikasi bahwa beban kerja Pod dalam cluster ini dapat menyelesaikan dan memiliki konektivitas keluar ke gkeconnect.googleapis.com di port 443.
Koneksi agen gagal secara berkala
- Gejala
Di log Connect Agent, Anda mungkin melihat error berikut:
2020/10/06 18:02:34.409749 dialer.go:277: dialer: dial: connection to gkeconnect.googleapis.com:443 failed after 8m0.790286282s: serve: receive request failed: rpc error: code = Unavailable desc = transport is closing 2020/10/06 18:02:34.416618 dialer.go:207: dialer: connection done: serve: receive request failed: rpc error: code = Unavailable desc = transport is closing 2020/10/06 18:02:34.416722 dialer.go:295: dialer: backoff: 978.11948ms 2020/10/06 18:02:34.410097 tunnel.go:651: sendResponse: EOF [rpc_id=52] 2020/10/06 18:02:34.420077 tunnel.go:651: sendResponse: EOF [rpc_id=52] 2020/10/06 18:02:34.420204 tunnel.go:670: sendHalfClose: EOF [rpc_id=52] 2020/10/06 18:02:34.401412 tunnel.go:670: sendHalfClose: EOF [rpc_id=53]
- Kemungkinan penyebab
Koneksi ke Connect ditutup saat Connect Agent tidak memiliki cukup resource, misalnya pada instance AWS EC2 yang lebih kecil seperti
t3.medium
.- Resolusi
Jika Anda menggunakan AWS dan jenis instance T3, aktifkan T3 unlimited atau gunakan jenis instance dengan lebih banyak resource untuk node pool Anda.
Fleet tidak dapat mengakses project
- Gejala
Selama beberapa operasi Fleet (biasanya pendaftaran cluster), Anda mungkin melihat error yang mirip dengan berikut ini:
ERROR: (gcloud.container.hub.memberships.register) failed to initialize Feature "authorizer", the fleet service account (service-PROJECT_NUMBER@gcp-sa-gkehub.) may not have access to your project
- Kemungkinan penyebab
Akun layanan default Fleet,
gcp-sa-gkehub
, dapat secara tidak sengaja menjadi tidak terikat dari project. Agen Layanan Fleet adalah peran IAM yang memberi akun layanan izin untuk mengelola resource cluster. Jika Anda menghapus binding peran ini dari akun layanan, akun layanan default akan terlepas dari project, sehingga Anda tidak dapat mendaftarkan cluster dan melakukan operasi cluster lainnya.Anda dapat memeriksa apakah akun layanan telah dihapus dari project Anda menggunakan gcloud CLI atau konsol Google Cloud . Jika perintah atau dasbor tidak menampilkan
gcp-sa-gkehub
di antara akun layanan Anda, akun layanan telah terlepas.
gcloud
Jalankan perintah berikut:
gcloud projects get-iam-policy PROJECT_NAME
dengan PROJECT_NAME
adalah nama project tempat Anda mencoba mendaftarkan cluster.
Konsol
Buka halaman IAM & admin di konsol Google Cloud .
- Resolusi
Jika Anda menghapus binding peran Agen Layanan Fleet, jalankan perintah berikut untuk memulihkan binding peran:
PROJECT_NUMBER=$(gcloud projects describe PROJECT_NAME --format "value(projectNumber)") gcloud projects add-iam-policy-binding PROJECT_NAME \ --member "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-gkehub." \ --role roles/gkehub.serviceAgent
Untuk mengonfirmasi bahwa binding peran telah diberikan:
gcloud projects get-iam-policy PROJECT_NAME
Jika Anda melihat nama akun layanan beserta peran
gkehub.serviceAgent
, artinya binding peran telah diberikan. Contoh:- members: - serviceAccount:service-1234567890@gcp-sa-gkehub. role: roles/gkehub.serviceAgent
Error saat mendaftarkan cluster GKE dari project yang berbeda dengan Fleet
- Gejala
Saat mendaftarkan cluster GKE dari project yang berbeda dengan project Fleet, Anda mungkin melihat error yang mirip dengan berikut di gcloud CLI:
... message: 'DeployPatch failed'> detail: 'DeployPatch failed' ...
Hal ini dapat diverifikasi dalam logging dengan menerapkan filter berikut:
resource.type="gke_cluster" resource.labels.cluster_name="my-cluster" protoPayload.methodName="google.container.v1beta1.ClusterManager.UpdateCluster" protoPayload.status.code="13" protoPayload.status.message="Internal error." severity=ERROR
- Kemungkinan penyebab
Akun Layanan default Fleet tidak memiliki izin yang diperlukan dalam project cluster GKE.
- Resolusi
Berikan izin yang diperlukan untuk Akun Layanan default Fleet sebelum mendaftarkan cluster.
Error saat mendaftarkan/membatalkan pendaftaran cluster GKE atau memperbarui detail keanggotaan fleet untuk cluster GKE terdaftar selama rotasi kredensial
- Gejala
Saat mengganti kredensial cluster(https://cloud.google.com/kubernetes-engine/docs/how-to/credential-rotation), Anda mungkin menemukan error jika mendaftarkan/membatalkan pendaftaran cluster GKE atau memperbarui keanggotaan untuk cluster GKE terdaftar.
ERROR: (gcloud.container.hub.memberships.unregister) "code": 13, "message": "an internal error has occurred"
- Kemungkinan penyebab
Kredensial cluster berada dalam status perantara saat layanan Fleet tidak dapat mengaksesnya.
- Resolusi
Selesaikan rotasi sebelum mendaftarkan/membatalkan pendaftaran cluster atau memperbarui keanggotaan untuk cluster GKE terdaftar.
Error saat menonaktifkan Fleet API
- Gejala
Saat mencoba menonaktifkan Fleet API (
gkehub.googleapis.com
), Anda mungkin mengalami error yang mirip dengan berikut ini:Not ready to deactivate the service on this project; ensure there are no more resources managed by this service.
- Kemungkinan penyebab
Masih ada cluster yang terdaftar ke Google Cloud (membership) atau fitur tingkat fleet yang diaktifkan dalam project ini. Semua langganan atau fitur harus dibatalkan pendaftarannya atau dinonaktifkan sebelum API dapat dinonaktifkan.
Untuk melihat cluster terdaftar Anda saat ini, ikuti petunjuk di Melihat anggota fleet
Untuk melihat semua fitur tingkat fleet yang aktif untuk project Anda:
gcloud dan cURL
$ curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://gkehub.googleapis.com/v1alpha/projects/PROJECT_NAME/locations/global/features
dengan PROJECT_NAME
adalah nama project tempat
Anda mencoba menonaktifkan Fleet API.
Konsol
Jika Anda telah mengaktifkan GKE di project, buka halaman Feature Manager di konsol Google Cloud . Fitur yang tercantum sebagai DIAKTIFKAN adalah fitur tingkat armada yang aktif.
- Resolusi
Pertama, batalkan pendaftaran cluster yang masih terdaftar ke fleet project Anda. Semua cluster harus dibatalkan pendaftarannya sebelum beberapa fitur dapat dinonaktifkan.
Setelah melakukannya, nonaktifkan semua fitur tingkat fleet. Saat ini, hal ini hanya dapat dilakukan dengan Fleet REST API.
Menonaktifkan fitur tingkat fleet yang telah Anda aktifkan untuk project Anda
$ gcloud alpha container hub FEATURE_COMMAND disable
Nonaktifkan pengotorisasi dan pengukuran fitur, yang diaktifkan secara default.
$ curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -X "DELETE" \ https://gkehub.googleapis.com/v1alpha/projects/PROJECT_NAME/locations/global/features/FEATURE
dengan
FEATURE
adalah nama fitur yang akan dinonaktifkan (sepertiauthorizer
ataumetering
).
Izin cluster tidak ada saat mendaftarkan cluster
- Gejala:
Saat mencoba mendaftarkan cluster dengan akun pengguna atau Google Cloud akun layanan, Anda mungkin mendapatkan error yang serupa dengan berikut ini:
ERROR: (gcloud.container.hub.memberships.register) ResponseError: code=403, message=Required "container.clusters.get" permission(s) for "projects/my-project/zones/zone-a/clusters/my-cluster"
- Penyebab yang mungkin:
Akun yang mencoba mendaftarkan cluster tidak memiliki peran
cluster-admin
role-based access control (RBAC) yang diperlukan di cluster.- Penyelesaian:
Berikan peran RBAC
cluster-admin
ke akun sebelum mendaftarkan cluster.
Error Failed to check if the user is a cluster-admin: Unable to connect to the server
saat mendaftarkan cluster
- Gejala:
Saat mencoba mendaftarkan cluster, Anda mungkin mendapatkan error yang mirip dengan berikut ini:
ERROR: (gcloud.container.hub.memberships.register) Failed to check if the user is a cluster-admin: Unable to connect to the server: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Atau
ERROR: (gcloud.container.hub.memberships.register) Failed to check if the user is a cluster-admin: Unable to connect to the server: dial tcp MASTER_ENDPOINT_IP:443: i/o timeout
- Penyebab yang mungkin:
Mesin tempat Anda menjalankan perintah pendaftaran
gcloud
tidak dapat terhubung ke endpoint eksternal cluster. Hal ini biasanya terjadi jika Anda memiliki cluster pribadi dengan akses/IP eksternal dinonaktifkan, tetapi alamat IP eksternal komputer Anda tidak diizinkan. Perhatikan bahwa pendaftaran cluster GKE tidak memiliki persyaratan ini setelah gcloud 407.0.0.- Penyelesaian:
Pastikan komputer tempat Anda ingin menjalankan perintah pendaftaran
gcloud
dapat mengakses server API cluster. Jika cluster Anda tidak mengaktifkan akses eksternal, ajukan kasus ke Google Cloud Dukungan.
Error: Langganan yang dikelola Google tidak dapat dihapus
Setelah Anda mendaftarkan cluster ke fleet, cluster tersebut akan menjadi anggota fleet dengan
nama keanggotaan fleet yang unik. Jika Anda mencoba menghapus keanggotaan ini dengan menjalankan
gcloud container hub memberships delete MEMBERSHIP_NAME
, Anda
mungkin melihat error berikut:
ERROR: (gcloud.container.hub.memberships.delete) FAILED_PRECONDITION: membership "projects/PROJECT_ID/locations/us-centrall/memberships/MEMBERSHIP_NAME" is a managed resource of your cluster. Deleting a google-managed membership directly is not allowed. Please offboard your fleet membership via cluster API: failed precondition
Untuk menghapus keanggotaan fleet dengan benar, ikuti petunjuk di Membatalkan pendaftaran cluster.
Mendapatkan bantuan tambahan
Anda dapat mengajukan tiket ke Google Cloud dukungan untuk GKE dengan melakukan langkah-langkah berikut:
- Ajukan kasus ke Google Cloud Dukungan.
- Ikuti petunjuk di Mengumpulkan log Agen Connect untuk menyimpan log Connect.
- Jika memecahkan masalah cluster lokal menggunakan Google Grup atau dukungan pihak ketiga, ikuti petunjuk di Mengumpulkan log Layanan Identitas GKE untuk menyimpan log Layanan Identitas GKE. Pastikan untuk membersihkan log pod dalam file yang disimpan jika perlu.
- Lampirkan log yang relevan ke kasus Anda.