1. Genel Bakış
Gizli Alan (CS), hassas verileri işlemek için güvenli, onaylı ve şifrelenmiş bir ortam sağlar. Bağımsız sanal makine örneklerine güvenmek, operasyonel ek yük oluşturur. Bunun nedeni, manuel düzenlemenin görev açısından kritik hizmetler için gereken ölçeklenebilirliğe sahip olmamasıdır. Otomatik düzenleme olmadan, eşzamanlı olarak kademeli güncellemeler yapmak veya bir filoya yeni işletim sistemi görüntüleri dağıtmak teknik olarak zorlaşır ve hizmet dışı kalma süresine yol açabilir.
Bu codelab'de, Confidential Space iş yükünü yönetilen örnek grubuna (MIG) nasıl dağıtacağınızı öğreneceksiniz. Ayrıca, durum denetimlerini kullanarak otomatik iyileştirmeyi, CPU kullanımına göre otomatik ölçeklendirmeyi ve hem işletim sistemi görüntüleri hem de iş yükleri için kademeli güncellemeleri nasıl etkinleştireceğinizi de öğreneceksiniz.
Bu codelab'de gösterilen işlemler, görev açısından kritik öneme sahip ve uzun süreli dağıtımlar için üretime hazır ve güvenli bir Confidential Space oluşturmanıza yardımcı olmalıdır.
Neler öğreneceksiniz?
- Confidential Space için özel bir örnek şablonu oluşturma
- Google Compute Engine'i kullanma ve MIG'leri ve örnek gruplarını yapılandırma
- Otomatik iyileştirme için güvenlik duvarı kuralı ve durum denetimi oluşturma
- Şablon ve durum denetimi ile bölgesel bir MIG'yi yapılandırma
- Yönetilen örnek grubu için otomatik ölçeklendirmeyi ayarlama
- Hem iş yükü görüntüleri hem de Confidential Space için yeni işletim sistemi görüntüsü sürümleri için MIG'lerde komut dosyası oluşturma kullanarak tek tıklamayla işletim sistemi görüntüsü güncellemelerini ayarlama
Gerekenler
- Faturalandırmanın etkin olduğu bir Google Cloud projesi.
- Metin düzenleyiciler, Docker dağıtımları ve Bash komut dosyası oluşturma hakkında bilgi sahibi olma
- gcloud komut satırı aracı yüklenmiş ve kimliği doğrulanmış olmalıdır.
- Compute Engine, Confidential Space, IAM, Gizli Sanal Makineler, container teknolojisi, uzak depolar, hizmet hesapları, Cloud Run ve Cloud Scheduler hakkında temel düzeyde bilgi sahibi olma
- Gizli Alan iş yükü container görüntüsü, Artifact Registry'ye önceden oluşturulmuş ve aktarılmış olmalıdır.
2. MIG'lerle Confidential Space'in işleyiş şekli
Gizli Alan iş yükünü dağıtmak için yönetilen örnek grubu (MIG) kullanmak, güvenli bir uygulamayı daha sağlam, ölçeklenebilir ve çalıştırması daha kolay hale getirir.
Bir üretim hizmetinin güvenlik ve operasyonel ihtiyaçları, mantıksal olarak iki bileşen arasında bölünür. Confidential Space, iş yükünü güvenilir yürütme ortamı (TEE) adı verilen yüksek düzeyde izole edilmiş, şifrelenmiş ve onaylanmış bir ortamda çalıştırarak gerekli güvenliği sağlar. Buna karşılık MIG'ler, Kubernetes'e benzer şekilde güvenli uygulamayı ölçekli olarak çalıştırmak için gereken temel operasyonel özellikleri sağlar. MIG'ler, iş açısından kritik bir iş yükünü tek bir sanal makinede çalıştırmanın doğasında olan riskleri ortadan kaldırır. Bu riskler, sanal makinenin yavaş olması veya arızaya yatkın olmasıyla ilgilidir. Bu kombinasyon, hem veri korumasını hem de sistem güvenilirliğini sağlar. Bu çözüm, iş yükü bir havuzdaki birden fazla sanal makinede çalıştığı için yüksek kullanılabilirlik ve otomatik iyileştirme sağlar. Bir sanal makine çökerse yük dengeleme ve kalan örneklerin varlığı nedeniyle hizmet tamamen işlevsel kalır.
Ayrıca MIG'ler, sanal makinelerin operasyonel durumunu sürekli olarak izlemek için yapılandırılabilir durum denetimleri kullanır. Bir örneğin iyi durumda olmadığı tespit edilirse MIG, bu örneği otomatik olarak yeni ve iyi durumda olan bir sanal makineyle değiştirerek kesintisiz çalışmayı garanti eder.
MIG'ler, otomatik ölçeklendirme özelliği sayesinde kullanıcılar için etkili ölçeklenebilirlik de sağlar. Bu özellik, kapasiteyi manuel müdahale olmadan otomatik olarak yönetmenin bir yolunu sunar ve kullanıma göre kapasiteyi esnek bir şekilde ekleme veya kaldırma ihtiyacını karşılar.
Son olarak, MIG'ler periyodik güncellemeler aracılığıyla sıfır kapalı kalma süresiyle güncellemeler yapılmasına olanak tanır. Temel avantajlardan biri, temel Confidential Space OS görüntüsünün veya uygulamanın kapsayıcı görüntüsünün (ya da her ikisinin) "tek tıklamayla yükseltilebilmesidir". Bu işlem, hizmette kesinti yaşanmasına neden olmaz. MIG, bu değişikliği eski örnekleri güncellenmiş görüntüyü çalıştıran daha yeni örneklerle kademeli olarak değiştirerek yönetir ve dağıtım boyunca sürekli kullanılabilirlik sağlar. Bu tür bir kademeli yükseltmeyi desteklemek için uygulamanızın geriye dönük uyumlu olması gerekebileceğini unutmayın.
3. Bulut Kaynaklarını Ayarlama
Başlamadan önce
- Google Cloud projesi oluşturun. Google Cloud projesi oluşturma hakkında daha fazla bilgi için lütfen "İlk Google projenizi oluşturma ve projede gezinme" başlıklı codelab'i inceleyin. Proje kimliğinin nasıl alınacağı ve proje adı ile proje numarasından nasıl farklı olduğu hakkında ayrıntılı bilgi edinmek için Proje oluşturma ve yönetme başlıklı makaleyi inceleyebilirsiniz.
- Projeleriniz için Faturalandırmayı etkinleştirin.
- Google projenizin Cloud Shell'lerinden birinde, gerekli proje ortam değişkenlerini aşağıda gösterildiği gibi ayarlayın.
export CURRENT_PROJECT_ID=<Google Cloud project id of current project>
- Projeniz için Gizli Bilişim API'sini ve aşağıdaki API'leri etkinleştirin.
gcloud config set project $CURRENT_PROJECT_ID
gcloud services enable \
cloudapis.googleapis.com \
container.googleapis.com \
artifactregistry.googleapis.com \
confidentialcomputing.googleapis.com \
compute.googleapis.com \
logging.googleapis.com \
run.googleapis.com \
cloudscheduler.googleapis.com
- Google Cloud projenizin Cloud Shell'inde Confidential Space Codelab GitHub deposunu klonlayın ve bu codelab'i tamamlamak için gereken uygun komut dosyalarını almak üzere aşağıdaki komutu kullanın.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- Dizini, örnek grup codelab'i için komut dosyaları dizinine değiştirin.
cd confidential-space/codelabs/mig_cs_codelab/scripts
- config_env.sh dosyasındaki proje kimliği satırını, seçtiğiniz projeyi yansıtacak şekilde güncelleyin.
- Önceden var olan değişkenleri ayarlayın. Bu değişkenleri kullanarak kaynak adlarını geçersiz kılma
- Aşağıdaki değişkenleri mevcut bulut kaynağı adlarıyla ayarlayabilirsiniz. Değişken ayarlanırsa projeden mevcut ilgili bulut kaynakları kullanılır. Ayarlanmamışsa bulut kaynağı adı config_env.sh komut dosyasından alınır.
- Bu proje için kalan değişken adlarını kaynak adları için proje kimliğine dayalı değerlere ayarlamak üzere config_env.sh komut dosyasını çalıştırın.
source config_env.sh
- Projeye izin ekleyin. İzinler, IAM rolü verme web sayfasındaki ayrıntılar izlenerek eklenebilir.
Bu proje için aşağıdaki izinlere ihtiyacınız vardır:
- Artifact Registry Yazıcı
- Bulut Planlayıcısı Yöneticisi
- Compute Hizmet Aracısı
- Gizli Bilişim İş Yükü Kullanıcısı
- Günlük Yazıcı
- Cloud Run Geliştiricisi
- Cloud Run Çağırıcısı
gcloud config set project $CURRENT_PROJECT_ID
# Add Artifact Registry Writer role
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/artifactregistry.writer'
# Add Confidential Space Workload Userd
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/confidentialcomputing.workloadUser'
# Add Logging Log Writer
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/logging.logWriter'
# Add Cloud Run Developer
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/run.developer'
# Add Cloud Run Invoker
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/run.invoker'
# Add Cloud Scheduler Admin
gcloud projects add-iam-policy-binding $CURRENT_PROJECT_ID --member="serviceAccount:${CURRENT_WORKLOAD_SERVICE_ACCOUNT}" --role='roles/cloudscheduler.admin'
- test_workload.py dosyasına bakın.
- Kaynak kodunu inceleyerek iş yükünün çıkışını doğrulayın. Çıkışta yalnızca iş yükünün mevcut sürümü yazdırılmalıdır.
- İş yükümüzü ilk kez CS'ye gönderip çıktıyı kontrol ettiğimizde "A sürümü" çıktısını görmemiz gerekir.
4. İş yükü ayarlama
Öncelikle bu codelab'de kullanılan iş yükü için bir Docker görüntüsü oluşturmanız gerekir. İş yükü, şu anda çalıştırdığınız iş yükünün sürümünü yazdıran basit bir komut dosyasıdır. İş yükünün başladığı, ardından iş yükünün sürümü yazdırılır, 5 saniye beklenir ve iş yükünün tamamlandığı yazdırılır.
İş yükü oluşturma adımları
- İş yükünü oluşturmak için create_workload.sh dosyasını çalıştırın. Bu komut dosyası:
- İş yükünün yayınlanacağı projenin sahip olduğu Artifact Registry'yi oluşturur.
- Kodu oluşturur ve bir Docker görüntüsünde paketler. Daha fazla bilgi için ilişkili Dockerfile yapılandırmasına bakın.
- Docker görüntüsünü, projeye ait Artifact Registry'ye yayınlar.
- <your service account name> hizmet hesabına, <artifact registry repo name> adlı Artifact Registry için okuma izni verir.
5. Örnek şablonu ve MIG oluşturma
Örnek Şablonu Oluşturma Adımları
Öncelikle bir örnek şablonu oluşturmanız gerekir. Bu şablon, yönetilen örnek grubunun (MIG) Confidential Space'te iş yüklerinizi sağlamak ve çalıştırmak için kullanacağı gerekli planı oluşturur.
Örnek şablon, tüm özel parametreleri tanımladığı için çok önemlidir:
- Makine Türü: Bu örnekte, AMD SEV gizli bilgi işlem teknolojisini (
--confidential-compute-type=SEV) destekleyen bir Gizli Sanal Makine makine türü (ör.n2d-standard-2) kullanıyoruz. - Sanal makine işletim sistemi görüntüsü: En yeni Confidential Space işletim sistemi görüntüsünü çekmek için
confidential-space-imagesprojesini veconfidential-space-debuggörüntü ailesini kullanırız. - Not: Bu kılavuzda, sorun gidermeyi kolaylaştırmak için hata ayıklama resmini kullanıyoruz. Üretim görüntüsünden farklı olarak hata ayıklama sürümü, iş yükünüz tamamlandıktan sonra sanal makinenin çalışmaya devam etmesini sağlar ve test için SSH erişimine izin verir. Gerçek dünyadaki hassas verilerin kullanıldığı üretim dağıtımlarında üretim resmi ailesine geçmeniz gerekir.
- İş Yükü Referansı: Meta verilerdeki gerekli
tee-image-referencesatırında, Confidential Space VM'nin başlatacağı belirli container görüntüsü (uygulama iş yükünüz) bulunur.
Bu kurulum, MIG tarafından oluşturulan her sanal makinenin, iş yükünüzü yürütmeye hazır, düzgün şekilde yapılandırılmış bir Gizli Alan olmasını sağlar.
Yönetilen örnek grubu oluşturma adımları
Bir sonraki adım, az önce tanımladığınız şablonu kullanarak yönetilen örnek grubu (MIG) oluşturmaktır. MIG, birden fazla özdeş sanal makinenin dağıtımını, yönetimini ve ölçeklendirilmesini otomatik hale getirdiği için önemlidir.
create_launch_mig.sh komut dosyası üç temel hedefi gerçekleştirir:
1. MIG'yi oluşturma
- Komut:
gcloud compute instance-groups managed create ${CURRENT_MIG_NAME} - Amaç: Bu komut, sanal makinelerinizi yönetecek grubu oluşturur.
--size 3: MIG'nin başlangıçta iş yükünüzün 3 örneğini oluşturup sürdürmesi gerektiğini belirtir.--template ${TEMPLATE_NAME}: Önemli olarak, daha önce oluşturulan örnek şablonuna referans verir. Böylece 3 örneğin tamamı, belirlitee-image-referenceiş yükü kapsayıcınızı çalıştıran Confidential Space sanal makineleri olarak yapılandırılır.--zone ${CURRENT_PROJECT_ZONE}: Örneklerin dağıtım konumunu belirtir.
2. Proje Numarasını Getirme
- Komut:
PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)") - Amaç: Komut dosyası, projenizin sayısal kimliğini getirir. Bu numara genellikle hizmet hesabı rolleri ve izinleri oluşturmak için (özellikle Google tarafından yönetilen hizmet aracıları için) gereklidir.
3. IAM İzinleri Verme
- Komut:
gcloud projects add-iam-policy-binding --role="roles/compute.serviceAgent" - Amaç: Bu adım, iş yükünüzün hizmet hesabına (
${SERVICE_ACCOUNT) Compute Engine Hizmet Aracısı rolünü verir. Bu izin, hizmet hesabının proje adına Compute Engine hizmetiyle işlem yapmasına olanak tanıdığı için önemlidir. Bu işlem, genellikle örnekleri yönetme, ağ oluşturma ve diğer Google Cloud hizmetleriyle etkileşim kurma gibi MIG'nin otomatik özellikleri için gereklidir.
Yönetilen örnek grubunu oluşturmak için create_launch_mig.sh komutunu çalıştırın.
6. Otomatik iyileştirme ve otomatik ölçeklendirmeyi etkinleştirme adımları
Otomatik iyileştirmeyi ayarlama
Yüksek kullanılabilirlik sağlamak için iş yükünün yanıt verdiğini doğrularız. Uygulama donarsa MIG, VM'yi değiştirmelidir. Kaynak IP aralıkları için güvenlik duvarı kuralları bu belgede tanımlanmıştır.
# 1. Create Health Check (TCP Port 22)
gcloud compute health-checks create tcp ${HEALTH_CHECK_NAME} \
--port 22 \
--check-interval 30s \
--healthy-threshold 1 \
--timeout 10s \
--unhealthy-threshold 3 \
--global
# 2. Allow Health Check Traffic (Firewall)
gcloud compute firewall-rules create allow-health-check \
--allow tcp:22 \
--source-ranges 130.211.0.0/22,35.191.0.0/16 \
--network default \
--project="${CURRENT_PROJECT_ID}" \
# 3. Apply to MIG
gcloud compute instance-groups managed update ${CURRENT_MIG_NAME} \
--health-check ${HEALTH_CHECK_NAME} \
--initial-delay 60 \
--zone ${CURRENT_PROJECT_ZONE}
Otomatik ölçeklendirmeyi ayarlama
Grubu, trafik artışlarını yönetmek için 1 ile 5 örnek arasında otomatik olarak ölçeklenecek şekilde yapılandıracağız.
gcloud compute instance-groups managed set-autoscaling ${CURRENT_MIG_NAME} \
--max-num-replicas 5 \
--target-cpu-utilization 0.80 \
--cool-down-period 90 \
--zone ${CURRENT_PROJECT_ZONE}
7. İş yükünü doğrulama ve görüntü güncellemelerini ayarlama
İş yükünü doğrulama
Yönetilen örnek grubu (MIG) VM'leri başlattıktan sonra, Confidential Space iş yükünüzün doğru şekilde çalıştığını doğrulamamız gerekir.
Bu işlemi Google Cloud Console veya komut satırı üzerinden yapabilirsiniz.
gcloud compute instance-groups managed list-instances ${CURRENT_MIG_NAME} \
--zone ${CURRENT_PROJECT_ZONE}
İş yükünüzün günlüğünü görmek için söz konusu örneğin Seri Bağlantı Noktası Çıkışı'nı da kontrol edebilirsiniz.
# Replace <INSTANCE_NAME> with one of the names from the previous command
gcloud compute instances get-serial-port-output <INSTANCE_NAME> \
--zone ${CURRENT_PROJECT_ZONE} \
--port 1
Resim güncellemelerini ayarlama
Üretim ortamında, iki farklı senaryoyu ele almak için yönetilen örnek grubunuz (MIG) düzenli olarak güncellenmelidir:
- İş Yükü Güncellemeleri: Uygulama kodunuzun yeni bir sürümünü yayınlama (ör. test_workload.py dosyasını v1'den v2'ye güncelleme).
- Altyapı Güncellemeleri: Google'ın, temel Confidential Space işletim sistemi için güvenlik yaması veya güncelleme yayınlaması. En iyi uygulama, en az ayda bir kez en yeni CS görüntüsünü almaktır.
Örnek şablonumuzu Dinamik Görüntü Bağlantısı (.../images/family/...) ve Dinamik Kapsayıcı Etiketi (:latest) ile yapılandırdığımız için bu senaryoların her ikisini de tek bir "Aşamalı Değiştirme" işlemiyle ele alabiliriz. Bu sayede, sanal makine filonuz her zaman en yeni yığını çalıştırır. Ayrıca, küçük değişiklikler için yeni bir örnek şablonu oluşturmanız gerekmez ve herhangi bir kapalı kalma süresi yaşanmaz.
The Rolling Replace Script
update_images dizininde update_images_script.sh dosyasına gidin. Bu komut dosyası, gruptaki her sanal makineyi kademeli olarak yok edip yeniden oluşturan bir Rolling Replace (Kademeli Değiştirme) işlemi başlatır.
#!/bin/bash
# Initialize the template
gcloud compute instance-groups managed set-instance-template "${CURRENT_MIG_NAME}" \
--template=projects/"${PROJECT_ID}"/global/instanceTemplates/"${TEMPLATE_NAME}" \
--zone="${CURRENT_PROJECT_ZONE}" \
--project="${PROJECT_ID}"
# Trigger the rolling replace
gcloud compute instance-groups managed rolling-action replace "${CURRENT_MIG_NAME}" \
--version=template="${TEMPLATE_NAME}" \
--project="${PROJECT_ID}" \
--zone="${CURRENT_PROJECT_ZONE}" \
--max-surge=1 \
--max-unavailable=0
# Wait for the update to complete
gcloud compute instance-groups managed wait-until --version-target-reached "${CURRENT_MIG_NAME}" \
--zone="${CURRENT_PROJECT_ZONE}" \
--project="${PROJECT_ID}"
Bu komut dosyasında yeniden başlatmak yerine değiştirme işlevini kullanabiliriz.
- Yeniden başlatma işlemi makineyi yeniden başlatır. Mevcut işletim sistemi diskini korur. Bu nedenle, yeni işletim sistemi yamalarını almaz.
- Değiştir işlemi, sanal makineyi siler ve şablondan yeni bir sanal makine oluşturur. Bu işlem, sistemin ailedeki en son Confidential Space OS görüntüsünü aramasını ve kayıt defterinden "En Son" kapsayıcı görüntüsünü çekmesini zorlar.
–max-surge=1: Bu, MIG'nin hedef boyutunuzun üzerinde geçici olarak 1 ek sanal makine oluşturmasına olanak tanır. Yeni (güncellenmiş) bir sanal makine başlatır ve eski (güncel olmayan) bir sanal makineyi silmeden önce bu sanal makinenin sağlıklı olmasını bekler.
–max-unavailable=0: Bu, sıfır kapalı kalma süresi sağlar. Bu, MIG'ye, halihazırda başarılı bir şekilde yedekleme yapılmadığı sürece hiçbir makinenin çevrimdışı bırakılmasına izin verilmediğini bildirir.
Aşamalı Yeniden Başlatma Komut Dosyası
Dizinde update_images update_workload_image_script.sh adlı başka bir komut dosyası da bulunur. Bu komut dosyası, Rolling Restart'ı tetikler. Bu, iş yükünü yenilemek için kullanılan daha hızlı bir yöntemdir. Confidential Space, her başlatmada kayıt defterinden kapsayıcı görüntüsünü çektiğinden, temel ana makineyi değiştirmeden uygulamanızı :latest sürümüne güncellemek için yeniden başlatma yeterlidir.
#!/bin/bash
# Reboots the existing VMs to refresh the container
gcloud compute instance-groups managed rolling-action restart "${CURRENT_MIG_NAME}" \
--project="${PROJECT_ID}" \
--zone="${CURRENT_PROJECT_ZONE}" \
--max-surge=1 \
--max-unavailable=0
# Wait for the update to complete
gcloud compute instance-groups managed wait-until --stable "${CURRENT_MIG_NAME}" \
--zone="${CURRENT_PROJECT_ZONE}" \
--project="${CURRENT_PROJECT_ID}"
Güncellenen iş yükünü doğrulama
Gerçek dünyadaki bir uygulama sürümünü simüle ederek "Tek Tıklamayla Yükseltme" özelliğini test edebiliriz. İş yükü kodunu değiştirecek, Artifact Registry'ye gönderecek, MIG'yi güncelleyecek ve yeni sürümün kesinti olmadan çalıştığını doğrulayacağız.
1. adım: Yeni bir iş yükü sürümü dağıtın
Öncelikle uygulamanızın "yeni" bir sürümünü oluşturmamız gerekir.
- Yerel test_workload.py dosyanızı açın.
- Sürüm yazdırma ifadesini print("İş Yükü Sürümü A") yerine print("İş Yükü Sürümü B") olarak değiştirin.
- create_workload.sh dosyasını çalıştırarak container görüntüsünü yeniden oluşturun ve Artifact Registry'ye aktarın. Aynı etikete (:latest) gönderim yaptığımızı unutmayın.
2. adım: Aşamalı güncellemeyi yürütün
Önceki bölümde oluşturduğumuz güncelleme komut dosyasını çalıştırın. Bu işlem, MIG'nin her sanal makineyi değiştirmesini ve :latest ile ilişkili yeni kapsayıcı karmasını çekmesini zorlar.
# Run your update script
./update_images/update_images_script.sh
Komut dosyasının tamamlanmasını bekleyin
3. adım: Seri bağlantı noktası üzerinden güncellemeyi doğrulayın
Güncelleme tamamlandıktan sonra yeni VM'lerin güncellenmiş kodu çalıştırdığını doğrularız.
# Replace <INSTANCE_NAME> with one of the names from the previous command
gcloud compute instances get-serial-port-output <INSTANCE_NAME> \
--zone ${CURRENT_PROJECT_ZONE} \
--port 1
Yeni bir örneğin adını alma:
gcloud compute instance-groups managed list-instances ${CURRENT_MIG_NAME} --zone ${CURRENT_PROJECT_ZONE}
Günlükleri kontrol edin:
# Replace <NEW_INSTANCE_NAME> with one of the names of the running VMs
gcloud compute instances get-serial-port-output <NEW_INSTANCE_NAME> \
--zone ${CURRENT_PROJECT_ZONE} \
--port 1
Örnekler çalıştıktan sonra, seri bağlantı noktasını görüntülemek için önceki gcloud komutundan herhangi bir örnek adını seçin.
Beklenen Çıkış: Dağıtımın başarılı olduğunu onaylayan güncellenmiş günlük mesajını görmeniz gerekir:
... İş Yükü Sürümü B ...
4. adım: Altyapı yapılandırmasını doğrulayın (isteğe bağlı)
Ayrıca, meta verilerini inceleyerek örnek şablonunuzun hem işletim sistemi hem de iş yükü için dinamik güncellemeleri çekecek şekilde doğru yapılandırıldığını doğrulayabilirsiniz.
Dinamik kapsayıcı referansını görmek için aşağıdaki komutu çalıştırın:
gcloud compute instance-templates describe ${TEMPLATE_NAME} \
| grep -A 1 tee-image-reference
Sonuç: Kapsayıcı resminizin :latest ile bittiğini görmelisiniz.
- Etkisi: Şablon belirli bir karma yerine etiketi işaret ettiğinden, her periyodik değiştirme işlemi 1. adımda gönderdiğiniz en yeni kodu başarıyla çeker.
(İsteğe bağlı) Otomatik Güncellemeler
Manuel güncellemeler büyük sürüm yayınları için yararlı olsa da genellikle filonuzun en son güvenlik yamalarını veya düzenli dağıtım derlemelerini insan müdahalesi olmadan otomatik olarak almasını istersiniz.
Güncelleme komut dosyamızı bir Cloud Run işine paketleyerek "Rolling Replace" sürecini otomatikleştirebiliriz. Bu codelab'de, 15 dakikada bir tetikleyeceğiz. Üretim ortamında çok daha az sıklıkta çalıştırılmalıdır. Kullanıcılar, ihtiyaçlarına bağlı olarak haftalık veya aylık olarak yapılandırabilir.
1. Adım: Güncelleyici Komut Dosyasını Container Mimarisini Alma
Öncelikle, update_images_script.sh (gcloud ... rolling-action replace mantığını içerir) dosyamızı bulutta çalıştırılabilmesi için bir Docker kapsayıcısına paketlememiz gerekir.
Bu kapsayıcıyı oluşturan ve Artifact Registry'nize gönderen bir yardımcı komut dosyası hazırladık.
Aşağıdaki komutu çalıştırın:
# Build and Push the "Updater" Container
# This packages your update logic into a docker image
./update_images/deploy_docker_script_image.sh
Bu özellik ne işe yarar?
- update_images/ dizinindeki update_images_script.sh dosyasını alır.
- Google Cloud SDK'yı ve komut dosyanızı içeren bir Docker görüntüsü oluşturur.
- Görüntü, ${CURRENT_PROJECT_REGION}-docker.pkg.dev/${PROJECT_ID}/${REPOSITORY}/update-script:latest adresine gönderilir.
2. adım: İşi dağıtın ve planlayın
Şimdi Google Cloud'a bu kapsayıcıyı düzenli olarak çalıştırmasını söylememiz gerekiyor. Container'ı yürütmek için Cloud Run Jobs'u, tetiklemek için ise Cloud Scheduler'ı kullanırız.
Planlama yapılandırma komut dosyasını çalıştırın:
# Create the Cloud Run Job and the Scheduler Trigger
./create_configs/create_schedule_job.sh
Komut Dosyasının İçinde: Bu komut dosyası iki kritik işlemi gerçekleştirir:
- Cloud Run işi oluşturur: mig-updater-job adlı bir iş tanımlar. Bu iş, az önce gönderdiğimiz kapsayıcıyı yürütür.
- Scheduler tetikleyicisi oluşturur: Cloud Run Job API'ye her 15 dakikada bir istek göndermek için bir Cloud Scheduler işi ayarlar.
# (Snippet from create_schedule_job.sh for reference)
# The schedule is set to run every 15 minutes for testing purposes
gcloud scheduler jobs create http ${SCHEDULER_NAME} \
--schedule "*/15 * * * *" \
--uri "https://${CURRENT_PROJECT_REGION}-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/${PROJECT_ID}/jobs/${JOB_NAME}:run" \
--http-method POST \
--oauth-service-account-email ${SERVICE_ACCOUNT}
3. adım: Otomasyonu doğrulayın
Test etmek için 15 dakika beklemeniz gerekmez. Ardışık düzeni doğrulamak için planlayıcıyı hemen çalışmaya zorlayabilirsiniz.
- İşi Zorunlu Olarak Çalıştırma:
gcloud scheduler jobs run ${SCHEDULER_NAME} --location ${CURRENT_PROJECT_REGION}
- Yürütmeyi Kontrol Etme: Cloud Run konsolu > İşler'e gidin. Yeni bir yürütme işleminin başladığını görürsünüz.
- MIG'yi kontrol edin: gcloud compute instance-groups managed list-instances ${CURRENT_MIG_NAME} komutunu çalıştırın. İş, periyodik güncellemeyi tetiklediğinde RECREATING durumuna giren örnekleri görürsünüz.
Neden 15 dakika? Bu codelab için sonuçları hızlı bir şekilde görebilmeniz amacıyla programı */15 * * * * olarak ayarladık. Gerçek bir üretim ortamında, bu görevi büyük olasılıkla günlük (ör. 0 3 * * * için saat 3) veya haftalık olarak çalışacak şekilde değiştirirsiniz.
8. Temizleme
cleanup.sh adlı temizleme komut dosyası, bu kod laboratuvarı kapsamında oluşturduğumuz kaynakları temizlemek için kullanılabilir. Bu temizlik kapsamında aşağıdaki kaynaklar silinecek:
- Yönetilen örnek grubu (${CURRENT_MIG_NAME}) ve temel alınan sanal makineleri.
- Örnek Şablonu (${TEMPLATE_NAME}).
- Sağlık durumu kontrolü ve güvenlik duvarı kuralları (${HEALTH_CHECK_NAME}).
- Artifact Registry Repository (${REPOSITORY}).
- Hizmet hesabı (bu laboratuvar için özel bir hesap oluşturduysanız).
Keşfetme işlemini tamamladıysanız lütfen şu talimatları uygulayarak projenizi silin: Projeleri kapatma (silme).
Tebrikler
Tebrikler, codelab'i başarıyla tamamladınız.
Yönetilen örnek gruplarını (MIG'ler) kullanarak Confidential Space iş yüklerini güvenli bir şekilde nasıl ölçeklendireceğinizi öğrendiniz. Arızalardan kurtarmak için otomatik iyileştirme, trafik artışlarını yönetmek için otomatik ölçeklendirme özelliklerini başarıyla yapılandırdınız ve hem Confidential Space işletim sistemi görüntünüz hem de iş yükü kapsayıcınız için sıfır kapalı kalma süresiyle güncellemeler gerçekleştirdiniz.
Yapabilecekleriniz
Diğer Confidential Space codelab'lerine göz atın:
- Gizli Alan'ı kullanarak makine öğrenimi modellerinin ve fikri mülkiyetin güvenliğini sağlama
- Çok taraflı hesaplama ve Confidential Space ile dijital varlık işlemleri yapma
- Gizli Alan ile gizli verileri analiz etme
- Bulut sağlayıcıda depolanmayan korumalı kaynaklarla Confidential Space'i kullanma
Daha fazla bilgi
- Monitoring metriklerine göre ölçeklendirme
- Kendinizi yalnız mı hissediyorsunuz? Gizli bilişim imdadınıza yetişiyor
- GCP'de Gizli Bilişim
- Gizli Alan: Gizliliği korumaya yönelik ortak çalışmanın geleceği
- Gizli Alan'ın güvenliğine genel bakış
- Veri gizliliğini güçlendirin: Ölçeklenebilir çok taraflı gizli ortak çalışma