Login ke Docker dan Helm

Halaman ini menjelaskan cara login ke Docker atau Helm menggunakan helper kredensial Managed Harbor Service (MHS) atau secret CLI.

Untuk memberikan fleksibilitas, Google Distributed Cloud (GDC) air-gapped menyediakan dua metode untuk melakukan autentikasi dengan Docker dan Helm dari instance registry Harbor Anda. Metode pertama adalah menggunakan helper kredensial Managed Harbor Service (MHS) dan identitas GDC Anda untuk login ke Docker atau Helm CLI. Setelah melakukan autentikasi dengan GDC, Anda dapat login ke klien Docker dan melakukan operasi Docker, tanpa harus membuat atau mengelola secret CLI terpisah di Harbor.

Metode kedua adalah menggunakan secret CLI. Setelah Anda melakukan autentikasi menggunakan Identity-Aware Proxy (IAP) dan login ke antarmuka Harbor untuk pertama kalinya, gunakan Docker atau Helm CLI untuk mengakses Harbor. Docker dan Helm CLI tidak dapat menangani pengalihan untuk IAP, sehingga Harbor menyediakan secret CLI untuk digunakan saat login dari Docker atau Helm. Metode ini hanya tersedia saat Harbor menggunakan autentikasi IAP.

Sebelum memulai

Untuk mengonfigurasi autentikasi Docker dan Helm untuk instance registry Harbor, Anda harus menginstal helper kredensial MHS (docker-credential-mhs) di lingkungan Anda. Helper kredensial disertakan secara default dalam paket gdcloud CLI. Untuk mengetahui informasi selengkapnya, lihat Ringkasan gdcloud CLI.

Peran IAM yang diperlukan

Untuk mengonfigurasi autentikasi untuk instance registry Harbor, hubungi Admin IAM Project Anda untuk meminta peran Harbor Instance Viewer (harbor-instance-viewer), yang memungkinkan Anda mendapatkan, membuat daftar, dan memantau instance Harbor di namespace project. Peran ini mencakup izin yang diperlukan untuk melihat detail instance Harbor yang ada sehingga Anda dapat mengambil URL registry untuk autentikasi.

Login ke Docker dengan identitas GDC Anda

Gunakan helper kredensial MHS dengan identitas GDC Anda untuk login ke Docker CLI. Untuk melakukan autentikasi dengan Docker, ikuti langkah-langkah berikut:

  1. Login ke server Management API dengan GDC CLI dengan mengikuti petunjuk di Login.

  2. Konfigurasi Docker untuk menggunakan helper kredensial MHS docker-credential-mhs:

    TENANT_PROJECT=PROJECT_NAME
    HARBOR_INSTANCE_NAME=HARBOR_INSTANCE_NAME
    REGISTRY=$(kubectl get harborinstance $HARBOR_INSTANCE_NAME -n $TENANT_PROJECT -o jsonpath='{.status.url}' | sed s#https://##)
    
    docker-credential-mhs configure-docker --registries=${REGISTRY}
    

    Ganti kode berikut:

  3. Ikuti petunjuk di Mengonfigurasi Docker untuk mempercayai CA root Harbor.

  4. Opsional: Verifikasi bahwa helper kredensial berhasil dikonfigurasi dengan memverifikasi bahwa entri mhs ditambahkan ke ~/.docker/config.json:

    cat DOCKER_CONFIG_PATH
    

    Ganti DOCKER_CONFIG_PATH dengan jalur ke file konfigurasi Docker Anda. Misalnya, ~/.docker/config.json.

    Outputnya mirip dengan hal berikut ini:

    {
        "auths": {
            "10.200.0.1": {
                "auth": "YWRtaW46YWRtaW4="
            },
            "10.200.16.5:10443": {
                "auth": "YWRtaW46ZEROVVJCVWE1a1FBcE4xQQ=="
            }
        },
        "credHelpers": {
            "asia.gcr.io": "gcloud",
            "eu.gcr.io": "gcloud",
            "gcr.io": "gcloud",
            "marketplace.gcr.io": "gcloud",
            "myinstance-e2e-test-user.org-1.zone1.google.gdch.test": "mhs",
            "staging-k8s.gcr.io": "gcloud",
            "us-central1-docker.pkg.dev": "gcloud",
            "us.gcr.io": "gcloud"
        }
    }
    

    Contoh ini menunjukkan output yang berhasil dari "myinstance-e2e-test-user.org-1.zone1.google.gdch.test": "mhs".

  5. Konfigurasi project tenant di gdcloud:

    TENANT_PROJECT=PROJECT_NAME
    gdcloud config set project $TENANT_PROJECT
    

    Output berikut ditampilkan:

    Updated property [core/project].
    
  6. Identifikasi project Harbor yang memiliki akses pengelolaan. Buat project Harbor jika belum ada.

  7. Lakukan operasi Docker, seperti push atau pull image:

    TENANT_PROJECT=PROJECT_NAME
    HARBOR_INSTANCE_NAME=HARBOR_INSTANCE_NAME
    REGISTRY=$(kubectl get harborinstance $HARBOR_INSTANCE_NAME -n $TENANT_PROJECT -o jsonpath='{.status.url}' | sed s#https://##)
    HARBOR_PROJECT=HARBOR_PROJECT_NAME
    
    # Push image
    docker pull nginx
    docker tag nginx ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest
    docker push ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest
    
    # Pull image
    docker pull ${REGISTRY}/${HARBOR_PROJECT}/nginx:latest
    

    Output yang berhasil akan tampak seperti berikut ini:

    # Push image
    root@gpc-adhoc-70846130vm-bootstrapper-zone1:~# docker push ${REGISTRY}/harbor-project/nginx:latest
    The push refers to repository [myinstance-e2e-test-user.org-1.zone1.google.gdch.test/harbor-project/nginx]
    e4e9e9ad93c2: Pushed
    6ac729401225: Pushed
    8ce189049cb5: Pushed
    296af1bd2844: Pushed
    63d7ce983cd5: Pushed
    b33db0c3c3a8: Pushed
    98b5f35ea9d3: Pushed
    latest: digest: sha256:7ba542bde95e6523a4b126f610553e3657b8108bc3175596ee7e911ae1219bfc size: 1778
    
    # Pull image
    root@gpc-adhoc-70846130vm-bootstrapper-zone1:~# docker pull ${REGISTRY}/library/nginx:latest
    latest: Pulling from library/nginx
    Digest: sha256:7ba542bde95e6523a4b126f610553e3657b8108bc3175596ee7e911ae1219bfc
    Status: Image is up to date for myinstance-e2e-test-user.org-1.zone1.google.gdch.test/harbor-project/nginx:latest
    

    Jika operasi gagal, Anda mungkin melihat output berikut:

    E1025 19:21:39.322290 1273587 get.go:24] failed to get user name: user is not logged in or login expired, please login again
    

    Dalam contoh ini, sesi autentikasi GDC telah berakhir dan Anda harus login ke GDC lagi. Untuk mengetahui informasi selengkapnya, lihat Login.

Login ke Helm dengan identitas GDC Anda

Gunakan helper kredensial MHS dengan identitas GDC Anda untuk login ke Helm CLI.

Untuk melakukan autentikasi dengan Helm, ikuti langkah-langkah berikut:

  1. Setelah melakukan autentikasi dengan GDC, ambil kredensial pengguna Anda dari helper kredensial:

    echo $REGISTRY | docker-credential-mhs get
    

    Outputnya mirip dengan hal berikut ini:

    {"Username":"tokenreview$fop-infrastructure-operator@example.com","Secret":"STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw"}
    
  2. Login ke Helm CLI dengan kredensial. Saat diminta untuk memasukkan kredensial, gunakan kredensial yang ditampilkan oleh helper kredensial.

    helm registry login $REGISTRY
    Username: tokenreview$fop-infrastructure-operator@example.com
    Password: STS-Bearer-3q2o6mBKk44Gzi4105vyiSnXMuixtnm-RnyxSgJtnYkNbGV7drpwgIuftinAXVlo0Im9kgoGmc2WcZTSjE-vh2a71Su7YjB6qIAjAQ5ABkY03AHNfkHhRZzxthumDIVAd08wm2weit3_NpMPgOnf9qMblds_Q0PAWk2OhpodBpCfyl3LWZpIZBaNVgtg-TB_7fjpEDOm-_Q5VYABScOgZFP_bw
    

    Output yang berhasil untuk operasi ini akan terlihat seperti berikut:

    Login Succeeded
    

Login ke Docker atau Helm dengan secret CLI

Untuk login ke Docker atau Helm dengan secret CLI, ikuti langkah-langkah berikut:

  1. Login ke Harbor dengan akun pengguna IAP.
  2. Klik nama pengguna Anda, lalu pilih User Profile.
  3. Untuk menyalin secret CLI yang terkait dengan akun Anda, klik Salin.
  4. Opsional: Untuk menampilkan tombol guna membuat secret CLI baru secara otomatis atau manual, klik elipsis di profil pengguna Anda.

  5. Jika Anda membuat secret CLI baru, klik Copy untuk menyalinnya.

  6. Sekarang Anda dapat menggunakan secret CLI sebagai sandi saat login ke Harbor dari Docker atau Helm CLI:

    docker login -u USERNAME -p CLI_SECRET HARBOR_INSTANCE_URL

Ganti kode berikut:

  • USERNAME: nama pengguna akun Harbor
  • CLI_SECRET: secret CLI yang dibuat.
  • HARBOR_INSTANCE_URL: URL instance Harbor.

Langkah berikutnya

Setelah login ke Docker dan Helm, registry Anda akan terhubung sepenuhnya dan Anda dapat mulai menggunakannya: