Halaman ini menjelaskan cara menyiapkan autentikasi menggunakan token pembawa untuk login ke cluster terdaftar di luar Google Cloud. Setelah penyiapan, administrator cluster akan dapat login ke cluster dari konsolGoogle Cloud . Banyak jenis token pembawa, seperti yang ditentukan dalam Autentikasi Kubernetes, didukung. Metode termudah adalah dengan membuat akun layanan Kubernetes (KSA) di cluster, dan menggunakan token pembawanya untuk login.
Metode autentikasi lainnya
Sebagai alternatif untuk menyiapkan autentikasi menggunakan token pemilik, Anda dapat menyiapkan salah satu metode autentikasi berikut, bergantung pada kebutuhan organisasi Anda:
Identitas Google, yang memungkinkan pengguna login menggunakan Google Cloud identitas mereka. Gunakan opsi ini jika pengguna Anda sudah memiliki akses ke Google Cloud dengan Identitas Google.
Jika cluster Anda dikonfigurasi untuk menggunakan penyedia identitas OIDC, Anda dapat menggunakannya untuk melakukan autentikasi ke cluster dari konsol Google Cloud . Anda dapat mengetahui cara menyiapkan OIDC untuk cluster GKE dalam panduan berikut:
- Mengonfigurasi cluster untuk GKE Identity Service dengan OIDC. Panduan ini menunjukkan cara menyiapkan autentikasi OIDC di cluster berdasarkan per cluster untuk semua jenis cluster GKE.
- Siapkan GKE Identity Service untuk fleet. Dengan opsi ini, Anda dapat menyiapkan OIDC di tingkat fleet untuk jenis cluster yang didukung. Penyiapan tingkat fleet didukung untuk cluster GKE di Google Cloud, semua jenis cluster GKE, dan cluster terpasang EKS di AWS.
Jika metode autentikasi yang disediakan Google ini tidak sesuai untuk organisasi Anda, ikuti petunjuk di halaman ini untuk menyiapkan autentikasi menggunakan token pembawa.
Memberikan peran IAM untuk akses melalui Google Cloud konsol
Pengguna yang ingin melihat cluster yang terhubung menggunakan Google Cloud konsol memerlukan minimal peran IAM berikut:
roles/container.viewer
. Peran ini memungkinkan pengguna melihat resource penampung di konsol Google Cloud , termasuk halaman Cluster GKE. Untuk mengetahui detail tentang izin yang disertakan dalam peran ini, lihat Peran Kubernetes Engine dalam dokumentasi IAM.roles/gkehub.viewer
. Peran ini memungkinkan pengguna melihat cluster di luar Google Cloud di konsol Google Cloud . Pengguna tidak memerlukan peran ini jika fleet Anda tidak menyertakan cluster di luar Google Cloud. Untuk mengetahui detail tentang izin yang disertakan dalam peran ini, lihat Peran GKE Hub dalam dokumentasi IAM.
Jalankan perintah berikut untuk memberikan peran ini:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/container.viewer
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:EMAIL_ADDRESS' \
--role=roles/gkehub.viewer
Ganti kode berikut:
PROJECT_ID
: project ID project host fleet.EMAIL_ADDRESS
: alamat email yang terkait dengan akun pengguna. Google Cloud
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran IAM, lihat bagian Mengelola akses ke project, folder, dan organisasi dalam dokumentasi IAM.
Mengonfigurasi kontrol akses berbasis peran
Akses ke cluster dikontrol menggunakan kontrol akses berbasis peran (RBAC) Kubernetes.
Sebaiknya Anda atau administrator cluster membuat KSA untuk setiap pengguna yang login ke cluster. Penggunaan token pemilik sama seperti penggunaan sandi, jadi setiap pengguna harus memiliki akunnya sendiri. Login dengan token pembawa KSA menyebabkan semua operasi dijalankan sebagai KSA, yang dibatasi oleh peran RBAC yang dimiliki oleh KSA.
KSA harus memiliki setidaknya peran RBAC berikut di cluster untuk mengaksesnya melalui konsol:
Membuat dan menerapkan peran RBAC cloud-console-reader
Pengguna yang diautentikasi yang ingin mengakses resource cluster di Google Cloud konsol
harus memiliki izin Kubernetes yang relevan untuk melakukannya. Jika Anda tidak ingin memberikan izin yang lebih luas kepada pengguna tersebut, seperti izin admin cluster, Anda dapat membuat peran RBAC kustom yang mencakup izin minimum untuk melihat node, volume persisten, pod, dan class penyimpanan cluster. Anda dapat menentukan kumpulan
izin ini dengan membuat resource ClusterRole
RBAC,
cloud-console-reader
, di cluster.
cloud-console-reader
memberikan izin get
, list
, dan watch
kepada penggunanya di node cluster, volume persisten, pod, dan kelas penyimpanan,
yang memungkinkan mereka melihat detail tentang resource ini.
kubectl
Untuk membuat cloud-console-reader
ClusterRole
dan menerapkannya ke cluster, jalankan
perintah berikut:
cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cloud-console-reader
rules:
- apiGroups: [""]
resources: ["nodes", "persistentvolumes", "pods"]
verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml
Kemudian, Anda dapat memberikan peran ini kepada KSA seperti yang dijelaskan di bagian berikutnya.
Membuat dan memberikan otorisasi KSA
kubectl
Untuk membuat KSA dan mengikat izin ke KSA tersebut, ikuti langkah-langkah berikut:
Buat resource KSA dan
ClusterRoleBinding
untuk mengikatview
dancloud-console-reader
RBAC KubernetesClusterRoles
ke KSA:KSA_NAME=KSA_NAME kubectl create serviceaccount ${KSA_NAME} kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${KSA_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${KSA_NAME}
Ganti kode berikut:
KSA_NAME
: nama yang Anda pilih untuk KSAVIEW_BINDING_NAME
: nama yang Anda pilih untuk resourceview
ClusterRoleBinding
; Anda dapat menamainya apa pun yang Anda inginkan, tetapi mungkin lebih mudah jika Anda menamainya sesuai dengan KSACLOUD_CONSOLE_READER_BINDING_NAME
: nama yang Anda pilih untuk resourcecloud-console-reader
ClusterRoleBinding
; Anda juga dapat memberi nama apa pun yang Anda inginkan
Bergantung pada akses yang harus dimiliki akun layanan, ikat peran tambahan ke KSA. Untuk mengetahui opsi, lihat peran default Kubernetes.
Misalnya, jika Anda ingin men-deploy aplikasi Kubernetes dari Cloud Marketplace, ikat peran
cluster-admin
ke KSA:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:KSA_NAME
Ganti
BINDING_NAME
dengan nama binding peran cluster untuk akun layanan.
Mengizinkan akun lain
kubectl
Untuk setiap pengguna atau akun layanan lain yang mendapatkan akses ke cluster,
buat resource ClusterRoleBinding
untuk mengikat peran view
dan
cloud-console-reader
ke akun mereka:
Ikat
view
dancloud-console-reader
ClusterRoles
:ACCOUNT_NAME=ACCOUNT_NAME kubectl create clusterrolebinding VIEW_BINDING_NAME \ --clusterrole view --serviceaccount default:${ACCOUNT_NAME} kubectl create clusterrolebinding CLOUD_CONSOLE_READER_BINDING_NAME \ --clusterrole cloud-console-reader --serviceaccount default:${ACCOUNT_NAME}
Ganti kode berikut:
ACCOUNT_NAME
: akun layanan KubernetesVIEW_BINDING_NAME
: nama yang Anda pilih untuk resourceview
ClusterRoleBinding
; Anda dapat menamainya apa pun yang Anda inginkan, tetapi mungkin akan lebih mudah jika Anda menamainya sesuai dengan nama pengguna atau akun layananCLOUD_CONSOLE_READER_BINDING_NAME
: nama yang Anda pilih untuk resourceview
ClusterRoleBinding
; Anda juga dapat memberi nama ini dengan nama apa pun yang Anda inginkan
Ikat peran tambahan, bergantung pada akses yang harus dimiliki akun. Untuk mengetahui opsi, lihat peran default Kubernetes.
Misalnya, untuk mengikat peran
cluster-admin
, jalankan perintah berikut:kubectl create clusterrolebinding BINDING_NAME \ --clusterrole cluster-admin --serviceaccount default:ACCOUNT_NAME
Ganti
BINDING_NAME
dengan nama binding peran cluster untuk akun layanan.
Mendapatkan token pemilik KSA
kubectl
Untuk mendapatkan token pembawa KSA, jalankan perintah berikut:
SECRET_NAME=KSA_NAME-token kubectl apply -f - << __EOF__ apiVersion: v1 kind: Secret metadata: name: "${SECRET_NAME}" annotations: kubernetes.io/service-account.name: "${KSA_NAME}" type: kubernetes.io/service-account-token __EOF__ until [[ $(kubectl get -o=jsonpath="{.data.token}" "secret/${SECRET_NAME}") ]]; do echo "waiting for token..." >&2; sleep 1; done kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 --decode
Ganti KSA_NAME
dengan nama yang Anda pilih untuk KSA.
Dari output perintah ini, salin token dan simpan agar pengguna dapat menggunakan token untuk login ke konsol Google Cloud .