Tutorial ini menjelaskan cara mengupload aplikasi container di lingkungan perlengkapan air-gapped Google Distributed Cloud (GDC), dan menjalankan aplikasi tersebut di lingkungan perlengkapan. Anda akan mempelajari cara membuat project Harbor, mengupload image ke Harbor, dan membuat workload sebagai bagian dari tutorial ini. Beban kerja yang di-container berjalan dalam namespace project.
Lingkungan appliance air gap GDC dilengkapi dengan registry Harbor
yang telah dikonfigurasi sebelumnya bernama tear-harbor
untuk Anda di project GDC
bernama tear
. Anda akan menggunakan registri ini dalam contoh ini.
Tutorial ini menggunakan aplikasi server web contoh yang tersedia dari Google Cloud Artifact Registry.
Tujuan
- Kirim image container ke registry Harbor terkelola.
- Deploy aplikasi container contoh ke cluster.
Sebelum memulai
Pastikan Anda memiliki project untuk mengelola deployment dalam container. Buat project jika Anda belum memilikinya.
Tetapkan namespace project Anda sebagai variabel lingkungan:
export NAMESPACE=PROJECT_NAMESPACE
Minta Admin IAM Organisasi Anda untuk memberi Anda peran berikut:
Peran Namespace Admin (
namespace-admin
) untuk namespace project Anda. Peran ini diperlukan untuk men-deploy workload container di project Anda.Peran Harbor Instance Viewer (
harbor-instance-viewer
) untuk namespace project Anda. Peran ini diperlukan untuk melihat dan memilih instance Harbor.Peran Harbor Project Creator (
harbor-project-creator
) untuk namespace project Anda. Peran ini diperlukan untuk mengakses dan mengelola project Harbor.
Login ke cluster Kubernetes dan buat file kubeconfig-nya dengan identitas pengguna. Pastikan Anda menetapkan jalur kubeconfig sebagai variabel lingkungan:
export KUBECONFIG=CLUSTER_KUBECONFIG
Membuat project Harbor di registry
GDC menyediakan Harbor sebagai Layanan, yang merupakan layanan terkelola sepenuhnya yang memungkinkan Anda menyimpan dan mengelola image container menggunakan Harbor.
Untuk menggunakan Harbor sebagai Layanan, Anda harus membuat project Harbor dalam instance registry tear-harbor
untuk mengelola image container Anda:
Anda memerlukan URL
tear-harbor
. Mencantumkan URL instance:gdcloud harbor instances describe tear-harbor --project=tear
Outputnya mirip dengan
harbor-1.org-1.zone1.google.gdc.test
.Tetapkan URL instance sebagai variabel untuk digunakan nanti dalam tutorial:
export INSTANCE_URL=INSTANCE_URL
Sebelum membuat project, Anda harus login ke Harbor menggunakan URL dari langkah sebelumnya. Gunakan browser untuk membuka URL ini dan login ke instance Harbor.
Buat project Harbor:
gdcloud harbor harbor-projects create HARBOR_PROJECT \ --project=tear \ --instance=tear-harbor
Ganti
HARBOR_PROJECT
dengan nama project Harbor yang akan dibuat. Anda tidak dapat membuat project Harbor di namespace project mana pun. Anda harus menggunakan projecttear
.Tetapkan nama project Harbor sebagai variabel untuk digunakan nanti dalam tutorial:
export HARBOR_PROJECT=HARBOR_PROJECT
Konfigurasi Docker
Untuk menggunakan Docker di Harbor registry, selesaikan langkah-langkah berikut:
Mengonfigurasi Docker agar memercayai Harbor sebagai Layanan. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi Docker agar memercayai CA root Harbor.
Mengonfigurasi autentikasi Docker ke Harbor. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi autentikasi Docker ke instance registry Harbor.
Karena
tear-harbor
adalah registry Harbor yang telah dikonfigurasi sebelumnya, Anda harus memercayai sertifikat yang ditandatangani oleh CA internal air-gapped Google Distributed Cloud:Minta IO Anda untuk memberikan informasi berikut:
- URL eksternal cluster Harbor.
- file
.crt
CA internal Google Distributed Cloud dengan air gap. File umumnya disimpan di control plane sebagai secret dengan namatrust-store-internal-only
di namespaceanthos-creds
.
Mirip dengan langkah sebelumnya, buat folder dengan nama URL eksternal cluster Harbor dan simpan file
.crt
di dalam folder.
Buat secret penarikan image Kubernetes
Karena Anda menggunakan project Harbor pribadi, Anda harus membuat secret penarikan image Kubernetes.
Tambahkan akun robot project Harbor. Ikuti langkah-langkah di UI Harbor untuk membuat akun robot dan menyalin token rahasia robot: https://goharbor.io/docs/2.8.0/working-with-projects/project-configuration/create-robot-accounts/#add-a-robot-account.
Catat nama akun project robot baru, yang memiliki sintaksis berikut:
<PREFIX><PROJECT_NAME>+<ACCOUNT_NAME>
Misalnya, format nama akun project robot menyerupai
harbor@library+artifact-account
.Untuk mengetahui informasi selengkapnya tentang cara menemukan nama akun project robot Anda di Harbor, lihat dokumentasi Harbor: https://goharbor.io/docs/2.8.0/working-with-projects/project-configuration/create-robot-accounts/#view-project-robot-accounts.
Login ke Docker dengan akun robot project Harbor dan token rahasia Anda:
docker login ${INSTANCE_URL}
Jika diminta, masukkan nama akun project robot untuk
Username
dan token rahasia untukPassword
.Tetapkan nama arbitrer untuk secret penarikan image:
export SECRET=SECRET
Buat secret yang diperlukan untuk penarikan image:
kubectl create secret docker-registry ${SECRET} \ --from-file=.dockerconfigjson=DOCKER_CONFIG \ -n NAMESPACE
Ganti kode berikut:
DOCKER_CONFIG
: jalur ke file.docker/config.json
.NAMESPACE
: namespace untuk secret yang Anda buat.
Mengirim image container ke managed Harbor registry
Untuk tutorial ini, Anda akan mendownload dan mengirim image server web nginx
ke registry Harbor yang dikelola, dan menggunakannya untuk men-deploy aplikasi server web nginx contoh ke cluster Kubernetes. Aplikasi server web nginx tersedia dari
Artifact Registry Google Cloud publik.
Tarik image
nginx
dari Google Cloud Artifact Registry ke workstation lokal Anda menggunakan jaringan eksternal:docker pull gcr.io/cloud-marketplace/google/nginx:1.25
Tetapkan nama gambar. Format nama image lengkap adalah sebagai berikut:
${INSTANCE_URL}/${HARBOR_PROJECT}/nginx
Beri tag pada image lokal dengan nama repositori:
docker tag gcr.io/cloud-marketplace/google/nginx:1.25 ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25
Kirim image container
nginx
ke managed Harbor registry Anda:docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25
Men-deploy aplikasi container contoh
Sekarang Anda siap men-deploy image container nginx
ke cluster appliance.
Kubernetes merepresentasikan aplikasi sebagai resource Pod
, yaitu unit skalabel yang menampung satu atau beberapa container. Pod adalah unit terkecil yang dapat di-deploy di
Kubernetes. Biasanya, Anda men-deploy pod sebagai serangkaian replika yang dapat diskalakan dan didistribusikan bersama-sama di seluruh cluster. Salah satu cara untuk men-deploy set replika adalah melalui Deployment
Kubernetes.
Di bagian ini, Anda akan membuat Deployment
Kubernetes untuk menjalankan aplikasi container nginx
di cluster Anda. Deployment ini memiliki replika, atau pod. Satu pod Deployment
hanya berisi satu container: image container nginx
. Anda
juga membuat resource Service
yang menyediakan cara stabil bagi klien untuk mengirim
permintaan ke pod Deployment
Anda.
Deploy server web nginx:
Buat dan deploy resource kustom
Deployment
danService
Kubernetes:kubectl --kubeconfig ${KUBECONFIG} -n ${NAMESPACE} \ create -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25 ports: - containerPort: 80 imagePullSecrets: - name: ${SECRET} --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - port: 80 protocol: TCP type: LoadBalancer EOF
Pastikan pod dibuat oleh deployment:
kubectl get pods -l app=nginx -n ${NAMESPACE}
Outputnya mirip dengan hal berikut ini:
NAME READY STATUS RESTARTS AGE nginx-deployment-1882529037-6p4mt 1/1 Running 0 1h nginx-deployment-1882529037-p29za 1/1 Running 0 1h nginx-deployment-1882529037-s0cmt 1/1 Running 0 1h
Buat kebijakan jaringan untuk mengizinkan semua traffic jaringan ke namespace:
kubectl --kubeconfig ${KUBECONFIG} -n ${NAMESPACE} \ create -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: annotations: name: allow-all spec: ingress: - from: - ipBlock: cidr: 0.0.0.0/0 podSelector: {} policyTypes: - Ingress EOF
Ekspor alamat IP untuk layanan
nginx
:export IP=`kubectl --kubeconfig=${KUBECONFIG} get service nginx-service \ -n ${NAMESPACE} -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`
Uji alamat IP server
nginx
menggunakancurl
:curl http://$IP
Langkah berikutnya
- Baca dokumentasi penampung untuk mengetahui informasi tentang cara mengelola penampung.