Menyiapkan Pod Google Kubernetes Engine menggunakan injeksi Envoy otomatis
Ringkasan
Dalam mesh layanan, kode aplikasi Anda tidak perlu mengetahui konfigurasi jaringan. Sebagai gantinya, aplikasi Anda berkomunikasi melalui bidang data, yang dikonfigurasi oleh bidang kontrol yang menangani jaringan layanan. Dalam panduan ini, Cloud Service Mesh adalah bidang kontrol Anda dan proxy file bantuan Envoy adalah bidang data Anda.
Injektor sespan Envoy memudahkan penambahan proxy file bantuan Envoy ke Pod Google Kubernetes Engine Anda. Saat injektor file bantuan Envoy menambahkan proxy, injeksi juga akan menetapkan proxy tersebut untuk menangani traffic aplikasi dan terhubung ke Cloud Service Mesh untuk konfigurasi.
Panduan ini akan memandu Anda melalui penyiapan sederhana Cloud Service Mesh dengan Google Kubernetes Engine. Langkah-langkah ini memberikan fondasi yang dapat diperluas ke kasus penggunaan lanjutan, seperti mesh layanan yang diperluas ke beberapa cluster Google Kubernetes Engine dan, berpotensi, VM Compute Engine. Anda juga dapat menggunakan petunjuk ini jika mengonfigurasi Cloud Service Mesh dengan VPC Bersama.
Proses penyiapannya meliputi:
- Membuat cluster GKE untuk workload Anda.
- Menginstal injektor file bantuan Envoy dan mengaktifkan injeksi.
- Men-deploy klien contoh dan memverifikasi injeksi.
- Men-deploy layanan Kubernetes untuk pengujian.
- Mengonfigurasi Cloud Service Mesh dengan komponen Cloud Load Balancing untuk mengarahkan traffic ke layanan pengujian.
- Memverifikasi konfigurasi dengan mengirimkan permintaan dari klien contoh ke layanan pengujian.
Prasyarat
Sebelum mengikuti petunjuk dalam panduan ini, tinjau Menyiapkan penyiapan Cloud Service Mesh dan pastikan Anda telah menyelesaikan tugas prasyarat yang dijelaskan dalam dokumen tersebut.
Untuk mengetahui informasi tentang versi Envoy yang didukung, lihat catatan rilis Cloud Service Mesh.
Prasyarat tambahan dengan VPC Bersama
Jika Anda menyiapkan Cloud Service Mesh di lingkungan VPC Bersama, pastikan hal berikut.
- Anda memiliki izin dan peran yang benar untuk VPC Bersama.
- Anda telah menyiapkan project dan penagihan yang benar.
- Anda telah mengaktifkan penagihan di project.
- Anda telah mengaktifkan Cloud Service Mesh dan GKE API di setiap project, termasuk project host.
- Anda telah menyiapkan akun layanan yang benar untuk setiap project.
- Anda telah membuat jaringan dan subnet VPC.
- Anda telah mengaktifkan VPC Bersama.
Untuk informasi selengkapnya, lihat VPC Bersama.
Mengonfigurasi peran IAM
Contoh konfigurasi peran IAM ini mengasumsikan bahwa project host untuk VPC Bersama memiliki dua subnet dan ada dua project layanan di VPC Bersama.
Di Cloud Shell, buat folder kerja (
WORKDIR)
tempat Anda membuat file yang terkait dengan bagian ini:mkdir -p ~/td-shared-vpc cd ~/td-shared-vpc export WORKDIR=$(pwd)
Konfigurasikan izin IAM dalam project host sehingga project layanan dapat menggunakan resource dalam VPC bersama.
Pada langkah ini, Anda akan mengonfigurasi izin IAM sehingga
subnet-1
dapat diakses oleh project layanan 1 dansubnet-2
dapat diakses oleh project layanan 2. Anda menetapkan peran IAM Pengguna Jaringan Compute (roles/compute.networkUser
) ke akun layanan default komputasi Compute Engine dan akun layanan Google Cloud API di setiap project layanan untuk setiap subnet.Untuk project layanan 1, konfigurasikan izin IAM untuk
subnet-1
:export SUBNET_1_ETAG=$(gcloud beta compute networks subnets get-iam-policy subnet-1 --project ${HOST_PROJECT} --region ${REGION_1} --format=json | jq -r '.etag') cat > subnet-1-policy.yaml <<EOF bindings: - members: - serviceAccount:${SVC_PROJECT_1_API_SA} - serviceAccount:${SVC_PROJECT_1_GKE_SA} role: roles/compute.networkUser etag: ${SUBNET_1_ETAG} EOF gcloud beta compute networks subnets set-iam-policy subnet-1 \ subnet-1-policy.yaml \ --project ${HOST_PROJECT} \ --region ${REGION_1}
Untuk project layanan 2, konfigurasikan izin IAM untuk
subnet-2
:export SUBNET_2_ETAG=$(gcloud beta compute networks subnets get-iam-policy subnet-2 --project ${HOST_PROJECT} --region ${REGION_2} --format=json | jq -r '.etag') cat > subnet-2-policy.yaml <<EOF bindings: - members: - serviceAccount:${SVC_PROJECT_2_API_SA} - serviceAccount:${SVC_PROJECT_2_GKE_SA} role: roles/compute.networkUser etag: ${SUBNET_2_ETAG} EOF gcloud beta compute networks subnets set-iam-policy subnet-2 \ subnet-2-policy.yaml \ --project ${HOST_PROJECT} \ --region ${REGION_2}
Untuk setiap project layanan, Anda harus memberikan peran IAM Kubernetes Engine Host Service Agent User (
roles/container.hostServiceAgentUser
) ke akun layanan GKE di project host:gcloud projects add-iam-policy-binding ${HOST_PROJECT} \ --member serviceAccount:${SVC_PROJECT_1_GKE_SA} \ --role roles/container.hostServiceAgentUser gcloud projects add-iam-policy-binding ${HOST_PROJECT} \ --member serviceAccount:${SVC_PROJECT_2_GKE_SA} \ --role roles/container.hostServiceAgentUser
Dengan peran ini, akun layanan GKE dari project layanan dapat menggunakan akun layanan GKE dari project host untuk mengonfigurasi resource jaringan bersama.
Untuk setiap project layanan, berikan peran IAM Compute Network Viewer kepada akun layanan default Compute Engine (
roles/compute.networkViewer
) di project host.gcloud projects add-iam-policy-binding ${SVC_PROJECT_1} \ --member serviceAccount:${SVC_PROJECT_1_COMPUTE_SA} \ --role roles/compute.networkViewer gcloud projects add-iam-policy-binding ${SVC_PROJECT_2} \ --member serviceAccount:${SVC_PROJECT_2_COMPUTE_SA} \ --role roles/compute.networkViewer
Saat proxy file bantuan Envoy terhubung ke layanan xDS (Traffic Director API), proxy tersebut menggunakan akun layanan host virtual machine (VM) Compute Engine atau instance node GKE. Akun layanan harus memiliki izin IAM level project
compute.globalForwardingRules.get
. Peran Compute Network Viewer sudah cukup untuk langkah ini.
Membuat cluster GKE untuk workload Anda
Cluster GKE harus memenuhi persyaratan berikut untuk mendukung Cloud Service Mesh:
- Dukungan grup endpoint jaringan harus diaktifkan. Untuk mengetahui informasi dan contoh selengkapnya, lihat Grup endpoint jaringan mandiri.
- Akun layanan untuk node/pod GKE Anda harus memiliki izin untuk mengakses Cloud Service Mesh API. Untuk mengetahui informasi selengkapnya tentang izin yang diperlukan, lihat kembali Mengaktifkan akun layanan untuk mengakses Cloud Service Mesh API.
Membuat cluster GKE
Buat cluster GKE bernama traffic-director-cluster
di zona pilihan Anda, misalnya, us-central1-a
.
gcloud container clusters create traffic-director-cluster \ --zone ZONE \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --enable-ip-alias
Mengarahkan kubectl ke cluster yang baru dibuat
Ubah konteks saat ini untuk kubectl
ke cluster yang baru dibuat dengan memberikan perintah berikut:
gcloud container clusters get-credentials traffic-director-cluster \ --zone ZONE
Memasang injektor file bantuan Envoy
Bagian berikut memberikan petunjuk untuk menginstal injektor sidecar Envoy. Jika diaktifkan, injektor file bantuan akan otomatis men-deploy proxy file bantuan untuk workload Google Kubernetes Engine baru dan yang sudah ada. Karena injektor sidecar Envoy berjalan di dalam cluster GKE, Anda harus menginstalnya sekali ke setiap cluster jika Anda menggunakan Cloud Service Mesh untuk mendukung mesh layanan multi-cluster.
Mendownload injektor bantuan
Download dan ekstrak injektor file bantuan Envoy.
wget https://storage.googleapis.com/traffic-director/td-sidecar-injector-xdsv3.tgz tar -xzvf td-sidecar-injector-xdsv3.tgz cd td-sidecar-injector-xdsv3
Mengonfigurasi injektor file bantuan
Jika Anda menggunakan API lama, konfigurasikan injektor file bantuan dengan mengedit
file specs/01-configmap.yaml
untuk:
- Isi
TRAFFICDIRECTOR_GCP_PROJECT_NUMBER
dengan menggantiYOUR_PROJECT_NUMBER_HERE
dengan nomor project Anda. Nomor project adalah ID numerik untuk project Anda. Untuk informasi tentang cara mendapatkan daftar semua project, lihat Mengidentifikasi project. - Isi
TRAFFICDIRECTOR_NETWORK_NAME
dengan menggantiYOUR_NETWORK_NAME_HERE
dengan nama jaringan Virtual Private Cloud Google Cloud yang ingin Anda gunakan dengan Cloud Service Mesh. Catat nama jaringan VPC ini, karena Anda akan membutuhkannya nanti saat mengonfigurasi Cloud Service Mesh.
Jika Anda menggunakan API pemilihan rute layanan baru, yang saat ini sedang dalam pratinjau:
- Isi
TRAFFICDIRECTOR_MESH_NAME
dengan mengganti "" dengan nama mesh layanan, untuk mendapatkan konfigurasi mesh layanan.- Perhatikan bahwa jika Anda mengonfigurasi
Gateway
, Anda tidak akan menggunakan injektor sidecar. Anda men-deploy proxy Envoy sebagai Pod.
- Perhatikan bahwa jika Anda mengonfigurasi
Misalnya, file akan terlihat seperti ini:
$ cat specs/01-configmap.yaml
apiVersion: v1 kind: ConfigMap metadata: name: injector-mesh namespace: istio-control data: mesh: |- defaultConfig: discoveryAddress: trafficdirector.googleapis.com:443 # Envoy proxy port to listen on for the admin interface. proxyAdminPort: 15000 proxyMetadata: # Google Cloud Project number where Cloud Service Mesh resources are configured. # This is a numeric identifier of your project (e.g. "111222333444"). # You can get a list of all your projects with their corresponding numbers by # using "gcloud projects list" command or looking it up under "Project info" # section of your Google Cloud console. # If left empty, configuration will be attempted to be fetched for the Google Cloud # project associated with service credentials. # Leaving empty is not recommended as it is not guaranteed to work in future # releases. TRAFFICDIRECTOR_GCP_PROJECT_NUMBER: "YOUR_PROJECT_NUMBER_HERE" # Google Cloud VPC network name for which the configuration is requested (This is the VPC # network name referenced in the forwarding rule in Google Cloud API). If left empty, # configuration will be attempted to be fetched for the VPC network over which # the request to Cloud Service Mesh (trafficdirector.googleapis.com) is sent out. # Leaving empty is not recommended as it is not guaranteed to work in future # releases. TRAFFICDIRECTOR_NETWORK_NAME: "default"
Anda juga dapat mengaktifkan logging dan pelacakan untuk setiap proxy yang
dimasukkan secara otomatis. Untuk informasi selengkapnya tentang konfigurasi ini, tinjau
Mengonfigurasi atribut tambahan untuk proxy file bantuan.
Saat Anda menggunakan injektor file bantuan, nilai TRAFFICDIRECTOR_ACCESS_LOG_PATH
hanya dapat ditetapkan ke file dalam direktori /etc/envoy/
. Misalnya,
direktori /etc/envoy/access.log
adalah lokasi yang valid.
Perhatikan bahwa TRAFFICDIRECTOR_INTERCEPTION_PORT
tidak boleh dikonfigurasi dalam
ConfigMap
ini, karena sudah dikonfigurasi oleh injektor file bantuan.
Mengonfigurasi TLS untuk injektor file bantuan
Bagian ini menampilkan cara mengonfigurasi TLS untuk injektor file bantuan.
Injektor file bantuan menggunakan webhook masuk yang bermutasi Kubernetes untuk memasukkan proxy saat pod baru dibuat. Webhook ini adalah endpoint HTTPS sehingga Anda perlu memberikan kunci dan sertifikat untuk TLS.
Anda dapat membuat kunci pribadi dan sertifikat yang ditandatangani sendiri menggunakan openssl
untuk
mengamankan injektor file bantuan.
Secara opsional, jika Anda memiliki kunci pribadi dan sertifikat yang ditandatangani oleh certificate authority (CA) tepercaya, Anda dapat melewati langkah berikutnya ini.
CN=istio-sidecar-injector.istio-control.svc openssl req \ -x509 \ -newkey rsa:4096 \ -keyout key.pem \ -out cert.pem \ -days 365 \ -nodes \ -subj "/CN=${CN}" \ -addext "subjectAltName=DNS:${CN}" cp cert.pem ca-cert.pem
Contoh perintah openssl
ini menghasilkan kunci RSA 4096-bit pribadi ke key.pem
dan sertifikat yang ditandatangani sendiri dalam format X.509 ke cert.pem
. Karena
sertifikat ditandatangani sendiri, sertifikat tersebut akan disalin ke ca-cert.pem
dan
juga dianggap sebagai sertifikat CA penandatanganan. Sertifikat tetap
berlaku selama 365 hari dan tidak memerlukan frasa sandi. Untuk mengetahui informasi selengkapnya tentang pembuatan dan penandatanganan sertifikat, lihat dokumentasi Kubernetes tentang Permintaan Penandatanganan Sertifikat.
Langkah-langkah di bagian ini harus diulang setiap tahun untuk membuat ulang serta menerapkan ulang kunci dan sertifikat baru sebelum masa berlakunya habis.
Setelah memiliki kunci dan sertifikat, Anda harus membuat rahasia Kubernetes dan memperbarui webhook injektor file bantuan.
Buat namespace tempat rahasia Kubernetes akan dibuat:
kubectl apply -f specs/00-namespaces.yaml
Buat rahasia untuk injektor file bantuan.
kubectl create secret generic istio-sidecar-injector -n istio-control \ --from-file=key.pem \ --from-file=cert.pem \ --from-file=ca-cert.pem
Ubah
caBundle
dari webhook injeksi file bantuan bernamaistio-sidecar-injector-istio-control
dispecs/02-injector.yaml
:CA_BUNDLE=$(cat cert.pem | base64 | tr -d '\n') sed -i "s/caBundle:.*/caBundle:\ ${CA_BUNDLE}/g" specs/02-injector.yaml
Menginstal injektor file bantuan ke cluster GKE
Deploy injektor bantuan.
kubectl apply -f specs/
Pastikan injektor file bantuan berjalan.
kubectl get pods -A | grep sidecar-injector
Tindakan ini akan menampilkan output yang mirip dengan berikut ini:
istio-control istio-sidecar-injector-6b475bfdf9-79965 1/1 Running 0 11s istio-control istio-sidecar-injector-6b475bfdf9-vntjd 1/1 Running 0 11s
Membuka port yang diperlukan di cluster pribadi
Jika mengikuti petunjuk di Menyiapkan keamanan layanan Cloud Service Mesh dengan Envoy, Anda dapat melewati bagian ini dan melanjutkan ke bagian berikutnya, Mengaktifkan injeksi file bantuan.
Jika menginstal injektor file bantuan Envoy di cluster pribadi, Anda harus membuka port TCP 9443 dalam aturan firewall ke node master agar webhook dapat berfungsi dengan benar.
Langkah-langkah berikut menjelaskan cara mengupdate aturan firewall yang diperlukan. Perlu diperhatikan bahwa perintah update
menggantikan aturan firewall yang ada, sehingga Anda perlu memastikan untuk menyertakan port default 443 (HTTPS
) dan 10250 (kubelet
), serta port baru yang ingin Anda buka.
Temukan rentang sumber (
master-ipv4-cidr
) cluster. Pada perintah berikut, gantiCLUSTER_NAME
dengan nama cluster Anda, yaitutraffic-director-cluster
:FIREWALL_RULE_NAME=$(gcloud compute firewall-rules list \ --filter="name~gke-CLUSTER_NAME-[0-9a-z]*-master" \ --format="value(name)")
Perbarui aturan firewall untuk membuka port TCP 9443 guna mengaktifkan injeksi otomatis:
gcloud compute firewall-rules update ${FIREWALL_RULE_NAME} \ --allow tcp:10250,tcp:443,tcp:9443
Mengaktifkan injeksi file bantuan
Perintah berikut mengaktifkan injeksi untuk namespace default
. Injeksi
sidecar memasukkan container file bantuan ke pod yang dibuat di
namespace ini:
kubectl label namespace default istio-injection=enabled
Anda dapat memverifikasi bahwa namespace default
diaktifkan secara tepat dengan menjalankan perintah berikut:
kubectl get namespace -L istio-injection
Tindakan ini akan menampilkan:
NAME STATUS AGE ISTIO-INJECTION default Active 7d16h enabled istio-control Active 7d15h istio-system Active 7d15h
Jika Anda mengonfigurasi keamanan layanan untuk Cloud Service Mesh dengan Envoy, kembali ke bagian Menyiapkan layanan pengujian di panduan penyiapan tersebut.
Men-deploy klien contoh dan memverifikasi injeksi
Bagian ini menunjukkan cara men-deploy contoh pod yang menjalankan Listenbox, yang menyediakan antarmuka sederhana untuk menjangkau layanan pengujian. Dalam deployment yang sebenarnya, Anda akan men-deploy aplikasi klien Anda sendiri.
kubectl create -f demo/client_sample.yaml
Pod sibuk terdiri dari dua container. Penampung pertama adalah klien berdasarkan image Spanner dan penampung kedua adalah proxy Envoy yang dimasukkan oleh injektor file bantuan. Anda bisa mendapatkan informasi lebih lanjut tentang pod dengan menjalankan perintah berikut:
kubectl describe pods -l run=client
Tindakan ini akan menampilkan:
… Init Containers: # Istio-init sets up traffic interception for the pod. Istio-init: … Containers: # busybox is the client container that runs application code. busybox: … # Envoy is the container that runs the injected Envoy proxy. envoy: …
Men-deploy layanan Kubernetes untuk pengujian
Bagian berikut memberikan petunjuk untuk menyiapkan layanan pengujian yang Anda gunakan nanti dalam panduan ini untuk memberikan verifikasi menyeluruh atas penyiapan Anda.
Mengonfigurasi layanan GKE dengan NEG
Layanan GKE harus diekspos melalui grup endpoint jaringan (NEG) agar Anda dapat mengonfigurasinya sebagai backend layanan backend Cloud Service Mesh. Tambahkan anotasi NEG ke spesifikasi layanan Kubernetes, lalu
pilih nama (dengan mengganti NEG-NAME
pada contoh di bawah) sehingga Anda dapat
menemukannya dengan mudah nanti. Anda memerlukan nama tersebut saat melampirkan NEG ke layanan backend Cloud Service Mesh. Untuk informasi lebih lanjut tentang cara menganotasi NEG, lihat Penamaan NEG.
... metadata: annotations: cloud.google.com/neg: '{"exposed_ports": {"80":{"name": "service-test-neg"}}}' spec: ports: - port: 80 name: service-test protocol: TCP targetPort: 8000
Anotasi ini membuat NEG mandiri yang berisi endpoint yang sesuai dengan alamat IP dan port pod layanan. Untuk mengetahui informasi dan contoh selengkapnya, lihat Grup endpoint jaringan mandiri.
Layanan contoh berikut mencakup anotasi NEG. Layanan ini menyalurkan
nama host melalui HTTP pada port 80
. Gunakan perintah berikut untuk mendapatkan layanan dan men-deploy-nya ke cluster GKE Anda.
wget -q -O - \ https://storage.googleapis.com/traffic-director/demo/trafficdirector_service_sample.yaml \ | kubectl apply -f -
Pastikan bahwa layanan baru telah dibuat dan pod aplikasi sedang berjalan:
kubectl get svc
Outputnya akan mirip dengan berikut ini:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service-test ClusterIP 10.71.9.71 none 80/TCP 41m [..skip..]
Pastikan bahwa pod aplikasi yang terkait dengan layanan ini sedang berjalan:
kubectl get podsIni akan menampilkan:
NAME READY STATUS RESTARTS AGE app1-6db459dcb9-zvfg2 2/2 Running 0 6m busybox-5dcf86f4c7-jvvdd 2/2 Running 0 10m [..skip..]
Menyimpan nama NEG
Temukan NEG yang dibuat dari contoh di atas dan catat namanya untuk konfigurasi Cloud Service Mesh di bagian berikutnya.
gcloud compute network-endpoint-groups list
Hasil dari kueri tersebut adalah sebagai berikut:
NAME LOCATION ENDPOINT_TYPE SIZE service-test-neg ZONE GCE_VM_IP_PORT 1
Simpan nama NEG dalam variabel NEG_NAME:
NEG_NAME=$(gcloud compute network-endpoint-groups list \ | grep service-test | awk '{print $1}')
Mengonfigurasi Cloud Service Mesh dengan komponen Cloud Load Balancing
Bagian ini mengonfigurasi Cloud Service Mesh menggunakan resource load balancing Compute Engine. Tindakan ini memungkinkan proxy file bantuan klien contoh menerima konfigurasi dari Cloud Service Mesh. Permintaan keluar dari klien contoh ditangani oleh proxy file bantuan dan dirutekan ke layanan pengujian.
Anda harus mengonfigurasi komponen berikut:
- Health check. Untuk mengetahui informasi selengkapnya tentang health check, baca Konsep Health Check dan Membuat Health Check.
- Layanan backend. Untuk mengetahui informasi selengkapnya tentang layanan backend, baca Backend Services.
- Peta aturan pemilihan rute. Hal ini termasuk membuat aturan penerusan, proxy HTTP target, dan peta URL. Untuk mengetahui informasi selengkapnya, baca Menggunakan aturan penerusan untuk Cloud Service Mesh, Menggunakan proxy target untuk Cloud Service Mesh, dan Menggunakan peta URL.
Membuat aturan health check dan firewall
Gunakan petunjuk berikut untuk membuat health check dan aturan firewall yang diperlukan untuk pemeriksaan health check. Untuk mengetahui informasi selengkapnya, lihat Aturan firewall untuk health check.
Konsol
- Buka halaman Health check di Konsol Google Cloud.
Buka halaman Health check - Klik Create Health Check.
- Untuk nama, masukkan
td-gke-health-check
. - Untuk protokol, pilih HTTP.
Klik Create.
Buka halaman Firewall policies di Konsol Google Cloud.
Buka halaman Kebijakan firewallKlik Create firewall rules.
Di halaman Create a firewall rule, berikan informasi berikut:
- Nama: Berikan nama untuk aturan. Untuk contoh ini, gunakan
fw-allow-health-checks
. - Network: Pilih jaringan VPC.
- Priority: Masukkan angka untuk prioritas. Angka yang lebih rendah memiliki prioritas yang lebih tinggi. Pastikan aturan firewall memiliki prioritas lebih tinggi daripada aturan lain yang mungkin menolak traffic masuk.
- Arah lalu lintas: Pilih Ingress.
- Tindakan pada kecocokan: Pilih Izinkan.
- Target: Pilih All instances in the network.
- Filter sumber: Pilih jenis rentang IP yang benar.
- Rentang IP sumber:
35.191.0.0/16,130.211.0.0/22
- Filter tujuan: Pilih jenis IP.
- Protocols and ports: Klik Specified ports and protocols, lalu centang
tcp
. TCP adalah protokol dasar untuk semua protokol health check. - Klik Create.
- Nama: Berikan nama untuk aturan. Untuk contoh ini, gunakan
gcloud
Membuat health check.
gcloud compute health-checks create http td-gke-health-check \ --use-serving-port
Buat aturan firewall untuk mengizinkan rentang alamat IP health checker.
gcloud compute firewall-rules create fw-allow-health-checks \ --action ALLOW \ --direction INGRESS \ --source-ranges 35.191.0.0/16,130.211.0.0/22 \ --rules tcp
Membuat layanan backend
Buat layanan backend global
dengan skema load balancing INTERNAL_SELF_MANAGED
. Di
Konsol Google Cloud, skema load balancing ditetapkan secara implisit. Tambahkan health check ke layanan backend.
Konsol
Buka halaman Cloud Service Mesh di Konsol Google Cloud.
Pada tab Services, klik Create Service.
Klik Lanjutkan.
Untuk nama layanan, masukkan
td-gke-service
.Pilih Network, yang Anda konfigurasi di Cloud Service Mesh ConfigMap.
Di bagian Backend type, pilih Network endpoint groups.
Pilih grup endpoint jaringan yang Anda buat.
Setel Maximum RPS ke
5
.Tetapkan Mode penyeimbangan ke Tarif.
Klik Selesai.
Di bagian Health check, pilih
td-gke-health-check
, yang merupakan health check yang Anda buat.Klik Lanjutkan.
gcloud
Membuat layanan backend dan mengaitkan health check dengan layanan backend.
gcloud compute backend-services create td-gke-service \ --global \ --health-checks td-gke-health-check \ --load-balancing-scheme INTERNAL_SELF_MANAGED
Tambahkan NEG yang dibuat sebelumnya sebagai backend ke layanan backend. Jika mengonfigurasi Cloud Service Mesh dengan proxy TCP target, Anda harus menggunakan mode penyeimbangan
UTILIZATION
. Jika menggunakan proxy target HTTP atau HTTPS, Anda dapat menggunakan modeRATE
.gcloud compute backend-services add-backend td-gke-service \ --global \ --network-endpoint-group ${NEG_NAME} \ --network-endpoint-group-zone ZONE \ --balancing-mode [RATE | UTILIZATION] \ --max-rate-per-endpoint 5
Membuat peta aturan perutean
Peta aturan perutean menentukan cara Cloud Service Mesh merutekan traffic di mesh Anda. Sebagai bagian dari peta aturan pemilihan rute, Anda mengonfigurasi alamat IP virtual (VIP) dan kumpulan aturan pengelolaan traffic terkait, seperti pemilihan rute berbasis host. Saat aplikasi mengirimkan permintaan ke VIP, proxy sidecar Envoy yang terlampir akan melakukan hal berikut:
- Mencegat permintaan.
- Mengevaluasinya berdasarkan aturan pengelolaan lalu lintas di peta URL.
- Memilih layanan backend berdasarkan nama host dalam permintaan.
- Memilih backend atau endpoint yang terkait dengan layanan backend yang dipilih.
- Mengirim traffic ke backend atau endpoint tersebut.
Konsol
Di konsol, proxy target digabungkan dengan aturan penerusan. Saat Anda membuat aturan penerusan, Google Cloud otomatis membuat proxy HTTP target dan melampirkannya ke peta URL.
Aturan rute terdiri dari aturan penerusan serta aturan host dan jalur (juga dikenal sebagai peta URL).
Buka halaman Cloud Service Mesh di Konsol Google Cloud.
Klik Peta aturan pemilihan rute
Klik Create Routing Rule.
Masukkan
td-gke-url-map
sebagai Nama peta URL.Klik Tambahkan aturan penerusan.
Untuk nama aturan penerusan, masukkan
td-gke-forwarding-rule
.Pilih jaringan Anda.
Pilih Internal IP.
Klik Simpan.
Anda juga dapat menambahkan aturan host dan jalur kustom atau membiarkan aturan jalur sebagai default.
Tetapkan host ke
service-test
.Klik Simpan.
gcloud
Buat peta URL yang menggunakan
td-gke-service
sebagai layanan backend default.gcloud compute url-maps create td-gke-url-map \ --default-service td-gke-service
Buat pencocok jalur peta URL dan aturan host untuk mengarahkan traffic untuk layanan Anda berdasarkan nama host dan jalur. Contoh ini menggunakan
service-test
sebagai nama layanan dan pencocok jalur default yang cocok dengan semua permintaan jalur untuk host ini (/*
).gcloud compute url-maps add-path-matcher td-gke-url-map \ --default-service td-gke-service \ --path-matcher-name td-gke-path-matcher gcloud compute url-maps add-host-rule td-gke-url-map \ --hosts service-test \ --path-matcher-name td-gke-path-matcher
Membuat proxy HTTP target.
gcloud compute target-http-proxies create td-gke-proxy \ --url-map td-gke-url-map
Membuat aturan penerusan.
gcloud compute forwarding-rules create td-gke-forwarding-rule \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --address=0.0.0.0 \ --target-http-proxy=td-gke-proxy \ --ports 80 --network default
Pada tahap ini, Cloud Service Mesh akan mengonfigurasi proxy file bantuan untuk merutekan permintaan yang menentukan nama host service-test
ke backend td-gke-service
. Dalam hal ini, backend tersebut adalah endpoint di grup endpoint jaringan yang terkait dengan layanan pengujian Kubernetes yang Anda deploy sebelumnya.
Memverifikasi konfigurasi
Bagian ini menunjukkan cara memverifikasi bahwa traffic yang dikirim dari contoh klien sibukbox dirutekan ke layanan Kubernetes service-test
Anda. Untuk mengirim permintaan
pengujian, Anda dapat mengakses shell di salah satu container dan menjalankan
perintah verifikasi berikut. Pod service-test
akan menampilkan nama host pod yang aktif.
# Get the name of the pod running Busybox. BUSYBOX_POD=$(kubectl get po -l run=client -o=jsonpath='{.items[0].metadata.name}') # Command to execute that tests connectivity to the service service-test at # the VIP 10.0.0.1. Because 0.0.0.0 is configured in the forwarding rule, this # can be any VIP. TEST_CMD="wget -q -O - 10.0.0.1; echo" # Execute the test command on the pod. kubectl exec -it $BUSYBOX_POD -c busybox -- /bin/sh -c "$TEST_CMD"
Berikut cara konfigurasi diverifikasi:
- Klien contoh mengirim permintaan yang menentukan nama host
service-test
. - Klien contoh memiliki proxy file bantuan Envoy yang dimasukkan oleh injektor sidecar Envoy.
- Proxy file bantuan mencegat permintaan.
- Dengan menggunakan peta URL, Envoy mencocokkan nama host
service-test
dengan layanan Cloud Service Meshtd-gke-service
. - Envoy memilih endpoint dari grup endpoint jaringan yang terkait dengan
td-gke-service
. - Envoy mengirim permintaan ke pod yang terkait dengan layanan Kubernetes
service-test
.
Langkah selanjutnya
- Pelajari pengelolaan traffic lanjutan
- Pelajari keamanan layanan Cloud Service Mesh.
- Pelajari cara menyiapkan kemampuan observasi dengan Envoy.
- Pelajari cara memecahkan masalah deployment Cloud Service Mesh.
- Pelajari opsi untuk penyiapan Pod Google Kubernetes Engine dengan injeksi Envoy otomatis.