Questa pagina si applica ad Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
Questa pagina descrive come attivare Model Context Protocol (MCP) in un cluster
Apigee Hybrid esistente con versione 1.17.0 o successive. Una volta completata
questa procedura, il cluster esegue un nuovo data plane MCP in-cluster e il processore
di messaggi è pronto a indirizzare le chiamate allo strumento MCP. Puoi quindi eseguire il deployment del primo proxy di rilevamento MCP seguendo la guida rapida MCP condivisa.
Per i concetti, l'architettura e i dettagli delle funzionalità di MCP condivisi tra Apigee e Apigee hybrid, consulta la sezione MCP nella panoramica di Apigee.
Cosa fa questa procedura
L'attivazione di MCP su un cluster Apigee hybrid comporta le seguenti modifiche:
- Concede all'identità
apigee-watcherl'accesso alla configurazione MCP sul control plane Apigee. Aggiungi l'account di servizioapigee-watcherall'elencowatcher_identitiesnella risorsacontrolPlaneAccessdella tua organizzazione Apigee in modo che il sidecar MCP possa estrarre i bundle di configurazione MCP dal control plane Apigee. Si tratta di una modifica del control plane, limitata all'organizzazione Apigee, ed è un passaggio una tantum per organizzazione indipendentemente dal numero di cluster che la servono. - Aggiunge un nuovo data plane MCP in-cluster. Viene creato un nuovo insieme di pod MCP nello stesso spazio dei nomi Kubernetes in cui è installato Apigee hybrid (
apigeeper impostazione predefinita), insieme alle risorse Kubernetes di supporto (Service, Horizontal Pod Autoscaler e RBAC) necessarie per eseguirli. Le chiamate allo strumento MCP vengono gestite da questi pod. - Configura il processore di messaggi per raggiungere il data plane MCP. L'operatore Apigee
aggiorna la specifica del pod processore di messaggi in modo che MP indirizzi le chiamate allo strumento MCP al
nuovo piano dati MCP in-cluster. L'applicazione di questa modifica attiva una versione canary in più fasi del processore di messaggi (gestito dal controller
ApigeeDeployment); il pod precedente continua a erogare traffico finché il nuovo pod non èReady. Il rilascio viene attivato solo durante le transizioni di attivazione e disattivazione, non durante l'attività MCP in corso o il traffico MCP in stato stazionario. Esegui questa procedura in un periodo di manutenzione approvato e attendi il completamento del rilascio prima di procedere.
Passaggio 1: modifica overrides.yaml
Apri il file overrides.yaml che utilizzi per i grafici Helm di Apigee hybrid. Al
livello superiore del file, aggiungi:
enableMcpServer: true
Questa è la configurazione minima richiesta per abilitare MCP. Utilizza i valori predefiniti integrati del grafico apigee-org: due repliche del piano dati MCP che vengono scalate automaticamente fino a dieci con un utilizzo della CPU del 70%, con richieste di risorse di 500 m di CPU e 512 Mi di memoria e limiti di 2000 m di CPU e 1 Gi di memoria nel container del piano dati MCP. Per personalizzare i conteggi delle repliche,
le richieste di risorse o l'account di servizio MCP, consulta
Riferimento: campi MCP in overrides.yaml più avanti in questa pagina.
Di seguito sono riportati esempi completi di un overrides.yaml unito, uno per ogni
stile di autenticazione. Utilizza l'esempio che corrisponde alla configurazione della tua installazione di base esistente. Le righe specifiche di MCP sono evidenziate con commenti e sono uguali in tutte e tre le varianti.
Seleziona la scheda che corrisponde al modo in cui l'installazione di base autentica i componenti Apigee su Google Cloud. La selezione si applica a ogni blocco di codice con ambito variante in questa pagina.
Workload Identity (GKE)
Utilizza questa variante se l'installazione di base autentica i componenti Apigee su Google Cloud tramite Workload Identity di GKE (nessun file di chiavi del account di servizio su disco).
instanceID: "my-hybrid-instance" namespace: APIGEE_NAMESPACE gcp: region: us-central1 projectID: my-hybrid-project workloadIdentity: enabled: true gsa: apigee-non-prod@my-hybrid-project.iam.gserviceaccount.com k8sCluster: name: my-cluster region: us-central1 org: my-org envs: - name: my-env # ---- MCP: minimum required ------------------------------------------------- enableMcpServer: true # ---- MCP: optional customization (all fields default when omitted) --------- # mcpServer: # replicaCountMin: 2 # replicaCountMax: 10 # targetCPUUtilizationPercentage: 70 # resources: # requests: { cpu: 500m, memory: 512Mi } # limits: { cpu: 2000m, memory: 1Gi } # sidecar: # resources: # requests: { cpu: 200m, memory: 128Mi } # limits: { cpu: 500m, memory: 512Mi } # annotations: {} # ----------------------------------------------------------------------------
Chiavi del account di servizio basate su file
Utilizza questa variante se l'installazione di base autentica i componenti Apigee su Google Cloud tramite i file delle chiavi del account di servizio che distribuisci a ogni cluster.
instanceID: "my-hybrid-instance" namespace: APIGEE_NAMESPACE gcp: region: us-central1 projectID: my-hybrid-project k8sCluster: name: my-cluster region: us-central1 org: my-org guardrails: serviceAccountPath: ./service-accounts/apigee-non-prod.json mart: serviceAccountPath: ./service-accounts/apigee-non-prod.json connectAgent: serviceAccountPath: ./service-accounts/apigee-non-prod.json watcher: serviceAccountPath: ./service-accounts/apigee-non-prod.json # MCP also uses this key file envs: - name: my-env serviceAccountPaths: synchronizer: ./service-accounts/apigee-non-prod.json runtime: ./service-accounts/apigee-non-prod.json # ---- MCP: minimum required ------------------------------------------------- enableMcpServer: true # ---- MCP: optional customization (all fields default when omitted) --------- # mcpServer: # replicaCountMin: 2 # replicaCountMax: 10 # targetCPUUtilizationPercentage: 70 # resources: # requests: { cpu: 500m, memory: 512Mi } # limits: { cpu: 2000m, memory: 1Gi } # sidecar: # resources: # requests: { cpu: 200m, memory: 128Mi } # limits: { cpu: 500m, memory: 512Mi } # annotations: {} # ----------------------------------------------------------------------------
Federazione delle identità per i workload (AKS/EKS)
Utilizza questa variante se l'installazione di base si trova su AKS o EKS ed esegue l'autenticazione su Google Cloud
tramite la federazione delle identità per i workload. MCP utilizza il file di configurazione delle credenziali già utilizzato da apigee-watcher da watcher.serviceAccountPath, quindi non devi aggiungere alcuna configurazione dell'identità specifica per MCP. Se invece memorizzi la configurazione delle credenziali in un secret Kubernetes, consulta Altri meccanismi di identità.
Aggiungi la chiave di primo livello MCP al tuo WIF esistente overrides.yaml:
# ---- MCP: minimum required ------------------------------------------------- enableMcpServer: true # ---- MCP: optional customization (all fields default when omitted) --------- # mcpServer: # replicaCountMin: 2 # replicaCountMax: 10 # targetCPUUtilizationPercentage: 70 # resources: # requests: { cpu: 500m, memory: 512Mi } # limits: { cpu: 2000m, memory: 1Gi } # sidecar: # resources: # requests: { cpu: 200m, memory: 128Mi } # limits: { cpu: 500m, memory: 512Mi } # annotations: {} # ----------------------------------------------------------------------------
Lascia mcpServer.gsa e mcpServer.serviceAccountPath non impostati. Il
sidecar MCP utilizza lo stesso file di configurazione delle credenziali di apigee-watcher, da
watcher.serviceAccountPath.
Passaggio 2: concedi all'identità watcher l'accesso alla configurazione MCP sul control plane
Il sidecar MCP recupera il bundle di configurazione dal control plane Apigee utilizzando
l'account di servizio Google Cloud del componente apigee-watcher (l'identità
che hai selezionato nel passaggio 1). Prima dell'avvio dei pod MCP, aggiungi questo account di servizio all'elenco watcher_identities nella risorsa controlPlaneAccess dell'organizzazione Apigee. Senza questa concessione, le chiamate del sidecar MCP a apigee.googleapis.com per recuperare il riferimento alla configurazione MCP restituiscono 404 Not Found e il data plane MCP non diventa mai pronto a gestire il traffico degli strumenti.
Questo è un passaggio una tantum per organizzazione (non per cluster). Salta questo passaggio se hai già concesso l'accesso per un cluster precedente nella stessa organizzazione Apigee.
- Imposta le variabili della shell che utilizzi per la chiamata API. Riutilizza i valori dell'installazione:
export ORG_NAME=YOUR_ORG_NAME export PROJECT_ID=YOUR_GCP_PROJECT_ID export WATCHER_SA=apigee-watcher@${PROJECT_ID}.iam.gserviceaccount.com export TOKEN=$(gcloud auth print-access-token)
Dove:
YOUR_ORG_NAMEè il nome della tua organizzazione Apigee hybrid.YOUR_GCP_PROJECT_IDè il progetto Google Cloud che ospita la tua organizzazione Apigee ibrida.WATCHER_SAè l'indirizzo email del account di servizioapigee-watcher. Se hai eseguito l'override diwatcher.gsainoverrides.yaml, utilizza quel valore anziché il valore predefinitoapigee-watcher@${PROJECT_ID}.iam.gserviceaccount.com.
- Chiama l'API
updateControlPlaneAccess
per aggiungere il account di servizio watcher all'elenco
watcher_identities:Nessuna residenza dei dati
curl -X PATCH -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ "https://apigee.googleapis.com/v1/organizations/${ORG_NAME}/controlPlaneAccess?update_mask=watcher_identities" \ -d "{\"watcher_identities\": [\"serviceAccount:${WATCHER_SA}\"]}"Residenza dei dati
curl -X PATCH -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ "https://${CONTROL_PLANE_LOCATION}-apigee.googleapis.com/v1/organizations/${ORG_NAME}/controlPlaneAccess?update_mask=watcher_identities" \ -d "{\"watcher_identities\": [\"serviceAccount:${WATCHER_SA}\"]}"Dove
CONTROL_PLANE_LOCATIONè la posizione dei dati del control plane se l'installazione di Apigee Hybrid utilizza la residenza dei dati. Per l'elenco delle località disponibili, consulta Regioni del control plane dell'API Apigee disponibili.La chiamata restituisce un'operazione a lunga esecuzione. Attendi il completamento prima di eseguire il passaggio di verifica riportato di seguito.
- Verifica che la concessione sia stata assegnata. Chiama
getControlPlaneAccess
e verifica che il account di servizio watcher venga visualizzato nel campo
watcherIdentitiesdella risposta:Nessuna residenza dei dati
curl -X GET -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ "https://apigee.googleapis.com/v1/organizations/${ORG_NAME}/controlPlaneAccess"Residenza dei dati
curl -X GET -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ "https://${CONTROL_PLANE_LOCATION}-apigee.googleapis.com/v1/organizations/${ORG_NAME}/controlPlaneAccess"La risposta deve includere un array
watcherIdentitiescontenente il account di servizio del watcher. Ad esempio:{ "synchronizerIdentities": [ ... ], "analyticsPublisherIdentities": [ ... ], "watcherIdentities": [ "serviceAccount:apigee-watcher@YOUR_GCP_PROJECT_ID.iam.gserviceaccount.com" ] }
Se
watcherIdentitiesnon è presente nella risposta o non contiene il account di servizio watcher, esegui nuovamente il comando PATCH e controlla lo stato dell'operazione per verificare la presenza di errori prima di procedere.
Passaggio 3: esegui l'upgrade del grafico apigee-operator
Esegui l'upgrade del grafico dell'operatore prima. Il grafico dell'operatore possiede lo schema per le nuove
risorse MCP; il grafico dell'organizzazione fa riferimento a queste risorse. L'upgrade nell'ordine sbagliato comporta
un helm upgrade riuscito che non crea pod MCP.
helm upgrade APIGEE_OPERATOR_RELEASE_NAME apigee-operator/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
Il comando viene completato in meno di un minuto. Verifica che il deployment dell'operatore sia completamente
implementato con la nuova immagine (apigee-controller-manager
Deployment è una risorsa Kubernetes standard, non un
ApigeeDeployment, quindi kubectl rollout status deploy è il
comando corretto):
kubectl rollout status deploy -n APIGEE_NAMESPACE apigee-controller-manager --timeout=2m
Output previsto:
deployment "apigee-controller-manager" successfully rolled out
Passaggio 4: esegui l'upgrade del grafico apigee-org
helm upgrade APIGEE_ORG_RELEASE_NAME apigee-org/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
Ora vengono eseguiti in parallelo due cicli di riconciliazione:
- L'operatore Apigee crea il deployment, il servizio, l'HPA, il service account, il ruolo e il RoleBinding MCP. I pod MCP vengono visualizzati due alla volta (in base alla pianificazione di Kubernetes); il container sidecar in ogni pod esegue il primo recupero della configurazione dal control plane di Apigee poco dopo l'avvio.
- L'operatore Apigee inserisce la voce
hostAliasesnella specifica del pod Message Processor, che attiva il rilascio diapigee-runtimeApigeeDeployment.
Passaggio 5: verifica l'installazione
Verifica che il data plane MCP sia in esecuzione
Esamina le quattro risorse correlate a MCP create dall'operatore. I nomi delle risorse includono un suffisso derivato dall'organizzazione; gli esempi che seguono utilizzano ORG_CR_SUFFIX come segnaposto per questo suffisso e i suffissi dei pod e Service ClusterIP saranno diversi nel tuo ambiente.
Pod MCP (due per impostazione predefinita; scalabilità automatica fino a dieci in caso di carico):
kubectl get pod -n APIGEE_NAMESPACE -l app=apigee-mcp-server
NAME READY STATUS RESTARTS AGE apigee-mcp-server-default-ORG_CR_SUFFIX-6d4c8-abc12 2/2 Running 0 2m apigee-mcp-server-default-ORG_CR_SUFFIX-6d4c8-def34 2/2 Running 0 2m
Ogni pod deve mostrare 2/2 nella colonna READY. I due container
in ogni pod sono:
apigee-mcp-server: il contenitore del piano dati MCP a cui si connettono i pod MP.apigee-mcp-server-config: il sidecar di configurazione (una modalità delapigee-watcherbinario) che recupera i bundle di configurazione dal piano di controllo Apigee e li scrive in un volume condiviso che il container del piano dati MCP legge.
MCP ApigeeDeployment (una risorsa personalizzata di Kubernetes, non una
Deployment):
kubectl get apigeedeployment -n APIGEE_NAMESPACE -l app=apigee-mcp-server
NAME STATE NESTEDSTATE AGE apigee-mcp-server-default-ORG_CR_SUFFIX running 2m
Lo stato previsto è running. Verifica anche che il pod sottostante sia 2/2
Running:
kubectl get pod -n APIGEE_NAMESPACE -l app=apigee-mcp-server
NAME READY STATUS RESTARTS AGE apigee-mcp-server-default-ORG_CR_SUFFIX-REV-POD_HASH 2/2 Running 0 2m
Servizio MCP:
kubectl get svc -n APIGEE_NAMESPACE -l app=apigee-mcp-server
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE apigee-mcp-server-default-ORG_CR_SUFFIX ClusterIP 10.96.42.17 <none> 80/TCP,443/TCP,15021/TCP,15000/TCP 2m
HorizontalPodAutoscaler MCP:
kubectl get hpa -n APIGEE_NAMESPACE | grep apigee-mcp-server
Verifica che MINPODS corrisponda a mcpServer.replicaCountMin
di overrides.yaml (2 predefinito) e che MAXPODS
corrisponda a mcpServer.replicaCountMax (10 predefinito). Le
colonne TARGETS, REPLICAS e AGE dipendono
dalle metriche live e dallo stato del cluster.
Verifica che i pod del processore di messaggi abbiano ricevuto la voce hostAliases
Ogni pod MP deve mostrare la voce inserita. Se anche un solo pod non la mostra, non può instradare le chiamate allo strumento MCP. Elenca tutti i pod MP e i relativi hostAliases:
kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-runtime \ -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.hostAliases}{"\n"}{end}'
Output previsto: ogni pod MP elenca un array hostAliases contenente una voce
con due nomi host che puntano al ClusterIP del servizio MCP del passaggio precedente
(il secondo nome host utilizza il nome dell'organizzazione in minuscolo). I nomi dei pod del processore di messaggi
seguono il modello
apigee-runtime-TRUNCATED_ORG-ENV_GROUP_HASH-REV-POD_HASH,
dove TRUNCATED_ORG è il nome della tua organizzazione (troncato per rientrare nel limite di 63 caratteri di Kubernetes se il nome dell'organizzazione è lungo),
ENV_GROUP_HASH è un hash del gruppo di deployment per ambiente, REV
è il numero di revisione della release corrente (quattro cifre, ad esempio 1170)
e POD_HASH è un suffisso casuale per pod. Ad esempio:
apigee-runtime-myorg-env1-abc12-1170-def34 [map[hostnames:[mcp.apigee.internal myorg.mcp.apigee.internal] ip:10.96.42.17]] apigee-runtime-myorg-env1-abc12-1170-ghi56 [map[hostnames:[mcp.apigee.internal myorg.mcp.apigee.internal] ip:10.96.42.17]]
Se un pod mostra un valore hostAliases vuoto, il processore di messaggi
ApigeeDeployment non ha rilevato completamente la specifica del pod aggiornata. Forza una
nuova versione canary in staging eliminando i pod del processore di messaggi corrente; il
controller ApigeeDeployment li eseguirà nuovamente dal rendering dalla specifica corrente
(che ora include la voce hostAliases):
kubectl delete pod -n APIGEE_NAMESPACE -l app=apigee-runtime
Il controller ApigeeDeployment ricreerà i pod entro un minuto. Tieni presente che kubectl rollout restart deploy (il comando Kubernetes standard) non funziona su processore di messaggi perché processore di messaggi viene implementato come risorsa personalizzata ApigeeDeployment, non come Deployment.
Installazione completata
I tre controlli precedenti confermano che il piano dati MCP è in esecuzione e che è indirizzabile tramite MP:
- Ogni pod MCP è
2/2 Running. Il container del piano di controllo MCP non supera il probe di prontezza di Kubernetes sulla porta15021se il certificato TLS emesso dall'operatore non viene caricato e il sidecar non ha ancora caricato la configurazione MCP iniziale, pertanto i podReadysoddisfano entrambe le precondizioni. - La specifica di ogni pod MP contiene la voce
hostAliasesche bloccamcp.apigee.internaleORG_NAME.mcp.apigee.internalal ClusterIP del servizio MCP. I pod MP possono quindi risolvere gli endpoint di destinazione del proxy MCP nel piano dati MCP in-cluster. - Un pod MP risolve
mcp.apigee.internalnel ClusterIP del servizio MCP tramite la vocehostAliasesinserita.
Verifica il traffico end-to-end dello strumento MCP (una chiamata initialize o
tools/list effettiva di MCP tramite l'ingresso Apigee) nell'ambito della
guida rapida di MCP,
dopo aver eseguito il deployment del primo proxy di rilevamento MCP.
Se uno dei tre controlli precedenti non va a buon fine, consulta la sezione Risoluzione dei problemi relativi ai deployment MCP prima di procedere con la guida rapida.
Passaggio 6: abilita MCP sui cluster rimanenti
Le richieste MCP per un determinato nome host possono essere indirizzate a qualsiasi cluster che gestisce il gruppo di ambienti Apigee corrispondente. Se MCP è abilitato su alcuni cluster e non su altri nello stesso
gruppo di ambienti, le richieste MCP che vengono indirizzate a un cluster senza MCP abilitato non vanno a buon fine
(in genere vengono restituite al client come 503 Service Unavailable).
Abilita MCP in modo uniforme su ogni cluster che gestisce lo stesso gruppo di ambienti. Per ogni cluster aggiuntivo, ripeti i passaggi 1, 3, 4 e 5. Non è necessario ripetere il passaggio 2 (concedi l'accesso all'identità del visualizzatore): questa concessione è limitata all'organizzazione Apigee e si applica a tutti i cluster della stessa organizzazione.
Esegui il rollback
Per disattivare MCP su un cluster, imposta enableMcpServer: false (o rimuovi completamente il campo) in overrides.yaml, poi esegui l'upgrade del grafico apigee-org:
helm upgrade APIGEE_ORG_RELEASE_NAME apigee-org/ \ --namespace APIGEE_NAMESPACE --atomic -f overrides.yaml
Il campo enableMcpServer viene utilizzato solo dal grafico apigee-org, quindi non è necessario eseguire l'upgrade del grafico dell'operatore durante una disattivazione. L'operatore Apigee (invariato) rileva la modifica della configurazione dalla risorsa personalizzata ApigeeOrganization, elimina le risorse MCP e rimuove la voce hostAliases dalla specifica del pod processore di messaggi, il che attiva il rilascio di apigee-runtime ApigeeDeployment. Esegui il rollback in un periodo di manutenzione approvato.
Dopo il rollback, i proxy di rilevamento MCP di cui hai eseguito il deployment nell'ambiente Apigee sono ancora presenti nel control plane Apigee, ma nessun cluster in quel gruppo di ambienti gestisce il traffico MCP. Annulla il deployment dei proxy di rilevamento MCP per disattivare completamente la funzionalità oppure lasciali di cui è stato eseguito il deployment e riattiva MCP sui cluster in un secondo momento.
Riferimento: campi MCP in overrides.yaml
La tabella seguente elenca tutti i campi overrides.yaml di Apigee Hybrid che
controllano il comportamento di MCP nella versione 1.17.0. Solo enableMcpServer è
obbligatorio; tutti gli altri campi hanno valori predefiniti sicuri adatti alla maggior parte delle installazioni.
Le definizioni dei campi corrispondono ai valori predefiniti del grafico Helm apigee-org per
1.17.0 ibrido.
| Campo | Tipo | Predefinito | Ottimizzazione consigliata |
|---|---|---|---|
enableMcpServer |
boolean | false |
Obbligatorio. Imposta su true per abilitare MCP su questo cluster. L'attivazione/disattivazione
di questo campo attiva una versione canary in più fasi del processore di messaggi. Attiva/disattiva solo in
un periodo di manutenzione e attendi il completamento del rilascio prima di procedere. |
mcpServer.replicaCountMin |
integer | 2 |
Continua a 2 per HA. Aumenta solo se hai una baseline di traffico MCP elevato; HPA aumenta automaticamente in base alla pressione della CPU. Segnale: HPA sostenuta
a replicaCountMax e CPU superiore al target. |
mcpServer.replicaCountMax |
integer | 10 |
Aumenta se noti che HPA è limitato a 10 durante il picco. Segnale:
kubectl top pods -l app=apigee-mcp-server mostra tutti i pod vicini al limite di CPU al picco. Se metrics-server non è installato, utilizza
kubectl get hpa -n APIGEE_NAMESPACE | grep apigee-mcp-server e controlla
se la colonna REPLICAS è al limite di MAXPODS. |
mcpServer.targetCPUUtilizationPercentage |
integer | 70 |
Riduzione a 50-60 per i carichi di lavoro sensibili alla latenza
(scalabilità anticipata). Aumenta il valore a 80-85 per ridurre il numero di repliche nei cluster sensibili ai costi. Segnale: la latenza delle richieste P95 è correlata alla CPU per pod. |
mcpServer.resources.requests |
ResourceList | cpu: 500m, memory: 512Mi |
Aumenta le richieste se i pod vengono spesso terminati per errore OOM o se la CPU viene limitata in modo
costante. Segnale: kubectl describe pod mostra le condizioni OOMKilled o di limitazione. |
mcpServer.resources.limits |
ResourceList | cpu: 2000m, memory: 1Gi |
Aumenta il limite della CPU prima di aumentare il numero di repliche quando la latenza p95 è elevata, ma il QPS complessivo è basso (poche richieste costose). Aumenta il limite di memoria solo se visualizzi terminazioni OOM. |
mcpServer.sidecar.resources.requests |
ResourceList | cpu: 200m, memory: 128Mi |
Raramente necessita di regolazioni. Il sidecar compone e scrive periodicamente i bundle di configurazione; la CPU in stato stazionario è minima. |
mcpServer.sidecar.resources.limits |
ResourceList | cpu: 500m, memory: 512Mi |
Raramente necessita di regolazioni. Aumenta la memoria solo se implementi un numero insolitamente elevato di strumenti MCP in un unico proxy di scoperta. |
mcpServer.terminationGracePeriodSeconds |
integer | 30 |
Raramente necessita di regolazioni. Aumenta se le richieste MCP in corso di lunga durata hanno bisogno di più tempo per essere completate durante lo svuotamento di un pod. |
mcpServer.annotations |
mappa | {} |
Aggiungi annotazioni pod aggiuntive se il cluster le richiede. |
mcpServer.serviceAccountPath |
string | unset | Lascia questo campo vuoto, a meno che tu non abbia bisogno di una separazione delle identità per componente. Se
non impostato, MCP utilizza watcher.serviceAccountPath. MCP non utilizza
envs[].serviceAccountPaths.runtime. L'identità apigee-watcher
dispone già delle autorizzazioni necessarie per il sidecar MCP. Se esegui l'override di questo
campo, specifica il percorso di un file JSON della chiave dell'account di servizio Google Cloud . Esclusivo
con mcpServer.gsa.
Se Workload Identity non è abilitato e non imposti né mcpServer.serviceAccountRef né
serviceAccountSecretProviderClass, devi impostare
mcpServer.serviceAccountPath o
watcher.serviceAccountPath. Se non imposti nessuno dei due,
helm upgrade non riesce e viene visualizzato l'errore
mcpServer.serviceAccountPath or watcher.serviceAccountPath is
required!!.
Se possibile, preferisci Workload Identity (GKE) o la federazione delle identità per i workload (AKS/EKS). Le chiavi del service account basate su file devono essere ruotate, archiviate in modo sicuro, distribuite a ogni cluster e sono la fonte più comune di perdite negli artefatti di assistenza (vedi Richieste di assistenza). |
mcpServer.gsa |
string | unset | Lascia questo campo vuoto, a meno che tu non abbia bisogno di una separazione delle identità per componente. Se
non impostato, MCP torna a watcher.gsa, poi a
gcp.workloadIdentity.gsa. L'identità apigee-watcher
dispone già delle autorizzazioni necessarie per il file collaterale MCP, quindi il riutilizzo è il
percorso consigliato. Esegui l'override con un indirizzo email del account di servizio Google Cloud dedicato solo se la tua organizzazione richiede un'identità distinta per il file collaterale MCP per motivi di audit. |
mcpServer.serviceAccountRef |
string | unset | Avanzate. Nome di un Secret Kubernetes esistente nello spazio dei nomi Apigee che
contiene una chiave delaccount di serviziot Google Cloud per il sidecar MCP. Utilizza questa opzione solo se
gestisci i secret delle chiavi delaccount di serviziot al di fuori dei grafici Helm di Apigee. Si esclude a vicenda con mcpServer.serviceAccountPath e mcpServer.gsa.
MCP non utilizza watcher.serviceAccountRef. Se l'installazione di base
memorizza la chiave apigee-watcher in un secret Kubernetes con
watcher.serviceAccountRef, imposta questa proprietà sullo stesso nome
del secret. |
mcpServer.podDisruptionBudget |
mappa | unset | PodDisruptionBudget facoltativo per i pod MCP. Accetta
minAvailable o maxUnavailable (stringa di numeri interi o percentuali). Impostane uno, non entrambi. Lascia questo campo vuoto a meno che il cluster non abbia norme di interruzione volontaria
rigide che richiedono un budget esplicito. |
mcpServer.tolerations |
list | unset (viene ripristinato il valore predefinito di tolerations di primo livello) |
Tolleranze Kubernetes standard per i pod MCP. Imposta solo se i pod MCP devono tollerare i taint che altri componenti Apigee non tollerano. |
mcpServer.image.pullPolicy |
string | IfNotPresent |
Policy di pull delle immagini per il contenitore del server MCP. Raramente modificato. |
mcpServer.sidecar.image.pullPolicy |
string | IfNotPresent |
Policy di pull delle immagini per il container sidecar MCP. Raramente modificato. |
Stimare la capacità dello strumento MCP
Apigee Hybrid non impone un numero massimo fisso di strumenti MCP per organizzazione. Al contrario, la capacità dello strumento è limitata da quattro limiti di dimensioni rigidi applicati al momento del deployment o della richiesta. Se un numero specifico di strumenti è adatto dipende dalle dimensioni di ciascuno strumento, che derivano dalla specifica OpenAPI che definisce lo strumento.
Capacità tipica
Per la maggior parte delle specifiche OpenAPI, un mix di strumenti con conteggi dei parametri, dimensioni del corpo della richiesta e lunghezze della descrizione variabili, con la maggior parte degli strumenti che rientrano nell'intervallo di dimensioni da piccole a medie,in genere puoi prevedere di inserire 10.000 strumenti MCP per organizzazione al limite di dimensioni della risposta tools/list predefinito.
La capacità effettiva varia in base alla forma specifica della specifica OpenAPI. Le organizzazioni le cui specifiche sono dominate da strumenti con molti parametri, corpi delle richieste di grandi dimensioni o descrizioni lunghe inseriscono un numero proporzionalmente inferiore di strumenti prima di raggiungere uno dei quattro limiti rigidi riportati di seguito. Per convalidare la capacità per le tue specifiche, segui Stima della capacità per le tue specifiche di seguito.
Limiti rigidi
Nella versione ibrida di Apigee 1.17.0 si applicano quattro limiti di dimensione. Il limite applicabile più basso è vincolante; l'aumento di uno non comporta l'aumento degli altri.
| Limite | Valore | Ambito | Modalità di errore |
|---|---|---|---|
| Dimensioni del file di specifica OpenAPI | 3 MiB | per .yaml file |
400 in proxy validate |
| Dimensioni del bundle del proxy MCP (decompresso) | 50 MiB | per il proxy di rilevamento MCP | 400 in proxy validate |
tools/list dimensioni risposta |
10 MiB (predefinito) | per nome host | 502 con TooBigBody |
| Nomi host per gruppo di ambienti | 100 | per gruppo di ambienti | 400 all'aggiornamento del gruppo di ambienti |
Cosa determina le dimensioni per strumento
La dimensione per strumento è composta quasi interamente dallo
inputSchema dello strumento, che deriva da parameters e requestBody
dell'operazione nella specifica OpenAPI.
Tre proprietà sono le più importanti:
- Numero di parametri. Ogni voce di parametro contribuisce con circa
100 byte alle dimensioni dello strumento nella risposta
tools/list. - Numero di proprietà del corpo della richiesta. Ogni proprietà del corpo della richiesta
contribuisce con circa 100 byte. Le operazioni con un corpo della richiesta (in genere
POSTePUT) sono quindi notevolmente più grandi rispetto a quelle senza (in genereGETeDELETE). - Lunghezza della descrizione. Le descrizioni delle operazioni vengono copiate quasi testualmente nello strumento, quindi una descrizione più lunga aumenta direttamente le dimensioni dello strumento.
Gli schemi di risposta non vengono conteggiati nel budget delle dimensioni. Solo
parameters e requestBody raggiungono la configurazione
MCP. Pertanto, il dimensionamento della capacità in base alle sole dimensioni del file OpenAPI tende
a sovrastimare i costi, perché la maggior parte delle specifiche OpenAPI reali include
definizioni di schemi di risposta che non influiscono sulle dimensioni dello strumento.
Stima della capacità per la specifica
Il modo più affidabile per stimare la capacità dello strumento per le specifiche OpenAPI è misurare un sottoinsieme rappresentativo:
- Esegui il deployment di un proxy di rilevamento MCP che fa riferimento a un piccolo sottoinsieme rappresentativo degli strumenti che prevedi di pubblicare (ad esempio, da 50 a 100 strumenti che riflettono il mix di conteggi dei parametri, dimensioni del corpo della richiesta e lunghezze delle descrizioni nella specifica completa).
- Chiama
tools/listrispetto al proxy di cui è stato eseguito il deployment e registra le dimensioni della risposta in byte e il numero di strumenti restituiti. - Dividi la dimensione della risposta per il numero di strumenti per ottenere la dimensione media per strumento per la tua specifica.
- Dividi il limite di dimensioni della risposta
tools/listapplicabile (10 MiB per impostazione predefinita) per la media per stimare il numero massimo di strumenti che rientrano in un nome host per una specifica di questa forma.
Aumento della capacità
Due meccanismi aumentano la capacità dello strumento oltre i valori predefiniti:
- Dividi gli strumenti tra i nomi host. Il limite di risposte
tools/listè per nome host. La suddivisione degli strumenti su più nomi host all'interno dello stesso gruppo di ambienti moltiplica l'headroom per nome host (nel rispetto del limite di 100 nomi host per gruppo di ambienti). Lo sharding non aumenta il limite per bundle per proxy; il limite di 50 MiB per bundle continua a essere applicato a tutti i nomi host su un singolo proxy di rilevamento MCP. - Aumenta il limite di dimensioni della risposta
tools/list. Il limite predefinito è 10 MiB per nome host. Puoi aumentarlo fino a 30 MiB. Come minimo, ciò comporta l'impostazione dienvs.components.runtime.resources.limits.memory,envs.components.runtime.resources.requests.memoryeenvs.components.runtime.cwcAppend.bin_setenv_max_meminoverrides.yaml, quindi l'esecuzione dihelm upgradesul graficoapigee-org. Consulta la sezione Configurare il supporto del payload di messaggi di grandi dimensioni in Apigee hybrid per la procedura completa, incluse le varianti per ambiente e per installazione, le indicazioni per il dimensionamento dell'heap del processore di messaggi e gli esempi completi dioverrides.yaml. L'aumento del limite di risposte non influisce sul limite di dimensioni del bundle proxy MCP di 50 MiB; se la tua capacità è vincolata da questo limite, questa modifica non ti aiuterà.
Sicurezza
Confine di attendibilità
Il data plane MCP viene eseguito all'interno del tuo cluster Kubernetes. Google non ha accesso in fase di runtime al piano dati. Il control plane di Apigee fornisce la configurazione MCP derivata dalla specifica OpenAPI; non osserva il traffico delle richieste MCP. I dati di configurazione at-rest vengono archiviati in un bucket Cloud Storage gestito da Apigee con ambito limitato al progetto tenant Apigee, recuperati dal sidecar MCP utilizzando il relativo account di servizio Google Cloud ambiente.
L'operatore Apigee esegue il provisioning di un Role e di un
RoleBinding Kubernetes con ambito MCP nello spazio dei nomi Apigee (APIGEE_NAMESPACE)
per il service account del data plane MCP. Il ruolo concede l'accesso di sola lettura:
get,list,watchsuservicesnel gruppo di API di base.get,list,watchsuapigeeroutesnel gruppo di APIapigee.cloud.google.com.
Il ruolo non concede verbi di scrittura e nessun accesso a Secrets,
ConfigMaps o allo stato del pod. Il revisore può verificare le regole esatte direttamente
dal cluster con:
APIGEE_ORG_CR=$(kubectl get apigeeorganization -n APIGEE_NAMESPACE \ -o jsonpath='{.items[0].metadata.name}') kubectl get role,rolebinding -n APIGEE_NAMESPACE \ --field-selector metadata.name=apigee-mcp-server-$APIGEE_ORG_CR -o yaml
Il ruolo e il RoleBinding apigee-mcp-server-APIGEE_ORG_CR sono le risorse RBAC con ambito MCP; i loro nomi includono il nome completo della risorsa personalizzata ApigeeOrganization (che deriva dal nome dell'organizzazione Apigee e da un hash breve). Non hanno un'etichetta app=apigee-mcp-server a livello di risorsa (solo i pod ce l'hanno),
quindi una ricerca basata su etichette non restituisce risultati. Se il comando field-selector riportato sopra
non restituisce nulla, elenca ogni risorsa RBAC correlata a MCP nello spazio dei nomi con:
kubectl get role,rolebinding -n APIGEE_NAMESPACE | grep apigee-mcp-server
TLS tra processore di messaggi e il piano dati MCP
I pod del processore di messaggi chiamano il piano dati MCP all'indirizzo
https://mcp.apigee.internal/ o
https://ORG_NAME.mcp.apigee.internal/. Questi nomi host vengono risolti nel ClusterIP del servizio MCP tramite la voce hostAliases inserita. Il contenitore del piano dati MCP presenta un certificato TLS firmato dall'emittente di cui è stato eseguito il provisioning di Apigee Operator (ClusterIssuer denominato apigee-ca-issuer). I nomi alternativi del soggetto del certificato includono entrambi i nomi host.
Limitare l'accesso in entrata al servizio MCP
In Apigee hybrid 1.17.0, il piano dati MCP non autentica in modo indipendente
i suoi chiamanti. Confida che le richieste che lo raggiungono siano già state
autenticate da un proxy Apigee MCP in esecuzione in un processore di messaggi. L'unico chiamante
previsto del servizio MCP è il processore di messaggi. Qualsiasi altro carico di lavoro nel cluster che può
raggiungere il ClusterIP del servizio MCP su TCP 443 può richiamare gli strumenti MCP senza un
controllo dell'autenticazione.
Limita l'accesso in entrata ai pod MCP solo ai pod processore di messaggi utilizzando il motore di policy di ingresso del cluster della tua piattaforma (Kubernetes NetworkPolicy, Cilium, Calico, Istio AuthorizationPolicy o equivalente). La limitazione:
- Consente l'accesso in entrata ai pod con l'etichetta
app=apigee-mcp-servernello spazio dei nomiAPIGEE_NAMESPACEsu TCP443dai pod con l'etichettaapp=apigee-runtimesolo nello stesso spazio dei nomi. - Nega tutto il traffico in entrata su TCP
443ai pod con l'etichettaapp=apigee-mcp-server. - Nega tutto l'ingresso nel cluster su TCP
15021ai pod con l'etichettaapp=apigee-mcp-server. La porta15021gestisce un endpoint HTTP semplice/healthz/readynon autenticato utilizzato da kubelet per il probing di disponibilità; kubelet lo raggiunge direttamente sull'IP del pod, quindi nessun altro workload nel cluster deve raggiungere i pod MCP su15021.
Applica questa limitazione prima di completare la guida rapida di MCP e di eseguire il deployment del primo proxy di rilevamento MCP in un ambiente non di sviluppo.
Contratto di aggiornamento della configurazione
Quando il sidecar MCP completa un pull di configurazione riuscito, il container del data plane MCP
carica il bundle recuperato e continua a gestirlo fino al successivo pull
riuscito. Se i pull successivi non vanno a buon fine
(il control plane Apigee non è raggiungibile, Cloud Storage non è raggiungibile, l'autorizzazione IAM è stata rimossa dal
account di servizio watcher o si è verificato un errore in qualsiasi altra fase della pipeline di pull), il
sidecar continua a pubblicare il bundle valido noto più recente a tempo indeterminato. Non esiste un limite
di obsolescenza integrato in 1.17.0: il pod rimane Ready e il traffico dello strumento MCP
continua a essere gestito in base al bundle obsoleto. Il segnale che la configurazione
ha smesso di aggiornarsi è una riga di log sidecar a livello ERROR che contiene un contatore
consecutive_failures (vedi
Risoluzione dei problemi
delle implementazioni MCP per i messaggi specifici emessi dal sidecar per ogni fase di errore).
Per gli ambienti di produzione regolamentati, pagina sugli incrementi ripetuti di questo contatore. Un avviso minimo praticabile è: pagina quando un contenitore secondario MCP emette una
riga di log di livello ERROR con consecutive_failures che raggiunge una
soglia impostata in base alla tolleranza all'obsolescenza. I valori in aumento indicano che il
sidecar ha smesso di aggiornare la configurazione; nel frattempo, il sidecar continua a gestire l'ultimo bundle riuscito.
Se il sidecar ha smesso di aggiornare la configurazione, esamina la modalità di errore dai log del sidecar. Vedi Risolvere i problemi relativi ai deployment MCP. Il riavvio dei pod MCP non risolve il problema di recupero sottostante perché i pod appena creati seguono lo stesso percorso di recupero.
Requisiti di rete in uscita
Il sidecar MCP (il contenitore di configurazione all'interno di ogni pod MCP) ha bisogno dell'accesso di rete in uscita ai seguenti endpoint su TCP 443. Scegli la scheda che corrisponde all'utilizzo della residenza dei dati da parte della tua organizzazione Apigee; gli endpoint richiesti sono diversi.
Nessuna residenza dei dati
| Endpoint | Utilizzato per |
|---|---|
apigee.googleapis.com |
Recupera il riferimento alla configurazione MCP attuale per la tua organizzazione dal control plane Apigee a ogni aggiornamento della configurazione. |
storage.googleapis.com |
Scarica la configurazione MCP della tua organizzazione da Google Cloud Storage. |
Residenza dei dati
Se la tua organizzazione Apigee utilizza la residenza dei dati, il sidecar MCP raggiunge l'endpoint del control plane Apigee regionale (lo stesso endpoint utilizzato dagli altri componenti Apigee hybrid, configurato tramite il valore del grafico contractProvider in overrides.yaml). Sostituisci CONTROL_PLANE_LOCATION con la posizione del control plane della tua organizzazione (ad esempio us, eu).
| Endpoint | Utilizzato per |
|---|---|
CONTROL_PLANE_LOCATION-apigee.googleapis.com |
Recupera il riferimento alla configurazione MCP attuale per la tua organizzazione dall'endpoint del control plane Apigee regionale a ogni aggiornamento della configurazione. |
storage.googleapis.com |
Scarica la configurazione MCP della tua organizzazione da Google Cloud Storage. Il bucket si trova nella regione della tua organizzazione; Cloud Storage lo raggiunge automaticamente. |
Inoltre, il sidecar deve essere in grado di ottenere token di accesso Google Cloud per le credenziali ambientali con cui viene eseguito il pod (tramite Workload Identity o una chiave dell'account di servizio basata su file). Gli endpoint di scambio di token specifici dipendono dal percorso di autenticazione e sono gli stessi che gli altri componenti di Apigee Hybrid utilizzano già nel tuo cluster. Se il traffico Apigee hybrid esistente verso le API Cloud di Google Cloud ha esito positivo da questo spazio dei nomi, anche lo scambio di token del sidecar MCP ha esito positivo.
Inoltre, il sidecar deve accedere al server API Kubernetes all'interno del cluster (tramite l'indirizzo di servizio standard all'interno del cluster) per pubblicare il proprio stato di attività e preparazione. Questo traffico non esce mai dal tuo cluster.
Risoluzione dei problemi
Per un elenco di controllo diagnostico completo, consulta Risolvere i problemi relativi ai deployment di MCP, che include un elenco di controllo diagnostico lato cluster per Apigee Hybrid.
Errori di installazione comuni
| Sintomo | Causa e correzione |
|---|---|
helm upgrade viene completato, ma non vengono visualizzate risorse MCP. |
L'organigramma è stato aggiornato prima del grafico dell'operatore. Esegui
helm upgrade APIGEE_OPERATOR_RELEASE_NAME apigee-operator/
prima, poi esegui di nuovo
helm upgrade APIGEE_ORG_RELEASE_NAME apigee-org/. |
Pod MCP bloccati in ContainerCreating o 1/2 Ready. |
Due cause comuni: il cert-manager Certificate per MCP non è ancora
stato emesso o il pull dell'immagine container non riesce. Esegui
kubectl describe pod sul pod interessato per il motivo esatto. |
Report dei log di Sidecar (apigee-mcp-server-config)
no MCP config from CP yet; skipping tick, pod stays Ready via seed
in ogni sondaggio. |
Stato stazionario previsto quando non è ancora stato eseguito il deployment di alcun proxy di rilevamento MCP per la tua
organizzazione. Il control plane Apigee restituisce un riferimento di configurazione vuoto
e il data plane MCP ha caricato solo il listener di preparazione Kubernetes sulla porta
15021; la porta di richiesta MCP 8443 non ha ancora un listener e
le richieste a https://mcp.apigee.internal/mcp ricevono un rifiuto
di connessione. Per passare allo stato di pubblicazione, segui la
guida rapida di MCP
per eseguire il deployment di un proxy di rilevamento MCP in un ambiente del gruppo di ambienti gestito
da questo cluster. |
I log sidecar segnalano CP fetch failed con un 403 o PermissionDenied HTTP incorporato. |
Il account di servizio Google Cloud di Apigee Watcher ha perso il ruolo roles/apigee.runtimeAgent (che concede l'autorizzazione apigee.runtimeconfigs.get necessaria al sidecar) nel tuo progetto tenant Apigee. L'installazione di base di Apigee Hybrid concede automaticamente questo ruolo. Se
è stato rimosso da una pulizia dell'automazione IAM, riapplicalo al
account di servizio Google Cloud apigee-watcher. |
I log di Sidecar segnalano CP fetch failed con
context deadline exceeded, errori DNS o TLS. |
Il sidecar non può raggiungere apigee.googleapis.com o
storage.googleapis.com dall'interno del cluster. Verifica l'uscita rispetto
ai tre endpoint elencati nei
requisiti di rete in uscita sopra. |
I pod del processore di messaggi non sono stati riavviati dopo helm upgrade. |
Verifica che la voce hostAliases sia presente in ogni pod MP:
kubectl get pods -n APIGEE_NAMESPACE -l app=apigee-runtime -o
jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.hostAliases}{"\n"}{end}'.
Se un pod è vuoto, forza un nuovo rendering eliminandolo
(kubectl delete pod -n APIGEE_NAMESPACE -l app=apigee-runtime).
Il controller ApigeeDeployment lo ricreerà dalla specifica
corrente, che include la voce hostAliases. Non utilizzare
kubectl rollout restart deploy, in quanto non si applica a
ApigeeDeployment. |
I log dei pod MP mostrano errori di handshake TLS durante la composizione di
https://mcp.apigee.internal/ o
https://ORG_NAME.mcp.apigee.internal/ dopo che il traffico dello strumento MCP
inizia a fluire attraverso la
guida rapida. |
Il container del piano di controllo MCP sta pubblicando un certificato i cui nomi alternativi del soggetto (SAN) non includono il nome host composto dal MP. Verifica il certificato:
kubectl get cert -n APIGEE_NAMESPACE | grep apigee-mcp-server, poi
kubectl get cert -n APIGEE_NAMESPACE CERT_NAME -o yaml. Il dnsNames del certificato deve includere sia mcp.apigee.internal sia ORG_NAME.mcp.apigee.internal in minuscolo. In caso contrario, elimina la risorsa MCP
Certificate e lascia che cert-manager la riemetta. |
Passaggi successivi
- Segui la Guida rapida di MCP per eseguire il deployment del tuo primo proxy di rilevamento MCP e chiamare uno strumento MCP da un client MCP.
- Scopri come gestire l'accesso agli strumenti MCP con i prodotti API.
- Scopri come monitorare e analizzare il traffico MCP.
- Per la diagnostica avanzata, consulta la guida alla risoluzione dei problemi di MCP.