Menyiapkan grup endpoint jaringan lintas project

Fitur grup endpoint jaringan (NEG) lintas project memungkinkan pelanggan melampirkan NEG dari project lain ke BackendService Traffic Director/Cloud Service Mesh, sehingga memungkinkan kasus penggunaan berikut:

  • Dalam deployment multi-project, BackendServices beserta kebijakan traffic dan perutean terkaitnya 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 projectGoogle Cloud pusat, sementara tim Layanan memiliki project layanan Google Cloud sendiri tempat mereka menentukan kebijakan layanan yang dinyatakan dalam BackendServicesdan Rute perutean layanan di project layanan masing-masing. Hal ini mendelegasikan pengelolaan layanan mereka sambil mempertahankan kontrol yang ketat atas resource komputasi yang dapat dibagikan di antara tim layanan yang berbeda.

Halaman ini menunjukkan cara membuat penyiapan dasar 2 project tempat 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

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. Konfigurasi contoh 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 spesifik untuk penyiapan multi-project:

  • Satu BackendService hanya dapat mendukung hingga 50 backend(termasuk NEG, MIG).
  • Hanya NEG zonal 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 BackendService 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 di project beban kerja 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 Anda 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 di kedua project workload dan kebijakan:

  • roles/iam.serviceAccountAdmin
  • roles/serviceusage.serviceUsageAdmin
  • roles/compute.networkAdmin

Peran berikut hanya diperlukan dalam project workload:

  • roles/compute.securityAdmin
  • roles/container.admin
  • Peran apa pun yang mencakup izin berikut. Peran bawaan paling terperinci yang mencakup 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 Compute default dari 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 dari project workload.

Mengonfigurasi backend layanan di project workload

  1. Jalankan perintah berikut untuk mengarahkan Google Cloud CLI Anda 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 workload.
    • 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 mengirimkan 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: us-docker.pkg.dev/google-samples/containers/gke/whereami:v1
            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 secara otomatis membuat NetworkEndpointGroup zonal untuk backend layanan di setiap zona. Dalam contoh ini, nama NEG dikodekan secara permanen ke example-neg. Menyimpannya sebagai variabel akan berguna dalam sesi berikutnya saat melampirkan NEG ini ke BackendService di project kebijakan.

    Jika Anda mencontohkan $NEG_LINK, contoh tersebut 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 pada 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 Google Cloud resource jaringan 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 service mesh.

  3. Konfigurasi tolok ukur BackendService 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 di 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 dari 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" hanya berdasarkan atribut L7 (header host). Untuk tujuan contoh, 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 berikutnya