1. Giriş
Politika Tabanlı Rotalar
Politika tabanlı rotalar, bir paketin hedef IP adresinden daha fazlasına göre bir sonraki durak seçmenize olanak tanır. Trafiği protokole ve kaynak IP adresine göre de eşleştirebilirsiniz. Eşleşen trafik, Dahili Ağ yük dengeleyiciye yönlendirilir. Bu, ağ trafiğinin yoluna güvenlik duvarı gibi cihazlar eklemenize yardımcı olabilir.
Politika tabanlı bir rota oluşturduğunuzda, hangi kaynakların trafiklerinin rota tarafından işlenebileceğini seçersiniz. Rota, aşağıdakilere uygulanabilir:
- Ağın tamamı: tüm sanal makine örnekleri, VPN ağ geçitleri ve Ara bağlantılar
- Ağ etiketlerini kullanarak: VPC'de sanal makine örnekleri seçme
- Ara bağlantı bölgesi: Bölgeye ait VLAN ekleri aracılığıyla VPC ağına giren tüm trafik
Politika tabanlı bir rotanın sonraki durağı, politika tabanlı rotayla aynı VPC ağında bulunan geçerli bir Dahili Ağ yük dengeleyici olmalıdır.
Dahili Ağ yük dengeleyicileri varsayılan olarak simetrik karma oluşturma yöntemini kullanır. Böylece trafik, kaynak NAT'yi yapılandırmadan giden ve dönüş yollarında aynı cihaza erişebilir.
Politika tabanlı rotalar, özel dönüş yolları hariç diğer rota türlerine göre daha yüksek önceliğe sahiptir.
İki politika tabanlı rota aynı önceliğe sahipse Google Cloud, politika tabanlı tek bir rota seçmek için belirleyici, dahili bir algoritma kullanarak aynı önceliğe sahip diğer rotaları yok sayar. Politika tabanlı rotalarda en uzun ön ek eşleştirme kullanılmaz ve yalnızca en yüksek öncelikli rota seçilir.
Tek yönlü trafik için tek bir kural veya çift yönlü trafiği yönetmek için birden fazla kural oluşturabilirsiniz.
Politika tabanlı rotaları Cloud Interconnect ile kullanmak için rotanın bir bölgedeki tüm Cloud Interconnect bağlantılarına uygulanması gerekir. Politika tabanlı rotalar, yalnızca tek bir Cloud Interconnect bağlantısına uygulanamaz.
Politika tabanlı bir rotadan trafik alan sanal makine örneklerinde IP yönlendirme etkinleştirilmiş olmalıdır.
PBR ile ilgili dikkat edilmesi gereken noktalar
Politika tabanlı rotaları aşağıdaki şekillerde kullanmak için özel yapılandırma gereklidir.
Örneğin GKE, PSC veya PGA/PSA ile PBR kullanımı.
GKE ile PBR hakkında daha fazla bilgiyi burada ve genel PBR sınırlamaları bölümünü burada bulabilirsiniz.
Neler öğreneceksiniz?
- Politika tabanlı rotaları yapılandırma
Gerekenler
- Örnekleri dağıtma ve ağ bileşenlerini yapılandırma hakkında bilgi
- VPC Güvenlik Duvarı yapılandırma bilgisi
2. Test Ortamı
Bu Codelab, tek bir VPC'den yararlanır. Bu ortamda, paketleri başka bir sunucu kaynağına gönderecek iki işlem kaynağı (clienta ve clientb) olacaktır. PBR ve filtreler kullanarak, clientb trafiği doğrudan sunucuya giderken istemciden gelen trafiği güvenlik duvarı yaptırımı için başka bir işlem kaynağı üzerinden zorlayacağız. Aşağıdaki diyagramda yol gösterilmektedir.
Yukarıdaki şemada, PBR yolları için teknik olarak bir ILB (ağ dahili yük dengeleyici) bulunması gerekir. Bu bölüm, diyagram basitliği nedeniyle atlanmıştır.
3. Başlamadan önce
Codelab'e tek bir proje gerekir.
Cloudshell'den:
export project_id=`gcloud config list --format="value(core.project)"` export region=us-central1 export zone=us-central1-a export prefix=codelab-pbr
4. API'leri etkinleştir
Henüz yapmadıysanız ürünleri kullanmak için API'leri etkinleştirin
Cloudshell'den:
gcloud services enable compute.googleapis.com gcloud services enable networkconnectivity.googleapis.com
5. VPC ağı ve alt ağ oluştur
VPC Ağı
codelab-pbr-vpc VPC'si oluşturun:
Cloudshell'den:
gcloud compute networks create $prefix-vpc --subnet-mode=custom
Alt ağ
Seçili bölgede ilgili alt ağları oluşturun:
Cloudshell'den:
gcloud compute networks subnets create $prefix-vpc-subnet \ --range=10.10.10.0/24 --network=$prefix-vpc --region=${region}
6. Güvenlik Duvarı Kuralları Oluşturma
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.
Cloudshell'den:
gcloud compute firewall-rules create $prefix-allow-iap-proxy \ --direction=INGRESS \ --priority=1000 \ --network=$prefix-vpc \ --action=ALLOW \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
Sunucuda standart HTTP bağlantı noktası (TCP 80) ve ICMP protokolüne izin vermek için:
- "server" ağ etiketine sahip kaynaklar için geçerlidir
- Tüm kaynaklardan girişe izin verir
Cloudshell'den:
gcloud compute firewall-rules create $prefix-allow-http-icmp \ --direction=INGRESS \ --priority=1000 \ --network=$prefix-vpc \ --action=ALLOW \ --rules=tcp:80,icmp \ --source-ranges=0.0.0.0/0 \ --target-tags=server
Donanım yazılımının paket almasına izin vermek için tüm protokol ve bağlantı noktalarında girişe izin verin.
- "fw" ağ etiketine sahip kaynaklara uygulanır
- 10.10.10.0/24 kaynaklardan girişe izin verir
Cloudshell'den:
gcloud compute firewall-rules create $prefix-fw-allow-ingress \ --direction=INGRESS \ --priority=1000 \ --network=$prefix-vpc \ --action=ALLOW \ --rules=all \ --source-ranges=10.10.10.0/24 \ --target-tags=fw
Durum denetimleri kontrollerine izin vermek için
- "fw" ağ etiketine sahip kaynaklara uygulanır
- Durum denetimi aralıklarından girişe izin verir
Cloudshell'den:
gcloud compute firewall-rules create $prefix-allow-hc-ingress \ --direction=INGRESS \ --priority=1000 \ --network=$prefix-vpc \ --action=ALLOW \ --rules=tcp:80 \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=fw
7. Cloud Yönlendiricisi ve Cloud NAT
Bu bölümün amacı, özel sanal makinelerin internetten uygun yazılım paketlerini indirebilmesidir.
Cloud Router oluşturma
Cloudshell'den:
gcloud compute routers create ${prefix}-cr \ --region=${region} \ --network=${prefix}-vpc
Cloud NAT Ağ Geçidi Oluşturma
Cloudshell'den:
gcloud compute routers nats create ${prefix}-nat-gw-${region} \ --router=${prefix}-cr \ --router-region=${region} \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges
8. Compute Örnekleri Oluşturma
ClientA, ClientB, FW ve Server işlem örneklerini oluşturun:
Cloudshell'den:
gcloud compute instances create clienta \ --subnet=$prefix-vpc-subnet \ --no-address \ --private-network-ip=10.10.10.10 \ --zone $zone \ --tags client \ --metadata startup-script='#! /bin/bash apt-get update'
Cloudshell'den:
gcloud compute instances create clientb \ --subnet=$prefix-vpc-subnet \ --no-address \ --private-network-ip=10.10.10.11 \ --zone $zone \ --tags client \ --metadata startup-script='#! /bin/bash apt-get update'
Cloudshell'den:
gcloud compute instances create server \ --subnet=$prefix-vpc-subnet \ --no-address \ --private-network-ip=10.10.10.200 \ --zone $zone \ --tags server \ --metadata startup-script='#! /bin/bash sudo su apt-get update apt-get -y install tcpdump apt-get -y install nginx cat > /var/www/html/index.html << EOF <html><body><p>Server</p></body></html> EOF'
Cloudshell'den:
gcloud compute instances create fw \ --subnet=$prefix-vpc-subnet \ --can-ip-forward \ --no-address \ --private-network-ip=10.10.10.75 \ --zone $zone \ --tags fw \ --metadata startup-script='#! /bin/bash apt-get update sudo apt-get -y install tcpdump sudo apt-get -y install nginx sudo sysctl -w net.ipv4.ip_forward=1 sudo iptables -I FORWARD -d 10.10.10.200 -j REJECT'
9. PBR olmadan Bağlantıyı Test Et
Kısa süre önce oluşturduğumuz istemci bilgi işlem sanal makinelerine SSH uygulama ve her iki istemcinin sunucuya bağlantıyı doğrulama.
cloudshell1 girişinden clienta'ya:
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
Aşağıdaki komutları çalıştırın:
ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html
Ping'ler ve curl istekleri başarılı olur.
Çıkış:
root@clienta:~$ ping 10.10.10.200 -c 5 PING 10.10.10.200 (10.10.10.200) 56(84) bytes of data. 64 bytes from 10.10.10.200: icmp_seq=1 ttl=64 time=1.346 ms 64 bytes from 10.10.10.200: icmp_seq=2 ttl=64 time=0.249 ms 64 bytes from 10.10.10.200: icmp_seq=3 ttl=64 time=0.305 ms 64 bytes from 10.10.10.200: icmp_seq=4 ttl=64 time=0.329 ms 64 bytes from 10.10.10.200: icmp_seq=5 ttl=64 time=0.240 ms
root@clienta:~$ curl 10.10.10.200/index.html <html><body><p>Server</p></body></html>
+ işaretini tıklayarak ek bir cloudshell sekmesi açın.
Cloudshell2'de kullanılacak değişkenlerden yararlanın:
export project_id=`gcloud config list --format="value(core.project)"` export region=us-central1 export zone=us-central1-a export prefix=codelab-pbr
cloudshell2 SSH'den clientb'ye:
gcloud compute ssh clientb --zone=$zone --tunnel-through-iap
Aşağıdaki komutları çalıştırın:
ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html
Ping'ler ve curl istekleri başarılı olur.
Çıkış:
root@clientb:~$ ping 10.10.10.200 -c 5 PING 10.10.10.200 (10.10.10.200) 56(84) bytes of data. 64 bytes from 10.10.10.200: icmp_seq=1 ttl=64 time=1.346 ms 64 bytes from 10.10.10.200: icmp_seq=2 ttl=64 time=0.249 ms 64 bytes from 10.10.10.200: icmp_seq=3 ttl=64 time=0.305 ms 64 bytes from 10.10.10.200: icmp_seq=4 ttl=64 time=0.329 ms 64 bytes from 10.10.10.200: icmp_seq=5 ttl=64 time=0.240 ms
root@clientb:~$ curl 10.10.10.200/index.html <html><body><p>Server</p></body></html>
Şimdi sanal makine terminalinden çıkıp Cloudshell'e geri dönün.
10. Create an Instance Group
Üçüncü taraf sanal makineniz için yönetilmeyen bir örnek grubu oluşturun.
Cloudshell'den:
gcloud compute instance-groups unmanaged create pbr-uig --zone=$zone
Fw örneğini yönetilmeyen örnek grubuna ekleyin.
Cloudshell'den:
gcloud compute instance-groups unmanaged add-instances pbr-uig --instances=fw --zone=$zone
11. Durum denetimi oluşturma
Arka uç hizmeti için bir durum denetimi oluşturun. Basit bir TCP bağlantı noktası 80 durum denetimi gerçekleştireceğiz.
Cloudshell'den:
gcloud compute health-checks create tcp $prefix-hc-tcp-80 --region=$region --port 80
12. Arka uç hizmeti oluşturma
İletim kuralına eklenecek bir arka uç hizmeti oluşturun.
Cloudshell'den:
gcloud compute backend-services create be-pbr --load-balancing-scheme=internal --protocol=tcp --region=$region --health-checks=$prefix-hc-tcp-80 --health-checks-region=$region
Şimdi örnek grubunu arka uç hizmetine ekleyin.
Cloudshell'den:
gcloud compute backend-services add-backend be-pbr --region=$region --instance-group=pbr-uig --instance-group-zone=$zone
13. İletim kuralı oluşturma
Cloudshell'den:
gcloud compute forwarding-rules create fr-pbr --region=$region --load-balancing-scheme=internal --network=$prefix-vpc --subnet=$prefix-vpc-subnet --ip-protocol=TCP --ports=ALL --backend-service=be-pbr --backend-service-region=$region --address=10.10.10.25 --network-tier=PREMIUM
14. PBR Kuralı Oluştur
Bu PBR kuralı müşteriler için geçerlidir. Kaynak IP 10.10.10.10/32 (clienta'nın adresi), hedef IP ise 10.10.10.0/24 ise tüm IPv4 trafiğini 10.10.10.25 iletim kuralına yönlendirir.
Bu, clienta'nın PBR ile eşleşeceği, clientb ile eşleşmeyeceği anlamına gelir.
Cloudshell'den:
gcloud network-connectivity policy-based-routes create pbr-client \ --network=projects/$project_id/global/networks/$prefix-vpc \ --next-hop-ilb-ip=10.10.10.25 \ --source-range=10.10.10.10/32 \ --destination-range=10.10.10.0/24 \ --protocol-version=IPv4 \ --priority=1000 \ --tags=client
Bu PBR kuralı sunucu için geçerlidir. Kaynak IP 10.10.10.200/32, hedef IP ise 10.10.10.10/32 ise tüm IPv4 trafiğini 10.10.10.25 iletim kuralına yönlendirir.
Cloudshell'den:
gcloud network-connectivity policy-based-routes create pbr-server \ --network=projects/$project_id/global/networks/$prefix-vpc \ --next-hop-ilb-ip=10.10.10.25 \ --source-range=10.10.10.200/32 \ --destination-range=10.10.10.10/32 \ --protocol-version=IPv4 \ --priority=2000 \ --tags=server
15. PBR ile Bağlantıyı Test Etme
Şimdi PBR işlevini doğrulayacağız. "Fw" örneği, sunucuya gelen istekleri reddedecek şekilde iptables ile yapılandırılır. PBR çalışırsa, clientb hâlâ başarılıyken daha önce clienta üzerinde çalışan istekler başarısız olur.
clienta bilgi işlem sanal makinesine SSH uygulayın ve aynı testleri çalıştırın.
cloudshell1'den:
gcloud compute ssh clienta --zone=$zone --tunnel-through-iap
Aşağıdaki komutları çalıştırın:
ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html
Çıkış:
root@clienta:~$ ping 10.10.10.200 -c 5 PING 10.10.10.200 (10.10.10.200) 56(84) bytes of data. From 10.10.10.75 icmp_seq=1 Destination Port Unreachable From 10.10.10.75 icmp_seq=2 Destination Port Unreachable From 10.10.10.75 icmp_seq=3 Destination Port Unreachable From 10.10.10.75 icmp_seq=4 Destination Port Unreachable From 10.10.10.75 icmp_seq=5 Destination Port Unreachable
root@clienta:~$ curl 10.10.10.200/index.html curl: (7) Failed to connect to 10.10.10.200 port 80: Connection refused
İstekler başarısız olduğu için PBR'nin clienta trafiğini, bu trafiği engelleyecek şekilde yapılandırılan mevcut örneğine aktif olarak yönlendirdiğini onaylayabiliriz.
Clientb'e SSH uygulayın ve aynı bağlantı testini çalıştırın.
cloudshell2'den:
gcloud compute ssh clientb --zone=$zone --tunnel-through-iap
Aşağıdaki komutları çalıştırın:
ping 10.10.10.200 -c 5
curl 10.10.10.200/index.html
Çıkış:
root@clientb:~$ ping 10.10.10.200 -c 5 PING 10.10.10.200 (10.10.10.200) 56(84) bytes of data. 64 bytes from 10.10.10.200: icmp_seq=1 ttl=63 time=0.361 ms 64 bytes from 10.10.10.200: icmp_seq=2 ttl=63 time=0.475 ms 64 bytes from 10.10.10.200: icmp_seq=3 ttl=63 time=0.379 ms
root@clientb:~$ curl 10.10.10.200 <html><body><p>Server</p></body></html>
Gördüğünüz gibi, clientb'den sunucuya yapılan istekler başarılıdır. Bunun nedeni, isteklerin kaynak IP için bir PBR kuralıyla eşleşmemesidir.
16. [İsteğe bağlı] Güvenlik duvarındaki yakalamalarla doğrulama
Bu isteğe bağlı bölümde, güvenlik duvarı sanal makinesinde paket yakalamaları alarak PBR'yi doğrulama fırsatınız olacak.
cloudshell1 ve cloudshell2'de clienta ve clientb'ye SSH bağlantınızın olması gerekir.
+ işaretini tıklayarak ek bir cloudshell sekmesi açın.
cloudshell3'ten değişkenleri ayarlayın:
export project_id=`gcloud config list --format="value(core.project)"` export region=us-central1 export zone=us-central1-a export prefix=codelab-pbr
SSH üzerinden akışa geç:
gcloud compute ssh fw --zone=$zone --tunnel-through-iap
fw'de (cloudshell3) aşağıdaki komutu çalıştırın:
sudo tcpdump -i any icmp -nn
Clienta'dan (cloudshell1) ping testini çalıştırın:
ping 10.10.10.200 -c 5
clientb'den (cloudshell2) ping testini çalıştırın:
ping 10.10.10.200 -c 5
Fw'deki çıkış (cloudshell 3):
root@fw:~$ sudo tcpdump -i any icmp -nn tcpdump: data link type LINUX_SLL2 tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes 17:07:42.215297 ens4 In IP 10.10.10.10 > 10.10.10.200: ICMP echo request, id 25362, seq 1, length 64 17:07:42.215338 ens4 Out IP 10.10.10.75 > 10.10.10.10: ICMP 10.10.10.200 protocol 1 port 51064 unreachable, length 92 17:07:43.216122 ens4 In IP 10.10.10.10 > 10.10.10.200: ICMP echo request, id 25362, seq 2, length 64 17:07:43.216158 ens4 Out IP 10.10.10.75 > 10.10.10.10: ICMP 10.10.10.200 protocol 1 port 30835 unreachable, length 92 17:07:44.219064 ens4 In IP 10.10.10.10 > 10.10.10.200: ICMP echo request, id 25362, seq 3, length 64 17:07:44.219101 ens4 Out IP 10.10.10.75 > 10.10.10.10: ICMP 10.10.10.200 protocol 1 port 2407 unreachable, length 92
PBR geçerli olmadığından, clientb'den (10.10.10.11) tcpdump'ta paket görmezsiniz.
Kaynakları temizlemek için Cloudshell'e geri dönün.
17. Temizleme adımları
Cloud Shell'den PBR kuralını, iletim kuralını, arka uç hizmetini, durum denetimi, örnek grubunu, işlem örneklerini, NAT'yi, Cloud Router'ı ve güvenlik duvarı kurallarını kaldırın.
gcloud -q network-connectivity policy-based-routes delete pbr-client gcloud -q network-connectivity policy-based-routes delete pbr-server gcloud -q compute forwarding-rules delete fr-pbr --region=$region gcloud -q compute backend-services delete be-pbr --region=$region gcloud -q compute health-checks delete $prefix-hc-tcp-80 --region=$region gcloud -q compute instance-groups unmanaged delete pbr-uig --zone=$zone gcloud -q compute instances delete clienta --zone=$zone gcloud -q compute instances delete clientb --zone=$zone gcloud -q compute instances delete server --zone=$zone gcloud -q compute instances delete fw --zone=$zone gcloud -q compute routers nats delete ${prefix}-nat-gw-${region} \ --router=$prefix-cr --router-region=$region gcloud -q compute routers delete $prefix-cr --region=$region gcloud -q compute firewall-rules delete $prefix-allow-iap-proxy gcloud -q compute firewall-rules delete $prefix-allow-http-icmp gcloud -q compute firewall-rules delete $prefix-fw-allow-ingress gcloud -q compute firewall-rules delete $prefix-allow-hc-ingress
Alt ağı ve VPC'leri kaldırın:
gcloud -q compute networks subnets delete $prefix-vpc-subnet \ --region $region gcloud -q compute networks delete $prefix-vpc
18. Tebrikler!
Codelab'i tamamladığınız için tebrikler.
İşlediğimiz konular
- Politika Tabanlı Rotalar