Halaman ini menjelaskan cara mengonfigurasi logging multi-tenant untuk cluster Google Kubernetes Engine (GKE).
Bukan hal yang aneh bagi beberapa tim untuk berbagi satu cluster GKE. Berbagi cluster memberikan banyak keuntungan, termasuk penemuan layanan yang lebih mudah, keamanan yang disederhanakan, dan artinya administrator cluster memiliki lebih sedikit cluster yang harus dikelola. Namun, tim aplikasi individual sering kali memiliki project-nya 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 Router Log. Router Log memberi Anda kontrol atas alur log dalam project Google Cloud dan cara log dirutekan ke tujuan yang didukung.
Untuk membuat log khusus tenant, admin cluster akan membuat sink untuk merutekan entri log ke project setiap tenant. Di setiap project tenant, masing-masing 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 sudah memiliki project tenant dan project utama.
Mengonfigurasi logging multi-tenant
Anda dapat mengonfigurasi logging multi-tenant dengan menggunakan Google Cloud CLI atau Google Cloud Console.
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
: ID project 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 mengirimkan 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 mengetahui informasi selengkapnya tentang kolom ini, lihat dokumentasi API
gcloud logging sinks create
.Mendapatkan identitas penulis dari sink dalam project utama dan menetapkannya 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 mengetahui informasi selengkapnya tentang kolom ini, lihat dokumentasi API
gcloud projects add-iam-policy-binding
.Jika ingin, 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
dari project utama dan bucket log tenant. Untuk membuat filter pengecualian, lakukan langkah 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 mengetahui informasi selengkapnya tentang kolom ini, lihat dokumentasi API
gcloud logging sinks update
.
Konsol
Untuk mengimplementasikan 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.
-
Pada panel navigasi Google Cloud Console, pilih Logging, lalu pilih Log Router:
- Di halaman Router Log, 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 Next.
Di Build filter penyertaan, 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, jika cluster dan tenant Anda memiliki namespace yang sama, sebaiknya tambahkan klausa untuk hanya menyertakan entri log untuk cluster tertentu.
Klik Buat sink. Sink baru Anda akan muncul di daftar Log Router Sinks.
Salin identitas penulis sink ke papan klip Anda:
- Di halaman Router Log, temukan sink log.
- Untuk sink tersebut, klik More, lalu pilih View sink details.
- Di panel Sink details, temukan kolom Writer identity,
lalu salin nilainya ke papan klip Anda. 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.-
Pada panel navigasi Konsol Google Cloud, pilih IAM:
- Klik Berikan akses.
- Di kolom New principals, tambahkan akun layanan sink.
- Dari drop-down Select a role, pilih Logging, lalu pilih Logs Writer.
- Klik Simpan.
-
Secara opsional, buat filter pengecualian di bucket
_Default
project utama untuk mencegah log yang dirutekan ke project tenant ditulis ke bucket log_Default
di project utama:-
Pada panel navigasi Google Cloud Console, pilih Logging, lalu pilih Log Router:
- Di samping bucket
_Default
, klik Lainnya, lalu pilih Edit sink. - Di bagian Choose logs to filter out of sink, klik Add exception.
- Tambahkan nama filter.
Di kotak Build an exception filter, tambahkan berikut ini:
resource.labels.namespace_name="TENANT_NAMESPACE"
Klik Perbarui sink.
-
Memverifikasi log tenant
Setelah mulai menggunakan beban kerja yang menggunakan TENANT_NAMESPACE, Anda dapat memverifikasi bahwa project tenant menerima log khusus tenant:
- Pilih project tenant dengan menggunakan pemilih project Google Cloud Console.
-
Pada panel navigasi Google Cloud Console, pilih Logging, lalu pilih Logs Explorer:
Di kolom query-editor, 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 menggunakan Pub/Sub. Untuk mengetahui informasi tentang cara mengarahkan 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 informasi lebih lanjut, lihat Memantau log Anda.
Pembersihan
Anda dapat menghapus objek yang Anda buat untuk logging multi-tenant menggunakan gcloud
atau Konsol Google Cloud.
gcloud
Guna 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
: ID project 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
Dalam project tenant, hapus peran Logs Writer (
roles/logging.logWriter
) dari akun layanan:-
Pada panel navigasi Konsol Google Cloud, pilih IAM:
- 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.
-
Dalam project utama, hapus sink log:
- Gunakan pemilih project Konsol Google Cloud untuk memilih project GKE tenant.
-
Pada panel navigasi Google Cloud Console, pilih Logging, lalu pilih Log Router:
- Untuk sink yang ingin Anda hapus, 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. Sebagai alternatif, 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\""
Log duplikat antara project tenant dan project utama dengan tidak membuat filter pengecualian.