Versione 1.13

Abilitazione di funzionalità facoltative nel piano di controllo nel cluster

In questa pagina viene descritto come abilitare le funzionalità facoltative in un piano di controllo nel cluster. Per informazioni sul piano di controllo gestito da Google, vedi Configurare Anthos Service Mesh gestito.

Quando installi Anthos Service Mesh, le funzionalità abilitate per impostazione predefinita variano a seconda della piattaforma. Puoi abilitare le funzionalità facoltative includendo un file overlay quando installi (o esegui l'upgrade) Anthos Service Mesh. Un file overlay è un file YAML contenente una risorsa personalizzata (CR) IstioOperator che puoi utilizzare per configurare il piano di controllo. Puoi sostituire la configurazione predefinita e abilitare una funzionalità facoltativa o disabilitare una funzionalità predefinita in un file overlay. Specifica una funzionalità per file overlay. Puoi sovrapporre più overlay e ogni file di overlay sostituisce la configurazione dei livelli precedenti.

Informazioni sui file overlay

I file overlay in questa pagina sono inclusi nel pacchetto anthos-service-mesh in GitHub. Questi file contengono personalizzazioni comuni alla configurazione predefinita. Puoi utilizzare questi file così come sono oppure puoi apportarvi ulteriori modifiche secondo necessità.

Quando installi Anthos Service Mesh utilizzando lo script asmcli fornito da Google, puoi specificare uno o più file overlay con le opzioni --option o --custom_overlay. Se non devi apportare alcuna modifica ai file nel repository di anthos-service-mesh, puoi utilizzare --option e lo script recupera il file da GitHub. In caso contrario, puoi apportare modifiche al file overlay, quindi utilizzare l'opzione --custom_overlay per trasmetterlo al file asmcli.

Non includere più RP in un unico file overlay Creare file overlay separati per ciascuna RP
più RP in un unico yaml file yaml separati per ogni RP

Download del pacchetto anthos-service-mesh

Per scaricare il pacchetto anthos-service-mesh:

I passaggi seguenti utilizzano kpt per scaricare il pacchetto asm dal repository di GitHub. Se preferisci, puoi utilizzare git clone.

  1. Installa kpt se non l'hai ancora fatto:

    gcloud components install kpt
    
  2. Scarica il pacchetto che contiene i file:

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/anthos-service-mesh-packages.git/asm@release-1.13 asm
    

    Gli esempi seguenti presuppongono che il pacchetto asm si trovi nella directory di lavoro attuale.

Come attivare le funzionalità facoltative

Gli esempi seguenti sono semplificati per essere visualizzati solo utilizzando gli overlay personalizzati per abilitare le funzionalità facoltative. Sostituisci OTHER_FLAGS con le altre opzioni della riga di comando.

Il comando asmcli install offre due modi per attivare una funzionalità facoltativa. Il metodo che utilizzi dipende dalla necessità o meno di apportare modifiche al file overlay.

  • Utilizza --option quando non devi apportare modifiche al file overlay. Con --option, asmcli recupera automaticamente il file dal repository GitHub, quindi devi avere una connessione a Internet.

    ./asmcli install \
      OTHER_FLAGS \
      --option OPTION_NAME
    

    Sostituisci OPTION_NAME con l'opzione da attivare. Per un elenco delle opzioni, consulta il pacchetto anthos-service-mesh.

  • Utilizza l'elemento --custom_overlay quando devi personalizzare il file overlay.

    ./asmcli install \
      OTHER_FLAGS \
      --custom_overlay PATH_TO_FILE
    

    Sostituisci PATH_TO_FILE con il percorso del file overlay che vuoi utilizzare.

YAML per funzionalità facoltative

Le seguenti sezioni forniscono il file YAML per abilitare funzionalità facoltative e supportate.

Modalità mTLS STRICT

La configurazione di global.mtls.enabled è stata rimossa dalla IstioOperator per evitare problemi con gli upgrade e fornire un'installazione più flessibile. Per attivare STRICTmTLS, configura invece un criterio di autenticazione peer.

Immagine proxy senza distro

Come best practice, devi limitare i contenuti di un runtime dei container ai soli pacchetti necessari. Questo approccio migliora la sicurezza e il rapporto segnale/rumore degli scanner di vulnerabilità ed esposizioni comuni (CVE). Istio fornisce immagini proxy in base a immagini di base indistinte.

La configurazione seguente consente immagini disastrose per l'intero Anthos Service Mesh. Una modifica del tipo di immagine richiede che ogni pod si riavvii e che venga sostituito nuovamente per essere applicato.

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    defaultConfig:
      image:
        imageType: distroless

L'immagine distroless non contiene programmi binari diversi dal proxy. Pertanto, non è possibile exec una shell o utilizzare curl, ping o altre utilità di debug all'interno del container. Se provi a eseguire una shell, verrà visualizzato il seguente errore.

error: Internal error occurred: error executing command in container: failed to exec in container: failed to start exec "<container-id>"
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "sh": executable file not found in $PATH: unknown

Se hai bisogno di accedere a questi strumenti per pod specifici, puoi sostituire imageType utilizzando la seguente annotazione di pod.

sidecar.istio.io/proxyImageType: debug

Dopo aver modificato il tipo di immagine di un deployment tramite l'annotazione, il deployment deve essere riavviato.

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Per la maggior parte dei tipi di debug del proxy, deve essere utilizzato istioctl proxy-cmd, che non richiede un'immagine di base di debug.

Indirizza Envoy a stdout

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    accessLogFile: "/dev/stdout"

Per ulteriori informazioni, vedi Abilitare il logging dell'accesso di Envoy.

Cloud Trace

Cloud Trace è disponibile con le installazioni di Anthos Service Mesh sulle seguenti piattaforme:

  • GKE su Google Cloud
  • Cluster Anthos on-premise se esegui l'installazione con l'autorità di certificazione Anthos Service Mesh (Mesh CA)

Per informazioni più dettagliate sui prezzi, consulta la pagina sui prezzi di Cloud Trace.

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
  values:
    global:
      proxy:
        tracer: stackdriver

La frequenza di campionamento predefinita è dell'1%, ma puoi sostituirla specificando un valore tracing.sampling. Il valore deve essere compreso tra 0,0 e 100,0 con una precisione di 0,01. Ad esempio, per tracciare 5 richieste ogni 10.000,utilizza 0, 05.

L'esempio seguente mostra una frequenza di campionamento del 100% (cosa che faresti solo per scopi dimostrativi o per la risoluzione dei problemi).

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
    defaultConfig:
      tracing:
        sampling: 100
  values:
    global:
      proxy:
        tracer: stackdriver

Tieni presente che attualmente la configurazione del monitoraggio fa parte della configurazione di bootstrap del proxy, pertanto il pod deve essere riavviato e deve essere inserito nuovamente per poter rilevare l'aggiornamento dell'utilità di traccia. Ad esempio, puoi utilizzare il comando seguente che appartengono ai pod di riavvio per un deployment:

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Traccia della propagazione del contesto

Anche se i proxy sidecar possono inviare automaticamente intervalli di traccia, sono necessari alcuni suggerimenti per collegare l'intera traccia. Le applicazioni devono propagare le intestazioni HTTP appropriate in modo che, quando i proxy inviano le informazioni dello span, gli intervalli possono essere correlati correttamente in un'unica traccia.

Per fare ciò, un'applicazione deve raccogliere e propagare le intestazioni appropriate dalla richiesta in entrata a eventuali richieste in uscita. La configurazione del tracciamento Stackdriver di Anthos Service Mesh accetterà uno qualsiasi dei seguenti formati di intestazione e profilerà tutti i seguenti formati:

  • B3 (x-b3-traceid, x-b3-spanid, x-b3parentspanid, x-b3-sampled, x-b3-flags)
  • W3C TraceContext (traceparent)
  • Google Cloud Trace (x-cloud-trace-context)
  • gRPC TraceBin (grpc-trace-bin)

Ciò significa che le tue applicazioni possono utilizzare uno qualsiasi di tali formati per propagare il contesto e le tracce verranno generate e impostate in modo appropriato per Stackdriver.

Esempio

Di seguito è riportato un esempio di richiesta HTTP-Get con un'intestazione traceparent nella richiesta originale. Noterai le intestazioni aggiuntive del contesto di traccia aggiunte dal proxy.

$ kubectl exec -it sleep-557747455f-n6flv -- curl "httpbin:8000/anything?freeform=" -H "accept: application/json" -H "Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01" -vv
*   Trying 10.12.3.52:8000...
* Connected to httpbin (10.12.3.52) port 8000 (#0)
> GET /anything?freeform= HTTP/1.1
> Host: httpbin:8000
> User-Agent: curl/7.80.0-DEV
> accept: application/json
> Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< server: envoy
< date: Wed, 10 Nov 2021 20:36:04 GMT
< content-type: application/json
< content-length: 1032
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 5
<
{
  "args": {
    "freeform": ""
  },
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "application/json",
    "Grpc-Trace-Bin": "AAB1Q9FeCeXWGAHU90zeEmm4AaDHmGRtdM7wAgE",
    "Host": "httpbin:8000",
    "Traceparent": "00-7543d15e09e5d61801d4f74cde1269b8-a0c798646d74cef0-01",
    "User-Agent": "curl/7.80.0-DEV",
    "X-B3-Sampled": "1",
    "X-B3-Spanid": "a0c798646d74cef0",
    "X-B3-Traceid": "7543d15e09e5d61801d4f74cde1269b8",
    "X-Cloud-Trace-Context": "7543d15e09e5d61801d4f74cde1269b8/11585396123534413552;o=1",
    "X-Envoy-Attempt-Count": "1",
    "X-Forwarded-Client-Cert": "<REDACTED>"
  },
  "json": null,
  "method": "GET",
  "origin": "127.0.0.6",
  "url": "http://httpbin:8000/anything?freeform="
}

Nota che, nell'insieme di intestazioni della richiesta restituito, è presente l'insieme completo di intestazioni di contesto di traccia.

Per altri esempi di propagazione delle intestazioni, consulta la sezione Propagazione traccia del contesto.

Crea una traccia dal client con ID personalizzato

Per creare una traccia da un client con un ID personalizzato, utilizza il comando curl per creare una richiesta con un client esterno e forzarne la visualizzazione di una traccia. Ad esempio:

curl $URL --header "x-client-trace-id: 105445aa7843bc8bf206b12000100000"

Per ulteriori informazioni su x-client-trace-id, consulta la documentazione di Envoy.

In uscita tramite gateway in uscita

Ti consigliamo di installare un gateway iniettato, come descritto in Installare ed eseguire l'upgrade dei gateway.

Interfaccia di rete del container Istio

Il modo in cui abiliti l'interfaccia CNI (Istio Container Network Interface) dipende dall'ambiente su cui è installato Anthos Service Mesh.

  1. Abilita un criterio di rete.

  2. Scegli il file overlay che corrisponde alla tua piattaforma.

Abilita CNI su GKE

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    cni:
      enabled: true
      namespace: kube-system
  values:
    cni:
      cniBinDir: /home/kubernetes/bin
      excludeNamespaces:
        - istio-system
        - kube-system

Abilita CNI on-premise

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    cni:
      enabled: true
      namespace: kube-system
  values:
    cni:
      cniBinDir: /opt/cni/bin
      excludeNamespaces:
        - istio-system
        - kube-system
        - gke-system

Attiva la suite operativa di Google Cloud per servizi esterni a Google Cloud

Per impostazione predefinita, l'installazione di Anthos Service Mesh con Istio CA all'esterno di Google Cloud determina le metriche in Prometheus. Utilizza questa opzione per abilitare le metriche dei rapporti nella suite operativa di Google Cloud o in Prometheus e Stackdriver, in modo da poter utilizzare le dashboard Anthos Service Mesh.

Solo Stackdriver

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  values:
    telemetry:
      enabled: true
      v2:
        enabled: true
        prometheus:
          enabled: false
        stackdriver:
          enabled: true

Stackdriver e Prometheus

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  values:
    telemetry:
      enabled: true
      v2:
        enabled: true
        prometheus:
          enabled: true
        stackdriver:
          enabled: true

Abilita un bilanciatore del carico interno

Ti consigliamo di installare un gateway iniettato, come descritto in Installare ed eseguire l'upgrade dei gateway per configurare un bilanciatore del carico interno su GKE. Quando configuri il servizio gateway, includi l'annotazione: cloud.google.com/load-balancer-type: "internal"

Gestione di certificati esterni sul gateway in entrata

Per informazioni sull'abilitazione della gestione dei certificati esterna sul gateway in entrata utilizzando SDS di Envoy, vedi Gateway sicuri.