Halaman ini menjelaskan cara mengonfigurasi logging multi-tenant untuk cluster Google Kubernetes Engine (GKE).
Beberapa tim biasanya berbagi satu cluster GKE. Berbagi cluster memberikan beberapa keuntungan, termasuk penemuan layanan yang lebih mudah, keamanan yang disederhanakan, dan berarti administrator cluster memiliki lebih sedikit cluster untuk dikelola. Namun, setiap tim aplikasi sering kali memiliki project terpisahnya sendiri. Struktur ini, yang memiliki cluster GKE utama, tetapi namespace terpisah untuk setiap tim aplikasi, disebut multi-tenancy. Project tim aplikasi disebut tenant.
Dengan Google Cloud, admin cluster GKE dapat membuat sistem tempat log untuk cluster tetap berada di project GKE utama, dan log tenant didistribusikan ke project tenant. Untuk mengonfigurasi log dengan cara ini, gunakan Log Router. Log Router memberi Anda kontrol atas cara log mengalir dalam project Google Cloud dan cara log dirutekan ke tujuan yang didukung.
Untuk membuat log khusus tenant, admin cluster membuat sink untuk merutekan entri log ke setiap project tenant. Di setiap project tenant, setiap tim dapat mengontrol cara log disimpan dan digunakan, seperti memantau log dengan mengonfigurasi metrik berbasis log dan pemberitahuan berbasis log.
Sebaiknya sink _Default
di project GKE utama menyertakan
filter pengecualian. Filter pengecualian mencegah log tenant diserap di project GKE utama dan project tenant.
Prasyarat
- Pelajari dokumen berikut tentang multi-tenancy dan pemilihan rute:
- Pastikan Anda memiliki project tenant dan project utama yang sudah ada.
Mengonfigurasi logging multi-tenant
Anda dapat mengonfigurasi logging multi-tenant menggunakan Google Cloud CLI atau konsolGoogle Cloud .
gcloud
Untuk mengonfigurasi logging multi-tenant untuk cluster GKE, selesaikan langkah-langkah berikut:
Tetapkan variabel lingkungan berikut:
export TENANT_NAMESPACE="TENANT_NAMESPACE" export MAIN_PROJECT="MAIN_PROJECT_ID" export TENANT_PROJECT="TENANT_PROJECT_ID"
Ganti kode berikut:
TENANT_NAMESPACE
: nama untuk namespace project tenantMAIN_PROJECT_ID
: project ID untuk project utama AndaTENANT_PROJECT_ID
: project ID untuk project tenant Anda
Buat namespace di cluster multi-tenant Anda:
kubectl create namespace $TENANT_NAMESPACE
Buat sink log di project GKE utama:
gcloud logging sinks create gke-$TENANT_NAMESPACE-sink \ logging.googleapis.com/projects/$TENANT_PROJECT \ --project=$MAIN_PROJECT \ --log-filter=resource.labels.namespace_name="$TENANT_NAMESPACE" \ --description="Log sink to $TENANT_PROJECT for $TENANT_NAMESPACE namespace"
Perintah ini membuat sink log yang mengirim semua log yang terkait dengan namespace
$TENANT_NAMESPACE
ke project tenant.Anda mungkin perlu menggunakan
--log-filter
yang lebih ketat. Misalnya, jika cluster dan tenant Anda memiliki namespace yang sama, tambahkan filter cluster.Untuk informasi selengkapnya tentang kolom ini, lihat dokumentasi
gcloud logging sinks create
API.Dapatkan identitas penulis dari sink di project utama dan tetapkan ke variabel lingkungan.
export SERVICE_ACCOUNT=$(gcloud logging sinks describe gke-$TENANT_NAMESPACE-sink \ --project=$MAIN_PROJECT \ --format='value(writerIdentity)')
Berikan peran Logs Writer (
logging.bucketWriter
) ke akun layanan yang digunakan oleh sink. Perintah berikut memberikan izin project utama untuk menulis log ke project tenant:gcloud projects add-iam-policy-binding $TENANT_PROJECT \ --member=$SERVICE_ACCOUNT --role='roles/logging.logWriter' \ --condition="expression=resource.name.endsWith(\"projects/$TENANT_PROJECT\"),title=Log writer for $TENANT_NAMESPACE,description=Grants Logs Writer role to service account $SERVICE_ACCOUNT used by gke-$TENANT_NAMESPACE-sink"
Untuk informasi selengkapnya tentang kolom ini, lihat dokumentasi
gcloud projects add-iam-policy-binding
API.Atau, buat filter pengecualian untuk sink yang merutekan log ke bucket
_Default
project utama. Jika Anda tidak membuat filter pengecualian di bucket_Default
, log yang dirutekan akan muncul di bucket_Default
project utama dan bucket log tenant. Untuk membuat filter pengecualian, lakukan tindakan berikut:gcloud logging sinks update _Default --project=$MAIN_PROJECT \ --add-exclusion="name=gke-$TENANT_NAMESPACE-default-exclusion,description=\"Exclusion filter on the _Default bucket for $TENANT_NAMESPACE\",filter=resource.labels.namespace_name=\"$TENANT_NAMESPACE\""
Untuk informasi selengkapnya tentang kolom ini, lihat dokumentasi
gcloud logging sinks update
API.
Konsol
Untuk menerapkan logging multi-tenant untuk GKE, selesaikan langkah-langkah berikut:
Buat sink log di project utama:
- Gunakan pemilih project konsol Google Cloud untuk memilih project GKE utama.
-
Di konsol Google Cloud , buka halaman Log Router:
Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Logging.
- Di halaman Log Router, klik Create sink.
- Masukkan Name dan Description untuk sink Anda, lalu klik Next.
- Di menu Select sink service, pilih Other project.
Di kolom Sink destination, tambahkan tujuan berikut:
logging.googleapis.com/projects/TENANT_PROJECT_ID
Ganti
TENANT_PROJECT_ID
dengan project ID project tenant Anda.Klik Berikutnya.
Di Build inclusion filter, tambahkan filter berikut:
resource.labels.namespace_name="TENANT_NAMESPACE"
Ganti TENANT_NAMESPACE dengan nama namespace project tenant Anda.
Anda mungkin menginginkan filter penyertaan yang lebih ketat. Misalnya, saat cluster dan tenant Anda memiliki namespace yang sama, pertimbangkan untuk menambahkan klausa untuk hanya menyertakan entri log untuk cluster tertentu.
Klik Create sink. Sink baru Anda akan muncul di daftar Log Router Sinks.
Salin identitas penulis sink ke papan klip:
- Di halaman Log Router, temukan sink log.
- Untuk sink tersebut, klik Lainnya, lalu pilih Lihat detail sink.
- Di panel Sink details, temukan kolom Writer identity, lalu salin nilainya ke papan klip. Hapus
serviceAccount:
dari nilai yang disalin.
Dalam project tenant, berikan peran Logs Writer (
roles/logging.logWriter
) ke akun layanan yang digunakan oleh sink project utama. Project utama memerlukan izin ini untuk menulis log ke project tenant.-
Di konsol Google Cloud , buka halaman IAM:
Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah IAM & Admin.
- Klik Grant access.
- Di kolom New principals, tambahkan akun layanan sink.
- Dari drop-down Select a role, pilih Logging dan pilih Logs Writer.
- Klik Simpan.
-
Secara opsional, buat filter pengecualian di bucket
_Default
project utama untuk mencegah log yang dirutekan ke project tenant agar tidak ditulis ke bucket log_Default
di project utama:-
Di konsol Google Cloud , buka halaman Log Router:
Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Logging.
- Di samping bucket
_Default
, klik Lainnya, lalu pilih Edit sink. - Di bagian Choose logs to filter out of sink, klik Add exclusion.
- Tambahkan nama filter.
Di kotak Build an exclusion filter, tambahkan hal berikut:
resource.labels.namespace_name="TENANT_NAMESPACE"
Klik Update sink.
-
Memverifikasi log tenant
Setelah mulai menggunakan workload yang menggunakan TENANT_NAMESPACE, Anda dapat memverifikasi bahwa project tenant menerima log khusus tenant:
- Pilih project tenant menggunakan pemilih project konsol Google Cloud .
-
Di konsol Google Cloud , buka halaman Logs Explorer:
Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Logging.
Di kolom editor kueri, jalankan kueri berikut:
resource.labels.namespace_name="TENANT_NAMESPACE"
Di panel Query results, Anda akan melihat log khusus tenant yang dirutekan dari project utama.
Menggunakan log tenant
Dalam project tenant, setiap tim dapat mengontrol cara log dirutekan, disimpan, dan dianalisis. Setelah log dirutekan ke project tenant, setiap tim aplikasi dapat memilih untuk merutekan log mereka ke tujuan yang didukung seperti bucket Logging, atau ke tujuan pihak ketiga dengan menggunakan Pub/Sub. Untuk informasi tentang merutekan entri log, lihat Merutekan log ke tujuan yang didukung.
Setiap tim aplikasi juga dapat menyiapkan pemberitahuan berdasarkan konten log, atau metrik yang berasal dari log. Untuk mengetahui informasi selengkapnya, lihat Memantau log.
Pembersihan
Anda dapat menghapus objek yang dibuat untuk logging multi-tenant menggunakan konsol gcloud
atau Google Cloud .
gcloud
Untuk menghapus objek yang Anda buat untuk logging multi-tenant, selesaikan langkah-langkah berikut:
Tetapkan variabel untuk menyederhanakan perintah berikut:
export TENANT_NAMESPACE="TENANT_NAMESPACE" export MAIN_PROJECT="MAIN_PROJECT_ID" export TENANT_PROJECT="TENANT_PROJECT_ID"
Ganti kode berikut:
TENANT_NAMESPACE
: nama untuk namespace project tenantMAIN-PROJECT-ID
: project ID untuk project utama AndaTENANT-PROJECT-ID
: project ID untuk project tenant Anda
Hapus peran Logs Writer (
roles/logging.logWriter
) dari akun layanan di project tenant:export SERVICE_ACCOUNT=$(gcloud logging sinks describe gke-$TENANT_NAMESPACE-sink \ --project=$MAIN_PROJECT | \ --format='value(writerIdentity)' gcloud projects remove-iam-policy-binding $TENANT_PROJECT \ --member=$SERVICE_ACCOUNT \ --role='roles/logging.logWriter' \ --all
Hapus sink log:
gcloud logging sinks delete gke-$TENANT_NAMESPACE-sink \ --project=$MAIN_PROJECT
Hapus namespace:
kubectl delete namespace $TENANT_NAMESPACE
Konsol
Di project tenant, hapus peran Logs Writer (
roles/logging.logWriter
) dari akun layanan:-
Di konsol Google Cloud , buka halaman IAM:
Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah IAM & Admin.
- Untuk akun layanan yang ingin Anda hapus, klik edit Edit akun utama.
- Di panel Edit akses, klik Hapus peran di samping peran Penulis Log, lalu klik Simpan.
-
Di project utama, hapus sink log:
- Gunakan pemilih project konsol Google Cloud untuk memilih project GKE tenant.
-
Di konsol Google Cloud , buka halaman Log Router:
Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Logging.
- Untuk sink yang ingin dihapus, klik more_vert Lainnya.
- Pilih Hapus sink.
- Di panel konfirmasi, klik Hapus.
Batasan
Logging multi-tenant memiliki batasan berikut:
- Kuota untuk jumlah sink log per project adalah 200. Jika Anda memerlukan lebih dari 200 tenant, minta penambahan kuota dengan membuka kasus dukungan.
Ada batas 50 filter pengecualian per bucket log. Jika Anda ingin memiliki lebih dari 50 tenant, pendekatan filter pengecualian untuk bucket
_Default
perlu direvisi. Atau, Anda dapat melakukan hal berikut:Buat satu filter pengecualian yang mengecualikan semua namespace non-sistem atau non-default menggunakan perintah ini:
gcloud logging sinks update _Default \ --project=$MAIN_PROJECT \ --add-exclusion="name=gke-all-tenant-default-exclusion,description=\"Exclusion filter on the _Default bucket for all tenants\",filter=resource.labels.namespace_name !~ \"kube\" AND resource.labels.namespace_name !~ \"system\ AND resource.labels.namespace_name != \"Default\""
Duplikasi log antara project tenant dan project utama dengan tidak membuat filter pengecualian.