Mengonfigurasi alamat IP publik yang digunakan secara pribadi untuk GKE


Tutorial ini menunjukkan cara menerapkan alamat IP publik yang digunakan secara pribadi (PUPI) untuk Blok alamat Pod Google Kubernetes Engine (GKE).

Alamat IP Publik yang Digunakan secara Pribadi (PUPI) adalah alamat yang dapat Anda gunakan secara pribadi dalam jaringan Virtual Private Cloud (VPC) Google Cloud. IP ini alamat tersebut tidak dimiliki oleh Google. Anda tidak perlu memiliki IP publik ini untuk digunakan secara pribadi.

Ringkasan

Cluster GKE memerlukan rentang alamat IP khusus untuk node, Pod, dan Layanan Google. Seiring dengan berkembangnya infrastruktur, Anda mungkin menghadapi ruang alamat IP internal standar (RFC 1918). Salah satu cara untuk mengurangi RFC pribadi Kehabisan alamat 1918 adalah penggunaan alamat IP publik yang digunakan secara pribadi (PUPI) untuk CIDR Pod GKE memblokir. PUPI memberikan alternatif untuk jaringan Pod GKE, yang mencadangkan menggunakan alamat IP pribadi untuk komponen cluster lainnya.

Cluster Tunggal: Jika hanya membuat satu cluster GKE, Anda dapat mengaktifkan PUPI dengan mengaktifkan alamat IP eksternal yang digunakan secara pribadi rentang.

Beberapa Cluster: Jika Anda bekerja dengan beberapa GKE cluster yang terhubung melalui peering VPC (skenario umum untuk penyedia layanan), Anda memerlukan konfigurasi yang lebih kompleks. Hal berikut diagram menunjukkan contoh cara perusahaan (produsen) menawarkan layanan terkelola menggunakan PUPI dengan peering VPC ke pelanggan (konsumen).

Alamat PUPI untuk CIDR Pod GKE
diblokir.

Diagram sebelumnya melibatkan pertimbangan berikut:

  • Blok CIDR utama: Blok CIDR non-PUPI yang digunakan untuk node dan load balancer internal (ILB) dan tidak boleh tumpang-tindih di beberapa VPC.
  • Blok CIDR sekunder produsen: Blok CIDR PUPI yang digunakan untuk Pod (misalnya, 45.45.0.0/16).
  • Blok CIDR sekunder konsumen: Blok CIDR PUPI lainnya pada pelanggan (misalnya, 5.5.0.0/16).

Cara PUPI digunakan dalam skenario Penyedia layanan

Penyedia layanan (produsen) menjalankan layanan terkelola mereka di Cluster GKE (gke-2) dalam VPC (vpc-producer). Ini cluster menggunakan rentang PUPI 45.0.0.0/8 untuk alamat IP Pod-nya.

Pelanggan (konsumen) juga memiliki cluster GKE (gke-1) sendiri VPC (vpc-consumer), menggunakan rentang PUPI yang berbeda, 5.0.0.0/8, untuk alamat IP Pod-nya.

Kedua VPC ini terhubung menggunakan peering VPC, tetapi masing-masing terus menggunakan alamat IP pribadi standar (RFC 1918) untuk {i>node<i}, layanan, dan load balancer internal.

Memastikan komunikasi antar-VPC

  • Konsumen ke Produsen: Secara default, VPC konsumen secara otomatis membagikan rute RFC 1918-nya (tapi bukan PUPI) dengan produsen. Hal ini memungkinkan resource di VPC konsumen untuk mengakses di VPC produsen (biasanya melalui jaringan load balancer).
  • Produser ke Konsumen: Agar Pod produsen dapat menjangkau resource di VPC konsumen, diperlukan konfigurasi eksplisit.
  • Tidak Ada Tumpang-Tindih: Produsen dan konsumen harus memastikan bahwa rentang PUPI konsumen tidak bertentangan dengan Alamat IP yang digunakan di VPC produsen.
  • Ekspor/Impor: Produsen harus mengaktifkan ekspor rute PUPI-nya, dan konsumen harus mengaktifkan impor rute tersebut melalui koneksi peering.

Mengaktifkan komunikasi saat rentang PUPI tumpang-tindih

Jika VPC konsumen sudah menggunakan rentang PUPI yang sama dengan produser, komunikasi langsung dari Pod produser tidak mungkin dilakukan. Sebagai gantinya, produser bisa mengaktifkan penyamaran alamat IP, di mana alamat IP Pod tersembunyi di balik alamat IP {i>node<i} produsen.

Tabel berikut menampilkan setelan impor dan ekspor default untuk masing-masing Jaringan VPC. Anda dapat mengubah setelan peering VPC default menggunakan perintah gcloud compute networks peerings update.

Jaringan VPC Impor setelan Ekspor setelan Catatan
Produsen

Perilaku default (dinonaktifkan): Tidak mengimpor rute subnet dengan rute publik Alamat IP
Untuk mengaktifkan: --import-subnet-routes-with-public-ip (melalui peering)

Perilaku default (diaktifkan): Mengekspor rute subnet dengan IP publik alamat
Untuk menonaktifkan: --no-export-subnet-routes-with-public-ip (melalui peering)

Tanda yang dikontrol melalui jaringan layanan.
Konsumen Dinonaktifkan (default) Diaktifkan (default) Biasanya dikelola oleh pelanggan, tidak perlu dimodifikasi melalui jaringan layanan

Setelan ini menghasilkan hal berikut:

  • VPC produsen melihat semua rute pelanggan.
  • VPC konsumen tidak melihat rute PUPI yang dikonfigurasi di subnet Pod di VPC produsen.
  • Traffic yang berasal dari Pod produsen ke jaringan vpc-consumer harus diterjemahkan di belakang alamat {i>node<i} pada klaster produsen.

Prasyarat

Untuk membangun komunikasi yang sukses antara Pod VPC dan VPC lain, pastikan prasyarat dan konfigurasi terpenuhi:

  • Cluster GKE Anda harus memenuhi versi minimum berikut persyaratan:
    • Cluster Autopilot: GKE versi 1.22 atau yang lebih baru
    • Cluster standar: GKE versi 1.14 atau yang lebih baru
  • Pilih rentang PUPI yang tidak dapat dirutekan secara publik atau dimiliki oleh Google.
  • Pastikan alamat IP node dan rentang alamat IP utama dari keduanya VPC tidak tumpang tindih.
  • Jika Anda memerlukan komunikasi Pod-ke-Pod langsung antara pelanggan VPC dan layanan terkelola, ikuti langkah-langkah berikut:
    • Cluster Autopilot: Konfigurasi SNAT untuk PUPI guna memastikan Komunikasi Pod-ke-Pod. Anda tidak memerlukan konfigurasi tambahan.
    • Cluster standar: Menerjemahkan alamat IP Pod ke alamat IP node yang sesuai menggunakan SNAT. Mengaktifkan SNAT untuk PUPI kemacetan. Untuk informasi selengkapnya, lihat Mengaktifkan IP eksternal yang digunakan secara pribadi rentang alamat IP.

Mengonfigurasi alamat IP publik yang digunakan secara pribadi untuk cluster GKE

Guna mengonfigurasi alamat PUPI untuk cluster GKE:

  1. Mengonfigurasi dua jaringan Virtual Private Cloud.
  2. Mengonfigurasi satu subnet di dalam setiap jaringan Virtual Private Cloud.
  3. Mengonfigurasi rentang alamat PUPI pada rentang alamat sekunder di setiap subnet.
  4. Membangun hubungan peering Virtual Private Cloud antara kedua Virtual Private Cloud jaringan dengan setelan impor dan ekspor yang tepat.
  5. Periksa rute dalam setiap Virtual Private Cloud.

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan, gunakan kalkulator harga.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Mengaktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan gcloud components update.
  • Gunakan cluster VPC native saja.

  • Menyiapkan spesifikasi IPAM yang diperlukan untuk VPC peering.

Menyiapkan Jaringan dan cluster

  1. Membuat jaringan VPC:

    Buat dua jaringan VPC berikut dengan RFC-1918 sebagai rentang primer untuk node dan rentang PUPI untuk Pod. Tetapkan alamat IP utama rentang dari ruang alamat pribadi RFC 1918 (misalnya 10.x.x.x, 172.16.x.x, atau 192.168.x.x) ke kedua VPC. Rentang-rentang ini yang biasanya digunakan untuk worker node dalam GKE Anda klaster. Selain rentang alamat IP internal, tetapkan rentang alamat IP Publik yang Digunakan Secara Pribadi (PUPI) untuk masing-masing Jaringan VPC. Rentang PUPI ini digunakan secara eksklusif untuk IP Pod dalam cluster GKE yang sesuai.

    • Jaringan VPC konsumen: VPC ini menghosting Cluster GKE tempat aplikasi atau workload konsumen akan dijalankan. Anda dapat menggunakan konfigurasi yang mirip dengan berikut ini:

      Network: consumer
      Subnetwork: consumer-subnet
      Primary range: 10.129.0.0/24
      Service range name and cidr: consumer-services, 172.16.5.0/24
      Pod range name and cidr: consumer-pods, 5.5.5.0/24
      Cluster name: consumer-cluster
      
    • Jaringan VPC produsen: VPC ini menghosting GKE yang bertanggung jawab untuk menyediakan layanan yang penggunaan konsumen. Anda dapat menggunakan konfigurasi yang mirip dengan berikut ini:

      Network: producer
      Subnetwork: producer-subnet
      Primary range: 10.128.0.0/24
      Service range name and cidr: producer-services, 172.16.45.0/24
      Pod range name and cidr: producer-pods, 45.45.45.0/24
      Cluster name: producer-cluster
      

    Untuk informasi selengkapnya tentang cara membuat jaringan VPC, lihat Membuat VPC jaringan.

  2. Dengan Jaringan dan subnet VPC dibuat dengan rentang PUPI di langkah sebelumnya, Anda dapat membuat dua Cluster GKE (producer dan consumer).

    1. Buat cluster producer dengan jaringan produsen dan subnet sebagai berikut:

      gcloud container clusters create PRODUCER_CLUSTER_NAME \
          --enable-ip-alias \
          --network=NETWORK_NAME \
          --subnetwork=SUBNETWORK_NAME \
          --cluster-secondary-range-name=PRODUCER_PODS \
          --services-secondary-range-name=PRODUCER_SERVICES \
          --num-nodes=1 \
          --zone=PRODUCER_ZONE_NAME \
          --project=PRODUCER_PROJECT_NAME
      

      Ganti kode berikut:

      • PRODUCER_CLUSTER_NAME: nama Cluster produser GKE.
      • COMPUTE_LOCATION: Compute Engine untuk cluster tersebut.
      • PRODUCER_SUBNET_NAME: nama subnet yang ada. Rentang alamat IP primer subnet digunakan untuk node. Subnet harus berada di region yang sama dengan region yang digunakan oleh cluster. Jika dihilangkan, GKE mencoba menggunakan subnet di VPC default jaringan di region cluster.
      • Jika metode penetapan rentang sekunder dikelola oleh GKE:
        • POD_IP_RANGE: rentang alamat IP dalam notasi CIDR, seperti 10.0.0.0/14, atau ukuran subnet mask blok CIDR, seperti /14. Ini digunakan untuk membuat rentang alamat IP sekunder subnet untuk Pod. Jika Anda menghapus opsi --cluster-ipv4-cidr, GKE memilih /14 rentang (218 alamat) secara otomatis. Rentang yang dipilih secara otomatis dipilih secara acak dari 10.0.0.0/8 (rentang 224 alamat).
        • SERVICES_IP_RANGE: rentang alamat IP dalam notasi CIDR (misalnya, 10.4.0.0/19) atau ukuran subnet mask blok CIDR (untuk contoh, /19). Ini digunakan untuk membuat alamat IP sekunder subnet untuk Layanan.
      • Jika metode penetapan rentang sekunder dikelola pengguna:
        • SECONDARY_RANGE_PODS: nama bisnis yang sudah ada rentang alamat IP sekunder dalam SUBNET_NAME yang ditentukan. GKE menggunakan seluruh rentang alamat IP sekunder subnet untuk Pod di cluster tersebut.
        • SECONDARY_RANGE_SERVICES: nama bisnis yang sudah ada rentang alamat IP sekunder di yang ditentukan.
    2. Buat cluster consumer dengan jaringan dan subnet konsumen sebagai berikut:

      gcloud container clusters create CONSUMER_CLUSTER_NAME \
          --enable-ip-alias \
          --network=CONSUMER_NETWORK_NAME \
          --subnetwork=CONSUMER_SUBNETWORK_NAME \
          --cluster-secondary-range-name=CONSUMER_PODS \
          --services-secondary-range-name=CONSUMER_SERVICES \
          --num-nodes=1 \
          --zone=CONSUMER_ZONE \
          --project=CONSUMER_PROJECT
      

      Ganti kode berikut:

      • CONSUMER_CLUSTER_NAME: nama cluster konsumen GKE.
      • COMPUTE_LOCATION: Compute Engine untuk cluster tersebut.
      • CONSUMER_SUBNET_NAME: nama subnet yang ada. Rentang alamat IP primer subnet digunakan untuk node. Subnet harus berada di region yang sama dengan region yang digunakan oleh cluster. Jika dihilangkan, GKE mencoba menggunakan subnet di VPC default jaringan di region cluster.
      • Jika metode penetapan rentang sekunder dikelola oleh GKE:
        • POD_IP_RANGE: rentang alamat IP dalam notasi CIDR, seperti 10.0.0.0/14, atau ukuran subnet mask blok CIDR, seperti /14. Ini digunakan untuk membuat rentang alamat IP sekunder subnet untuk Pod. Jika Anda menghapus opsi --cluster-ipv4-cidr, GKE memilih /14 rentang (218 alamat) secara otomatis. Rentang yang dipilih secara otomatis dipilih secara acak dari 10.0.0.0/8 (rentang 224 alamat) dan tidak akan menyertakan rentang alamat IP yang dialokasikan untuk VM, rute yang ada, atau rentang yang dialokasikan ke klaster lain. Rentang yang dipilih secara otomatis mungkin dengan alamat IP yang dicadangkan, rute dinamis, atau rute dalam VPC yang melakukan peering dengan cluster ini. Jika Anda menggunakan salah satunya, Anda harus menentukan --cluster-ipv4-cidr untuk mencegah konflik.
        • SERVICES_IP_RANGE: rentang alamat IP dalam notasi CIDR (misalnya, 10.4.0.0/19) atau ukuran subnet mask blok CIDR (untuk contoh, /19). Ini digunakan untuk membuat alamat IP sekunder subnet untuk Layanan.
      • Jika metode penetapan rentang sekunder dikelola pengguna:
        • SECONDARY_RANGE_PODS: nama bisnis yang sudah ada rentang alamat IP sekunder dalam SUBNET_NAME yang ditentukan. GKE menggunakan seluruh rentang alamat IP sekunder subnet untuk Pod di cluster tersebut.
        • SECONDARY_RANGE_SERVICES: nama bisnis yang sudah ada rentang alamat IP sekunder di yang ditentukan.

    Untuk informasi selengkapnya tentang cara membuat cluster, lihat Membuat cluster.

  3. Menetapkan VPC peering antara jaringan konsumen-vpc dan jaringan produsen-vpc sebagai berikut:

    • Untuk menghubungkan jaringan consumer ke produser, jalankan perintah berikut:

      gcloud compute networks peerings create PEERING_NAME \
          --project=consumer_project \
          --network=consumer \
          --peer-network=producer
      
    • Untuk menghubungkan jaringan producer ke konsumen, jalankan perintah berikut:

      gcloud compute networks peerings create PEERING_NAME \
          --project=producer_project \
          --network=producer \
          --peer-network=consumer \
          --no-export-subnet-routes-with-public-ip \
          --import-subnet-routes-with-public-ip
      

    Ganti kode berikut:

    • PEERING_NAME: nama GKE klaster konsumen.
    • CONSUMER_CLUSTER_NAME: nama cluster konsumen GKE.

    Secara default, VPC konsumen mengekspor alamat PUPI. Kapan saat membuat VPC produsen, gunakan argumen berikut untuk mengonfigurasi VPC untuk mengimpor alamat PUPI tetapi tidak mengekspornya:

    --no-export-subnet-routes-with-public-ip
    --import-subnet-routes-with-public-ip
    

Memverifikasi jaringan dan subnetwork

  1. Verifikasi jaringan produsen:

    gcloud compute networks describe producer \
        --project=producer_project
    

    Outputnya mirip dengan hal berikut ini:

    ...
    kind: compute#network
    name: producer
    peerings:
    - autoCreateRoutes: true
      exchangeSubnetRoutes: true
      exportCustomRoutes: false
      exportSubnetRoutesWithPublicIp: false
      importCustomRoutes: false
      importSubnetRoutesWithPublicIp: true
      name: producer-peer-consumer
    …
    
  2. Verifikasi subnetwork produser:

    gcloud compute networks subnets describe producer-subnet \
        --project=producer_project\
        --region=producer_region
    

    Outputnya mirip dengan hal berikut ini:

    ...
    ipCidrRange: 10.128.0.0/24
    kind: compute#subnetwork
    name: producer-subnet
    …
    secondaryIpRanges:
    - ipCidrRange: 172.16.45.0/24
      rangeName: producer-services
    - ipCidrRange: 45.45.45.0/24
      rangeName: producer-pods
    …
    
  3. Verifikasi jaringan konsumen:

    gcloud compute networks subnets describe consumer-subnet \
        --project=consumer_project \
        --region=consumer_region
    

    Outputnya mirip dengan hal berikut ini:

    ...
    kind: compute#network
    name: consumer
    peerings:
    - autoCreateRoutes: true
      exchangeSubnetRoutes: true
      exportCustomRoutes: false
      exportSubnetRoutesWithPublicIp: true
      importCustomRoutes: false
      importSubnetRoutesWithPublicIp: false
      name: consumer-peer-producer
    ...
    
  4. Verifikasi subnetwork konsumen:

    gcloud compute networks describe consumer \
    --project=consumer_project
    

    Outputnya mirip dengan hal berikut ini:

    ...
    ipCidrRange: 10.129.0.0/24
    kind: compute#subnetwork
    name: consumer-subnet
    ...
    secondaryIpRanges:
    - ipCidrRange: 172.16.5.0/24
      rangeName: consumer-services
    - ipCidrRange: 5.5.5.0/24
      rangeName: consumer-pods
    ...
    

Memverifikasi cluster GKE dan resource-nya

  1. Dapatkan kredensial cluster konsumen:

    gcloud container clusters get-credentials consumer-cluster \
        --project=consumer_project \
        --zone=consumer_zone
    

    Outputnya mirip dengan hal berikut ini:

    ...
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for consumer-cluster.
    ...
    
  2. Instal dan verifikasi helloapp.

    Atau, Anda dapat menyimpan manifes berikut sebagai deployment.yaml:

    kubectl apply -f - <<'EOF'
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloweb
      labels:
        app: hello
    spec:
      selector:
        matchLabels:
          app: hello
          tier: web
      template:
        metadata:
          labels:
            app: hello
            tier: web
        spec:
          containers:
          - name: hello-app
            image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
            ports:
            - containerPort: 8080
            resources:
              requests:
                cpu: 200m
    EOF
    
  3. Terapkan deployment.yaml:

    kubectl apply -f
    
  4. Verifikasi deployment helloweb:

    kubectl get deployment helloweb
    

    Outputnya mirip dengan hal berikut ini:

    ...
    NAME       READY   UP-TO-DATE   AVAILABLE   AGE
    helloweb   1/1     1            1           10s
    ...
    

Memverifikasi solusi

  1. Pastikan Anda telah berhasil membuat peering VPC:

    gcloud compute networks peerings list
    

    Outputnya mirip dengan yang berikut ini, yang menunjukkan peering yang diberi nama konsumen dan produsen:

    NAME                                     NETWORK    PEER_PROJECT                PEER_NETWORK                            STACK_TYPE  PEER_MTU  IMPORT_CUSTOM_ROUTES  EXPORT_CUSTOM_ROUTES  STATE   STATE_DETAILS
    consumer-peer-producer                   consumer   <project_name>            producer                                IPV4_ONLY   1460      False                 False                 ACTIVE  [2023-08-07T13:14:57.178-07:00]: Connected.
    producer-peer-consumer                   producer   <project_name>             consumer                                IPV4_ONLY   1460      False                 False                 ACTIVE  [2023-08-07T13:14:57.178-07:00]: Connected.
    
  2. Validasi bahwa VPC konsumen mengekspor rute PUPI:

    gcloud compute networks peerings list-routes consumer-peer-producer \
        --direction=OUTGOING \
        --network=consumer \
        --region=<consumer_region>
    

    Output-nya serupa dengan berikut ini, yang menunjukkan ketiga CIDR konsumen blok:

    DEST_RANGE     TYPE                  NEXT_HOP_REGION  PRIORITY  STATUS
    10.129.0.0/24  SUBNET_PEERING_ROUTE  us-central1      0         accepted by peer
    172.16.5.0/24  SUBNET_PEERING_ROUTE  us-central1      0         accepted by peer
    5.5.5.0/24     SUBNET_PEERING_ROUTE  us-central1      0         accepted by peer
    
  3. Validasi rute PUPI yang diimpor VPC produsen:

    gcloud compute networks peerings list-routes producer-peer-consumer \
        --direction=INCOMING \
        --network=producer \
        --region=<producer_region>
    

    Output-nya serupa dengan berikut ini, yang menunjukkan ketiga CIDR konsumen blok:

    DEST_RANGE     TYPE                  NEXT_HOP_REGION  PRIORITY  STATUS
    10.129.0.0/24  SUBNET_PEERING_ROUTE  us-central1      0         accepted
    172.16.5.0/24  SUBNET_PEERING_ROUTE  us-central1      0         accepted
    5.5.5.0/24     SUBNET_PEERING_ROUTE  us-central1      0         accepted
    
  4. Lakukan validasi bahwa Pod GKE memiliki alamat PUPI:

    kubectl get pod -o wide
    

    Output-nya mirip dengan di bawah ini, yang menunjukkan bahwa alamat IP Pod dalam kisaran 5.5.5/24.

    NAME                        READY   STATUS    RESTARTS   AGE   IP         NODE                                              NOMINATED NODE   READINESS GATES
    helloweb-575d78464d-xfklj   1/1     Running   0          28m   5.5.5.16   gke-consumer-cluster-default-pool-e62b6542-dp5f   <none>           <none>
    

Langkah selanjutnya