Mengakses resource di JFrog Artifactory pribadi dengan kumpulan pribadi


Halaman ini menunjukkan cara menggunakan kumpulan pribadi Cloud Build untuk mengakses resource dari jaringan Virtual Private Cloud pribadi.

Dalam tutorial ini, Anda akan membuat JFrog Artifactory di Compute Engine yang dihosting di jaringan VPC pribadi, lalu mengonfigurasi build yang berjalan di kumpulan pribadi untuk mengakses data dari Artifactory tersebut. Jfrog Artifactory adalah pengelola repositori biner {i>open source<i}.

Tujuan

  • Menyiapkan Jfrog Artifactory di Compute Engine
  • Mengupload file ke Artifactory
  • Buat kolam renang pribadi
  • Lakukan peering jaringan produsen layanan yang menghosting kumpulan pribadi ke jaringan Virtual Private Cloud Artifactory
  • Tulis file konfigurasi build untuk mengakses data di Artifactory

Biaya

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

  • Compute Engine
  • Cloud Build

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Aktifkan API Compute Engine, Cloud Build, Service Networking.

    Mengaktifkan API

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  7. Aktifkan API Compute Engine, Cloud Build, Service Networking.

    Mengaktifkan API

Opsi A: Menggunakan Cloud Shell

Anda dapat mengikuti tutorial ini menggunakan Cloud Shell, yang telah dilengkapi dengan Google Cloud CLI yang digunakan dalam tutorial ini. Jika menggunakan Cloud Shell, Anda tidak perlu menginstal alat command line ini di workstation.

Untuk menggunakan Cloud Shell:

  1. Buka Konsol Google Cloud.

    Konsol Google Cloud

  2. Klik tombol Activate Cloud Shell Tombol Activate Shell di bagian atas jendela Konsol Google Cloud.

    Sesi Cloud Shell akan terbuka di dalam frame baru di bagian bawah Konsol Google Cloud dan menampilkan prompt command line.

    Sesi Cloud Shell

Opsi B: Menggunakan alat command line secara lokal

Jika Anda ingin mengikuti tutorial ini di workstation Anda, ikuti langkah-langkah berikut untuk menginstal alat yang diperlukan.

  1. Menginstal Google Cloud CLI.

Membuat Artifactory pribadi

  1. Buat instance Compute Engine dari container:

    gcloud compute instances create-with-container jfrog \
    --container-image docker.bintray.io/jfrog/artifactory-jcr:latest \
    --zone us-central1-a
    
  2. Gunakan SSH ke instance. Mungkin perlu waktu beberapa menit untuk melakukan inisialisasi container.

    gcloud compute ssh --zone us-central1-a jfrog
    
  3. Uji koneksi dengan menjalankan perintah berikut. Setelah penampung siap, penampung akan merespons dengan kode HTTP 200, yang diikuti dengan halaman HTML.

    curl -i http://localhost:8081
    
  4. Untuk membuat repositori di Artifactory, Anda harus menandatangani PLPA (Perjanjian Lisensi Pengguna Akhir) JFrog:

    curl -XPOST -vu admin:password http://localhost:8081/artifactory/ui/jcr/eula/accept
    

    Anda akan melihat output mirip seperti berikut ini:

        *   Trying 127.0.0.1:8081...
        * Connected to localhost (127.0.0.1) port 8081 (#0)
        * Server auth using Basic with user 'admin'
        > POST /artifactory/ui/jcr/eula/accept HTTP/1.1
        > Host: localhost:8081
        > Authorization: Basic ….
        > User-Agent: curl/7.74.0
        > Accept: */*
        >
        * Mark bundle as not supporting multiuse
        < HTTP/1.1 200 OK
        < X-JFrog-Version: Artifactory/7.19.9 71909900
        < X-Artifactory-Id: ….
        < X-Artifactory-Node-Id: jfrog2
        < SessionValid: false
        < Content-Length: 0
        < Date: Fri, 25 Jun 2021 19:08:10 GMT
    
        * Connection #0 to host localhost left intact
    

Mengupload file ke Artifactory

  1. Buat file txt untuk diupload ke Artifactory:

    echo "Hello world" >> helloworld.txt
    
  2. JFrog dilengkapi dengan repositori contoh default. Upload ke repositori menggunakan kredensial default:

    curl -u admin:password -X PUT \
    "http://localhost:8081/artifactory/example-repo-local/helloworld.txt" \
    -T helloworld.txt
    

    Tindakan ini akan menampilkan:

        {
        "repo" : "example-repo-local",
        "path" : "/helloworld.txt",
        "created" : "2021-06-25T19:08:24.176Z",
        "createdBy" : "admin",
        "downloadUri" : "http://localhost:8081/artifactory/example-repo-local/helloworld.txt",
        "mimeType" : "text/plain",
        "size" : "12",
        "checksums" : {
          "sha1" : "...",
          "md5" : "...",
          "sha256" : "..."
        },
        "originalChecksums" : {
          "sha256" : "..."
        },
        "uri" : "http://localhost:8081/artifactory/example-repo-local/helloworld.txt"
        }
    
  3. Akhiri sesi SSH dengan mengetik exit.

  4. Hapus alamat IP eksternal, sehingga Artifactory hanya dapat diakses dari sumber internal pribadi.

    gcloud compute instances delete-access-config --zone us-central1-a jfrog
    

Coba akses data dari Artifactory

  1. Tetapkan variabel lingkungan untuk menyimpan project ID dan nomor project Anda:

    PROJECT_ID=$(gcloud config list --format='value(core.project)')
    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
    
  2. Beri peran Compute Engine Viewer ke akun layanan Cloud Build agar dapat melihat alamat IP internal untuk instance JFrog Anda:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
        --role=roles/compute.viewer
    
  3. Buat file bernama cloudbuild.yaml yang berisi kode berikut untuk dibaca dari Artifactory. File ini adalah file konfigurasi build.

    Langkah pertama adalah mengambil alamat IP internal dari Artifactory yang Anda buat. Langkah kedua mengirimkan permintaan ke alamat tersebut untuk membaca file .txt yang Anda buat. Langkah-langkah ini dipisahkan untuk memudahkan isolasi izin dan error jaringan. Jika langkah pertama gagal, ini disebabkan oleh error izin dan Anda harus memastikan bahwa akun layanan Cloud Build memiliki akses ke resource Compute Engine, seperti yang ditunjukkan di atas. Jika langkah kedua gagal, ini karena kesalahan jaringan. Bagian selanjutnya dari tutorial ini akan membahas konfigurasi jaringan.

    steps:
      - id: Get Private Artifactory Address
        name: gcr.io/cloud-builders/gcloud
        entrypoint: /bin/bash
        args:
          - -c
          - |
            gcloud compute instances describe jfrog \
            --zone us-central1-a \
            --format="value(networkInterfaces.networkIP)" >> _INTERNAL_IP_ADDRESS
    
      - id: Pull from Private Artifactory
        name: gcr.io/cloud-builders/curl
        entrypoint: /bin/bash
        args:
          - -c
          - |
            curl -u admin:password --connect-timeout 10.00 \
            http://$(cat _INTERNAL_IP_ADDRESS):8081/artifactory/example-repo-local/helloworld.txt
  4. Memulai build menggunakan file konfigurasi build.

    Secara default, saat Anda menjalankan build di Cloud Build, build tersebut berjalan di lingkungan terhosting dan aman dengan akses ke internet publik. Setiap build berjalan pada pekerjanya sendiri dan terisolasi dari beban kerja lain. Kumpulan default memiliki batas seberapa banyak Anda dapat menyesuaikan lingkungan, terutama seputar akses jaringan pribadi. Dalam contoh ini, Anda mencoba mengakses jaringan pribadi dari pekerja publik.

    Jalankan cloudbuild.yaml dengan perintah berikut. Seharusnya tindakan tersebut gagal.

    gcloud builds submit --no-source
    

    Outputnya akan terlihat seperti ini:

    BUILD
    Starting Step #0 - "Get Private Artifactory Address"
    Step #0 - "Get Private Artifactory Address": Already have image (with digest): gcr.io/cloud-builders/gcloud
    Finished Step #0 - "Get Private Artifactory Address"
    Starting Step #1 - "Pull from Private Artifactory"
    Step #1 - "Pull from Private Artifactory": Already have image (with digest): gcr.io/cloud-builders/curl
    Step #1 - "Pull from Private Artifactory":   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
    Step #1 - "Pull from Private Artifactory":                                  Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:--  0:02:09 --:--:--     0curl: (7) Failed to connect to 10.128.0.2 port 8081: Connection timed out
    Finished Step #1 - "Pull from Private Artifactory"
    ERROR
    ERROR: build step 1 "gcr.io/cloud-builders/curl" failed: step exited with non-zero status: 7
    

    Anda dapat melihat dari waktu tunggu koneksi bahwa Cloud Build tidak dapat menjangkau alamat IP internal. Untuk mengakses resource pribadi ini, Anda harus menggunakan Kumpulan Pribadi Cloud Build.

Membuat koneksi pribadi antara jaringan VPC Artifactory dan jaringan produsen layanan

  1. Pertama, pastikan jaringan VPC Anda mengizinkan traffic masuk. Buat aturan firewall untuk mengizinkan traffic internal masuk ke jaringan dengan instance jfrog. Rentang 10.0.0.0/16 berada dalam ruang alamat pribadi, yang akan Anda gunakan untuk kumpulan pribadi Cloud Build dalam langkah-langkah di bawah.

    gcloud compute firewall-rules create allow-private-pools --direction=INGRESS \
    --priority=1000 --network=default --action=ALLOW --rules=all --source-ranges=10.0.0.0/16
    
  2. Buat rentang yang dicadangkan untuk kumpulan pribadi Cloud Build agar dapat digunakan oleh pekerja. Rentang yang dicadangkan harus berada di jaringan tempat Artifactory berada. Dalam hal ini, jaringan tersebut adalah jaringan komputasi default.

    Anda memiliki dua opsi saat menetapkan rentang yang dicadangkan. Anda dapat menentukan rentang secara eksplisit dengan menyediakan --addresses dan --prefix-length, atau mengizinkan Google Cloud untuk menyediakan rentang yang tersedia berdasarkan prefix-length yang disediakan.

    Pada contoh di bawah, Anda secara eksplisit menetapkan alamat agar cocok dengan aturan firewall yang Anda buat. Kumpulan pribadi akan menggunakan ruang alamat ini dan traffic masuk tidak akan diblokir.

    gcloud compute addresses create jfrog-ranges --global --purpose=VPC_PEERING \
    --addresses=10.0.0.0 --prefix-length=16 --network=default
    
  3. Lakukan peering jaringan VPC dengan Service Networking API.

    Kumpulan pribadi Cloud Build menjalankan pekerja menggunakan Service Networking API. Hal ini memungkinkan Anda menawarkan layanan terkelola di alamat IP internal. Hal ini dilakukan dengan melakukan peering VPC yang dikelola Google yang menjalankan worker kumpulan pribadi Cloud Build dengan VPC Anda sendiri. Mungkin perlu waktu beberapa menit untuk menyelesaikan prosesnya.

    gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com \
    --ranges=jfrog-ranges --network=default
    

Buat kolam renang pribadi

  1. Jaringan VPC default kini siap digunakan dengan kumpulan pribadi Cloud Build. Buat kumpulan pribadi dan peer-nya dengan jaringan VPC.

     gcloud builds worker-pools create jfrog-pool --region us-central1 \
     --peered-network=projects/${PROJECT_ID}/global/networks/default
    
  2. Untuk menjalankan build dengan pool pribadi yang baru, Anda dapat meneruskan flag --worker-pool dengan perintah gcloud atau memperbarui konfigurasi cloudbuild.yaml untuk memastikannya selalu menggunakan kumpulan pribadi. Untuk tutorial ini, update cloudbuild.yaml dengan menambahkan opsi berikut:

    options:
      pool:
        name: 'projects/${PROJECT_ID}/locations/us-central1/workerPools/jfrog-pool'
  3. File lengkapnya akan terlihat seperti berikut:

    steps:
      - id: Get Private Artifactory Address
        name: gcr.io/cloud-builders/gcloud
        entrypoint: /bin/bash
        args:
          - -c
          - |
            gcloud compute instances describe jfrog \
            --zone us-central1-a \
            --format="value(networkInterfaces.networkIP)" >> _INTERNAL_IP_ADDRESS
    
      - id: Pull from Private Artifactory
        name: gcr.io/cloud-builders/curl
        entrypoint: /bin/bash
        args:
          - -c
          - |
            curl -u admin:password --connect-timeout 10.00 \
            http://$(cat _INTERNAL_IP_ADDRESS):8081/artifactory/example-repo-local/helloworld.txt
    
    options:
      pool:
        name: 'projects/${PROJECT_ID}/locations/us-central1/workerPools/jfrog-pool'
  4. Mulai build:

     gcloud builds submit --no-source
    
  5. Build akan menggunakan kumpulan pribadi baru, yang di-peering dengan jaringan VPC, sehingga dapat mengakses alamat IP internal Artifactory. Outputnya akan berhasil dan Step #1 akan mencetak "Hello world".

Pembersihan

Agar tidak dikenakan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource-nya.

Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang ada dan ingin mempertahankannya tanpa ada perubahan yang ditambahkan dalam tutorial ini, hapus resource yang dibuat untuk tutorial.

Menghapus project

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

Untuk menghapus project:

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus resource tutorial

  1. Hapus layanan Compute Engine yang Anda deploy dalam tutorial ini:

     gcloud compute instances delete jfrog
    
  2. Hapus aturan firewall:

     gcloud compute firewall-rules delete allow-private-pools --network=default
    
  3. Hapus rentang yang dicadangkan:

     gcloud compute addresses delete jfrog-ranges --global
    
  4. Hapus kumpulan pribadi Cloud Build:

     gcloud builds worker-pools delete jfrog-pool
    

Langkah selanjutnya