Esegui l'onboarding dei carichi di lavoro Kubernetes
Questa pagina mostra come eseguire l'onboarding dei carichi di lavoro Kubernetes con Cloud Service Mesh.
Esegui il deployment di servizi Kubernetes
Per eseguire il deployment di servizi Kubernetes nei cluster con Cloud Service Mesh, devi svolgere i seguenti passaggi:
Crea servizi Kubernetes per tutti i container. Tutti Deployment deve avere un servizio Kubernetes collegato.
Assegna un nome alle porte dei servizi. Sebbene GKE ti consenta di definire porte di servizio senza nome, Cloud Service Mesh richiede che tu fornisca un nome per una porta che corrisponda al protocollo della porta.
Etichetta i tuoi deployment. In questo modo puoi utilizzare il traffico di Cloud Service Mesh di funzionalità di gestione come la suddivisione del traffico tra versioni completamente gestito di Google Cloud.
Il seguente esempio di deployment e servizio illustra questi requisiti:
Dopo aver eseguito il deployment dei servizi su un cluster con Cloud Service Mesh, assicurati di iniettare i proxy sidecar.
Esempio: esegui il deployment dell'esempio Online Boutique
L'applicazione di esempio Online Boutique nel repository
anthos-service-mesh-packages
viene modificata dall'insieme originale di manifest nel
microservices-demo
repository. Seguendo le best practice, ogni servizio viene disegnato in un distinto
nome spazio con un account di servizio univoco.
Crea gli spazi dei nomi per l'applicazione:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
Risultato previsto:
namespace/ad created namespace/cart created namespace/checkout created namespace/currency created namespace/email created namespace/frontend created namespace/loadgenerator created namespace/payment created namespace/product-catalog created namespace/recommendation created namespace/shipping created
Attiva gli spazi dei nomi per l'iniezione. I passaggi dipendono dall'implementazione del piano di controllo.
Gestito (TD)
Applica l'etichetta di inserimento predefinita allo spazio dei nomi:
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns \ istio.io/rev- istio-injection=enabled --overwrite done;
Gestito (Istiod)
Consigliato: esegui questo comando per applicare l'etichetta di inserimento predefinita allo spazio dei nomi:
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns \ istio.io/rev- istio-injection=enabled --overwrite done;
Se sei già un utente con il piano di controllo Istiod gestito: consigliamo di utilizzare l'iniezione predefinita, ma è supportata anche l'iniezione basata su revisione. Segui queste istruzioni:
Esegui il comando seguente per individuare i canali di rilascio disponibili:
kubectl -n istio-system get controlplanerevision
L'output è simile al seguente:
NAME AGE asm-managed-rapid 6d7h
Nell'output, il valore sotto la colonna
NAME
è l'etichetta di revisione che corrisponde al canale di rilascio disponibile per la versione di Cloud Service Mesh.Applica l'etichetta di revisione allo spazio dei nomi:
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite done;
Nel cluster
Consigliato: esegui il seguente comando per applicare l'etichetta di inserimento predefinita allo spazio dei nomi:
for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns \ istio.io/rev- istio-injection=enabled --overwrite done;
Consigliamo di utilizzare l'inserimento predefinito, ma l'inserimento basato sulle revisioni è supportato: Segui queste istruzioni:
Usa questo comando per individuare l'etichetta di revisione su
istiod
:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
Applica l'etichetta di revisione allo spazio dei nomi. Nel seguente comando,
REVISION_LABEL
è il valore dell'etichetta della revisioneistiod
che hai annotato nel passaggio precedente.for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do kubectl label namespace $ns \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite done;
Eseguire il deployment dell'applicazione di esempio nel cluster.
Crea gli account di servizio e i deployment:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/deployments
Output previsto:
serviceaccount/ad created deployment.apps/adservice created serviceaccount/cart created deployment.apps/cartservice created serviceaccount/checkout created deployment.apps/checkoutservice created serviceaccount/currency created deployment.apps/currencyservice created serviceaccount/email created deployment.apps/emailservice created serviceaccount/frontend created deployment.apps/frontend created serviceaccount/loadgenerator created deployment.apps/loadgenerator created serviceaccount/payment created deployment.apps/paymentservice created serviceaccount/product-catalog created deployment.apps/productcatalogservice created serviceaccount/recommendation created deployment.apps/recommendationservice created serviceaccount/shipping created deployment.apps/shippingservice created
Crea i servizi:
kubectl apply -f \ DIR_PATH/samples/online-boutique/kubernetes-manifests/services
Output previsto:
service/adservice created service/cartservice created service/checkoutservice created service/currencyservice created service/emailservice created service/frontend created service/frontend-external created service/paymentservice created service/productcatalogservice created service/recommendationservice created service/shippingservice created
Crea le voci del servizio:
kubectl apply -f \ DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
Risultato previsto:
serviceentry.networking.istio.io/allow-egress-googleapis created serviceentry.networking.istio.io/allow-egress-google-metadata created
Assegnazione di nomi alle porte dei servizi
Per essere incluse in Cloud Service Mesh, le porte di servizio devono essere denominate e il nome deve includi il protocollo della porta, ad esempio:
apiVersion: v1 kind: Service metadata: name: ratings labels: app: ratings service: ratings spec: ports: - port: 9080 name: http
Il nome della porta del servizio può includere un suffisso nella seguente sintassi:
name: protocol[-suffix]
dove le parentesi quadre indicano un suffisso facoltativo che deve iniziare con un
tratto, ad esempio:
kind: Service metadata: name: myservice spec: ports: - number: 3306 name: mysql - number: 80 name: http-web
Affinché le metriche vengano visualizzate nella console Google Cloud, le porte di servizio devono essere denominate con uno dei seguenti protocolli: http
, http2
o grpc
.
Le porte di servizio denominate con il protocollo https
vengono trattate come tcp
e le metriche
non vengono visualizzati per questi servizi.
Inserimento di proxy sidecar
Questa sezione illustra come configurare l'inserimento proxy sidecar con Cloud Service Mesh per migliorare la sicurezza, l'affidabilità e la sicurezza della rete osservabilità. Queste funzioni sono astratti container principale e implementato in un proxy out-of-process comune (il collaterale), come container separato all'interno dello stesso pod. Puoi utilizzare la modalità Funzionalità di Cloud Service Mesh senza riprogettazione le tue applicazioni di produzione a partecipare a un mesh di servizi.
L'iniezione automatica del proxy sidecar (iniezione automatica) si verifica quando Cloud Service Mesh rileva un'etichetta dello spazio dei nomi configurata per il pod del carico di lavoro. Il proxy intercetta tutto il traffico in entrata e in uscita verso i carichi di lavoro e comunica con Cloud Service Mesh.
Attivazione dell'iniezione automatica di sidecar
Attiva lo spazio dei nomi per l'iniezione. I passaggi dipendono dall'implementazione del piano di controllo.
Gestito (TD)
- Applica l'etichetta di inserimento predefinita allo spazio dei nomi:
kubectl label namespace NAMESPACE istio.io/rev- istio-injection=enabled --overwrite
Gestito (Istiod)
Consigliato: esegui questo comando per applicare l'etichetta di inserimento predefinita allo spazio dei nomi:
kubectl label namespace NAMESPACE \ istio.io/rev- istio-injection=enabled --overwrite
Se sei già un utente con il piano di controllo Istiod gestito: consigliamo di utilizzare l'iniezione predefinita, ma è supportata anche l'iniezione basata su revisione. Segui queste istruzioni:
Esegui il comando seguente per individuare i canali di rilascio disponibili:
kubectl -n istio-system get controlplanerevision
L'output è simile al seguente:
NAME AGE asm-managed-rapid 6d7h
NOTA: se nell'elenco precedente sono presenti due revisioni del piano di controllo, rimuovine una. La presenza di più canali del control plane nel cluster non è supportata.
Nell'output, il valore nella colonna
NAME
è l'etichetta di revisione corrispondente al canale di rilascio disponibile per la versione di Cloud Service Mesh.Applica l'etichetta di revisione allo spazio dei nomi:
kubectl label namespace NAMESPACE \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Nel cluster
Consigliato: esegui il seguente comando per applicare l'etichetta di inserimento predefinita allo spazio dei nomi:
kubectl label namespace NAMESPACE \ istio.io/rev- istio-injection=enabled --overwrite
Consigliamo di utilizzare l'inserimento predefinito, ma l'inserimento basato sulle revisioni è supportato: Segui queste istruzioni:
Usa questo comando per individuare l'etichetta di revisione su
istiod
:kubectl get deploy -n istio-system -l app=istiod -o \ jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
Applica l'etichetta di revisione allo spazio dei nomi. Nel seguente comando,
REVISION_LABEL
è il valore dell'etichetta della revisioneistiod
che hai annotato nel passaggio precedente.kubectl label namespace NAMESPACE \ istio-injection- istio.io/rev=REVISION_LABEL --overwrite
Riavviare i pod interessati seguendo i passaggi descritti nella sezione successiva.
Annota lo spazio dei nomi
demo
come segue:kubectl annotate --overwrite namespace NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
Riavvia i pod per aggiornare i proxy sidecar
Con l'inserimento automatico di file collaterali, puoi aggiornare i file collaterali per i pod esistenti. con il riavvio di un pod:
Il modo in cui riavvii i pod dipende dal fatto che siano stati creati o meno come parte Deployment.
Se hai utilizzato un deployment, riavvialo; in questo modo vengono riavviati tutti i pod. con file collaterali:
kubectl rollout restart deployment -n NAMESPACE
Se non hai utilizzato un deployment, elimina i pod, che verranno rielaborati automaticamente con i sidecar:
kubectl delete pod -n NAMESPACE --all
Verifica che in tutti i pod nello spazio dei nomi siano stati iniettati i sidecar:
kubectl get pod -n NAMESPACE
Nell'esempio di output del comando precedente riportato di seguito, tieni presente che la colonna
READY
indica che sono presenti due contenitori per ogni carico di lavoro: il contenitore principale e il contenitore per il proxy sidecar.NAME READY STATUS RESTARTS AGE WORKLOAD 2/2 Running 0 20s ...