Optionale Features auf der Steuerungsebene im Cluster aktivieren

w

Auf dieser Seite wird beschrieben, wie Sie optionale Features auf einer Steuerungsebene im Cluster aktivieren Informationen zur verwalteten Steuerungsebene finden Sie unter Verwaltetes Cloud Service Mesh konfigurieren.

Wenn Sie Cloud Service Mesh im Cluster installieren, unterscheiden sich die standardmäßig aktivierten Features je nach Plattform. Sie können die Standardkonfiguration überschreiben und ein optionales Feature aktivieren, indem Sie bei der Installation (oder einem Upgrade) von Cloud Service Mesh eine Overlay-Datei einfügen. Eine Overlay-Datei ist eine YAML-Datei mit einer benutzerdefinierten IstioOperator-Ressource (CR), mit der Sie die Steuerungsebene konfigurieren. Geben Sie pro Overlay-Datei ein Feature an. Sie können weitere Overlays überlagern. Jede Overlay-Datei überschreibt die Konfiguration der vorherigen Layer.

Informationen zu Overlay-Dateien

Die Overlay-Dateien auf dieser Seite befinden sich im Paket anthos-service-mesh in GitHub. Diese Dateien enthalten gängige Anpassungen der Standardkonfiguration. Sie können diese Dateien unverändert anwenden oder weitere Änderungen daran vornehmen.

Wenn Sie Cloud Service Mesh mit dem von Google bereitgestellten asmcli-Skript installieren, können Sie mit den Optionen --option oder --custom_overlay eine oder mehrere Overlay-Dateien angeben. Wenn Sie keine Änderungen an den Dateien im anthos-service-mesh-Repository vornehmen müssen, können Sie --option verwenden. Das Skript ruft die Datei von GitHub ab. Sie können aber auch die Overlay-Datei ändern und die Änderungen mit der Option --custom_overlay an asmcli übergeben.

Fügen Sie nicht mehrere CRs in eine Overlay-Datei ein. Separate Overlay-Dateien für jede CR erstellen
Mehrere CRs in einer YAML-Datei Separate YAML-Dateien für jede CR

So aktivieren Sie optionale Features

Die folgenden Beispiele sind vereinfacht, damit nur die benutzerdefinierten Overlays zur Aktivierung optionaler Features angezeigt werden. Ersetzen Sie OTHER_FLAGS durch die erforderlichen Installations-Flags.

Der Befehl asmcli install bietet zwei Möglichkeiten zum Aktivieren eines optionalen Features. Welche Methode Sie verwenden, hängt davon ab, ob Sie Änderungen an der Overlay-Datei vornehmen müssen.

  • Verwenden Sie --option, wenn Sie keine Änderungen an der Overlay-Datei vornehmen müssen. Mit --option ruft asmcli die Datei aus dem GitHub-Repository für Sie ab. Dazu benötigen Sie eine Internetverbindung.

    ./asmcli install \
      OTHER_FLAGS \
      --option OPTION_NAME
    

    Ersetzen Sie OPTION_NAME durch die Option, die Sie aktivieren möchten. Lassen Sie die Erweiterung „.yaml“ weg und geben Sie nur den Namen der Overlay-Datei an, z. B. iap-operator und attached-cluster. Eine Liste der Optionen findest du im Paket anthos-service-mesh.

  • Verwenden Sie --custom_overlay, wenn Sie die Overlay-Datei anpassen müssen.

    ./asmcli install \
      OTHER_FLAGS \
      --custom_overlay PATH_TO_FILE
    

    Ersetzen Sie PATH_TO_FILE durch den Pfad zur Overlay-Datei, die Sie verwenden möchten.

YAML für optionale Features

Die folgenden Abschnitte enthalten die YAML-Datei, um optionale und unterstützte Funktionen zu aktivieren.

mTLS-STRICT-Modus

Die Konfiguration global.mtls.enabled wurde aus der IstioOperator-CR entfernt, um Probleme mit Upgrades zu vermeiden und eine flexiblere Installation zu ermöglichen. Konfigurieren Sie zum Aktivieren von STRICT mTLS stattdessen eine Peer-Authentifizierungsrichtlinie.

Proxy-Image löschen

Als Best Practice sollten Sie den Inhalt einer Containerlaufzeit auf die erforderlichen Pakete beschränken. Dieser Ansatz verbessert die Sicherheit und das Signal-Rausch-Verhältnis von CVE-Scannen (Common Vulnerabilities and Exposures). Istio stellt Proxy-Images bereit, die auf Distroless-Basis-Images basieren.

Mit der folgenden Konfiguration werden Distroless-Images für das gesamte Cloud Service Mesh aktiviert. Bei einer Änderung des Image-Typs muss jeder Pod neu gestartet und neu eingefügt werden, um wirksam zu werden.

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

Das Distroless-Image enthält keine anderen Binärdateien als den Proxy. Daher ist es nicht möglich, eine Shell mit exec zu versehen oder curl, ping oder andere Fehlerbehebungsfunktionen im Container zu verwenden. Wenn Sie versuchen, eine Shell auszuführen, wird der folgende Fehler angezeigt.

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

Wenn Sie für bestimmte Pods Zugriff auf diese Tools benötigen, können Sie imageType mit der folgenden Pod-Annotation überschreiben.

sidecar.istio.io/proxyImageType: debug

Nachdem Sie den Image-Typ einer Bereitstellung über die Annotation geändert haben, sollte die Bereitstellung neu gestartet werden.

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

Für die meisten Arten von Proxy-Debugging sollte istioctl proxy-cmd verwendet werden, für das kein Debug-Basis-Image erforderlich ist.

Benutzerdefiniertes Overlay für eine benutzerdefinierte Registry verwenden

Sie können ein benutzerdefiniertes Overlay für benutzerdefinierte Registrys verwenden, z. B. wenn Sie Cloud Service Mesh aus einer benutzerdefinierten Container Registry installieren müssen. Beispiel:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  hub: {private_registry_url}

Im Folgenden finden Sie eine Liste der Images für Cloud Service Mesh, die Sie in die benutzerdefinierte Container Registry spiegeln müssen:

  • Install-cni - gke.gcr.io/asm/install-cni:
  • Verwaltete Datenebene - gke.gcr.io/asm/mdp:
  • Pilot - gke.gcr.io/asm/pilot:
  • Proxyv2 - gke.gcr.io/asm/proxyv2:

Images zu einer privaten Registry hinzufügen

Führen Sie die folgenden Schritte aus, um Cloud Service Mesh-Images in eine private Registry zu übertragen.

  1. Rufen Sie die Cloud Service Mesh-Images ab:
    docker pull gke.gcr.io/asm/install-cni:
    docker pull gke.gcr.io/asm/mdp:
    docker pull gke.gcr.io/asm/pilot:
    docker pull gke.gcr.io/asm/proxyv2:
    
  2. Erstellen Sie eine Variable für die URL Ihrer privaten Registry:
    export PRIVATE_REGISTRY_URL=PRIVATE_REGISTRY_URL
    
    Ersetzen Sie PRIVATE_REGISTRY_URL durch die URL Ihrer privaten Registry.
  3. Taggen Sie die Images mit Ihrer privaten Registry-URL:
    docker tag gke.gcr.io/asm/install-cni: \
     ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/install-cni:
    docker tag gke.gcr.io/asm/mdp: \
     ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/mdp:
    docker tag gke.gcr.io/asm/pilot: \
     ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/pilot:
    docker tag gke.gcr.io/asm/proxyv2: \
     ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/proxyv2:
    
  4. Übertragen Sie die getaggten Images in Ihre private Registry:
    docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/install-cni:
    docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/mdp:
    docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/pilot:
    docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/proxyv2:
    
  5. Optional: Wenn Sie einen kanonischen Dienst verwenden, fügen Sie der privaten Registry die kanonischen Dienst-Images hinzu.
    1. Rufen Sie die kanonischen Cloud Service Mesh-Dienst-Images ab:
              docker pull gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1
              docker pull gke.gcr.io/asm/canonical-service-controller:1.10.3-asm.16
              
    2. Images mit Ihrer privaten Registry-URL taggen:
              docker tag gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1 \
              ${PRIVATE_REGISTRY_URL}/gcr.io/kubebuilder/kube-rbac-proxy:v0.13.1
              docker tag gke.gcr.io/asm/canonical-service-controller:1.10.3-asm.16 \
              ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/canonical-service-controller:1.10.3-asm.16
              
    3. Getaggte Images in Ihre private Registry übertragen:
              docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/kube-rbac-proxy:v0.13.1
              docker push ${PRIVATE_REGISTRY_URL}/gke.gcr.io/asm/canonical-service-controller:1.10.3-asm.16
              

Wenn Sie die getaggten Images aus Ihrer privaten Registry abrufen können, war der Vorgang erfolgreich.

Dauer des Verbindungsausgleichs verlängern

Standardmäßig wartet Envoy fünf Sekunden (5s) auf den Abschluss bestehender Verbindungen, wenn ein Pod beendet wird.

Der Pod terminationGracePeriodSeconds muss größer als der Wert terminationDrainDuration sein.

Weitere Informationen finden Sie unter Globale Mesh-Netzwerkoptionen.

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    defaultConfig:
      terminationDrainDuration: 30s

Zugriffslogs aktivieren

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

Weitere Informationen finden Sie unter Zugriffs-Logging von Envoy aktivieren.

Cloud Trace

Cloud Trace ist für Cloud Service Mesh-Installationen auf den folgenden Plattformen verfügbar:

  • GKE in Google Cloud
  • Lokale GKE Enterprise-Cluster, wenn Sie die Installation über die Cloud Service Mesh-Zertifizierungsstelle ausführen
---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    enableTracing: true
  values:
    global:
      proxy:
        tracer: stackdriver

Weitere Informationen finden Sie unter Auf Traces zugreifen.

Ausgehender Traffic über Egress-Gateways

Wir empfehlen, ein injiziertes Gateway zu installieren, wie unter Gateways installieren und aktualisieren beschrieben.

Container-Netzwerkschnittstelle von Istio

Wie Sie das Container Network Interface (CNI) von Istio aktivieren, hängt von der Umgebung ab, in der Cloud Service Mesh installiert ist.

  1. Netzwerkrichtlinien aktivieren

  2. Wählen Sie die Overlay-Datei aus, die Ihrer Plattform entspricht.

CNI in GKE aktivieren

---
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

CNI lokal aktivieren

---
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

Traffic-Logs außerhalb von Google Cloud aktivieren

Wenn Sie Cloud Service Mesh mit der Istio-Zertifizierungsstelle außerhalb von Google Cloud installieren, werden Messwerte standardmäßig an Prometheus gemeldet. Verwenden Sie diese Option, um stattdessen die Berichterstellung von Traffic-Logs oder sowohl Prometheus als auch Stackdriver zu aktivieren, damit Sie die Cloud Service Mesh-Dashboards verwenden können.

Nur Stackdriver

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

Stackdriver und Prometheus

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

Internen Load-Balancer aktivieren

Wir empfehlen, ein injiziertes Gateway zu installieren, wie unter Gateways installieren und aktualisierenbeschrieben, um einen internen Load-Balancer in GKE einzurichten. Beim Konfigurieren des Gateway-Dienstes geben Sie die Annotation networking.gke.io/load-balancer-type: "Internal" an.

Externe Zertifikatsverwaltung auf dem Ingress-Gateway

Informationen zum Aktivieren der externen Zertifikatsverwaltung auf dem Ingress-Gateway mit Envoy SDS finden Sie unter Sichere Gateways.