AlpinaShop ja es construeix, es desplega i s'observa tota sola. El mòdul 7 comença per la part que el curs ha anat esquivant: hi ha sistemes d'AlpinaShop que no són a Google Cloud i no hi seran. A la botiga física de Sabadell hi ha un servidor amb un ERP en MySQL que gestiona l'inventari, la caixa i les factures; i al magatzem hi ha un terminal de radiofreqüència que parla amb aquest ERP per la xarxa local. Ningú no els ha migrat, ningú no té previst migrar-los enguany, i tanmateix la botiga en línia necessita saber l'estoc real.
Això és una arquitectura híbrida, encara que ningú no l'hagi anomenada així. I no és un cas rar: és la situació normal de gairebé qualsevol empresa amb més de cinc anys d'història. Aquesta lliçó tracta de com Google Cloud aborda aquest escenari, i del producte que durant anys el va representar: Anthos.
Amb un advertiment d'honestedat per endavant, perquè marca el to de tot el mòdul: al final de la lliçó, AlpinaShop no adoptarà Anthos. I entendre per què és tan valuós com saber configurar-lo, perquè l'habilitat que separa un bon arquitecte de núvol d'un bon recitador de serveis és saber quan no cal l'eina gran. Aprendràs què és, com funciona, quins problemes resol de debò i quant costa —i amb aquestes tres dades podràs prendre la decisió tu mateix, a la teva empresa, amb criteri propi.
Una nota prèvia sobre noms, perquè aquest és el producte de Google Cloud que més vegades ha canviat de nom i la documentació que trobaràs està repartida entre tots ells. Es detalla a l'apartat 5.
Contingut
- Què signifiquen exactament «híbrid» i «multinúvol»
- Els motius reals per no ser només en un núvol
- Els costos ocults que el fullet no esmenta
- El cas d'AlpinaShop: Sabadell, l'ERP i el terminal del magatzem
- Què és Anthos i en què s'ha convertit
- La flota (fleet): la unitat de gestió
- Els components, un a un
- Config Sync: la configuració com a codi amb GitOps
- Policy Controller: les polítiques com a codi
- Exemple pràctic: registrar
alpinashop-clusteri aplicar una política - El mallat de serveis explicat sense fum
- Binary Authorization i la cadena de confiança
- Observabilitat unificada de la flota
- Model de llicència i cost: el que decideix a la pràctica
- Alternatives més lleugeres a l'híbrid complet
- Quan sí i quan no: la taula de decisió
- DA-004: la decisió honesta d'AlpinaShop
- Què signifiquen exactament «híbrid» i «multinúvol»
Els dos termes es fan servir com a sinònims i no ho són. La diferència importa perquè els problemes que plantegen són diferents.
| Terme | Definició | Exemple típic |
|---|---|---|
| Núvol públic únic | Tota la càrrega en un proveïdor | AlpinaShop fins avui: tot a GCP |
| Híbrid | Núvol públic + infraestructura pròpia (centre de dades, oficina, botiga, fàbrica) | GCP + l'ERP de Sabadell |
| Multinúvol | Dos o més núvols públics | GCP per al catàleg, AWS per a l'ERP en SaaS |
| Vora (edge) | Còmput a prop del punt d'ús: botiga, planta, vehicle | El terminal del magatzem executant lògica local |
I una quarta categoria que gairebé ningú no anomena però que és la més freqüent:
- Multinúvol accidental: l'empresa és a GCP, però a més té un CRM a Salesforce, el correu a Microsoft 365, la facturació en un SaaS i un parell de màquines en un proveïdor barat que algú va contractar el 2019. Ningú no ho va decidir; va passar. I tanmateix cal integrar-ho, protegir-ho i pagar-ho.
flowchart TB
subgraph GCP["Google Cloud - europe-west1"]
A["alpinashop-prod<br/>catàleg, GKE, Cloud SQL"]
B["alpinashop-datos<br/>BigQuery"]
end
subgraph SAB["Botiga de Sabadell - local"]
C["Servidor ERP<br/>MySQL 5.7"]
D["Terminal de magatzem<br/>radiofreqüència"]
end
subgraph SAAS["SaaS de tercers"]
E["Passarel·la de pagament"]
F["Correu i ofimàtica"]
end
A <-->|"estoc i comandes"| C
C --- D
A --> E
B <-.->|"informes"| F
style GCP fill:#e8f0fe,stroke:#4285f4
style SAB fill:#fce8e6,stroke:#ea4335
style SAAS fill:#fef7e0,stroke:#fbbc04
AlpinaShop, sense haver-ho decidit mai, ja és híbrida i ja és multinúvol accidental. La feina d'arquitectura no consisteix a evitar-ho, sinó a gestionar-ho amb intenció.
- Els motius reals per no ser només en un núvol
Les presentacions comercials donen sempre els mateixos cinc motius. Són certs, però cadascun té una versió honesta que convé conèixer.
Inversió prèvia al centre de dades
El motiu de fullet: «aprofita la teva inversió existent».
La versió real: si fa divuit mesos l'empresa va comprar servidors amb una amortització a cinc anys, el director financer no signarà llençar-los a les escombraries, i té raó. El cost d'aquests servidors ja està pagat: apagar-los no torna els diners, només estalvia l'electricitat i el manteniment. Migrar abans que s'amortitzin significa pagar dues vegades la mateixa capacitat.
És el motiu més comú i el més legítim, i també el que caduca sol: d'aquí a tres anys aquella inversió ja no existeix i la conversa és una altra. Per això moltes arquitectures híbrides són en realitat migracions lentes disfressades d'estratègia permanent.
Latència amb un sistema local
El motiu de fullet: «processa les dades on es generen».
La versió real: hi ha processos on 30 mil·lisegons importen i d'altres on no. Un terminal de magatzem escanejant codis de barres contra un servidor local respon en 2 ms; contra europe-west1 respondrà en 15-25 ms des de Sabadell. Per escanejar un paquet, cap de les dues no molesta. Per al braç robòtic d'una línia de producció que ajusta la seva posició mil vegades per segon, el núvol no és una opció a cap latència.
La pregunta correcta no és «hi ha latència?» —sempre n'hi ha— sinó «què passa si l'enllaç cau durant dues hores?». Si la resposta és «la botiga no pot cobrar», el sistema ha de poder funcionar sense connexió, i això obliga a tenir còmput local. Aquest, i no els mil·lisegons, és l'argument fort.
Residència de les dades i requisits regulatoris
El motiu de fullet: «compleix la normativa».
La versió real: hi ha tres nivells molt diferents que es confonen constantment:
| Nivell | Què exigeix | Obliga a híbrid? |
|---|---|---|
| Residència | Les dades s'emmagatzemen en una regió concreta | No: europe-west1 o europe-southwest1 ho compleixen |
| Sobirania | Les dades queden fora de l'abast legal de tercers països | De vegades: hi ha ofertes de núvol sobirà |
| Control físic | Ningú tret de tu no toca el maquinari | Sí, per definició |
La immensa majoria de les empreses espanyoles que diuen «no podem anar al núvol per la llei» són al nivell 1, que es resol triant regió. L'RGPD no prohibeix el núvol públic: exigeix un tractament adequat, un encarregat del tractament amb contracte, mesures tècniques i control de les transferències internacionals. Només sectors concrets —defensa, certes administracions, sanitat en alguns supòsits— arriben al nivell 3.
Avís. La interpretació dels requisits regulatoris que apliquin a les teves dades no és una decisió tècnica. Qualsevol disseny que tracti dades personals, sanitàries o financeres ha de ser revisat per un professional de seguretat i de compliment normatiu abans d'anar a producció.
Evitar la dependència del proveïdor
El motiu de fullet: «no et lliguis a un fabricant».
La versió real, i és la més mal interpretada de les cinc: la dependència no és binària, té graus, i evitar-la del tot costa més del que estalvia.
| Nivell d'acoblament | Exemple | Cost de sortir |
|---|---|---|
| Molt baix | Contenidors estàndard sobre Kubernetes | Dies |
| Baix | Cloud Run, Cloud Storage (API compatible amb S3 en d'altres) | Setmanes |
| Mitjà | Cloud SQL PostgreSQL, Pub/Sub | Mesos |
| Alt | BigQuery, Spanner, Vertex AI | Reescriptura |
| Total | App Engine estàndard clàssic | Reescriptura |
L'estratègia sensata no és «fer servir només el que és portable», perquè això significa renunciar a BigQuery, que és probablement el millor motiu per ser a Google Cloud. L'estratègia sensata és saber en quin nivell ets a cada peça i que sigui una decisió conscient. AlpinaShop està molt acoblada en analítica (BigQuery) i molt poc en l'aplicació (contenidors). Està bé: l'analítica es refaria en sis mesos si calgués, la botiga es mouria en dues setmanes.
I una dada incòmoda: la majoria d'empreses que munten una arquitectura multinúvol «per no dependre de ningú» acaben depenent de la capa que unifica tots dos núvols —que sol ser un altre proveïdor— i afegint una dependència en lloc de treure-la.
Continuïtat de negoci
El motiu de fullet: «si un núvol cau, continues funcionant».
La versió real: les caigudes totals d'un proveïdor són extraordinàriament rares; les caigudes d'una regió són molt més freqüents, i per a això no cal un altre núvol: n'hi ha prou amb una altra regió. Muntar multinúvol actiu-actiu per resistir una caiguda global de Google és pagar el doble de complexitat tot l'any per cobrir un esdeveniment que potser no passarà mai. Es tracta amb detall a 07-06, amb RTO i RPO.
- Els costos ocults que el fullet no esmenta
Cada model té un cost que no apareix a la comparativa de preus.
| Model | Cost evident | Costos ocults |
|---|---|---|
| Núvol únic | Factures mensuals | Acoblament; poder de negociació baix |
| Híbrid | Núvol + maquinari + enllaços | Dues disciplines operatives; personal amb dos perfils; l'enllaç és un punt únic de fallada; apedaçament del maquinari; guàrdies 24×7 pròpies |
| Multinúvol | Dues factures | Dos IAM diferents; dues maneres de fer xarxa; dos models de facturació; egress entre núvols (car); l'equip domina dos ecosistemes a mitges en lloc d'un bé |
| Vora | Dispositius | Desplegament físic; actualitzacions remotes; seguretat física; inventari |
El cost ocult més car de tots és humà. AlpinaShop té una persona d'infraestructura. Un model híbrid gestionat de debò —amb la seva malla de serveis, les seves polítiques replicades i el seu enllaç redundant— requereix que aquesta persona sigui experta en Kubernetes, en xarxes empresarials, en el maquinari local i en Google Cloud, i que a més estigui disponible quan falli a les tres de la matinada. Aquest és el motiu pel qual la majoria d'arquitectures híbrides de pime fracassen, i no té res a veure amb la tecnologia.
- El cas d'AlpinaShop: Sabadell, l'ERP i el terminal del magatzem
Posem el cas concret sobre la taula, amb les dades que la Marta va reunir.
| Sistema | Què és | Per què no migra ara |
|---|---|---|
| ERP | Aplicació d'escriptori amb MySQL 5.7 en un servidor de la rebotiga | Llicència del fabricant lligada al servidor físic; el fabricant cobra per la versió al núvol i no hi ha pressupost enguany |
| Terminal de magatzem | Lector de radiofreqüència que parla per la LAN amb l'ERP | Microprogramari tancat, només sap parlar amb una IP local |
| TPV de la botiga | Caixa registradora integrada amb l'ERP | Ha de cobrar encara que caigui internet |
El que la botiga en línia necessita de tot això és molt menys del que sembla:
- L'estoc real cada pocs minuts, per no vendre el que ja no hi ha.
- Les comandes web abocades a l'ERP, perquè la comptabilitat quadri.
- Res més. Ni el catàleg de proveïdors, ni les nòmines, ni l'històric del 2012.
I aquesta és l'observació que decideix la lliçó sencera: no cal unificar dues plataformes per moure dos fluxos de dades. Si el requisit fos «executar les mateixes aplicacions contenidoritzades a la botiga i al núvol, amb les mateixes polítiques i la mateixa malla», Anthos seria la resposta. El requisit real és «sincronitzar dues taules i enviar unes comandes», i això es resol amb un túnel i un procés programat.
Tot i així, estudiarem Anthos a fons. Perquè la decisió de no fer-lo servir només val si es pren sabent el que es descarta.
- Què és Anthos i en què s'ha convertit
Anthos es va presentar el 2019 com la plataforma d'aplicacions de Google per a entorns híbrids i multinúvol. La seva idea central era potent i ho continua sent:
Si les teves aplicacions s'executen a Kubernetes, el lloc físic on s'executa aquest Kubernetes deixa d'importar. Google et dona un pla de control únic per gestionar-los tots —a GCP, al teu centre de dades, a AWS o a Azure— amb la mateixa configuració, les mateixes polítiques i la mateixa observabilitat.
Kubernetes com a denominador comú. Aquesta és tota la tesi.
L'evolució dels noms
Aquí hi ha la part que confon tothom. El nom «Anthos» s'ha anat retirant i l'oferta s'ha reorganitzat en dues famílies:
| Nom | Època | Què és avui |
|---|---|---|
| Anthos | 2019-2023 | Marca original. Continua apareixent en documentació, certificacions, blogs i en el temari d'aquest curs |
| GKE Enterprise | Des del 2023 | El nivell empresarial de GKE: flotes, Config Sync, Policy Controller, Cloud Service Mesh, taulers multiclúster. És «Anthos» convertit en una edició de GKE |
| Google Distributed Cloud (GDC) | Des del 2023 | El programari i maquinari de Google fora dels seus centres de dades: al teu centre de dades, a la vora, o en versions aïllades d'internet (air-gapped) per a entorns sobirans |
| Cloud Service Mesh | Des del 2024 | La malla de serveis gestionada, abans «Anthos Service Mesh» i abans «Istio on GKE» |
| Anthos clusters on AWS/Azure | — | Avui GKE Multi-Cloud: clústers GKE gestionats per Google que corren sobre màquines d'un altre núvol |
La manera pràctica de recordar-ho:
- Si parles de gestionar clústers de manera unificada, el nom actual és GKE Enterprise.
- Si parles de maquinari o programari de Google corrent fora de Google, el nom actual és Google Distributed Cloud.
- Si algú diu «Anthos», es refereix a alguna de les dues i probablement va aprendre el tema abans del 2023.
En aquesta lliçó farem servir la nomenclatura actual, assenyalant el nom antic quan ajudi a buscar documentació.
flowchart TB
A["Anthos<br/>2019-2023"] --> B["GKE Enterprise<br/>flotes, polítiques, malla"]
A --> C["Google Distributed Cloud<br/>connectat, aïllat, vora"]
A --> D["GKE Multi-Cloud<br/>GKE sobre AWS i Azure"]
B --> E["Cloud Service Mesh<br/>abans Anthos Service Mesh"]
- La flota (fleet): la unitat de gestió
El concepte que cal entendre abans que cap altre és la flota.
Una flota és un grup lògic de clústers de Kubernetes que es gestionen junts i que confien entre si.
Una flota:
- Pertany a un projecte, anomenat projecte amfitrió de la flota (fleet host project).
- Pot contenir clústers de GKE, de GKE on-prem, de GKE Multi-Cloud, d'EKS, d'AKS, o qualsevol clúster de Kubernetes conforme registrat amb l'agent
gke-connect. - És la frontera d'aplicació de les polítiques, de la identitat i de la configuració.
La conseqüència més important i menys evident és la dels espais de noms de flota (fleet namespaces):
En una flota, l'espai de noms
tiendasignifica el mateix a tots els clústers. És «l'equip de la botiga», no «una carpeta dins d'un clúster concret».
Això s'anomena igualtat d'espais de noms (namespace sameness) i té efectes pràctics enormes:
- Un permís concedit sobre l'espai
tiendaa nivell de flota aplica als deu clústers. - Un servei
catalogoa l'espaitiendapot ser descobert des de qualsevol clúster de la flota. - Ningú no pot crear un espai
tiendaen un altre clúster per a «una altra cosa»: el nom està reservat a aquell equip a tota la flota.
flowchart TB
subgraph FLOTA["Flota - projecte alpinashop-prod"]
direction LR
subgraph C1["alpinashop-cluster (GKE, europe-west1)"]
N1["ns tienda"]
N2["ns pagos"]
end
subgraph C2["cluster-sabadell (GDC, botiga física)"]
N3["ns tienda"]
N4["ns pagos"]
end
end
P["Polítiques i configuració<br/>de flota"] --> N1
P --> N2
P --> N3
P --> N4
Sense flota, cada clúster és una illa amb el seu propi RBAC, les seves pròpies polítiques i el seu propi criteri. Amb flota, hi ha un model mental compartit. Aquest és el valor real del producte, més que qualsevol característica concreta.
- Els components, un a un
GKE Enterprise no és un servei: és un conjunt de peces que s'activen per separat. Aquestes són, amb la seva funció exacta.
| Component | Nom actual | Què fa | Sense ell, què passa? |
|---|---|---|---|
| Registre a la flota | Fleet / Connect | Registra el clúster i obre un canal segur sortint cap a Google | Cada clúster es gestiona a mà |
| Config Sync | Config Sync | Aplica a tots els clústers la configuració declarada en un repositori Git | La configuració s'aplica amb kubectl i es desvia |
| Policy Controller | Policy Controller | Rebutja els recursos que incompleixen polítiques (basat en Gatekeeper/OPA) | Algú desplega un pod privilegiat i ningú no se n'assabenta |
| Malla de serveis | Cloud Service Mesh | mTLS, encaminament, reintents, telemetria entre serveis | Cada aplicació ho implementa pel seu compte |
| Observabilitat | Cloud Logging / Monitoring | Registres i mètriques de tots els clústers en un sol lloc | Un tauler per clúster |
| Cadena de subministrament | Binary Authorization | Només s'executen imatges signades i aprovades | Qualsevol imatge pot arribar a producció |
| Gestió d'identitat | Workload Identity de flota | Els pods de qualsevol clúster obtenen credencials de GCP sense claus | Claus JSON repartides |
| Tauler multiclúster | Consola de GKE Enterprise | Estat, compliment i cost de tota la flota | Deu pestanyes obertes |
De tots ells, els dos que la gent adopta primer —i amb raó— són Config Sync i Policy Controller. I són també els dos que es poden aprofitar en un sol clúster, sense híbrid pel mig.
- Config Sync: la configuració com a codi amb GitOps
Config Sync és un agent que corre dins del clúster i fa una sola cosa, molt bé:
Vigila un repositori Git i garanteix que l'estat del clúster coincideix amb el que hi ha en aquell repositori. Si algú canvia alguna cosa a mà, ho reverteix.
Això és GitOps, i val la pena entendre per què és diferent d'un pipeline de desplegament com el que AlpinaShop va muntar a 06-01.
| Pipeline de desplegament (Cloud Build) | GitOps (Config Sync) | |
|---|---|---|
| Direcció | Empenta: el pipeline fa kubectl apply des de fora |
Estirada: l'agent llegeix Git des de dins |
| Credencials | El pipeline necessita permisos sobre el clúster | El clúster no exposa credencials a ningú |
| Deriva | Si algú canvia alguna cosa a mà, es queda canviada | Es reverteix en minuts |
| Clústers nous | Cal donar-los d'alta al pipeline | Es registren i se sincronitzen sols |
| Auditoria | L'historial és al pipeline | L'historial és el de Git |
L'avantatge decisiu en un escenari híbrid és la tercera columna de la primera fila: el clúster de la botiga de Sabadell no necessita ser accessible des d'internet. Surt ell cap a Google, llegeix la seva configuració i s'aplica. No cal obrir ports entrants cap a la botiga, que és exactament el que un no vol fer.
L'estructura típica del repositori, que a AlpinaShop viuria a alpinashop-infra:
alpinashop-infra/
└── config-flota/
├── cluster/ # aplica a TOTS els clusters
│ ├── politicas/
│ │ ├── no-privilegiados.yaml
│ │ ├── solo-artifact-registry.yaml
│ │ └── etiquetas-obligatorias.yaml
│ └── rbac/
│ └── grupo-desarrollo.yaml
├── namespaces/
│ ├── tienda/
│ │ ├── namespace.yaml
│ │ ├── cuota-recursos.yaml
│ │ └── politica-red.yaml
│ └── pagos/
│ ├── namespace.yaml
│ └── politica-red.yaml
└── system/
└── reposync.yamlDues carpetes clau: cluster/ per al que aplica a tots, i namespaces/<nom>/ per al que aplica a un espai de noms concret a tots els clústers de la flota. La igualtat d'espais de noms de l'apartat 6 es materialitza aquí.
- Policy Controller: les polítiques com a codi
Policy Controller és la implementació gestionada de Gatekeeper, que al seu torn es recolza en OPA (Open Policy Agent). Funciona com un webhook d'admissió: cada vegada que algú intenta crear o modificar un recurs al clúster, la petició hi passa i pot ser rebutjada.
Té dos objectes:
ConstraintTemplate: la plantilla de la regla, escrita en un llenguatge anomenat Rego. Defineix el tipus de comprovació.Constraint: la instància d'aquesta plantilla amb paràmetres concrets i el seu àmbit.
Google publica una biblioteca de plantilles amb més de cent regles llestes, així que a la pràctica gairebé mai no cal escriure Rego. Exemples de la biblioteca:
| Plantilla | Què impedeix |
|---|---|
K8sPSPPrivilegedContainer |
Contenidors privilegiats |
K8sAllowedRepos |
Imatges de registres no autoritzats |
K8sRequiredLabels |
Recursos sense les etiquetes obligatòries |
K8sContainerLimits |
Contenidors sense límits de CPU o memòria |
K8sBlockNodePort |
Serveis de tipus NodePort |
K8sRequiredProbes |
Contenidors sense sondes de vida i disponibilitat |
I té un mecanisme que cal fer servir sempre al principi:
enforcementAction |
Efecte |
|---|---|
warn |
Deixa passar i avisa a la resposta |
dryrun |
Deixa passar i registra la violació per poder mesurar l'impacte |
deny |
Rebutja la creació del recurs |
El patró correcte és el mateix que ja es va fer servir amb Cloud Armor a 03-05: dryrun primer, es mesura una setmana, i només llavors deny. Activar una política en deny sense mesurar és la manera més ràpida que l'equip de desenvolupament no pugui desplegar un divendres a la tarda i que Policy Controller es desinstal·li el dilluns.
- Exemple pràctic: registrar
alpinashop-cluster i aplicar una política
alpinashop-cluster i aplicar una políticaHo farem de debò sobre el clúster que AlpinaShop ja té des de 02-05. És un exercici útil fins i tot si mai no adoptes GKE Enterprise, perquè Config Sync i Policy Controller funcionen en un únic clúster de GKE Autopilot i aporten valor per si sols.
Pas 1: habilitar les API necessàries
gcloud config set project alpinashop-prod
gcloud services enable \
gkehub.googleapis.com \
anthosconfigmanagement.googleapis.com \
gkeconnect.googleapis.comgkehub.googleapis.comés l'API de flotes. «Hub» era el nom intern original i ha quedat a l'API.anthosconfigmanagement.googleapis.comgestiona Config Sync i Policy Controller (fixa't en el nom antic, que sobreviu a l'API encara que el producte es digui d'una altra manera).gkeconnect.googleapis.comés el canal de connexió sortint dels clústers registrats.
Pas 2: registrar el clúster a la flota
Un clúster de GKE al mateix projecte que la flota es registra amb una sola ordre:
gcloud container fleet memberships register alpinashop-cluster \
--gke-cluster=europe-west1/alpinashop-cluster \
--enable-workload-identityExplicat peça a peça:
memberships registercrea una pertinença (membership): l'objecte que representa aquell clúster dins de la flota.alpinashop-clusterés el nom de la pertinença. Convé que coincideixi amb el del clúster per no tornar-se boig.--gke-cluster=REGIO/NOMidentifica un clúster de GKE. Per a un clúster extern es faria servir--kubeconfigi--context.--enable-workload-identityés el que permet que els pods obtinguin credencials de Google sense fitxers de clau, exactament igual que a 03-04. En un clúster d'Autopilot ja està actiu; el registre l'integra amb la flota.
Comprovació:
Pas 3: activar Config Sync apuntant a alpinashop-infra
La configuració de la característica es declara en un fitxer i s'aplica a la flota:
# config-management.yaml
applySpecVersion: 1
spec:
configSync:
enabled: true
sourceFormat: unstructured
git:
syncRepo: https://github.com/alpinashop/alpinashop-infra
syncBranch: main
policyDir: config-flota
secretType: token
syncWait: 30
policyController:
enabled: true
templateLibraryInstalled: true
referentialRulesEnabled: true
auditIntervalSeconds: 60Camp per camp:
sourceFormat: unstructuredpermet organitzar el repositori com vulguis. L'alternativa,hierarchy, imposa l'estructura estricta que es va veure a l'apartat 8. Per començar,unstructureddona menys disgustos.syncRepo/syncBranch/policyDir: repositori, branca i subdirectori a partir del qual se sincronitza. Tot el que quedi fora deconfig-flotas'ignora.secretType: tokenindica com s'autentica contra GitHub. En producció es faria servir una app de GitHub o, millor,gcpserviceaccountcontra un repositori allotjat a GCP.syncWait: 30són els segons entre comprovacions. Trenta segons és un bon equilibri; abaixar-ho molt només genera crides a l'API.templateLibraryInstalled: trueinstal·la les més de cent plantilles de la biblioteca de Google. Sense això, cal escriure el Rego a mà.auditIntervalSeconds: 60és cada quant Policy Controller revisa els recursos que ja existien abans de la política. Això importa: el webhook només veu el que és nou; l'auditoria periòdica és la que descobreix el que és vell i incompleix.
S'aplica així:
gcloud beta container fleet config-management apply \
--membership=alpinashop-cluster \
--config=config-management.yaml \
--project=alpinashop-prodI l'estat es consulta amb:
Name Status Last_Synced_Token Sync_Branch Last_Synced_Time alpinashop-cluster SYNCED a3f91c2 main 2026-08-05T09:14:22Z
Last_Synced_Token és el hash del commit aplicat. Aquesta dada respon en un segon a la pregunta «quina versió de la configuració està corrent en aquest clúster?», que en un model d'empenta sol requerir arqueologia als registres del pipeline.
Pas 4: la política de conformitat
AlpinaShop vol garantir una cosa que fins ara depenia de la bona voluntat: al clúster només s'executen imatges del seu Artifact Registry. Res de docker.io/elquesigui:latest.
El fitxer s'afegeix al repositori alpinashop-infra, a config-flota/cluster/politicas/:
# config-flota/cluster/politicas/solo-artifact-registry.yaml
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sAllowedRepos
metadata:
name: solo-artifact-registry-alpinashop
spec:
enforcementAction: dryrun # PRIMER mesurar, despres denegar
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
excludedNamespaces:
- kube-system
- gke-system
- config-management-system
- gatekeeper-system
parameters:
repos:
- "europe-west1-docker.pkg.dev/alpinashop-prod/alpinashop/"Els detalls que importen:
enforcementAction: dryrun: durant una setmana registra violacions sense bloquejar res.excludedNamespaces: els espais de noms del sistema fan servir imatges de Google. Si no els exclous, trenques el clúster. Aquest és l'error número u amb Policy Controller.parameters.reposaccepta prefixos. La barra final importa: sense ella,.../alpinashop-maliciosotambé passaria.
I una segona política, aquesta de les etiquetes que AlpinaShop fa servir des de 01-04:
# config-flota/cluster/politicas/etiquetas-obligatorias.yaml
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredLabels
metadata:
name: etiquetas-obligatorias-alpinashop
spec:
enforcementAction: dryrun
match:
kinds:
- apiGroups: ["apps"]
kinds: ["Deployment"]
namespaces: ["tienda", "pagos"]
parameters:
labels:
- key: "aplicacion"
- key: "equipo"
allowedRegex: "^(infra|desarrollo|datos)$"
- key: "entorno"
allowedRegex: "^(prod|dev)$"Observa que allowedRegex no només exigeix l'etiqueta: exigeix que el seu valor sigui un dels vàlids. Sense això, algú posa equipo: varios i l'assignació de costos de 07-05 torna a ser inútil.
Pas 5: mesurar abans de denegar
Al cap d'una setmana, es consulten les violacions registrades:
kubectl get constraint solo-artifact-registry-alpinashop -o json \
| jq '.status.violations[] | {ns: .namespace, name: .name, msg: .message}'{"ns":"tienda","name":"redis-cache-7c9f","msg":"container <redis> has an invalid image repo <docker.io/redis:7>"}
{"ns":"tienda","name":"exportador-metricas-2d1a","msg":"container <exp> has an invalid image repo <quay.io/prometheus/node-exporter>"}Dues troballes reals, i cap no és un atac: són dues imatges públiques legítimes que algú va desplegar sense pensar-hi. La resposta correcta no és rendir-se i treure la política, sinó:
- Copiar aquestes dues imatges a l'Artifact Registry propi (que a més és el correcte per disponibilitat i per escaneig de vulnerabilitats, com es veurà a 07-04).
- Actualitzar els desplegaments.
- Ara sí, canviar
dryrunperdeny, fer commit i deixar que Config Sync ho propagui.
sed -i 's/enforcementAction: dryrun/enforcementAction: deny/' \
config-flota/cluster/politicas/solo-artifact-registry.yaml
git commit -am "Policy: exigir imatges d Artifact Registry (deny)"
git pushEn menys d'un minut, el clúster rebutja qualsevol pod amb una imatge aliena. I el més important: el canvi és en un pull request revisat, no a la memòria de ningú.
- El mallat de serveis explicat sense fum
La malla de serveis (service mesh) és la part de GKE Enterprise que més es ven i pitjor s'entén. Anem amb l'explicació honesta.
Què és tècnicament
S'injecta un proxy (Envoy) al costat de cada contenidor de l'aplicació —el patró sidecar— o a cada node (ambient, el mode més recent que evita el sidecar). Tot el trànsit entre serveis passa per aquests proxies. Com que el proxy veu tot el trànsit i el controla un pla de control central, es poden fer coses que l'aplicació no sap fer.
flowchart LR
subgraph P1["Pod catàleg"]
A["App catàleg"] <--> B["Proxy Envoy"]
end
subgraph P2["Pod comandes"]
C["Proxy Envoy"] <--> D["App comandes"]
end
B <-->|"mTLS automàtic"| C
CP["Pla de control<br/>Cloud Service Mesh"] -.->|"configuració"| B
CP -.->|"configuració"| C
B -.->|"telemetria"| CP
C -.->|"telemetria"| CP
Què resol de debò
| Capacitat | El problema que resol | Es pot fer sense malla? |
|---|---|---|
| mTLS automàtic | Xifratge i autenticació entre serveis sense tocar el codi | Sí, però implementant-ho a cada aplicació i rotant certificats a mà |
| Autorització servei a servei | «Només catalogo pot cridar pedidos» |
Amb NetworkPolicy, però a nivell d'IP, no d'identitat |
| Reintents i temps d'espera | Reintentar la fallada transitòria sense codi | Sí, amb una biblioteca a cada llenguatge |
| Desplegament canari per percentatge | Enviar el 5 % del trànsit a la versió nova | Sí, i a Cloud Run és una bandera (07-02) |
| Telemetria uniforme | Latència i taxa d'error de cada crida, sense instrumentar | Parcialment, amb OpenTelemetry (06-06) |
| Interruptor de circuit | Deixar de cridar el servei que està caigut | Sí, amb biblioteca |
Els dos valors realment difícils de replicar són el mTLS automàtic amb identitats per servei i la telemetria uniforme sense tocar el codi. La resta s'aconsegueix d'altres maneres, sovint més simples.
Quina complexitat afegeix
I aquí la part que les presentacions ometen:
- Dupliques els contenidors. Cada pod passa a tenir dos processos. Consum de CPU i memòria addicional del 10-30 %, i a Autopilot això és factura directa.
- Afegeixes un salt de xarxa a cada crida. Latència addicional d'entre 0,5 i 3 ms per salt, que es multiplica per la profunditat de la cadena de crides.
- Depures el doble. Quan alguna cosa falla, la pregunta passa a ser «és l'aplicació o és el proxy?». Els codis d'error d'Envoy (
UF,UO,NR,URX) cal aprendre-se'ls. - Introdueixes conceptes nous:
VirtualService,DestinationRule,PeerAuthentication,AuthorizationPolicy,Gateway,Sidecar. Són sis objectes més per dominar, i la seva interacció no és òbvia. - L'ordre d'arrencada importa. Un contenidor que crida la xarxa abans que el seu proxy estigui llest falla de maneres desconcertants.
- Actualitzar-la és una operació delicada, perquè toca el camí del trànsit de tot el que corre al clúster.
La regla honesta: una malla de serveis comença a compensar a partir de, aproximadament, vint serveis que es criden entre si, mantinguts per més de tres equips, en més d'un llenguatge. Per sota d'això, el cost d'operar-la supera el que aporta.
AlpinaShop té un servei de catàleg, una funció d'imatges i uns quants processos per lots. Posar-hi una malla és com muntar un aeroport per a un carril bici. No és que sigui mala tecnologia: és que no hi ha problema a resoldre.
- Binary Authorization i la cadena de confiança
Binary Authorization respon a una altra pregunta: aquesta imatge concreta té permís per executar-se en aquest entorn? Funciona també com a control d'admissió, però en lloc de mirar la forma del recurs, comprova signatures criptogràfiques.
El flux és:
- Cloud Build construeix la imatge i la publica a Artifact Registry (06-01).
- Un procés de verificació —l'escaneig de vulnerabilitats, o el pas manual d'aprovació de la Marta— crea un atestat (attestation): una signatura que diu «aquesta imatge, identificada pel seu digest, ha passat aquest control».
- En desplegar, Binary Authorization comprova que existeixen els atestats exigits per la política. Si no, rebutja el pod.
# Politica minima: exigir atestat de l atestador "aprobacion-marta" en produccio
gcloud container binauthz policy import - <<'EOF'
defaultAdmissionRule:
evaluationMode: REQUIRE_ATTESTATION
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
requireAttestationsBy:
- projects/alpinashop-cicd/attestors/aprobacion-marta
clusterAdmissionRules:
europe-west1.alpinashop-cluster:
evaluationMode: REQUIRE_ATTESTATION
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
requireAttestationsBy:
- projects/alpinashop-cicd/attestors/aprobacion-marta
admissionWhitelistPatterns:
- namePattern: europe-west1-docker.pkg.dev/alpinashop-prod/alpinashop/*
EOFDetalls importants:
ENFORCED_BLOCK_AND_AUDIT_LOGbloqueja i registra. ExisteixDRYRUN_AUDIT_LOG_ONLY, que és per on cal començar, igual que amb Policy Controller.admissionWhitelistPatternsés una llista d'excepcions per patró de nom. Fes-la servir amb compte: cada excepció és un forat permanent.- Binary Authorization no està limitat a GKE Enterprise: funciona a GKE estàndard i també a Cloud Run, cosa que el fa rellevant per a AlpinaShop encara que descarti la flota. Es reprèn a 07-04 com a peça de la cadena de subministrament.
- Observabilitat unificada de la flota
Els clústers registrats envien les seves mètriques i registres a Cloud Monitoring i Cloud Logging del projecte de la flota, inclosos els que són fora de Google Cloud. Això significa que el tauler de campanya que AlpinaShop va construir a 06-04 podria mostrar, a la mateixa pantalla, la latència del catàleg a europe-west1 i la del procés que corre a la rebotiga de Sabadell.
És un avantatge real i sovint subestimat: en un híbrid mal muntat, el 80 % del temps d'un incident se'n va a obrir tres eines diferents i comparar rellotges que no estan sincronitzats.
La consola de GKE Enterprise afegeix a més una vista de flota amb:
- Estat de sincronització de cada clúster (el
Last_Synced_Tokende l'apartat 10). - Percentatge de compliment de polítiques i llista de violacions.
- Versions de Kubernetes i avisos de fi de suport per clúster.
- Cost estimat agrupat per equip, si les etiquetes estan ben posades.
- Model de llicència i cost: el que decideix a la pràctica
Aquí és on es prenen les decisions reals, i on convé ser molt clar.
GKE Enterprise no es factura per consum puntual com una VM: es factura com una edició de GKE, amb un preu per vCPU dels nodes dels clústers inclosos a la flota, mensual o amb compromís anual. Google publica els preus i canvien; l'ordre de magnitud que cal tenir al cap és:
| Concepte | Ordre de magnitud |
|---|---|
| GKE Standard: pla de control | Unes desenes d'euros al mes per clúster (amb un clúster zonal gratuït per compte de facturació al nivell gratuït) |
| GKE Enterprise: recàrrec | De l'ordre de diversos euros per vCPU i mes, sobre totes les vCPU de la flota |
| Cloud Service Mesh gestionat | Inclòs a l'edició Enterprise |
| Google Distributed Cloud | Subscripció per node, més el maquinari |
Verifica sempre els preus a la documentació oficial i amb la calculadora de preus. Les xifres de dalt són ordres de magnitud per raonar, no cotitzacions.
Fem el càlcul per a AlpinaShop, que és el que decideix:
- El clúster
alpinashop-clusterés Autopilot i sosté el catàleg amb l'equivalent a unes 8 vCPU en horari normal. - Un recàrrec de l'ordre de 5 € per vCPU i mes són uns 40 € al mes només de llicència, sense comptar el còmput.
- A això caldria sumar-hi el consum extra dels sidecars de la malla (10-30 % més de CPU i memòria) i, si de debò es volgués híbrid, un clúster a Sabadell amb el seu maquinari, la seva subscripció i el seu manteniment.
Quaranta euros al mes no arruïnen ningú. El problema no són els diners: és que es paga per capacitats que no es faran servir. I hi ha un cost molt més gran amagat al darrere: les hores de la Marta aprenent, operant i depurant sis objectes nous d'Istio per a un únic servei.
- Alternatives més lleugeres a l'híbrid complet
Entre «no fer res» i «adoptar GKE Enterprise» hi ha un espectre. Aquestes són les opcions intermèdies, ordenades de menor a major compromís.
| Opció | Què resol | Cost i complexitat |
|---|---|---|
| Cloud VPN HA + procés programat | Connectivitat privada amb el sistema local i sincronització de dades | Molt baix. És el que AlpinaShop necessita (07-03) |
| Pub/Sub com a pont | El sistema local publica esdeveniments i el núvol els consumeix, sense connectivitat entrant | Baix. Excel·lent quan el local pot sortir a internet |
| Config Sync + Policy Controller en un sol clúster | Configuració i polítiques com a codi, sense flota híbrida | Baix. Aporta valor amb un sol clúster |
| Config Connector | Gestionar recursos de GCP (buckets, Cloud SQL) des de manifestos de Kubernetes | Mitjà. Interessant si el teu equip viu a kubectl; si viu a Terraform (06-07), no |
| Terraform multiproveïdor | Gestionar GCP + un altre núvol + GitHub + DNS amb un sol llenguatge | Baix. AlpinaShop ja el té |
| GKE Multi-Cloud | GKE gestionat per Google sobre màquines d'AWS o Azure | Alt |
| Google Distributed Cloud | Programari de Google al teu maquinari o a la vora | Molt alt |
Dos apunts:
- «Cloud Run for Anthos», que apareix en documentació i exàmens antics, permetia executar l'API de Cloud Run sobre un clúster propi mitjançant Knative. Ha quedat en desús a favor de Cloud Run sense més (07-02) i de la malla gestionada. Si el veus en un temari de certificació, ja saps de què es parlava.
- Config Connector mereix una consideració honesta: és una alternativa real a Terraform si —i només si— el teu equip ja treballa íntegrament a Kubernetes. Per a AlpinaShop, que acaba d'invertir el mòdul 6 en Terraform, afegir un segon sistema per al mateix seria un retrocés.
- Quan sí i quan no: la taula de decisió
Aquesta és la taula que un s'emporta de la lliçó.
| Situació | Híbrid gestionat / GKE Enterprise? | Alternativa |
|---|---|---|
| Centre de dades amb inversió sense amortitzar i desenes d'aplicacions | Sí | — |
| Requisit legal de control físic del maquinari | Sí, amb Google Distributed Cloud | — |
| Processos que han de continuar funcionant sense connexió (fàbrica, botiga, vaixell) | Sí, a la vora | Còmput local a mida |
| Més de 20 microserveis, diversos equips, diversos llenguatges | Sí per a la malla | — |
| Fusió d'empreses: una a GCP i una altra a AWS, amb equips que es mantenen | Probablement sí | — |
| Necessito polítiques de seguretat uniformes en 10+ clústers | Sí | — |
| Un sol clúster i vull configuració com a codi | No | Config Sync sol |
| Necessito llegir una base de dades local des del núvol | No | Cloud VPN HA (07-03) |
| Vull «evitar el vendor lock-in» en abstracte | No | Contenidors estàndard i dades exportables |
| Un equip d'una a tres persones d'infraestructura | No | La complexitat es menja l'equip |
| Un sol servei web amb trànsit irregular | No | Cloud Run (07-02) |
I la pregunta única que resol la majoria dels casos:
Tinc càrregues de treball executant-se fora de Google Cloud que necessiten la mateixa gestió que les de dins?
Si la resposta és «no, només necessito parlar amb un sistema de fora», no necessites Anthos: necessites xarxa.
- DA-004: la decisió honesta d'AlpinaShop
La Marta, el Dani i la Lucía es van asseure amb aquesta informació i van escriure la decisió, seguint el mateix format que DA-001, DA-002 i DA-003. És al README d'alpinashop-infra, com mana la disciplina de 06-02.
DA-004 — Estratègia híbrida i integració amb la botiga de Sabadell Data: 2026-08-05 · Autors: Marta (infraestructura), Dani (backend) · Estat: acceptada
1. Context. La botiga física de Sabadell executa un ERP amb MySQL 5.7 en un servidor local, amb un terminal de radiofreqüència i un TPV lligats a ell per la xarxa local. L'ERP no pot migrar enguany per llicenciament del fabricant i pressupost. La botiga en línia necessita de l'ERP dues coses: llegir l'estoc cada pocs minuts i abocar les comandes web. L'equip d'infraestructura és d'una persona.
2. Opcions considerades.
| Opció | Avantatge | Inconvenient |
|---|---|---|
| GKE Enterprise amb clúster a Sabadell | Gestió unificada, polítiques i malla a banda i banda | Maquinari nou a la botiga; llicència per vCPU; complexitat de malla per a un servei; una persona no pot operar-ho |
| Google Distributed Cloud a la botiga | Plataforma de Google en local, suport de Google | Cost molt superior al problema; sobredimensionat per a dos fluxos de dades |
| Migrar l'ERP a Cloud SQL ja | Elimina l'híbrid | Bloquejat per llicència del fabricant i pressupost; el TPV ha de cobrar sense connexió |
| Cloud VPN HA + sincronització programada | Cost baix, complexitat baixa, resol els dos fluxos reals | No unifica la gestió; l'ERP continua sent responsabilitat local |
3. Decisió. AlpinaShop no adopta GKE Enterprise ni Google Distributed Cloud. S'estableix connectivitat privada amb la botiga mitjançant Cloud VPN HA (dos túnels amb BGP sobre Cloud Router, detallat a 07-03) i la integració es resol així:
- Estoc: un treball programat amb Cloud Scheduler + Workflows (04-06) llegeix cada 10 minuts les taules d'existències del MySQL de Sabadell a través del túnel i actualitza el catàleg.
- Comandes: cada comanda web publica al topic
pedidos-nuevos(04-04); un consumidor les insereix a l'ERP. Si l'enllaç està caigut, els missatges esperen a la subscripció i es processen en tornar — la botiga en línia no s'atura perquè Sabadell no estigui disponible. - Sense connexió: el TPV i el terminal continuen funcionant contra l'ERP local exactament igual que avui. No s'introdueix cap dependència nova del núvol en l'operació de la botiga física.
4. Conseqüències.
- Positives: cost marginal (el de dos túnels VPN); cap tecnologia nova per aprendre; el desacoblament per Pub/Sub fa que un tall de l'enllaç sigui un retard, no una caiguda.
- Negatives: la gestió continua sent doble —l'ERP s'apedaça a mà a Sabadell— i no hi ha polítiques uniformes entre les dues bandes. S'accepta: és un servidor, no una flota.
- S'adopta parcialment una peça: Policy Controller en mode
dryrunsobrealpinashop-clustermentre el catàleg hi continuï, perquè aporta valor amb un sol clúster i sense llicència Enterprise en el seu nivell bàsic. Es revisarà quan el catàleg es mogui a Cloud Run a 07-02.
5. Revisió. Aquesta decisió es revisa si passa qualsevol d'aquestes tres coses: s'obren dues botigues físiques més, l'ERP migra al núvol, o el nombre de serveis que es criden entre si supera la desena.
Errors Habituals i Consells
- Confondre «híbrid» amb «tenir una VPN». Tenir connectivitat privada amb un sistema local no et converteix en una arquitectura híbrida gestionada. És bo saber-ho: probablement no necessites la plataforma gran.
- Adoptar la malla de serveis «perquè és la bona pràctica». És una bona pràctica a partir de certa escala. Per sota, és sobrecàrrega operativa pura.
- Activar Policy Controller directament en
deny. Bloquejaràs desplegaments legítims el primer dia.dryrununa setmana, mesures, corregeixes, i llavorsdeny. - Oblidar
excludedNamespacesa les polítiques. Si la política aplica akube-system, el clúster deixa de funcionar. Exclou semprekube-system,gke-system,gatekeeper-systemiconfig-management-system. - Buscar documentació pel nom antic i quedar-se amb instruccions obsoletes. «Anthos Service Mesh» i «Cloud Service Mesh» són el mateix producte en dues èpoques, i les comandes han canviat. Comprova sempre la data de la pàgina.
- Creure que multinúvol redueix el bloqueig per proveïdor. Sovint l'augmenta: afegeix una capa d'abstracció que també és d'algú, i obliga a fer servir el mínim comú denominador de tots dos núvols.
- Ignorar l'egress entre núvols. Moure dades de GCP a AWS i viceversa es paga per gigabyte en totes dues direccions. Una arquitectura multinúvol «elegant» que creui dades constantment pot duplicar la factura. Es tracta a 07-05.
- Registrar clústers a la flota sense
--enable-workload-identity. Acabaràs repartint claus JSON, exactament el que 03-04 va ensenyar a evitar. - Consell: fes servir Config Sync encara que no vagis a ser híbrid. GitOps sobre un sol clúster ja elimina la deriva de configuració, i és de les millores amb millor relació valor/esforç del catàleg.
- Consell: si dubtes entre híbrid i migrar, calcula la data d'amortització del maquinari. Moltes vegades la resposta correcta és «híbrid durant 18 mesos i després núvol», i això canvia per complet quanta plataforma val la pena muntar.
- Consell: escriu la decisió. DA-004 existeix perquè d'aquí a dos anys ningú no hagi de reconstruir per què no es va adoptar. I perquè, quan es compleixin les condicions de revisió, es revisi de debò.
Exercicis
Exercici 1 — Decidir amb criteri en quatre escenaris
Per a cadascun d'aquests casos, decideix si convé GKE Enterprise / Google Distributed Cloud, una altra alternativa més lleugera, o res, i justifica-ho en tres o quatre línies.
(a) Una cadena de 60 supermercats. Cada botiga té caixes que han de cobrar encara que internet caigui, i un sistema d'etiquetatge electrònic que s'actualitza cada hora. Central amb equip de 8 persones de sistemes.
(b) Una startup de 12 persones amb un backend de 4 microserveis a GKE Autopilot, tot a europe-west1. El CTO vol «estar preparats per a multinúvol».
(c) Una asseguradora que acaba de comprar una empresa més petita. La compradora és a Google Cloud; la comprada té 40 aplicacions en un centre de dades propi amb contracte d'allotjament vigent fins d'aquí a 3 anys. Tots dos equips es mantenen.
(d) Un fabricant amb una planta a Saragossa. Un sistema de visió artificial inspecciona peces a 30 imatges per segon i ha de decidir en menys de 50 ms si rebutja la peça. Volen a més entrenar models amb les imatges històriques.
Exercici 2 — Escriure i desplegar una política de conformitat
AlpinaShop vol garantir dues coses més a alpinashop-cluster:
- Cap contenidor no pot executar-se com a
root. - Tot contenidor ha de declarar límits de CPU i memòria (perquè Autopilot no facturi sorpreses i perquè un pod desbocat no ofegui els altres).
Escriu els dos Constraint fent servir la biblioteca de plantilles (K8sPSPAllowPrivilegeEscalationContainer i K8sContainerLimits), indica on col·locar-los al repositori alpinashop-infra, i descriu el procediment complet de desplegament segur. Explica a més què comprovaries abans de passar a deny.
Exercici 3 — Rebatre la proposta d'un proveïdor
Un integrador presenta a la direcció d'AlpinaShop aquesta proposta:
«Recomanem desplegar Google Distributed Cloud a la botiga de Sabadell i adoptar GKE Enterprise amb Cloud Service Mesh. Així unificareu la gestió, tindreu mTLS extrem a extrem entre la botiga i el núvol, polítiques homogènies i observabilitat centralitzada, quedant preparats per al creixement multinúvol. Inversió: 18.000 € el primer any més 900 €/mes.»
Escriu la resposta tècnica de la Marta a la direcció: quines parts de la proposta són certes, quines són irrellevants per a AlpinaShop, quines preguntes cal fer a l'integrador, i quina contraproposta es planteja amb el seu cost aproximat.
Solucions
Solució 1 — Decidir amb criteri en quatre escenaris
(a) Cadena de 60 supermercats: SÍ, i és el cas de manual.
Hi concorren els tres factors decisius alhora. Funcionament sense connexió: les caixes han de cobrar amb l'enllaç caigut, per tant hi ha d'haver còmput local per obligació, no per preferència. Escala: 60 emplaçaments són 60 clústers, i gestionar-los un a un és inviable — aquí la flota deixa de ser un luxe i passa a ser l'única manera de mantenir el seny. Equip: 8 persones poden sostenir la plataforma.
La solució és Google Distributed Cloud a cada botiga, totes registrades en una flota, amb Config Sync distribuint la configuració des de Git. Fixa't en l'avantatge del model d'estirada: les 60 botigues no necessiten ser accessibles des de fora; surten elles a buscar la seva configuració. Actualitzar el programari d'etiquetatge electrònic a 60 botigues passa a ser un commit.
La malla de serveis, en canvi, s'avaluaria a part i probablement més tard: el valor aquí és a la gestió de flota, no al mTLS entre serveis.
(b) Startup de 12 persones: NO, amb claredat.
«Estar preparats per a multinúvol» amb 4 microserveis en un sol clúster no és una arquitectura: és una preocupació sense cas d'ús. El cost de la preparació es paga avui, tots els mesos, i el benefici potser no arribarà mai.
El que sí que convé fer, i és gratis:
- Mantenir les aplicacions contenidoritzades i sense dependències propietàries al camí crític, que ja ho estan.
- Gestionar la infraestructura amb Terraform, que és multiproveïdor per disseny.
- Que les dades siguin exportables (formats estàndard,
pg_dump, Parquet). - Escriure al
READMEen quins serveis s'està acoblat a propòsit i per què.
Amb això, el dia que hi hagi un motiu real per moure's, la sortida és de setmanes. I mentrestant s'aprofita el que és bo de GCP en lloc de renunciar-hi. Si a més volen configuració com a codi, Config Sync sobre el clúster que ja tenen és la millora amb millor retorn.
(c) Asseguradora després d'una fusió: PROBABLEMENT SÍ, i és el cas més matisat.
Hi concorren: inversió sense amortitzar (contracte d'allotjament a 3 anys, que són diners compromesos), 40 aplicacions (volum que justifica una plataforma), i dos equips que es mantenen (hi ha mans). A més, en un sector regulat, tenir polítiques de seguretat demostrablement uniformes a banda i banda té valor d'auditoria, no només tècnic.
L'estratègia sensata és híbrid amb data de caducitat: registrar els clústers de totes dues bandes en una flota, unificar polítiques amb Policy Controller i observabilitat amb Cloud Logging/Monitoring, i fer servir aquests 3 anys per migrar per onades les aplicacions que tinguin sentit. L'error seria adoptar-ho com a estat permanent sense pla de convergència; l'altre error seria intentar migrar 40 aplicacions de cop.
Les preguntes que decidirien el detall: quantes d'aquestes 40 aplicacions estan contenidoritzades? Si en són 3, la flota no ajuda les altres 37 i el problema real és de modernització, no de plataforma.
(d) Fabricant amb visió artificial: SÍ, però a la vora i per un motiu diferent.
50 ms de pressupost total per capturar, inferir i decidir fan que el núvol sigui impossible: només l'anada i tornada a europe-southwest1 des de Saragossa en consumeix una part significativa, i un tall de xarxa aturaria la línia de producció. La inferència ha de ser local, i no hi ha discussió possible.
Arquitectura: Google Distributed Cloud (o simplement maquinari amb GPU i un runtime d'inferència) a la planta executant el model; les imatges i els resultats es pugen de manera asíncrona a Cloud Storage; l'entrenament es fa a Vertex AI (mòdul 5) amb l'històric; els models nous es despleguen a la planta des del registre de models.
És el patró canònic de la vora: inferència a baix, entrenament a dalt. I observa que la part que justifica la plataforma no és la latència en si, sinó que la línia no pot parar si cau l'enllaç.
Solució 2 — Escriure i desplegar una política de conformitat
Ubicació al repositori. Tots dos fitxers van a config-flota/cluster/politicas/, perquè són polítiques de clúster i no d'un espai de noms concret:
alpinashop-infra/config-flota/cluster/politicas/ ├── solo-artifact-registry.yaml # ja existent ├── etiquetas-obligatorias.yaml # ja existent ├── no-escalada-privilegios.yaml # nou └── limites-contenedor.yaml # nou
Política 1 — sense escalada de privilegis:
# config-flota/cluster/politicas/no-escalada-privilegios.yaml
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sPSPAllowPrivilegeEscalationContainer
metadata:
name: no-escalada-privilegios
spec:
enforcementAction: dryrun
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
excludedNamespaces:
- kube-system
- gke-system
- gmp-system
- gatekeeper-system
- config-management-systemPolítica 2 — límits de CPU i memòria:
# config-flota/cluster/politicas/limites-contenedor.yaml
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sContainerLimits
metadata:
name: limites-obligatorios
spec:
enforcementAction: dryrun
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
namespaces: ["tienda", "pagos"]
parameters:
cpu: "2"
memory: "4Gi"Fixa't que K8sContainerLimits fa dues coses alhora, i convé saber-ho: exigeix que els límits existeixin i a més que no superin els valors indicats. Els valors 2 vCPU i 4Gi són el sostre per contenidor; es trien mesurant el consum real i deixant marge, no a ull.
Procediment de desplegament segur, pas a pas:
- Branca i pull request a
alpinashop-infra. Mai directe amain: la revisió és part del control (06-02). - Validació local abans de pujar, per no descobrir un error de sintaxi en producció:
kubectl apply --dry-run=server -f config-flota/cluster/politicas/ - Merge a
maindesprés de la revisió. Config Sync ho detecta en 30 segons. - Verificar la sincronització, que és el pas que la gent es salta:
gcloud beta container fleet config-management status nomos status # eina especifica de Config Sync, mes detallada - Esperar entre 7 i 14 dies en
dryrun, cobrint almenys un cicle complet de desplegaments i els processos per lots nocturns i setmanals. Una setmana que no inclogui el tancament mensual pot amagar un incompliment. - Revisar violacions:
kubectl get constraints -o json | jq -r ' .items[] | select(.status.totalViolations > 0) | "\\(.metadata.name): \\(.status.totalViolations) violacions"' - Corregir l'origen, no la política. Si un pod necessita més de 2 vCPU legítimament, es puja el paràmetre amb justificació escrita; si no ho necessita, es corregeix el pod.
- Canviar a
denyen un pull request separat del que va introduir la política, perquè el canvi de mode sigui visible a l'historial i es pugui revertir sol.
Què comprovar abans de passar a deny —la llista de la Marta:
- Zero violacions durant almenys 7 dies consecutius.
- Els
CronJobsetmanals i mensuals s'han executat almenys una vegada en aquest període. - Els espais de noms del sistema estan exclosos i s'ha verificat, no suposat.
- Existeix un procediment d'excepció documentat: com demana algú una exempció, qui l'aprova i quan caduca.
- El procediment de reversió està escrit:
git revertdel commit i esperar 30 segons. Saber que la tornada enrere costa un minut és el que permet avançar amb tranquil·litat.
Solució 3 — Rebatre la proposta d'un proveïdor
Resposta de la Marta a direcció.
Què és cert de la proposta. Tot el que és tècnic. GKE Enterprise unifica de debò la gestió de clústers, Cloud Service Mesh proporciona mTLS automàtic sense tocar el codi, Config Sync i Policy Controller apliquen polítiques homogènies, i l'observabilitat es centralitza. L'integrador no exagera cap capacitat. El problema no és que sigui fals; és que respon a preguntes que no ens hem fet.
Què és irrellevant per a nosaltres, punt per punt.
- «Unificareu la gestió»: unificar la gestió d'un clúster al núvol i un servidor ERP que ni tan sols executa contenidors. No hi ha flota per gestionar; hi ha dos sistemes diferents que només necessiten intercanviar dos fluxos de dades.
- «mTLS extrem a extrem entre la botiga i el núvol»: un túnel IPsec de Cloud VPN ja xifra aquest trànsit, i costa uns pocs euros al mes. El mTLS de la malla resol el xifratge entre serveis, i nosaltres tenim un servei.
- «Polítiques homogènies»: valuós a partir de diversos clústers. Amb un, Policy Controller aporta —i el farem servir—, però això no requereix la llicència Enterprise ni el desplegament a la botiga.
- «Preparats per al creixement multinúvol»: no hi ha cap pla de negoci que contempli un altre núvol. Estaríem pagant avui per una opció que ningú no ha demanat.
- A més, introdueix un risc nou que la proposta no esmenta: maquinari de Google a la rebotiga d'una botiga que avui funciona amb un servidor i un SAI. Això és un element més que es pot trencar, actualitzar i quedar-se sense suport, en un lloc sense personal tècnic.
Preguntes per a l'integrador. Són les que revelen si la proposta es va fer per a nosaltres o és una plantilla:
- Quines càrregues de treball en contenidors executarem a la botiga de Sabadell? (Resposta real: cap. L'ERP és una aplicació d'escriptori amb MySQL.)
- Quants serveis es criden entre si a la nostra arquitectura actual? (Resposta real: pràcticament un. La malla no té res a mallar.)
- Els 900 €/mes, inclouen suport, actualitzacions del maquinari de la botiga i les hores d'operació, o només la llicència?
- Què passa el dia que el catàleg es mogui a Cloud Run segons DA-001? Bona part d'aquesta proposta deixa d'aplicar, perquè ja no hi haurà clúster per gestionar.
- Qui opera això? Som una persona d'infraestructura. S'inclou servei gestionat 24×7, i a quin preu?
- Quin és el cost i el termini de sortir d'aquesta arquitectura si d'aquí a dos anys no encaixa?
Contraproposta.
| Necessitat real | Solució proposada | Cost aproximat |
|---|---|---|
| Connectivitat privada i xifrada amb Sabadell | Cloud VPN HA, dos túnels amb BGP | De l'ordre de desenes de €/mes |
| Sincronitzar estoc cada 10 min | Workflows + Cloud Scheduler | Cèntims al mes |
| Abocar comandes a l'ERP amb tolerància a talls | Pub/Sub pedidos-nuevos amb reintents i DLQ |
Ja existeix |
| Polítiques al clúster | Policy Controller, mentre continuï havent-hi clúster | Inclòs al nivell base |
| Observabilitat conjunta | Ja tenim Cloud Monitoring i Logging (06-04, 06-06) | Ja existeix |
Cost total de l'ordre de desenes d'euros al mes, davant de 18.000 € més 900 €/mes. La diferència no s'estalvia: s'inverteix en el que sí que ens falta —fiabilitat, SLO i recuperació davant de desastres (07-06)—, que és on avui tenim el risc de debò.
La frase per a direcció. No estem rebutjant la proposta perquè sigui cara, sinó perquè resol el problema d'una empresa que no som. Si obrim cinc botigues més i l'ERP migra a contenidors, hi tornarem a mirar — i per això queda escrit a DA-004 quan es revisa.
Conclusió
Has entès el mapa complet de l'híbrid i el multinúvol, i —més important— saps situar-t'hi.
Distingeixes híbrid, multinúvol, vora i aquella quarta categoria que ningú no anomena, el multinúvol accidental, que és la situació real de gairebé tothom. Coneixes els cinc motius per no ser només en un núvol en la seva versió honesta: la inversió prèvia que caduca sola, la latència l'argument fort de la qual no són els mil·lisegons sinó el funcionament sense connexió, la regulació amb els seus tres nivells —residència, sobirania i control físic— que gairebé ningú no distingeix, la dependència del proveïdor que té graus i la gestió correcta de la qual és saber en quin ets, i la continuïtat que gairebé sempre es resol amb una altra regió i no amb un altre núvol. I coneixes els costos ocults de cada model, amb el més car subratllat: l'humà.
Saps què és Anthos i en què s'ha convertit: GKE Enterprise per a la gestió unificada de clústers, Google Distributed Cloud per al programari de Google fora de Google, GKE Multi-Cloud per a clústers sobre AWS i Azure, i Cloud Service Mesh per a la malla. Reconeixeràs el nom antic en documentació i exàmens i el sabràs traduir.
Domines el concepte central, la flota, i la seva conseqüència menys evident i més potent: la igualtat d'espais de noms, que converteix tienda en «l'equip de la botiga» a tots els clústers alhora. Coneixes els seus components un a un, amb Config Sync —GitOps d'estirada, amb l'avantatge decisiu de no exigir accés entrant als emplaçaments remots— i Policy Controller —Gatekeeper gestionat, amb la seva biblioteca de plantilles i l'imprescindible dryrun abans de deny— com els dos que aporten valor fins i tot amb un sol clúster.
Ho has fet a la pràctica: registrar alpinashop-cluster en una flota, activar Config Sync contra alpinashop-infra, escriure dues polítiques reals —només imatges de l'Artifact Registry propi i etiquetes obligatòries amb valors validats—, mesurar les seves violacions en dryrun, corregir l'origen i només llavors denegar. Amb l'error número u assenyalat: excloure sempre els espais de noms del sistema.
Entens la malla de serveis sense fum: què resol de debò —mTLS automàtic amb identitat per servei i telemetria uniforme sense tocar el codi— i quina complexitat afegeix —contenidors duplicats, un salt de xarxa més, sis objectes nous i una depuració més difícil—, amb el llindar honest d'uns vint serveis i diversos equips per sota del qual no compensa. I coneixes Binary Authorization com a control d'admissió per signatura, que tornarà a 07-04 i que, a diferència de la malla, sí que aplica a Cloud Run.
Saps com es factura —per vCPU de la flota, com a edició de GKE— i per què el preu no és el que decideix: el que decideix és que es paga per capacitats que no es faran servir i per hores d'aprenentatge que no es tenen. Coneixes les alternatives lleugeres, de Cloud VPN i Pub/Sub com a pont fins a Config Connector, amb la nota històrica de Cloud Run for Anthos. I t'emportes la taula de quan sí i quan no amb la seva pregunta resum: tinc càrregues executant-se fora de GCP que necessitin la mateixa gestió? Si només necessites parlar amb un sistema de fora, no necessites Anthos: necessites xarxa.
I tens DA-004 escrita: AlpinaShop no adopta GKE Enterprise. Connecta amb Sabadell per Cloud VPN HA, sincronitza l'estoc amb Workflows cada deu minuts, aboca les comandes per Pub/Sub amb tolerància a talls, manté el TPV funcionant sense connexió, adopta Policy Controller en dryrun perquè aporta amb un sol clúster, i deixa escrites les tres condicions que obligarien a revisar la decisió.
Queda pendent el que aquesta decisió implica en dos fronts. Un és la xarxa: el túnel a Sabadell, el Cloud Router, l'adreçament que no es pot encavalcar i tot el que cal dissenyar perquè dues xarxes que van néixer per separat es parlin sense sorpreses — és 07-03.
L'altre és més antic. Aquesta lliçó ha decidit no muntar una plataforma de contenidors més gran; la següent fa just el contrari i en munta una més petita. Perquè si AlpinaShop té un sol servei web, amb trànsit irregular, ja contenidoritzat i sense estat, la pregunta que porta pendent des de 02-07 té una resposta que ja no es pot ajornar. DA-001 es compleix a la propera lliçó: el catàleg se'n va a Cloud Run.
Curs de Google Cloud Platform (GCP)
Mòdul 1: Introducció a Google Cloud Platform
- Què és Google Cloud Platform?
- Configuració del teu compte de GCP
- Descripció general de la consola de GCP
- Projectes, jerarquia de recursos i facturació
- Regions, zones i model de responsabilitat compartida
- Cloud Shell i la CLI de gcloud
Mòdul 2: Serveis principals de GCP
- Compute Engine: màquines virtuals a Google Cloud
- Cloud Storage: emmagatzematge d'objectes
- Cloud SQL: bases de dades relacionals gestionades
- App Engine: plataforma com a servei
- Google Kubernetes Engine (GKE)
- Bases de dades NoSQL: Firestore, Bigtable i Spanner
- Com triar el servei de còmput adequat
Mòdul 3: Xarxes i seguretat
- Xarxes VPC
- Balanceig de càrrega al núvol
- Cloud CDN
- Gestió d'identitat i accés (IAM)
- Cloud Armor
- Secrets i xifratge: Secret Manager i Cloud KMS
- Cloud DNS, certificats TLS i publicació segura de serveis
Mòdul 4: Dades i anàlisi
- BigQuery: el magatzem de dades analític
- Cloud Dataflow: processament de dades per lots i en temps real
- Cloud Dataproc: Spark i Hadoop gestionats
- Cloud Pub/Sub: missatgeria asíncrona
- Cloud Data Fusion: integració de dades sense codi
- Orquestració de pipelines amb Cloud Composer i Workflows
- Govern de les dades i taulers amb Dataplex i Looker Studio
Mòdul 5: Aprenentatge automàtic i IA
- Vertex AI: la plataforma d'aprenentatge automàtic de GCP
- AutoML: models a mida sense escriure codi
- TensorFlow a GCP: entrenament i servei de models
- API de llenguatge natural
- API de visió
- IA generativa a Vertex AI: models Gemini i incrustacions
- MLOps: del model al producte amb Vertex AI Pipelines
Mòdul 6: DevOps i monitoratge
- Cloud Build: integració contínua a GCP
- Cloud Source Repositories i gestió del codi font
- Cloud Functions: funcions sense servidor
- Cloud Monitoring (abans Stackdriver): mètriques, taulers i alertes
- Cloud Deployment Manager i infraestructura com a codi nativa
- Cloud Logging i Cloud Trace: registres, traces i diagnòstic
- Terraform a GCP: infraestructura com a codi a la pràctica
Mòdul 7: Temes avançats de GCP
- Híbrid i multinúvol amb Anthos
- Computació sense servidor amb Cloud Run
- Xarxes avançades: VPC compartida, aparellament i connectivitat híbrida
- Bones pràctiques de seguretat
- Gestió i optimització de costos
- Fiabilitat: SLO, alta disponibilitat i recuperació de desastres
- Govern a escala: organització, polítiques i auditoria
