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 managed Harbor registry.
- 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_NAMESPACEMinta 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=tearOutputnya mirip dengan
harbor-1.org-1.zone1.google.gdc.test.Tetapkan URL instance sebagai variabel untuk digunakan nanti dalam tutorial:
export INSTANCE_URL=INSTANCE_URLSebelum 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-harborGanti
HARBOR_PROJECTdengan 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-harboradalah registry Harbor yang telah dikonfigurasi sebelumnya, Anda harus memercayai sertifikat yang ditandatangani oleh CA internal Google Distributed Cloud yang terisolasi:Minta IO Anda untuk memberikan informasi berikut:
- URL eksternal cluster Harbor.
- file
.crtCA internal Google Distributed Cloud dengan air gap. File umumnya disimpan di control plane sebagai secret dengan namatrust-store-internal-onlydi namespaceanthos-creds.
Mirip dengan langkah sebelumnya, buat folder dengan nama URL eksternal cluster Harbor dan simpan file
.crtdi 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 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
Usernamedan token rahasia untukPassword.Tetapkan nama arbitrer untuk secret penarikan image:
export SECRET=SECRETBuat secret yang diperlukan untuk penarikan image:
kubectl create secret docker-registry ${SECRET} \ --from-file=.dockerconfigjson=DOCKER_CONFIG \ -n NAMESPACEGanti kode berikut:
DOCKER_CONFIG: jalur ke file.docker/config.json.NAMESPACE: namespace untuk secret yang Anda buat.
Mengirim image container ke registry Harbor terkelola
Untuk tutorial ini, Anda akan mendownload dan mengirim image server web nginx ke registry Harbor terkelola, 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
nginxdari Google Cloud Artifact Registry ke workstation lokal Anda menggunakan jaringan eksternal:docker pull gcr.io/cloud-marketplace/google/nginx:1.25Tetapkan nama gambar. Format nama image lengkap adalah sebagai berikut:
${INSTANCE_URL}/${HARBOR_PROJECT}/nginxBeri tag pada image lokal dengan nama repositori:
docker tag gcr.io/cloud-marketplace/google/nginx:1.25 ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25Kirim image container
nginxke 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
DeploymentdanServiceKubernetes: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 EOFPastikan 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 1hBuat 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 EOFEkspor 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
nginxmenggunakancurl:curl http://$IP
Langkah berikutnya
- Baca dokumentasi penampung untuk mengetahui informasi tentang cara mengelola penampung.