Menyiapkan grup endpoint jaringan lintas project
Fitur grup endpoint jaringan (NEG) lintas project memungkinkan pelanggan untuk
melampirkan NEG dari project lain ke BackendService
Traffic Director/Cloud Service Mesh, yang memungkinkan kasus penggunaan berikut:
Dalam deployment multi-project,
BackendServices
beserta kebijakan traffic dan pemilihan rute terkait dalam project terpusat. dengan endpoint backend dari project yang berbeda.Dalam deployment multi-project, Anda dapat mengelola semua resource komputasi (VM Compute Engine, NEG GKE, dll.) dalam satu project Google Cloud terpusat, sementara Tim layanan memiliki project layanan Google Cloud mereka sendiri tempat mereka menentukan kebijakan layanan yang dinyatakan dalam
BackendServices
dan Rute pemilihan rute Layanan di project layanan masing-masing. Hal ini mendelegasikan pengelolaan layanan mereka sekaligus mempertahankan kontrol yang ketat atas resource compute yang dapat dibagikan di antara berbagai tim layanan.
Halaman ini menunjukkan cara membuat penyiapan 2 project dasar pengukuran dengan NEG di
project A (disebut sebagai project workload) dilampirkan ke
BackendService
di project B (disebut sebagai project kebijakan). Contoh
berikut menyiapkan VM workload di jaringan VPC default dalam project workload
dan menunjukkan bahwa klien dapat merutekan ke dalam project workload berdasarkan
konfigurasi dalam project kebijakan.
Dalam penyiapan yang lebih canggih, solusi seperti VPC Bersama diperlukan untuk dataplane yang saling terhubung di beberapa project. Hal ini juga menyiratkan bahwa endpoint NEG memiliki IP unik. Contoh penyiapan ini dapat diperluas ke skenario yang lebih rumit saat beban kerja berada di jaringan VPC Bersama yang mencakup beberapa project.
Batasan
Batasan Traffic Director umum dan batasan BackendService/NetworkEndpointGroup berlaku.
Batasan berikut juga berlaku, tetapi mungkin tidak khusus untuk penyiapan multi-project:
- Satu BackendService hanya dapat mendukung hingga 50 backend(termasuk NEG, MIG).
- Hanya NEG zonal dari jenis GCP_VM_IP_PORT yang didukung.
- Referensi BackendServices lintas project ke grup instance (terkelola atau tidak terkelola) tidak didukung.
- Mencantumkan NEG lintas project yang dapat dilampirkan ke BackendService tertentu tidak didukung.
- Mencantumkan BackendServices lintas project yang menggunakan NEG tertentu tidak didukung.
Sebelum memulai
Anda harus menyelesaikan prasyarat berikut sebelum dapat menyiapkan NEG lintas project.
Mengaktifkan API yang diperlukan
API berikut diperlukan untuk menyelesaikan panduan ini:
- osconfig.googleapis.com
- trafficdirector.googleapis.com
- compute.googleapis.com
- networkservices.googleapis.com
Jalankan perintah berikut untuk mengaktifkan API yang diperlukan dalam project workload dan project kebijakan:
gcloud services enable --project PROJECT_ID \
osconfig.googleapis.com \
trafficdirector.googleapis.com \
compute.googleapis.com \
networkservices.googleapis.com
Memberikan izin IAM yang diperlukan
Anda harus memiliki izin Identity and Access Management (IAM) yang memadai untuk menyelesaikan panduan ini. Jika memiliki peran Pemilik atau Editor project (roles/owner
atau
roles/editor
) di project tempat Anda
mengaktifkan Cloud Service Mesh, Anda akan otomatis memiliki izin
yang benar.
Jika tidak, Anda harus memberikan semua peran IAM berikut. Jika memiliki peran ini, Anda juga memiliki izin terkait, seperti yang dijelaskan dalam dokumentasi IAM Compute Engine.
Peran berikut diperlukan dalam kedua project kebijakan dan workload:
- roles/iam.serviceAccountAdmin
- roles/serviceusage.serviceUsageAdmin
- roles/compute.networkAdmin
Peran berikut hanya diperlukan dalam project workload:
- roles/compute.securityAdmin
- roles/container.admin
- Setiap peran yang menyertakan izin berikut. Peran bawaan yang paling terperinci
yang menyertakan semua izin yang diperlukan untuk melampirkan NEG ke
BackendService adalah roles/compute.loadBalancerServiceUser
- compute.networkEndpointGroups.get
- compute.networkEndpointGroups.use
Selain itu, klien xDS yang dikelola Traffic Director (seperti proxy Envoy) harus memiliki izin di bagian roles/trafficdirector.client
. Untuk tujuan demonstrasi,
Anda dapat menggunakan perintah berikut untuk memberikan izin ini di project kebijakan
ke akun layanan komputasi default project beban kerja:
gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \
--member "serviceAccount:WORKLOAD_PROJECT_NUMBER-compute@" \
--role "roles/trafficdirector.client"
di mana
- POLICY_PROJECT_ID adalah ID project kebijakan.
- WORKLOAD_PROJECT_NUMBER adalah nomor project project beban kerja.
Mengonfigurasi backend layanan di project workload
Jalankan perintah berikut untuk mengarahkan Google Cloud CLI ke project kebijakan dan menetapkan zona komputasi Google Cloud pilihan:
gcloud config set project WORKLOAD_PROJECT_ID gcloud config set compute/zone ZONE
di mana
- WORKLOAD_PROJECT_ID adalah ID project beban kerja.
- ZONE adalah zona cluster GKE,
misalnya
us-central1
.
Membuat cluster GKE. Untuk tujuan demonstrasi, perintah berikut akan membuat cluster GKE zona. Namun, fitur ini juga berfungsi di cluster GKE regional.
gcloud container clusters create test-cluster \ --scopes=https://www.googleapis.com/auth/cloud-platform --zone=ZONE
Buat aturan firewall:
gcloud compute firewall-rules create http-allow-health-checks \ --network=default \ --action=ALLOW \ --direction=INGRESS \ --source-ranges=35.191.0.0/16,130.211.0.0/22 \ --rules=tcp:80
Aturan firewall memungkinkan bidang kontrol Google Cloud mengirim pemeriksaan health check ke backend di jaringan VPC default.
Ubah konteks saat ini untuk kubectl ke cluster yang baru dibuat:
gcloud container clusters get-credentials test-cluster \ --zone=ZONE
Buat dan deploy aplikasi contoh whereami:
kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: whereami spec: replicas: 2 selector: matchLabels: app: whereami template: metadata: labels: app: whereami spec: containers: - name: whereami image: gcr.io/google-samples/whereami:v1.2.20 ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: whereami annotations: cloud.google.com/neg: '{"exposed_ports":{"8080":{"name": "example-neg"}}}' spec: selector: app: whereami ports: - port: 8080 targetPort: 8080 EOF
Jalankan perintah berikut untuk menyimpan referensi ke NEG dalam variabel:
NEG_LINK=$(gcloud compute network-endpoint-groups describe example-neg --format="value(selfLink)")
Pengontrol NEG akan otomatis membuat NetworkEndpointGroup zonal untuk backend layanan di setiap zona. Dalam contoh ini, nama NEG di-hardcode ke example-neg. Menyimpannya sebagai variabel akan berguna dalam sesi berikutnya saat melampirkan NEG ini ke BackendService dalam project kebijakan.
Jika Anda menggunakan contoh $NEG_LINK, tampilannya akan terlihat seperti berikut:
$ echo ${NEG_LINK} https://www.googleapis.com/compute/v1/projects/WORKLOAD_PROJECT/zones/ZONE/networkEndpointGroups/example-neg
Atau, Anda dapat mengambil URL NEG dengan membaca anotasi neg-status di layanan:
kubectl get service whereami -o jsonpath="{.metadata.annotations['cloud\.google\.com/neg-status']}" NEG_LINK="https://www.googleapis.com/compute/v1/projects/WORKLOAD_PROJECT_ID/zones/ZONE/networkEndpointGroups/example-neg"
Mengonfigurasi resource jaringan Google Cloud di project kebijakan
Arahkan Google Cloud CLI Anda ke project kebijakan:
gcloud config set project POLICY_PROJECT_ID
Mengonfigurasi resource mesh:
gcloud network-services meshes import example-mesh --source=- --location=global << EOF name: example-mesh EOF
Nama resource mesh adalah kunci yang digunakan proxy sidecar untuk meminta konfigurasi mesh layanan.
Konfigurasikan
BackendService
dasar pengukuran dengan health check:gcloud compute health-checks create http http-example-health-check gcloud compute backend-services create example-service \ --global \ --load-balancing-scheme=INTERNAL_SELF_MANAGED \ --protocol=HTTP \ --health-checks http-example-health-check
Melampirkan
NetworkEndpointGroup
yang dibuat di bagian sebelumnya keBackendService
:gcloud compute backend-services add-backend example-service --global \ --network-endpoint-group=${NEG_LINK} \ --balancing-mode=RATE \ --max-rate-per-endpoint=5
Buat HTTPRoute untuk mengarahkan semua permintaan HTTP dengan header host
example-service
ke server dalam project beban kerja:gcloud network-services http-routes import example-route --source=- --location=global << EOF name: example-route hostnames: - example-service meshes: - projects/POLICY_PROJECT_NUMBER/locations/global/meshes/example-mesh rules: - action: destinations: - serviceName: "projects/POLICY_PROJECT_NUMBER/locations/global/backendServices/example-service" EOF
dengan POLICY_PROJECT_NUMBER adalah nomor project project kebijakan.
Memverifikasi penyiapan
Anda dapat memverifikasi penyiapan dengan mengirim permintaan HTTP dengan header HOST yang disetel ke
example-service
ke VIP di belakang proxy sidecar yang dikelola Traffic Director:
curl -H "Host: example-service" http://10.0.0.1/
Outputnya mirip dengan:
{"cluster_name":"test-cluster","gce_instance_id":"4879146330986909656","gce_service_account":"...","host_header":"example-service","pod_name":"whereami-7fbffd489-nhkfg","pod_name_emoji":"...","project_id":"...","timestamp":"2024-10-15T00:42:22","zone":"us-west1-a"}
Perhatikan bahwa karena semua traffic keluar dari Pod dicegat oleh sidecar Envoy di mesh layanan, dan HTTPRoute sebelumnya dikonfigurasi untuk mengirim semua traffic ke Layanan Kubernetes "whereami" semata-mata berdasarkan atribut L7 (header host). Misalnya, VIP dalam perintah ini adalah 10.0.0.1, tetapi VIP dapat berupa IP apa pun.
Proxy sidecar harus meminta konfigurasi yang terkait dengan resource mesh dalam project kebijakan. Untuk melakukannya, pastikan ID Node ditetapkan dalam format berikut:
projects/POLICY_PROJECT_NUMBER/networks/mesh:example-mesh/nodes/UUID"