Halaman ini menjelaskan cara memecahkan masalah error umum yang mungkin Anda alami saat mendaftarkan cluster ke fleet atau terhubung 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 Koneksi.
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. Agen Connect adalah Deployment, gke-connect-agent
, yang biasanya diinstal di cluster Anda dalam namespace
gke-connect
. Mengumpulkan log dari Agen Connect 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 harus 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 Identity Service GKE 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 Identity Service GKE dengan melakukan pengeditan pada resource kustom clientconfig dengan perintah berikut:
kubectl edit deployment -n anthos-identity-service
dan menambahkan flag
vmodule
di bagian kolomcontainers
seperti ini:spec: containers: ... - command: - --vmodule=cloud/identity/hybrid/charon/*=9
Mulai ulang pod Identity Service GKE 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 Identity Service GKE 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 Identity Service GKE, verifikasi apakah penyiapan untuk cluster sudah benar. Jika ada masalah terkait Layanan Identitas GKE lainnya, 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 Agen Connect mencoba terhubung melalui HTTPS ke proxy khusus HTTP. Agen Connect hanya mendukung proxy HTTP berbasis CONNECT.
- Resolusi
Anda perlu mengonfigurasi ulang variabel lingkungan proxy ke hal berikut:
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 khusus 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 proxy HTTP Anda menyertakan URL/domain berikut:
gkeconnect.googleapis.com oauth2.googleapis.com/token www.googleapis.com/oauth2/v1/certs
Error error dan mulai ulang pod Connect Agent
- Gejala
Anda mungkin mengalami error "Unreachable Agent" yang terputus-putus di konsol Google Cloud untuk cluster dan/atau Anda mungkin mendapati 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 Agen Connect 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 bahwa Anda belum mengikat peran Identity and Access Management (IAM) yang diperlukan ke akun layanan Google Cloud yang Anda buat untuk memberi otorisasi kepada Agen Connect untuk terhubung ke Google. Akun layanan Google Cloud memerlukan peran IAM
gkehub.connect
.Hal ini juga dapat terjadi jika Anda menghapus dan membuat ulang akun layanan Google Cloud dengan nama yang sama. Dalam hal ini, Anda juga harus menghapus dan membuat ulang binding peran IAM. 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 Cloud bernamagkeconnect@my-project.
, Anda harus 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 seharusnya dapat menjalankan perintah. Jika kebijakan keamanan internal melarang Anda menjalankan perintah, hubungi administrator Anda.
Error dari kunci akun layanan yang tidak valid
- Gejala
Anda mungkin mengalami error seperti ini:
2020/05/08 01:22:21.435104 environment.go:214: Got ExternalID 3770f509-b89b-48c4-96e0-860bb70b3a58 from namespace kube-system. 2020/05/08 01:22:21.437976 environment.go:485: Using gcp Service Account key 2020/05/08 01:22:21.438140 gkeconnect_agent.go:50: error creating kubernetes connect agent: failed to get tunnel config: unexpected end of JSON input
- Kemungkinan penyebab
Log ini menunjukkan bahwa Agen Connect diberi kunci akun layanan yang tidak valid selama penginstalan.
- Resolusi
Buat file JSON baru yang berisi kredensial akun layanan, lalu instal ulang Agen Connect dengan mengikuti langkah-langkah untuk mendaftarkan cluster.
Error dari kunci akun layanan yang masa berlakunya telah berakhir
- Gejala
Anda mungkin mengalami error seperti ini:
2020/05/08 01:22:21.435104 dialer.go:277: dialer: dial: connection to gkeconnect.googleapis.com:443 failed after 37.901608ms: serve: egress call failed: rpc error: code = Unauthenticated desc = transport: oauth2: cannot fetch token: 400 Bad Request Response: {"error":"invalid_grant","error_description":"Invalid JWT Signature."}
- Kemungkinan penyebab
Log ini menunjukkan bahwa Agen Connect menelepon Connect dengan kunci akun layanan yang tidak valid. File kunci akun layanan mungkin berisi error, atau kunci mungkin sudah tidak berlaku.
Untuk memeriksa apakah kunci telah berakhir masa berlakunya, gunakan konsol Google Cloud untuk mencantumkan kunci akun layanan Anda dan tanggal habis masa berlakunya.
- Resolusi
Buat file JSON baru yang berisi kredensial akun layanan, lalu instal ulang Agen Connect dengan mengikuti langkah-langkah untuk mendaftarkan cluster.
Error dari clock sistem yang miring
- 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 penyimpangan clock di cluster. Token yang diterbitkan cluster memiliki stempel waktu yang tidak sinkron sehingga token tersebut ditolak.
- Resolusi
Untuk mengetahui apakah jam tidak disinkronkan dengan benar, Anda dapat menjalankan perintah
date
di cluster dan membandingkannya dengan waktu standar. Biasanya, drift 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 Agen Connect, 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 mencoba 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, dan 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 saat Agen Connect tidak dapat berkomunikasi dengan gkeconnect.googleapis.com.
- Resolusi
Verifikasi bahwa beban kerja Pod dalam cluster ini dapat me-resolve dan memiliki konektivitas keluar ke gkeconnect.googleapis.com di port 443.
Koneksi agen gagal secara berkala
- Gejala
Di log Agen Connect, 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 Agen Connect 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.
Flotte tidak dapat mengakses project
- Gejala
Selama beberapa operasi Fleet (biasanya pendaftaran cluster), Anda mungkin melihat error yang mirip dengan berikut:
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 tidak terikat dari project secara tidak sengaja. Agen Layanan Flotte 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 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 Flotte, 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 yang berikut ini 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 kepada 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 merotasi 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 langganan 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.
Terjadi error saat menonaktifkan Fleet API
- Gejala
Saat mencoba menonaktifkan Fleet API (
gkehub.googleapis.com
), Anda mungkin mengalami error yang mirip dengan yang 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 (langganan) 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 saat ini, ikuti petunjuk di bagian Melihat anggota fleet
Untuk melihat semua fitur tingkat armada 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 Enterprise di project, buka halaman Halaman Pengelola Fitur di konsol Google Cloud. Fitur yang tercantum sebagai DIAKTIFKAN adalah fitur tingkat armada yang aktif.
- Resolusi
Pertama, batalkan pendaftaran cluster apa pun yang masih terdaftar ke fleet project Anda. Semua cluster harus dibatalkan pendaftarannya sebelum beberapa fitur dapat dinonaktifkan.
Setelah Anda 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
$ gcloud alpha container hub FEATURE_COMMAND disable
Menonaktifkan pengukur dan otorisasi 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 akun layanan Google Cloud, Anda mungkin mendapatkan error yang mirip dengan berikut:
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 kontrol akses berbasis peran (RBAC)
cluster-admin
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 seperti berikut:
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
gcloud
pendaftaran 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 mendaftarkan 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 Dukungan Google Cloud.
Mendapatkan bantuan tambahan
Anda dapat mengajukan tiket ke dukungan Google Cloud untuk GKE Enterprise dengan melakukan langkah-langkah berikut:
- Ajukan kasus ke Dukungan Google Cloud.
- 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 diperlukan.
- Lampirkan log yang relevan ke kasus Anda.