Private Service Connect - Yönetilen Hizmetler'e Global XLB için Tüketici HTTP(S) Hizmet Denetimleri'ni Kullanma

1. Giriş

Private Service Connect, bir hizmet üreticinin hizmet tüketicisine hizmet sunmasına olanak tanır. Hizmet üreticisi VPC ağı, birden fazla hizmet tüketicisini destekleyebilir.

Yayınlanan bir hizmete bağlanabilen iki tür Private Service Connect uç noktası vardır:

  • Private Service Connect uç noktası (iletim kuralına göre)

Bu uç nokta türüyle, tüketiciler tanımladıkları dahili bir IP adresine bağlanır. Private Service Connect, isteği hizmet üreticisine yönlendirmek için ağ adresi çevirisi (NAT) gerçekleştirir.

  • Tüketici HTTP(S) hizmeti kontrollerine sahip Private Service Connect uç noktası (global harici HTTP(S) yük dengeleyiciye göre)

Bu uç nokta türüyle, tüketiciler harici bir IP adresine bağlanır. Private Service Connect, isteği hizmet üreticisine yönlendirmek için bir ağ uç noktası grubu kullanır.

Politika yaptırım noktası olarak global bir harici HTTP(S) yük dengeleyiciyi kullanmak aşağıdaki avantajları sağlar:

  • Hizmetleri yeniden adlandırabilir ve istediğiniz URL'lerle eşleyebilirsiniz.
  • Yük dengeleyiciyi, tüm istekleri Cloud Logging'e kaydedecek şekilde yapılandırabilirsiniz.
  • Müşteri tarafından yönetilen TLS sertifikalarını kullanabilirsiniz. veya Google tarafından yönetilen sertifikalar.

Bu codelab'de, başka bir ağdaki hizmete gizli olarak erişmek için Global XLB'yi kullanarak Private Service Connect uç noktası Tüketici HTTP(S) Hizmet Kontrolleri oluşturmayı öğreneceksiniz. Bu PSC kalıbı, tek bir proje veya ayrı projeler kullanılarak yapılabilir. Bu laboratuvarın amaçları doğrultusunda, iki ayrı VPC'ye sahip tek bir proje kullanacağız.

Neler öğreneceksiniz?

  • Global XLB'yi kullanarak Tüketici HTTP(S) Hizmet Kontrolleri ile Private Service Connect uç noktası oluşturma
  • Yönetilen bir hizmeti, L7 XLB bağlantılarını kabul etmek için Hizmet Eki aracılığıyla kullanıma sunulacak şekilde yapılandırın.
  • SSL sertifikası oluşturun ve TLS'yi sonlandırıp 443 numaralı bağlantı noktasında trafiği kabul edecek şekilde bir Apache web sunucusunu yapılandırın.
  • PSC NEG oluşturun.

Gerekenler

  • Bir Google Cloud projesi
  • Örnekleri dağıtma ve ağ bileşenlerini yapılandırma hakkında bilgi

2. Test Ortamı

Oluşturacağınız ortam, harici HTTP(S) Yük Dengeleyici ve tüketici VPC'sindeki PSC NEG'den oluşur. Üretici VPC'si, HTTPS ile yapılandırılmış basit bir Apache web hizmeti barındırır. Apache web hizmetinden bir arka uç hizmeti oluşturacak ve bu arka uç hizmetinin de PSC Hizmet Eki ile yapılandırılmış bir Dahili TCP Yük Dengeleyicisi ile ön uç hizmetini oluşturacaksınız.

bbca972cf488ece.png

3. Kurulum ve Gereksinimler

Kendi hızınızda ortam kurulumu

  1. Google Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir ve bunu istediğiniz zaman güncelleyebilirsiniz.
  • Proje Kimliği, tüm Google Cloud projelerinde benzersiz olmalıdır ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de, Proje Kimliğine referans vermeniz gerekir (ve bu kimlik genellikle PROJECT_ID olarak tanımlanır). Beğenmezseniz başka bir rastgele kod oluşturun ya da kendi proje kimliğinizi deneyip mevcut olup olmadığına bakın. Sıcaklık "soğudu" takip etmeniz gerekir.
  • Bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
  1. Ardından, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmayla karşılaşmamak için kaynakları kapatmak istiyorsanız tüm "temizleme" işlemlerini uygulayın buradaki talimatları uygulayın. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.

Cloud Shell'i başlatma

Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.

Google Cloud Console'da, sağ üstteki araç çubuğunda bulunan Cloud Shell simgesini tıklayın:

55efc1aaa7a4d3ad.png

Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:

7ffe5cbb04455448

İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu laboratuvardaki tüm çalışmalarınızı yalnızca bir tarayıcıyla yapabilirsiniz.

4. Başlamadan önce

API'leri etkinleştir

Cloud Shell'de proje kimliğinizin ayarlandığından emin olun

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export project=YOUR-PROJECT-NAME
export region=us-central1
echo $project
echo $region

Gerekli tüm hizmetleri etkinleştirin

gcloud services enable compute.googleapis.com
gcloud services enable servicedirectory.googleapis.com

5. Üretici VPC, Alt Ağ, Güvenlik Duvarı Kuralları Kurulumu

VPC Ağı

Cloud Shell'den

gcloud compute networks create producer-vpc --subnet-mode custom

Alt Ağ Oluşturma

PSC için Ağ Adresi Çevrimi (NAT) gerçekleştirmek üzere üretici tarafında bir alt ağ gerekir. Amacın PRIVATE_SERVICE_CONNECT olduğunu unutmayın. Bu, söz konusu alt ağın iş yüklerini dağıtmak için kullanılamayacağı anlamına gelir.

Cloud Shell'den

gcloud compute networks subnets create producer-nat-subnet \
--network=producer-vpc \
--region=$region \
--range=10.100.100.0/24 \
--purpose=PRIVATE_SERVICE_CONNECT

Üretici VPC'sinde iki alt ağ dağıtacağız. İlk olarak üretici hizmetini dağıtan ilk hizmet. Ardından başka bir bölgeye ek bir istemci, TCP Dahili Yük Dengeleyici'de Küresel Erişim aracılığıyla hizmet bağlantısını test etmek için Client-vm'i dağıtmak için kullanılır.

Cloud Shell'den

gcloud compute networks subnets create service-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/24 \
    --region=$region

Cloud Shell'den

gcloud compute networks subnets create client-subnet \
    --network=producer-vpc \
    --range=10.0.1.0/24 \
    --region=us-east4

Cloud NAT oluşturma

Üretici hizmetlerimize uygun paketleri yüklemek için Cloud NAT gerekir.

Cloud Shell'den

gcloud compute routers create service-cr \
--region=$region --network=producer-vpc \
--asn=65501

Cloud Shell'den

gcloud compute routers nats create service-nat-gw \
--router=service-cr \
--router-region=$region \
--nat-custom-subnet-ip-ranges=service-subnet \
--auto-allocate-nat-external-ips

Güvenlik Duvarı Kuralları Oluşturma

Bu laboratuvarda, oluşturduğunuz örneklere bağlanmak için IAP kullanacaksınız. Aşağıdaki güvenlik duvarı kuralı, örneklere IAP üzerinden bağlanmanızı sağlar. IAP kullanmamayı tercih ederseniz bu adımı atlayabilir ve örneğe genel IP adresleri ekleyebilir ve 0.0.0.0/0 adresinden TCP bağlantı noktası 22'ye girişe izin veren bir güvenlik duvarı kuralı oluşturabilirsiniz.

IAP'nin sanal makine örneklerinize bağlanmasına izin vermek için aşağıdaki şartları yerine getiren bir güvenlik duvarı kuralı oluşturun:

  • IAP kullanarak erişilmesini istediğiniz tüm sanal makine örnekleri için geçerlidir.
  • 35.235.240.0/20 IP aralığından giriş trafiğine izin verir. Bu aralık, IAP'nin TCP yönlendirme için kullandığı tüm IP adreslerini içerir.

Cloud Shell'den

gcloud compute firewall-rules create allow-ssh-iap \
    --network producer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20

İstemci trafiği Global Harici HTTP(S) yük dengeleyiciden gelecektir. Bu nedenle, bu trafiğin web hizmetimizi barındıracak etiketli hedef sunuculara gitmesine izin vermek için bir Güvenlik Duvarı kuralı oluşturulmalıdır. Güvenlik duvarı kuralını test amacıyla client-subnet'ten de açacağız.

Cloud Shell'den

gcloud compute firewall-rules create allow-xlb-client \
  --network=producer-vpc \
  --direction=ingress \
  --allow=tcp:443 \
  --target-tags=psc-service \
  --source-ranges=130.211.0.0/22,35.191.0.0/16,10.0.1.0/24

Apache Web Hizmeti Oluşturma

"PSC Hizmeti"ni görüntüleyen basit bir Apache Web Hizmeti oluşturacağız

Örnek Şablonu oluşturma

Cloud Shell'den

gcloud compute instance-templates create producer-service-template \
    --network producer-vpc \
    --subnet service-subnet \
    --region $region \
    --no-address \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --tags=psc-service \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    echo "PSC Service" | \
    tee /var/www/html/index.html
    systemctl restart apache2'

MIG için Durum Denetimi oluşturma

Cloud Shell'den

gcloud compute health-checks create https psc-service-mig-healthcheck \
    --port=443 \
    --global

Yönetilen Örnek Grubu Oluşturma

Cloud Shell'den

gcloud compute instance-groups managed create psc-service-mig \
    --region $region \
    --size=2 \
    --template=producer-service-template \
    --health-check=psc-service-mig-healthcheck

Apache Web Sunucularında SSL'yi Yapılandırma

Ardından, SSL'yi Apache Web sunucularının her birinde yapılandırmamız gerekir. Bu işlemi, bir sertifika oluşturup bu sertifikayı Apache Yapılandırması'na ekleyerek yapacağız.

Hizmetin önünde bu belirli PSC kalıbı için dahili bir TCP/UDP (L4) yük dengeleyicinin olması gerektiğinden, arka uç hizmetlerinde SSL sonlandırması yapılandırılmalıdır. Dahili TCP/UDP yük dengeleyici, yük dengeleyici katmanındaki SSL'yi sonlandırmaz.

MIG'nizdeki ilk sanal makineye SSH uygulayarak başlayın. Sanal makine alt bölgesi ve sanal makine adı, ortam başına dinamik olarak ayrılır. Konsolda Compute Engine'e gidin > Sanal Makine Örnekleri: Örneklerinizin adını ve alt bölgesini bulun.

Cloud Shell'den

gcloud compute ssh --zone "<YOUR_VM_ZONE>" "<YOUR_MIG_VM_1>"  --tunnel-through-iap --project $project

Şimdi, sertifikayı OpenSSL üzerinden oluşturacağız. Sizden Ülkeniz, Eyaletiniz, Konumunuz, Kuruluşunuz, Kuruluş Biriminizin Adı, Ortak Adınız ve e-posta adresinizle ilgili bilgileri girmeniz istenir. Doldurmanız gereken tek bilgi, Common Name (Ortak Ad) olmalıdır. Bu ad, seçtiğiniz dahili bir FQDN olmalıdır. Bu laboratuvarın amacı doğrultusunda example.com'u seçmeniz gerekir.

Cloud Shell'den

sudo openssl genrsa -out private-key-file.pem 2048

Cloud Shell'den

cat <<'EOF' >config.txt
[req]
default_bits              = 2048
req_extensions            = extension_requirements
distinguished_name        = dn_requirements

[extension_requirements]
basicConstraints          = CA:FALSE
keyUsage                  = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName            = @sans_list

[dn_requirements]
countryName               = Country Name (2 letter code)
stateOrProvinceName       = State or Province Name (full name)
localityName              = Locality Name (eg, city)
0.organizationName        = Organization Name (eg, company)
organizationalUnitName    = Organizational Unit Name (eg, section)
commonName                = Common Name (e.g. server FQDN or YOUR name)
emailAddress              = Email Address

[sans_list]
DNS.1                     = example.com

EOF

Cloud Shell'den

sudo openssl req -new -key private-key-file.pem \
    -out csr.pem \
    -config config.txt

Cloud Shell'den

sudo openssl x509 -req \
    -signkey private-key-file.pem \
    -in csr.pem \
    -out cert.cert \
    -extfile config.txt \
    -extensions extension_requirements \
    -days 10

Şimdi Apache yapılandırma bilgilerini yeni sertifika ayrıntılarımızla güncelleyelim.

sudo vi /etc/apache2/sites-enabled/default-ssl.conf

ServerAdmin altına şunu okuyan bir satır ekleyin:

ServerName example.com

SSLCertificateFile ve SSLCertificateKeyFile'da, sanal makinenizdeki cert.cert dosyasının ve private-key-file.pem konumlarının konumunu güncelleyin. Aşağıda bununla ilgili bir örnek gösterilmektedir. <profile> adresini güncellediğinizden emin olun dizininizin adını yazın.

SSLCertificateFile  /home/<profile>/cert.cert

SSLCertificateKeyFile /home/<profile>/private-key-file.pem

Düzenleyiciyi kapatın ve Apache'yi yeniden başlatın.

sudo a2enmod ssl
sudo systemctl restart apache2

Örnekten çıkın ve yönetilen örnek grubundaki diğer örnekte aynı adımları tekrarlayın.

6. Yapımcı Hizmeti'ni oluşturma

Şimdi de hizmet için yük dengeleyici bileşenlerini oluşturacağız.

Yük dengeleyici durum denetimini oluşturun.

Cloud Shell'den

gcloud compute health-checks create https service-lb-healthcheck \
    --port=443 \
    --region=$region

Arka uç hizmetini oluşturun.

Cloud Shell'den

 gcloud compute backend-services create psc-backend-service \
    --load-balancing-scheme=internal \
    --protocol=TCP \
    --region=$region \
    --health-checks=service-lb-healthcheck \
    --health-checks-region=$region

gcloud compute backend-services add-backend psc-backend-service \
--region=$region \
--instance-group=psc-service-mig

Yönlendirme Kuralını oluşturun. İletim kuralının, bağlantı noktası 443'te ve Genel Erişim ile yapılandırılması gerekir. Bu, bu PSC kalıbının çalışması için gereklidir.

Cloud Shell'den

 gcloud compute forwarding-rules create producer-fr \
    --region=$region \
    --load-balancing-scheme=internal \
    --network=producer-vpc \
    --subnet=service-subnet \
    --address=10.0.0.100 \
    --ip-protocol=TCP \
    --ports=443 \
    --backend-service=psc-backend-service \
    --backend-service-region=$region \
    --allow-global-access

7. Hizmeti Test Etme

Hizmet Ekini oluşturmadan önce, Genel Erişim ile yapılandırılan yük dengeleyiciyi test etmek için farklı bir bölgede bir istemci oluşturacağız. Ayrıca, TLS'yi sonlandıracak şekilde yapılandırılmış Apache hizmetini test edeceğiz.

Cloud Shell'den

gcloud compute instances create vm-client \
    --zone=us-east4-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --subnet=client-subnet \
    --no-address

Örneğe SSH ekleyin.

Cloud Shell'den

gcloud compute ssh \
    --zone "us-east4-a" "vm-client" \
    --tunnel-through-iap \
    --project $project

Yük dengeleyici aracılığıyla 443'ten fazla bağlantı bağlayarak Apache Hizmeti'ni test edin.

curl https://example.com:443 -k --connect-to example.com:443:10.0.0.100:443

BEKLENEN SONUÇ

PSC Service

8. Hizmet Eki'ni oluşturma

Cloud Shell'den

gcloud compute service-attachments create pscservice \
    --region=$region \
    --producer-forwarding-rule=producer-fr \
    --connection-preference=ACCEPT-AUTOMATIC \
    --nat-subnets=producer-nat-subnet

Uç nokta yapılandırmasının sonraki adımında ihtiyaç duyacağınız için Hizmet Eki URI'sini not etmeniz gerekir. Bu erişim düzeyini Cloud Shell'de aşağıdaki komutu çalıştırarak elde edebilirsiniz

Cloud Shell'den

gcloud compute service-attachments describe pscservice --region $region

/projects ile başlayan URI'yi kopyalayın

Örnek: /projects/<PROJE_KİMLİĞİNİZ>/regions/us-central1/serviceAttachs/pscservice

9. Tüketici VPC ve Alt Ağ Kurulumu

VPC Ağı

Cloud Shell'den

gcloud compute networks create consumer-vpc --subnet-mode custom

Alt Ağ Oluştur

Private Service Connect Network Endpoint Group'un (NEG) dağıtılacağı tüketici tarafında bir alt ağ gereklidir.

Cloud Shell'den

gcloud compute networks subnets create psc-neg-subnet \
--network=consumer-vpc \
--region=$region \
--range=10.100.200.0/24 \
--purpose=private

10. Private Service Connect Uç Noktası Oluşturma ve Test Bağlantısı

Yeni oluşturduğumuz Hizmet Eki ile ilişkilendirilecek PSC NEG oluşturma sürecini izleyeceğiz, PSC NEG'yi arka uç hizmetine ekleyeceğiz ve arka uç hizmetini bir iletim kuralıyla ilişkilendireceğiz.

Son adımda not ettiğimiz Hizmet Eki URI'sini hazır bulundurun. Aşağıdaki URL'yi kendi URI'nizle değiştirin.

Cloud Shell'den

gcloud beta compute network-endpoint-groups create xlb-psc-neg \
--network-endpoint-type=private-service-connect \
--psc-target-service=projects/<PROJECT-ID>/regions/us-central1/serviceAttachments/pscservice \
--region=$region \
--network=consumer-vpc \
--subnet=psc-neg-subnet

XLB herkese açık IP adresini oluşturun ve daha sonra test etmek üzere atanan gerçek IP adresini alın.

Cloud Shell'den

gcloud compute addresses create xlb-psc-address \
--ip-version=IPv4 --global

gcloud compute addresses describe xlb-psc-address --format="get(address)" --global

Şimdi, PSC uç noktasını oluşturacağız. Bu örnekte, Harici Yük Dengeleyici'de bulunacağız.

Cloud Shell'den

gcloud beta compute backend-services create pscneg-backend-service \
--load-balancing-scheme=EXTERNAL_MANAGED \
--protocol=HTTPS \
--global

Cloud Shell'den

gcloud beta compute backend-services add-backend pscneg-backend-service \
--network-endpoint-group=xlb-psc-neg \
--network-endpoint-group-region=$region \
--global

Cloud Shell'den

gcloud beta compute url-maps create xlb-psc-map \
--default-service=pscneg-backend-service \
--global

Cloud Shell'den

gcloud beta compute target-http-proxies create psc-http-proxy \
--url-map=xlb-psc-map

Cloud Shell'den

gcloud beta compute forwarding-rules create xlb-psc-fr \
--load-balancing-scheme=EXTERNAL_MANAGED \
--network-tier=PREMIUM \
--address=xlb-psc-address \
--target-http-proxy=psc-http-proxy \
--ports=80 \
--global

5-7 dakika bekleyip xlb-psc-address ile ilişkili IP adresini tarayıcınızın adres çubuğuna girin.

"PSC Hizmeti" ise gösteriliyorsa, çözümü doğru şekilde yapılandırmışsınızdır.

11. Temizleme adımları

Laboratuvar bileşenlerini tek bir Cloud Shell terminalinden silin

gcloud beta compute forwarding-rules delete xlb-psc-fr --global --quiet

gcloud beta compute target-http-proxies delete psc-http-proxy --quiet

gcloud beta compute url-maps delete xlb-psc-map --global --quiet

gcloud beta compute backend-services delete pscneg-backend-service --global --quiet

gcloud compute addresses delete xlb-psc-address --global --quiet

gcloud beta compute network-endpoint-groups delete xlb-psc-neg --region $region --quiet

gcloud compute networks subnets delete psc-neg-subnet --region $region --quiet

gcloud compute networks delete consumer-vpc --quiet

gcloud compute service-attachments delete pscservice --region $region --quiet

gcloud compute instances delete vm-client --zone=us-east4-a --quiet

gcloud compute forwarding-rules delete producer-fr --region $region --quiet

gcloud compute backend-services delete psc-backend-service --region $region --quiet

gcloud compute health-checks delete service-lb-healthcheck --region $region --quiet

gcloud compute instance-groups managed delete psc-service-mig --region $region --quiet

gcloud compute health-checks delete psc-service-mig-healthcheck --region $region --quiet

gcloud compute instance-templates delete producer-service-template --quiet

gcloud compute firewall-rules delete allow-xlb-client --quiet

gcloud compute firewall-rules delete allow-ssh-iap --quiet

gcloud compute routers nats delete service-nat-gw –router service-cr --region $region --quiet

gcloud compute routers delete service-cr --region $region --quiet

gcloud compute networks subnets delete client-subnet --quiet

gcloud compute networks subnets delete service-subnet --quiet

gcloud compute networks subnets delete producer-nat-subnet --quiet

gcloud compute networks delete producer-vpc --quiet

12. Tebrikler!

Codelab'i tamamladığınız için tebrikler.

İşlediklerimiz

  • Global XLB'yi kullanarak Tüketici HTTP(S) Hizmet Kontrolleri ile Private Service Connect uç noktası oluşturma
  • Yönetilen bir hizmeti, L7 XLB bağlantılarını kabul etmek için Hizmet Eki aracılığıyla kullanıma sunulacak şekilde yapılandırın.
  • SSL sertifikası oluşturun ve TLS'yi sonlandırıp 443 numaralı bağlantı noktasında trafiği kabul edecek şekilde bir Apache web sunucusunu yapılandırın.
  • PSC NEG oluşturun.