Menggunakan gateway Connect
Halaman ini menjelaskan cara menggunakan Connect gateway untuk terhubung ke cluster terdaftar. Sebelum membaca halaman ini, pastikan Anda memahami konsep dalam ringkasan kami. Panduan ini mengasumsikan bahwa administrator project Anda telah menyiapkan gateway, dan memberi Anda peran dan izin yang diperlukan.
Sebelum memulai
Pastikan Anda telah menginstal alat command line berikut:
- Versi terbaru Google Cloud CLI, alat command line untuk berinteraksi dengan Google Cloud.
kubectl
Jika Anda menggunakan Cloud Shell sebagai lingkungan shell untuk berinteraksi dengan Google Cloud, alat ini akan diinstal untuk Anda.
Pastikan Anda telah menginisialisasi gcloud CLI untuk digunakan dengan project Anda.
Login ke akun Google Cloud Anda
Anda dapat menggunakan Google Cloud akun Anda sendiri atau Google Cloud akun layanan untuk berinteraksi dengan cluster yang terhubung melalui Gateway API.
Ikuti petunjuk di Mengizinkan alat Google Cloud CLI untuk login ke akun pengguna Anda. Gateway Connect mendukung peniruan akun layanan, jadi meskipun Anda login ke akun pengguna Anda sendiri, Anda dapat menggunakan akun layanan untuk berinteraksi dengan cluster, seperti yang akan Anda lihat di bagian berikut.
Pilih cluster terdaftar
Jika tidak mengetahui nama cluster yang ingin diakses, Anda dapat melihat semua cluster terdaftar di fleet saat ini dengan menjalankan perintah berikut:
gcloud container fleet memberships list
Tindakan ini akan mencantumkan semua cluster fleet Anda, termasuk nama keanggotaan dan ID eksternalnya. Setiap cluster dalam fleet memiliki nama keanggotaan yang unik. Untuk cluster GKE, nama keanggotaan umumnya cocok dengan nama yang Anda berikan saat membuat cluster, kecuali jika nama cluster tidak unik dalam projectnya saat pendaftaran.
Mendapatkan gateway cluster kubeconfig
Gunakan perintah berikut untuk mendapatkan kubeconfig
yang Anda butuhkan untuk berinteraksi dengan cluster yang ditentukan:
gcloud container fleet memberships get-credentials MEMBERSHIP_NAME
Ganti MEMBERSHIP_NAME
dengan nama keanggotaan fleet cluster Anda.
Perintah ini menampilkan Connect gateway-specific kubeconfig
khusus yang memungkinkan Anda terhubung ke cluster melalui Connect gateway.
Jika Anda ingin menggunakan akun layanan, bukan akun Google Cloud Anda sendiri, gunakan gcloud config
untuk menetapkan auth/impersonate_service_account
ke alamat email akun layanan.
Untuk mengambil kredensial cluster yang digunakan untuk berinteraksi dengan gateway Connect menggunakan akun layanan, jalankan perintah berikut: Perhatikan hal berikut:
- Cluster Google Distributed Cloud (khusus software) di bare metal dan VMware: Nama keanggotaan sama dengan nama cluster.
GKE di AWS: Penggunaan
gcloud container aws clusters get-credentials
.GKE di Azure: Penggunaan
gcloud container azure clusters get-credentials
.
Anda dapat mengetahui lebih lanjut cara mengizinkan pengguna menirukan identitas akun layanan di Mengelola akses ke akun layanan.
gcloud config set auth/impersonate_service_account SA_EMAIL_ADDRESS
gcloud container fleet memberships get-credentials MEMBERSHIP_NAME
Ganti SA_EMAIL_ADDRESS
dengan alamat email
akun layanan. Anda dapat mengetahui lebih lanjut cara mengizinkan pengguna meniru identitas akun layanan di Mengelola akses ke akun layanan.
Menjalankan perintah terhadap cluster
Setelah memiliki kredensial yang diperlukan, Anda dapat menjalankan perintah menggunakan kubectl
atau go-client
seperti yang biasa Anda lakukan untuk cluster Kubernetes mana pun. Output Anda akan terlihat seperti berikut:
# Get namespaces in the Cluster.
kubectl get namespaces
NAME STATUS AGE
default Active 59d
gke-connect Active 4d
Perintah kubectl exec/cp/attach/port-forward
Perintah kubectl
berikut adalah perintah streaming dan memiliki persyaratan tambahan:
attach
cp
exec
port-forward
Perhatikan persyaratan berikut:
Cluster harus menggunakan versi 1.30 atau yang lebih baru untuk perintah
attach
,cp
, danexec
, serta versi 1.31 atau yang lebih baru untuk perintahport-forward
.Klien
kubectl
harus menggunakan versi 1.31 atau yang lebih baru.Untuk memeriksa versi klien Anda, lihat output perintah
kubectl version
. Untuk menginstal versikubectl
yang lebih baru, lihat Menginstal alat.
Pengguna dan akun layanan dengan peran IAM roles/gkehub.gatewayAdmin
dan cluster-admin
ClusterRole
memiliki
izin yang diperlukan untuk menjalankan perintah attach
, cp
, exec
, dan port-forward
. Jika pengguna dan akun layanan telah diberi peran IAM kustom atau peran RBAC kustom, Anda mungkin perlu memberikan izin tambahan. Lihat bagian berikut untuk mengetahui informasi tambahan.
Memberikan izin tambahan jika diperlukan
Izin IAM gkehub.gateway.stream
diperlukan untuk menjalankan perintah attach
, cp
, exec
, dan port-forward
melalui gateway Connect. Izin
ini disertakan dalam roles/gkehub.gatewayAdmin
.
Untuk pengguna yang bukan pemilik project, atau untuk pengguna atau akun layanan yang
belum diberi roles/gkehub.gatewayAdmin
di project, Anda harus
memberi mereka roles/gkehub.gatewayAdmin
atau membuat peran khusus yang
mencakup peran lain yang diperlukan dan izin gkehub.gateway.stream
. Untuk mengetahui informasi tentang cara membuat peran khusus, lihat
Membuat dan mengelola peran khusus dalam
dokumentasi IAM.
Buat dan terapkan kebijakan RBAC tambahan jika diperlukan
Pengguna dan akun layanan dengan cluster-admin
ClusterRole
memiliki
izin yang diperlukan untuk menjalankan perintah attach
, cp
, exec
, dan port-forward
.
Minimal, aturan berikut diperlukan untuk menjalankan perintah:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: stream-role
namespace: NAMESPACE # Specify the namespace
rules:
- apiGroups: ["*"]
resources: ["pods/exec", "pods/attach", "pods/portforward"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: stream-rolebinding
namespace: NAMESPACE # Specify the namespace
roleRef:
apiGroup: "rbac.authorization.k8s.io"
kind: Role
name: stream-role
subjects:
- kind: User
name: EMAIL # Specify the user that should have stream access
namespace: NAMESPACE # Specify the namespace
Pemecahan masalah
Jika Anda mengalami masalah saat menghubungkan ke cluster melalui gateway, Anda atau administrator Anda dapat memeriksa masalah umum berikut.
- Server tidak memiliki jenis resource: Anda mungkin melihat pesan error ini saat perintah
kubectl get ns
gagal. Ada beberapa kemungkinan alasan terjadinya error ini. Jalankan perintahkubectl
dalam mode panjang untuk melihat detail selengkapnya, misalnyakubectl get ns -v 10
. - Tidak dapat menemukan koneksi aktif untuk cluster(project: 12345, keanggotaan: my-cluster): Anda mungkin melihat error ini saat Connect Agent kehilangan konektivitas atau tidak diinstal dengan benar (khusus cluster di luar Google Cloud ). Untuk mengatasi masalah ini, Anda perlu memverifikasi apakah namespace
gke-connect
ada di cluster. Jika namespacegke-connect
ada di cluster, lihat halaman Pemecahan Masalah Koneksi untuk memperbaiki masalah konektivitas. - URL yang diminta tidak ditemukan di server ini: Anda mungkin melihat error ini saat
kubeconfig
berisi alamat server yang salah. Pastikan versi Google Cloud CLI yang Anda gunakan adalah versi terbaru dan coba lagi untuk membuat gatewaykubeconfig
. Jangan mengedit filekubeconfig
secara manual, karena akan menyebabkan error yang tidak terduga. - Identitas pengguna tidak memiliki izin yang memadai untuk menggunakan API gateway: Anda memerlukan peran
roles/gkehub.gatewayAdmin
roles/gkehub.gatewayReader
atauroles/gkehub.gatewayEditor
untuk menggunakan API. Lihat Memberikan peran IAM kepada pengguna di panduan penyiapan gateway untuk mengetahui detail selengkapnya. - Agen Connect tidak diizinkan untuk mengirim permintaan pengguna: Agen Connect harus diizinkan untuk meneruskan permintaan atas nama Anda, yang ditentukan menggunakan kebijakan peniruan identitas di cluster. Lihat Mengonfigurasi otorisasi RBAC dalam panduan penyiapan gateway untuk contoh menambahkan pengguna ke peran
gateway-impersonate
. - Identitas pengguna tidak memiliki izin RBAC yang memadai untuk melakukan operasi: Anda harus memiliki izin yang sesuai di cluster untuk menjalankan operasi yang Anda pilih. Lihat Mengonfigurasi otorisasi RBAC di panduan penyiapan gateway untuk mengetahui contoh menambahkan pengguna ke
ClusterRole
yang sesuai. - Identitas pengguna tidak memiliki izin yang memadai untuk melakukan operasi saat menggunakan Google Grup atau dukungan pihak ketiga: Lihat Mengumpulkan log Layanan Identitas GKE untuk mengetahui petunjuk tentang cara memeriksa log yang terkait dengan informasi identitas.
- Agen Connect tidak berfungsi dengan baik: Lihat halaman Pemecahan Masalah Connect untuk memastikan cluster Anda terhubung.
- executable gke-gcloud-auth-plugin not found atau no Auth Provider found for name gcp: kubectl versi 1.26 dan yang lebih baru dapat menampilkan error ini karena perubahan pada autentikasi kubectl yang dimulai dengan GKE v1.26. Instal
gke-gcloud-auth-plugin
dan jalankan kembaligcloud container fleet memberships get-credentials MEMBERSHIP_NAME
dengan Google Cloud CLI versi terbaru. Koneksi ke gateway gagal dengan Google Cloud CLI versi lama: Untuk cluster GKE, agen Connect tidak lagi diperlukan agar gateway berfungsi, sehingga agen tidak diinstal secara default selama pendaftaran keanggotaan. Versi Google Cloud CLI yang lebih lama (399.0.0 dan yang lebih lama) mengasumsikan keberadaan agen Connect di cluster. Mencoba menggunakan gateway dengan versi sebelumnya ini dapat gagal pada cluster yang terdaftar dengan Google Cloud CLI versi yang lebih baru. Untuk mengatasi hal ini, upgrade klien Google Cloud CLI Anda ke versi yang lebih baru atau jalankan kembali perintah pendaftaran keanggotaan dengan tanda
--install-connect-agent
.Ukuran grup yang ditampilkan dalam grup
gke-security-groups
melebihi batas ukuran header HTTP 8 KB. Menata ulang hierarki grup dan coba lagi: Meskipun tidak ada batas ketat pada jumlah grup, nama grup yang panjang dapat menyebabkan permintaan melebihi batas ukuran header HTTP 8 KB dan mengakibatkan error yang mungkin mengharuskan Anda menata ulang hierarki grup.
Pemecahan masalah kubectl exec/cp/attach/port-forward
Error yang ditampilkan dari menjalankan perintah sering kali berupa error 400 Bad Request
umum yang tidak cukup jelas untuk men-debug masalah. Untuk menampilkan pesan error yang lebih mendetail, gunakan versi klien kubectl
1.32 atau yang lebih baru untuk menjalankan perintah dengan tingkat kejelasan 4 atau yang lebih tinggi, misalnya:
kubectl exec -v 4 ...
.
Dalam log yang ditampilkan, telusuri log yang berisi respons berikut:
- Untuk perintah
kubectl exec/cp/attach
:RemoteCommand fallback:
- Untuk perintah
kubectl port-forward
:fallback to secondary dialer from primary dialer err:
Untuk memecahkan masalah beberapa pesan error umum yang mungkin Anda terima dari
perintah kubectl exec -v 4 ...
, lihat bagian berikut.
Izin IAM tidak ada
Jika pesan error berisi generic::permission_denied: Permission'gkehub.gateway.stream' denied on resource
,
hal ini dapat menunjukkan bahwa Anda belum diberi izin IAM yang diperlukan
untuk menjalankan perintah. Fitur ini mengharuskan pengguna memiliki izin IAM gkehub.gateway.stream
, yang disertakan secara default dalam peran roles/gkehub.gatewayAdmin
. Lihat
bagian izin IAM untuk mengetahui petunjuknya.
Izin RBAC yang diperlukan tidak ada
Jika pesan error berisi ...generic::failed_precondition: failed to connect to the cluster's API Server with response (status=403 Forbidden...
, hal ini menunjukkan bahwa Anda tidak memiliki izin RBAC. Anda memerlukan serangkaian izin RBAC di cluster untuk menjalankan perintah kubectl
ini.
Untuk mengetahui informasi selengkapnya tentang cara menyiapkan izin RBAC yang diperlukan, lihat
Membuat dan menerapkan kebijakan RBAC tambahan jika diperlukan.
Pesan error generic::resource_exhausted: Kuota active_streams Gateway habis
Ada batas kuota 10 streaming aktif per project host fleet. Hal ini
didefinisikan dalam kuota connectgateway.googleapis.com/active_streams
. Lihat
Melihat dan mengelola kuota untuk mengetahui petunjuk tentang cara mengelola
kuota Anda.
Pesan error generic::failed_precondition: error encountered within the cluster (terjadi error dalam cluster)
Jika Anda mendapatkan error generic::failed_precondition: error encountered within
the cluster
, periksa log Connect Agent di cluster untuk mengidentifikasi penyebab
yang mendasarinya:
kubectl logs -n gke-connect -l app=gke-connect-agent --tail -1
Log yang harus dicari di Connect Agent adalah
failed to create the websocket connection...
.
Pesan error generic::failed_precondition: connection to Agent failed/terminated (koneksi ke Agen gagal/berakhir)
Jika Anda langsung mengalami error ini saat menjalankan perintah, ada masalah dengan koneksi cluster ke Google. Lihat panduan pemecahan masalah umum untuk mengetahui informasi selengkapnya.
Jika Anda mengalami error ini setelah sesi aktif selama sekitar 20 hingga 30 menit, hal ini merupakan batasan yang wajar karena alasan keamanan. Koneksi harus dibuat ulang.
Apa langkah selanjutnya?
- Lihat contoh cara menggunakan gateway Connect sebagai bagian dari otomatisasi DevOps Anda dalam tutorial Mengintegrasikan dengan Cloud Build kami.