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.

Contoh NEG lintas project dasar pengukuran

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

  1. 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.
  2. 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
    
  3. 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.

  4. Ubah konteks saat ini untuk kubectl ke cluster yang baru dibuat:

    gcloud container clusters get-credentials test-cluster \
        --zone=ZONE
    
  5. 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
    
  6. 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

  1. Arahkan Google Cloud CLI Anda ke project kebijakan:

    gcloud config set project POLICY_PROJECT_ID
    
  2. 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.

  3. 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
    
  4. Melampirkan NetworkEndpointGroup yang dibuat di bagian sebelumnya ke BackendService:

    gcloud compute backend-services add-backend example-service --global \
      --network-endpoint-group=${NEG_LINK} \
      --balancing-mode=RATE \
      --max-rate-per-endpoint=5
    
  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"

Langkah selanjutnya