1. Wprowadzenie
Omówienie
W tym praktycznym ćwiczeniu użytkownicy dowiedzą się, jak można używać Network Connectivity Center (NCC) do nawiązywania połączeń lokalnych na dużą skalę dzięki obsłudze węzłów VPC i wymiany tras dynamicznych. Gdy użytkownicy zdefiniują VPC jako promień VPC, mogą połączyć je z wieloma sieciami VPC za pomocą centrum NCC. Aby nawiązać połączenie sieciowe z siecią lokalną użytkownika, można podłączyć wirtualną kartę NIC routera, tunele HA_VPN lub przyłącza VLAN do tego samego centrum NCC, co promienie VPC NCC.
Zasób centrum zapewnia scentralizowany model zarządzania łącznością do łączenia promieni.
Co utworzysz
W tym laboratorium programistycznym utworzysz topologię logiczną z centrum i promieniami za pomocą centrum NCC, które będzie wdrażać połączenia hybrydowe między siecią lokalną a siecią VPC zadania.
Czego się nauczysz
- Różnice między siecią VPC zadania a siecią routingu
- Integracja NCC promienia VPC i promienia hybrydowego
Czego potrzebujesz
- znajomość sieci VPC GCP,
- Znajomość Cloud Router i routingu BGP
- Projekt Google Cloud
- Sprawdź Limit:sieci i w razie potrzeby poproś o dodatkowe sieci. Zrzut ekranu poniżej:
Cele
- Konfigurowanie środowiska GCP
- Konfigurowanie Network Connectivity Center z siecią VPC jako promieniową
- Konfigurowanie Network Connectivity Center z tunelami HA-VPN jako promienie hybrydowe
- Sprawdzanie ścieżki danych
- Poznaj funkcje obsługi NCC
- Czyszczenie używanych zasobów
Zanim zaczniesz
Google Cloud Console i Cloud Shell
W tym module będziemy korzystać z konsoli Google Cloud Platform i Cloud Shell.
Projekt NCC Hub Konsola Google Cloud
Konsolę Cloud Console można otworzyć na stronie https://console.cloud.google.com.
Aby ułatwić konfigurowanie Centrum łączności sieciowej, skonfiguruj w Google Cloud te elementy:
W konsoli Google Cloud na stronie selektora projektu wybierz lub utwórz projekt Google Cloud.
Uruchom Cloud Shell. Ten samouczek Codelab wykorzystuje zmienne $variables, aby ułatwić implementację konfiguracji gcloud w Cloud Shell.
gcloud auth list
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=[YOUR-PROJECT-NAME]
echo $projectname
region="us-central1"
zone="us-central1-a"
Role uprawnień
NCC wymaga ról uprawnień do uzyskiwania dostępu do określonych interfejsów API. Pamiętaj, aby skonfigurować użytkownika z wymaganymi rolami NCC w IAM.
Rola/opis | Uprawnienia |
networkconnectivity.networkAdmin – umożliwia administratorom sieci zarządzanie węzłami i ramieniem. | networkconnectivity.hubs.networkconnectivity.spokes. |
networkconnectivity.networkSpokeManager – umożliwia dodawanie promieni i zarządzanie nimi w centrum. Do korzystania w współdzielonym środowisku VPC, w którym projekt główny jest właścicielem centrum, ale inni administratorzy w innych projektach mogą dodawać do niego promienie dla swoich załączników. | networkconnectivity.spokes.** |
networkconnectivity.networkUsernetworkconnectivity.networkViewer – umożliwia użytkownikom sieci wyświetlanie różnych atrybutów osi i ramion. | networkconnectivity.hubs.getnetworkconnectivity.hubs.listnetworkconnectivity.spokes.getnetworkconnectivity.spokes.listnetworkconnectivity.spokes.aggregatedList |
2. Konfigurowanie środowiska sieciowego
Omówienie
W tej sekcji wdrożymy 3 sieci VPC i reguły zapory sieciowej w jednym projekcie. Diagram logiczny przedstawia środowisko sieciowe, które zostanie skonfigurowane na tym etapie. W tym ćwiczeniu użyjemy sieci VPC do symulowania sieci lokalnej.
Kluczowe pojęcie 1
Globalna sieć VPC Google Cloud zapewnia łączność ścieżki danych między ponad 44 regionami GCP. Cloud Router, który jest usługą regionalną, dynamicznie rozgłasza podsieci i propaguje zapamiętane trasy w regionie, w którym skonfigurowano router, lub w całej sieci VPC. To, czy router chmurowy będzie rozgłaszać trasy regionalnie czy globalnie, zależy od użytkownika definiującego tryb routingu dynamicznego: regionalny lub globalny.
W tej sekcji zaczniemy od skonfigurowania każdej sieci VPC z wykorzystaniem trybu kierowania regionalnego. W dalszej części tego ćwiczenia:
- „Routing VPC” oznacza VPC, który NIE jest skonfigurowany jako promień VPC NCC.
- „Workload VPC” to sieć VPC skonfigurowana jako gniazdo NCC.
Tworzenie VPC zbioru zadań i podsieci
Sieć VPC zawiera podsieci, w których zainstalujesz maszynę wirtualną GCE na potrzeby walidacji ścieżki danych.
vpc_spoke_network_name="workload-vpc"
vpc_spoke_subnet_name="workload-subnet"
vpc_spoke_subnet_ip_range="10.0.1.0/24"
vpc_spoke_name="workload-vpc-spoke"
region="us-central1"
zone="us-central1-a"
gcloud compute networks create "${vpc_spoke_network_name}" \
--subnet-mode=custom
gcloud compute networks subnets create "${vpc_spoke_subnet_name}" \
--network="${vpc_spoke_network_name}" \
--range="${vpc_spoke_subnet_ip_range}" \
--region="${region}"
Utwórz środowisko VPC i podsieć
NCC obsługuje wszystkie prawidłowe zakresy podsieci IPv4 z wyjątkiem używanych prywatnie publicznych adresów IP.
routing_vpc_network_name="routing-vpc"
routing_vpc_subnet_name="routing-vpc-subnet"
routing_vpc_subnet_range="10.0.2.0/24"
gcloud compute networks create "${routing_vpc_network_name}" \
--subnet-mode=custom
gcloud compute networks subnets create "${routing_vpc_subnet_name}" \
--region="${region}" \
--network="${routing_vpc_network_name}" \
--range="${routing_vpc_subnet_range}"
Utwórz środowisko VPC i podsieć na potrzeby lokalnego środowiska
NCC obsługuje wszystkie prawidłowe zakresy podsieci IPv4 z wyjątkiem używanych prywatnie publicznych adresów IP.
on_prem_network_name="on-prem-net-vpc"
on_prem_subnet_name="on-prem-subnet"
on_prem_subnet_range="10.0.3.0/24"
gcloud compute networks create "${on_prem_network_name}" \
--subnet-mode=custom
gcloud compute networks subnets create "${on_prem_subnet_name}" \
--region="${region}" \
--network="${on_prem_network_name}" \
--range="${on_prem_subnet_range}"
Konfigurowanie reguł zapory sieciowej VPC zadania
workload_vpc_firewall_name="workload-protocol-fw-vpc"
workload_port_firewall_name="workload-port-firewall-vpc"
gcloud compute firewall-rules create "${workload_vpc_firewall_name}" \
--network=${vpc_spoke_network_name} \
--allow="tcp,udp,icmp"
gcloud compute firewall-rules create "${workload_port_firewall_name}" \
--network=${vpc_spoke_network_name} \
--allow="tcp:22,tcp:3389,tcp:11180,icmp"
Konfigurowanie routingu VPC i reguł zapory sieciowej VPC
routing_vpc_fw_name="routing-vpc-protocol-fw"
routing_vpc_port_fw_name="routing-vpc--port-fw"
gcloud compute firewall-rules create "${routing_vpc_fw_name}" \
--network=${routing_vpc_network_name} \
--allow="tcp,udp,icmp"
gcloud compute firewall-rules create "${routing_vpc_port_fw_name}" \
--network=${routing_vpc_network_name} \
--allow="tcp:22,tcp:3389,tcp:11180,icmp"
Konfigurowanie prywatnego środowiska wirtualnego i reguł zapory sieciowej VPC
prem_protocol_fw_name="onprem-vpc-protocol-firewall"
prem_port_firewall_name="onprem-vpc-port-firewall-prem"
gcloud compute firewall-rules create "${prem_protocol_fw_name}" \
--network=${on_prem_network_name} \
--allow="tcp,udp,icmp"
gcloud compute firewall-rules create "${prem_port_firewall_name}" \
--network=${on_prem_network_name} \
--allow="tcp:22,tcp:3389,tcp:11180,icmp"
Konfigurowanie maszyny wirtualnej GCE w każdej sieci VPC
Aby zainstalować pakiety na „vm1-vpc1-ncc”, musisz tymczasowo uzyskać dostęp do internetu.
Utwórz 3 maszyny wirtualne. Każda z nich zostanie przypisana do jednej z wcześniej utworzonych sieci VPC.
gcloud compute instances create vm1-vpc-workload \
--zone us-central1-a \
--subnet="${vpc_spoke_subnet_name}" \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
apt-get install tcpdump -y
service apache2 restart
echo "
<h3>Web Server: www-vm1</h3>" | tee /var/www/html/index.html'
gcloud compute instances create vm2-vpc-routing \
--zone us-central1-a \
--subnet="${routing_vpc_subnet_name}" \
--no-address
gcloud compute instances create vm3-onprem \
--zone us-central1-a \
--subnet="${on_prem_subnet_name}" \
--no-address
3. Konfigurowanie połączeń hybrydowych
W tej sekcji skonfigurujemy tunel VPN o wysokiej dostępności, aby połączyć ze sobą sieć lokalną i sieć VPC z routingiem.
Konfigurowanie routera Cloud Router z BGP w sieci routingu VPC
routing_vpc_router_name="routing-vpc-cr"
routing_vpc_router_asn=64525
gcloud compute routers create "${routing_vpc_router_name}" \
--region="${region}" \
--network="${routing_vpc_network_name}" \
--asn="${routing_vpc_router_asn}"
Konfigurowanie routera Cloud Router z BGP w VPC lokalnym
on_prem_router_name="on-prem-router"
on_prem_router_asn=64526
gcloud compute routers create "${on_prem_router_name}" \
--region="${region}" \
--network="${on_prem_network_name}" \
--asn="${on_prem_router_asn}"
Konfigurowanie bramy VPN w sieci VPC z routingiem
routing_vpn_gateway_name="routing-vpc-vpn-gateway"
gcloud compute vpn-gateways create "${routing_vpn_gateway_name}" \
--region="${region}" \
--network="${routing_vpc_network_name}"
Konfigurowanie bramy VPN w sieci VPC na potrzeby lokalnego centrum danych
on_prem_gateway_name="on-prem-vpn-gateway"
gcloud compute vpn-gateways create "${on_prem_gateway_name}" \
--region="${region}" \
--network="${on_prem_network_name}"
Konfigurowanie tunelu VPN w sieci VPC z routingiem i sieci VPC lokalnej
secret_key=$(openssl rand -base64 24)
routing_vpc_tunnel_name="routing-vpc-tunnel"
on_prem_tunnel_name="on-prem-tunnel"
gcloud compute vpn-tunnels create "${routing_vpc_tunnel_name}" \
--vpn-gateway="${routing_vpn_gateway_name}" \
--peer-gcp-gateway="${on_prem_gateway_name}" \
--router="${routing_vpc_router_name}" \
--region="${region}" \
--interface=0 \
--shared-secret="${secret_key}"
gcloud compute vpn-tunnels create "${on_prem_tunnel_name}" \
--vpn-gateway="${on_prem_gateway_name}" \
--peer-gcp-gateway="${routing_vpn_gateway_name}" \
--router="${on_prem_router_name}" \
--region="${region}" \
--interface=0 \
--shared-secret="${secret_key}"
Utwórz sesje BGP do peera BGP w sieci VPC i routerach w chmurze
interface_hub_name="if-hub-to-prem"
hub_router_ip="169.254.1.1"
gcloud compute routers add-interface "${routing_vpc_router_name}" \
--interface-name="${interface_hub_name}" \
--ip-address="${hub_router_ip}" \
--mask-length=30 \
--vpn-tunnel="${routing_vpc_tunnel_name}" \
--region="${region}"
bgp_hub_name="bgp-hub-to-prem"
prem_router_ip="169.254.1.2"
gcloud compute routers add-bgp-peer "${routing_vpc_router_name}" \
--peer-name="${bgp_hub_name}" \
--peer-ip-address="${prem_router_ip}" \
--interface="${interface_hub_name}" \
--peer-asn="${on_prem_router_asn}" \
--region="${region}"
interface_prem_name="if-prem-to-hub"
gcloud compute routers add-interface "${on_prem_router_name}" \
--interface-name="${interface_prem_name}" \
--ip-address="${prem_router_ip}" \
--mask-length=30 \
--vpn-tunnel="${on_prem_tunnel_name}" \
--region="${region}"
bgp_prem_name="bgp-prem-to-hub"
gcloud compute routers add-bgp-peer "${on_prem_router_name}" \
--peer-name="${bgp_prem_name}" \
--peer-ip-address="${hub_router_ip}" \
--interface="${interface_prem_name}" \
--peer-asn="${routing_vpc_router_asn}" \
--region="${region}"
Domyślnie podsieci centrum NCC nie są ogłaszane do promieni hybrydowych. W następnym kroku skonfiguruj router w chmurze, aby ogłaszał on trasy podsieci NCC w sieci lokalnej.
Rozgłaszanie podsieci promienia VPC do lokalnego routera Cloud Router
gcloud compute routers update "${routing_vpc_router_name}" \
--advertisement-mode custom \
--set-advertisement-groups=all_subnets \
--set-advertisement-ranges="${vpc_spoke_subnet_ip_range}" \
--region="${region}"
Rozgłaszanie lokalnych podsieci do routera Cloud Router w VPC do routingu
gcloud compute routers update "${on_prem_router_name}" \
--advertisement-mode custom \
--set-advertisement-groups=all_subnets \
--region="${region}"
Zaktualizuj konfigurację BGP peeringu routera w chmurze, aby ogłaszać prefiksy o wartości MED 111. W następnej sekcji przyjrzymy się działaniu NCC przy wartościach BGP Med.
on_prem_router_name="on-prem-router"
bgp_prem_name="bgp-prem-to-hub"
gcloud compute routers update-bgp-peer "${on_prem_router_name}" \
--peer-name="${bgp_prem_name}" \
--advertised-route-priority="111" \
--region="${region}"
Sprawdzanie stanu tunelu routingu VPC
gcloud compute vpn-tunnels describe routing-vpc-tunnel \
--region=us-central1 \
--format='flattened(status,detailedStatus)'
Sprawdzanie stanu routera Cloud Router w VPC
Użyj polecenia gcloud, aby wyświetlić listę zapamiętanych tras BGP routera vpc cloud.
gcloud compute routers get-status routing-vpc-cr \
--region=us-central1
4. Centrum Network Connectivity Center
Omówienie
W tej sekcji skonfigurujemy węzeł NCC za pomocą poleceń gcloud. Centrum NCC będzie pełnić rolę platformy sterującej odpowiedzialnej za tworzenie konfiguracji routingu między każdym z węzłów VPC.
Włączanie usług interfejsu API
Włącz interfejs Network Connectivity API, jeśli nie jest jeszcze włączony:
gcloud services enable networkconnectivity.googleapis.com
Tworzenie centrum NCC
Tworzenie centrum NCC za pomocą polecenia gCloud
hub_name="mesh-hub"
gcloud network-connectivity hubs create "${hub_name}"
Przykładowe dane wyjściowe
Create request issued for: [mesh-hub]
Waiting for operation [projects/ncc/locations/global/operations/operation-1719930559145-61c448a0426e4-2d18c8dd-7107edbe] to complete...done.
Created hub [mesh-hub].
Opisz nowo utworzone centrum NCC. Zanotuj nazwę i powiązaną ścieżkę.
gcloud network-connectivity hubs describe mesh-hub
createTime: '2024-07-02T14:29:19.260054897Z'
exportPsc: false
name: projects/ncc/locations/global/hubs/mesh-hub
policyMode: PRESET
presetTopology: MESH
routeTables:
- projects/ncc/locations/global/hubs/mesh-hub/routeTables/default
state: ACTIVE
uniqueId: 08f9ae88-f76f-432b-92b2-357a85fc83aa
updateTime: '2024-07-02T14:29:32.583206925Z'
W centrum NCC wprowadzono tabelę routingu, która definiuje platformę sterującą do tworzenia połączeń danych. Znajdź nazwę tabeli routingu centrum NCC
gcloud network-connectivity hubs route-tables list --hub=mesh-hub
NAME HUB DESCRIPTION
default mesh-hub
Znajdź identyfikator URI tabeli domyślnych tras NCC.
gcloud network-connectivity hubs route-tables describe default --hub=mesh-hub
createTime: '2024-07-02T14:29:22.340190411Z'
name: projects/ncc/locations/global/hubs/mesh-hub/routeTables/default
state: ACTIVE
uid: fa2af78b-d416-41aa-b442-b8ebdf84f799
Wypisz zawartość domyślnej tabeli routingu NCC Hub. Uwaga* Tabela tras centrum NCC będzie pusta, dopóki nie zostaną zdefiniowane promienie hybrydowe NCC lub promienie VPC.
gcloud network-connectivity hubs route-tables routes list --hub=mesh-hub --route_table=default
Tabela tras centrum NCC powinna być pusta.
5. NCC z ramionami hybrydowymi i VPC
Omówienie
W tej sekcji skonfigurujesz 2 węzły NCC za pomocą poleceń gCloud. Jeden promień będzie promieniem VPC, a drugi – hybrydowym (VPN).
Konfigurowanie sieci VPC zadań jako węzła NCC
Skonfiguruj VPC zadania jako promień NCC i przypisz go do utworzonego wcześniej centrum NCC. Wywołania interfejsu API NCC wymagają podania lokalizacji. Flaga „–global” pozwala użytkownikowi uniknąć konieczności podawania pełnej ścieżki URI podczas konfigurowania nowego koła NCC.
vpc_spoke_name="workload-vpc-spoke"
vpc_spoke_network_name="workload-vpc"
gcloud network-connectivity spokes linked-vpc-network create "${vpc_spoke_name}" \
--hub="${hub_name}" \
--vpc-network="${vpc_spoke_network_name}" \
--global
Create request issued for: [workload-vpc-spoke]
Waiting for operation [projects/ncc/locations/global/operations/operation-1719931097138-61c44aa15463f-90de22c7-40c10e6b] to complete...done.
Created spoke [workload-vpc-spoke].
createTime: '2024-07-02T14:38:17.315200822Z'
group: projects/ncc/locations/global/hubs/mesh-hub/groups/default
hub: projects/ncc/locations/global/hubs/mesh-hub
linkedVpcNetwork:
uri: https://www.googleapis.com/compute/v1/projects/ncc/global/networks/workload-vpc
name: projects/ncc/locations/global/spokes/workload-vpc-spoke
spokeType: VPC_NETWORK
state: ACTIVE
uniqueId: 33e50612-9b62-4ec7-be6c-962077fd47dc
updateTime: '2024-07-02T14:38:44.196850231Z'
Konfigurowanie tunelu VPN w routingu VPC jako połączenia hybrydowego
Aby skonfigurować tunel VPN jako hybrydowy spoke, który będzie się łączyć z węzłem mesh, użyj tego polecenia gcloud.
vpn_spoke_name="hybrid-spoke"
routing_vpc_tunnel_name="routing-vpc-tunnel"
region="us-central1"
hub_name="mesh-hub"
gcloud network-connectivity spokes linked-vpn-tunnels create "${vpn_spoke_name}" \
--region="${region}" \
--hub="${hub_name}" \
--vpn-tunnels="${routing_vpc_tunnel_name}"
Przykładowe dane wyjściowe
Create request issued for: [hybrid-spoke]
Waiting for operation [projects/ncc/locations/us-central1/operations/operation-1719932916561-61c45168774be-0a06ae03-88192175] to complete...done.
Created spoke [hybrid-spoke].
Sprawdzanie konfiguracji sekcji Mesh-Hub
Użyj polecenia gcloud, aby wyświetlić zawartość domyślnej tabeli routingu NCC Hub.
gcloud network-connectivity hubs list-spokes mesh-hub
Analiza domyślnej tabeli routingu węzła mesh
Użyj polecenia gcloud, aby wyświetlić zawartość domyślnej tabeli routingu NCC Hub.
gcloud network-connectivity hubs route-tables routes list --hub=mesh-hub \
--route_table=default
Prefiksy zdefiniowane przez router Cloud Router z wartościami MED protokołu BGP są propagowane w promieniowych sieciach NCC, gdy używasz dynamicznej wymiany tras z hybrydowymi promieniowymi sieciami NCC.
Aby wyświetlić wartość priorytetu „111”, użyj polecenia gcloud.
gcloud network-connectivity hubs route-tables routes list \
--hub=mesh-hub \
--route_table=default \
--effective-location=us-central1 \
--filter=10.0.3.0/24
6. Sprawdzanie ścieżki danych
W tym kroku zweryfikujemy ścieżkę danych między węzłem hybrydowym NCC a węzłem VPC.
Użyj danych wyjściowych z tych poleceń gcloud, aby zalogować się na maszynę wirtualną na miejscu.
gcloud compute instances list --filter="name=vm3-onprem"
Zaloguj się do instancji maszyny wirtualnej znajdującej się w sieci lokalnej.
gcloud compute ssh vm3-onprem --zone=us-central1-a
W terminalu vm3-onprem użyj polecenia curl, aby nawiązać sesję internetową z maszyną wirtualną hostowaną w vpc workload.
curl 10.0.1.2 -v
* Trying 10.0.1.2:80...
* Connected to 10.0.1.2 (10.0.1.2) port 80 (#0)
> GET / HTTP/1.1
> Host: 10.0.1.2
> User-Agent: curl/7.74.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Wed, 03 Jul 2024 15:41:34 GMT
< Server: Apache/2.4.59 (Debian)
< Last-Modified: Mon, 01 Jul 2024 20:36:16 GMT
< ETag: "1e-61c358c8272ba"
< Accept-Ranges: bytes
< Content-Length: 30
< Content-Type: text/html
<
<h3>Web Server: www-vm1</h3>
* Connection #0 to host 10.0.1.2 left intact
7. Czyszczenie
Zaloguj się w Cloud Shell i usuń zasoby GCP.
Usuwanie promieni NCC
gcloud network-connectivity spokes delete workload-vpc-spoke --global \
--quiet
gcloud network-connectivity spokes delete hybrid-spoke \
--quiet \
--region us-central1
Usuwanie centrum NCC
gcloud network-connectivity hubs delete mesh-hub --quiet
Usuwanie reguł zapory sieciowej
gcloud compute firewall-rules delete onprem-vpc-port-firewall-prem onprem-vpc-protocol-firewall routing-vpc--port-fw routing-vpc-protocol-fw workload-port-firewall-vpc workload-protocol-fw-vpc --quiet
Usuwanie tunelu VPN o wysokiej dostępności
gcloud compute vpn-tunnels delete on-prem-tunnel \
--region=us-central1 \
--quiet
gcloud compute vpn-tunnels delete routing-vpc-tunnel \
--region=us-central1 \
--quiet
Usuwanie bramy VPN
gcloud compute vpn-gateways delete on-prem-vpn-gateway \
--region=us-central1 --quiet
gcloud compute vpn-gateways delete routing-vpc-vpn-gateway \
--region us-central1 --quiet
Usuwanie routera Cloud Router
gcloud compute routers delete routing-vpc-cr --region us-central1 --quiet
gcloud compute routers delete on-prem-router --region us-central1 --quiet
Usuwanie instancji GCE
gcloud compute instances delete vm1-vpc-workload \
--zone=us-central1-a \
--quiet
gcloud compute instances delete vm2-vpc-routing \
--zone=us-central1-a \
--quiet
gcloud compute instances delete vm3-onprem \
--zone=us-central1-a \
--quiet
Usuwanie podsieci VPC
gcloud compute networks subnets delete workload-subnet --region us-central1 --quiet
gcloud compute networks subnets delete on-prem-subnet --region us-central1 --quiet
gcloud compute networks subnets delete routing-vpc-subnet --region us-central1 --quiet
Usuwanie sieci VPC
gcloud compute networks delete on-prem-net-vpcworkload-vpc routing-vpc
--quiet
8. Gratulacje!
Moduł Dynamic Route Exchange w Network Connectivity Center został ukończony.
Omówione kwestie
- Wymiana tras dynamicznych z Network Connectivity Center
Następne kroki
©Google, LLC lub jej podmioty stowarzyszone. Wszelkie prawa zastrzeżone. Nie rozpowszechniaj.