Como fazer upgrade da Apigee híbrida para a versão 1.5

Como fazer upgrade para a versão 1.5.10.

Os procedimentos para fazer upgrade da Apigee híbrida são organizados nas seguintes seções:

  1. Faça o backup da instalação híbrida.
  2. Verifique sua versão do Kubernetes e faça upgrade conforme apropriado.
  3. Fazer upgrade do ASM.
  4. Instale o ambiente de execução híbrido versão 1.5.

Pré-requisito

Fazer upgrade para a versão 1.5

  1. Estas instruções usam a variável de ambiente APIGEECTL_HOME para o diretório no seu sistema de arquivos em que você instalou apigeectl. Se necessário, cd no diretório apigeectl e defina a variável com o seguinte comando:

    Linux

    export APIGEECTL_HOME=$PWD
    echo $APIGEECTL_HOME

    Mac OS

    export APIGEECTL_HOME=$PWD
    echo $APIGEECTL_HOME

    Windows

    set APIGEECTL_HOME=%CD%
    echo %APIGEECTL_HOME%
  2. (Recomendado) Faça uma cópia de backup do diretório $APIGEECTL_HOME/ da versão 1.4. Exemplo:
    tar -czvf $APIGEECTL_HOME/../apigeectl-v1.4-backup.tar.gz $APIGEECTL_HOME
  3. (Recomendado) Faça o backup do banco de dados do Cassandra seguindo as instruções em Backup e recuperação do Cassandra.
  4. Faça upgrade da plataforma do Kubernetes para as versões compatíveis com a versão híbrida 1.5. Siga a documentação da plataforma se precisar de ajuda.
  5. Se você estiver executando uma versão do cert-manager anterior à v1.2.0, precisará fazer upgrade para a v1.2.0.
    1. Verifique a versão atual do cert-manager usando o seguinte comando:

      kubectl -n cert-manager get deployment -o yaml | grep 'image:'
      

      Algo semelhante ao seguinte é retornado:

      image: quay.io/jetstack/cert-manager-controller:v1.2.0
      image: quay.io/jetstack/cert-manager-cainjector:v1.2.0
      image: quay.io/jetstack/cert-manager-webhook:v1.2.0
      
    2. Remova as implantações usando este comando:
      kubectl delete -n cert-manager deployment cert-manager cert-manager-cainjector cert-manager-webhook
      
    3. Faça upgrade do cert-manager para a versão v1.2.0 usando o seguinte comando:
      kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.2.0/cert-manager.yaml
      

Fazer upgrade do ASM para a versão 1.12

Execute o upgrade usando a documentação do ASM apropriada para sua plataforma:

As instruções para instalar e configurar o ASM variam de acordo com a plataforma. As plataformas são divididas nas seguintes categorias:

  • GKE: clusters do Google Kubernetes Engine em execução no Google Cloud.
  • Fora do Google Cloud: os clusters do Anthos são executados em:
    • Clusters do Anthos no VMware (GKE On-Prem)
    • Anthos em bare metal
    • Clusters do Anthos no AWS
    • Amazon EKS
  • Outras plataformas do Kubernetes: clusters compatíveis criados e em execução em:
    • AKS
    • EKS
    • OpenShift

GKE

A sequência de upgrade para a versão 1.8.x do ASM para sua instalação híbrida é a seguinte:

  1. prepare-se para o upgrade;
  2. instale a nova versão do ASM;
  3. exclua as implantações, os serviços e os webhooks da versão anterior do ASM da instalação atual;
  4. faça upgrade dos gateways e configure os novos webhooks.

Para fazer upgrade para a versão 1.8.x do ASM para híbrida no GKE:

  1. Veja os requisitos em Fazer upgrade do Anthos Service Mesh, mas ainda não faça o upgrade.
  2. Antes de instalar a nova versão, determine a revisão atual. Você precisará dessas informações para excluir as implantações, os serviços e os webhooks da versão anterior do ASM da instalação atual. Use o seguinte comando para armazenar a revisão atual do istiod em uma variável de ambiente:
    export DELETE_REV=$(kubectl get deploy -n istio-system -l app=istiod -o jsonpath={.items[].metadata.labels.'istio\.io\/rev'}'{"\n"}')
    echo ${DELETE_REV}
  3. Crie um novo arquivo overlay.yaml ou verifique se o overlay.yaml atual contém o seguinte conteúdo:
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      revision: asm-1129-3
      components:
        ingressGateways:
          - name: istio-ingressgateway
            enabled: true
            k8s:
              nodeSelector:
                # default node selector, if different or not using node selectors, change accordingly.
                cloud.google.com/gke-nodepool: apigee-runtime
              resources:
                requests:
                  cpu: 1000m
              service:
                type: LoadBalancer
                loadBalancerIP: STATIC_IP # If you do not have a reserved static IP, leave this out.
                ports:
                  - name: http-status-port
                    port: 15021
                  - name: http2
                    port: 80
                    targetPort: 8080
                  - name: https
                    port: 443
                    targetPort: 8443
      meshConfig:
        accessLogFormat:
          '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
    
  4. Siga as instruções nas seguintes seções da documentação do ASM:
    1. faça o download do asmcli;
    2. conceda permissões de administrador de cluster;
    3. Valide o projeto e o cluster;
    4. faça upgrade com recursos opcionais. Pare antes de iniciar a seção "Fazer upgrade dos gateways";
  5. exclua o webhook de mutação e valide o webhook:
    1. cd no diretório em que você instalou asmcli;
    2. armazene a nova revisão atual em uma variável de ambiente a ser usada no script para excluir os webhooks:
      UPGRADE_REV="asm-1129-3"
    3. crie um script de shell contendo os seguintes comandos:
      #!/bin/bash
      
      set -ex
      
      PROJECT_ID="YOUR_PROJECT_ID"
      CLUSTER_NAME="YOUR_CLUSTER_NAME"
      CLUSTER_LOCATION="YOUR_CLUSTER_LOCATION"
      
      kubectl label namespace istio-system istio.io/rev=${UPGRADE_REV} istio-injection- --overwrite
      kubectl rollout restart deployment -n istio-system
      kubectl apply -n istio-system -f PATH_TO_INGRESSGATEWAYistio-ingressgateway
      kubectl apply -n istio-system -f PATH_TO_INGRESSGATEWAY/istio-ingressgateway-connectors
      
      if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then
        kubectl apply -f out/asm/istio/istiod-service.yaml
        kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete deploy -l app=istio-ingressgateway-connectors,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete ValidatingWebhookConfiguration -l app=istiod,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete MutatingWebhookConfiguration -l app=sidecar-injector,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete IstioOperator installed-state-${DELETE_REV} -n istio-system --ignore-not-found=true
      fi
      
    4. execute o script para excluir os webhooks atuais;
  6. siga as etapas em Fazer upgrade de gateways para criar os novos webhooks e alternar o tráfego para os novos gateways.

Fora do Google Cloud

Estas instruções abrangem o upgrade do ASM em:

  • Clusters do Anthos no VMware (GKE On-Prem)
  • Anthos em bare metal
  • Clusters do Anthos no AWS
  • Amazon EKS
  1. Veja os requisitos em Fazer upgrade do Anthos Service Mesh, mas ainda não faça o upgrade.
  2. Antes de instalar a nova versão, determine a revisão atual. Você precisará dessas informações para excluir o Webhook de validação e desativar o webhook da instalação atual do ASM. Use o seguinte comando para armazenar a revisão atual do istiod em uma variável de ambiente:
    export DELETE_REV=$(kubectl get deploy -n istio-system -l app=istiod -o jsonpath={.items[].metadata.labels.'istio\.io\/rev'}'{"\n"}')
    echo ${DELETE_REV}
  3. Crie um novo arquivo overlay.yaml ou verifique se o overlay.yaml atual contém o seguinte conteúdo:
    apiVersion: install.istio.io/v1alpha1
    kind: IstioOperator
    spec:
      revision: asm-1129-3
      components:
        ingressGateways:
          - name: istio-ingressgateway
            enabled: true
            k8s:
              nodeSelector:
                # default node selector, if different or not using node selectors, change accordingly.
                cloud.google.com/gke-nodepool: apigee-runtime
              resources:
                requests:
                  cpu: 1000m
              service:
                type: LoadBalancer
                loadBalancerIP: STATIC_IP # If you do not have a reserved static IP, leave this out.
                ports:
                  - name: http-status-port
                    port: 15021
                  - name: http2
                    port: 80
                    targetPort: 8080
                  - name: https
                    port: 443
                    targetPort: 8443
      values:
        gateways:
          istio-ingressgateway:
            runAsRoot: true
    
      meshConfig:
        accessLogFormat:
          '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
    
  4. Siga as instruções nas seguintes seções da documentação do ASM:
    1. faça o download do asmcli;
    2. conceda permissões de administrador de cluster;
    3. Valide o projeto e o cluster;
    4. faça upgrade com recursos opcionais. Pare antes de iniciar a seção "Fazer upgrade dos gateways";
  5. exclua o webhook de mutação e valide o webhook:
    1. cd no diretório em que você instalou asmcli;
    2. armazene a nova revisão atual em uma variável de ambiente a ser usada no script para excluir os webhooks:
      UPGRADE_REV="asm-1129-3"
    3. crie um script de shell contendo os seguintes comandos:
      #!/bin/bash
      
      set -ex
      
      PROJECT_ID="YOUR_PROJECT_ID"
      CLUSTER_NAME="YOUR_CLUSTER_NAME"
      CLUSTER_LOCATION="YOUR_CLUSTER_LOCATION"
      
      gcloud config configurations activate ${PROJECT_ID}
      gcloud container clusters get-credentials ${CLUSTER_NAME} --region ${CLUSTER_LOCATION} --project ${PROJECT_ID}
      
      kubectl label namespace istio-system istio.io/rev=${UPGRADE_REV} istio-injection- --overwrite
      kubectl rollout restart deployment -n istio-system
      kubectl apply -n istio-system -f PATH_TO_INGRESSGATEWAYistio-ingressgateway
      kubectl apply -n istio-system -f PATH_TO_INGRESSGATEWAY/istio-ingressgateway-connectors
      
      if [[ "${DELETE_REV}" != "${UPGRADE_REV}" ]]; then
        kubectl apply -f out/asm/istio/istiod-service.yaml
        kubectl delete deploy -l app=istio-ingressgateway,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete deploy -l app=istio-ingressgateway-connectors,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete ValidatingWebhookConfiguration -l app=istiod,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete MutatingWebhookConfiguration -l app=sidecar-injector,istio.io/rev=${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete Service,Deployment,HorizontalPodAutoscaler,PodDisruptionBudget istiod-${DELETE_REV} -n istio-system --ignore-not-found=true
        kubectl delete IstioOperator installed-state-${DELETE_REV} -n istio-system --ignore-not-found=true
      fi
      
    4. execute o script para excluir os webhooks atuais;
  6. siga as etapas em Fazer upgrade de gateways para criar os novos webhooks e alternar o tráfego para os novos gateways.

AKS / EKS

Nestas instruções, o processo de upgrade da versão istio-1.12.9-asm.3 do Anthos Service Mesh (ASM) nos clusters anexados ao Anthos é igual ao de uma nova instalação.

Como preparar a instalação do Anthos Service Mesh

    Linux

  1. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-linux-amd64.tar.gz
  2. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.12.9-asm.3-linux-amd64.tar.gz.1.sig istio-1.12.9-asm.3.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
    
  3. Extraia o conteúdo do arquivo em qualquer local no sistema. Por exemplo, para extrair o conteúdo para o diretório de trabalho atual:
    tar xzf istio-1.12.9-asm.3-linux-amd64.tar.gz

    O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado istio-1.12.9-asm.3, que contém o seguinte:

    • Exemplos de aplicativos no diretório samples.
    • A ferramenta de linha de comando istioctl que você usa para instalar o Anthos Service Mesh está no diretório bin.
    • Os perfis de configuração do Anthos Service Mesh estão no diretório manifests/profiles.
  4. Verifique se você está no diretório raiz da instalação do Anthos Service Mesh:
    cd istio-1.12.9-asm.3
  5. Para facilitar, adicione as ferramentas que estão no diretório /bin ao seu PATH:
    export PATH=$PWD/bin:$PATH
  6. Mac OS

  7. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-osx.tar.gz
  8. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.12.9-asm.3-osx.tar.gz.1.sig istio-1.12.9-asm.3.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
    
  9. Extraia o conteúdo do arquivo em qualquer local no sistema. Por exemplo, para extrair o conteúdo para o diretório de trabalho atual:
    tar xzf istio-1.12.9-asm.3-osx.tar.gz

    O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado istio-1.12.9-asm.3, que contém o seguinte:

    • Exemplos de aplicativos no diretório samples.
    • A ferramenta de linha de comando istioctl que você usa para instalar o Anthos Service Mesh está no diretório bin.
    • Os perfis de configuração do Anthos Service Mesh estão no diretório manifests/profiles.
  10. Verifique se você está no diretório raiz da instalação do Anthos Service Mesh:
    cd istio-1.12.9-asm.3
  11. Para facilitar, adicione as ferramentas que estão no diretório /bin ao seu PATH:
    export PATH=$PWD/bin:$PATH
  12. Windows

  13. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-win.zip
  14. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.12.9-asm.3-win.zip.1.sig istio-1.12.9-asm.3.win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
    
  15. Extraia o conteúdo do arquivo em qualquer local no sistema. Por exemplo, para extrair o conteúdo para o diretório de trabalho atual:
    tar xzf istio-1.12.9-asm.3-win.zip

    O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado istio-1.12.9-asm.3, que contém o seguinte:

    • Exemplos de aplicativos no diretório samples.
    • A ferramenta de linha de comando istioctl que você usa para instalar o Anthos Service Mesh está no diretório bin.
    • Os perfis de configuração do Anthos Service Mesh estão no diretório manifests\profiles.
  16. Verifique se você está no diretório raiz da instalação do Anthos Service Mesh:
    cd istio-1.12.9-asm.3
  17. Para facilitar, adicione as ferramentas que estão no diretório \bin ao seu PATH:
    set PATH=%CD%\bin:%PATH%
  18. Agora que o ASM Istio está instalado, verifique a versão de istioctl:
    istioctl version
  19. Crie um namespace chamado istio-system para os componentes do plano de controle:
    kubectl create namespace istio-system

Configurar o webhook de validação

Ao instalar o Anthos Service Mesh, você define um rótulo de revisão em istiod. Você precisa definir a mesma revisão no webhook de validação.

  1. Crie um arquivo chamado istiod-service.yaml com o conteúdo a seguir.
    apiVersion: v1
    kind: Service
    metadata:
      name: istiod
      namespace: istio-system
      labels:
        istio.io/rev: asm-1129-3
        app: istiod
        istio: pilot
        release: istio
    spec:
      ports:
        - port: 15010
          name: grpc-xds # plaintext
          protocol: TCP
        - port: 15012
          name: https-dns # mTLS with k8s-signed cert
          protocol: TCP
        - port: 443
          name: https-webhook # validation and injection
          targetPort: 15017
          protocol: TCP
        - port: 15014
          name: http-monitoring # prometheus stats
          protocol: TCP
      selector:
        app: istiod
        istio.io/rev: asm-1129-3
      meshConfig:
        accessLogFormat:
          '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
    
  2. Use kubectl para aplicar a configuração de validação do webhook:
    kubectl apply -f istiod-service.yaml
  3. Verifique se a configuração foi aplicada:
    kubectl get svc -n istio-system

    A resposta será semelhante a:

    NAME     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                 AGE
    istiod   ClusterIP   172.200.18.133   <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP   22s
    

Como instalar o Anthos Service Mesh

  1. Instale o Anthos Service Mesh com istioctl usando o perfil asm-multicloud:
    istioctl install \
        --set profile=asm-multicloud \
        --set revision="asm-1129-3"

    A saída será semelhante a esta:

    kubectl get pods -n istio-system
    NAME                                   READY   STATUS    RESTARTS   AGE
    istio-ingressgateway-88b6fd976-flgp2   1/1     Running   0          3m13s
    istio-ingressgateway-88b6fd976-p5dl9   1/1     Running   0          2m57s
    istiod-asm-1129-3-798ffb964-2ls88       1/1     Running   0          3m21s
    istiod-asm-1129-3-798ffb964-fnj8c       1/1     Running   1          3m21s
    

    O argumento --set revision adiciona um rótulo de revisão no formato istio.io/rev=asm-1129-3 a istiod. O rótulo de revisão é usado pelo webhook do injetor automático de sidecar para associar os sidecars injetados a uma revisão istiod específica. Para ativar a injeção automática de sidecar para um namespace, você precisa rotulá-lo com uma revisão que corresponda ao rótulo em istiod.

  2. Verifique se a instalação foi concluída:
    kubectl get svc -n istio-system

    A saída será semelhante a esta:

    NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                                                      AGE
    istio-ingressgateway   LoadBalancer   172.200.48.52    34.74.177.168   15021:30479/TCP,80:30030/TCP,443:32200/TCP,15012:32297/TCP,15443:30244/TCP   3m35s
    istiod                 ClusterIP      172.200.18.133   <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        4m46s
    istiod-asm-1129-3       ClusterIP      172.200.63.220   <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        3m43s
    

OpenShift

Nestas instruções, o processo de upgrade da versão istio-1.12.9-asm.3 do Anthos Service Mesh (ASM) nos clusters anexados ao Anthos é igual ao de uma nova instalação.

Como preparar a instalação do Anthos Service Mesh

    Linux

  1. Conceda a restrição de contexto de segurança anyuid (SCC) ao istio-system com o seguinte comando da CLI do OpenShift (oc):
    oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
  2. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-linux-amd64.tar.gz
  3. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.12.9-asm.3-linux-amd64.tar.gz.1.sig istio-1.12.9-asm.3.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
    
  4. Extraia o conteúdo do arquivo em qualquer local no sistema. Por exemplo, para extrair o conteúdo para o diretório de trabalho atual:
    tar xzf istio-1.12.9-asm.3-linux-amd64.tar.gz

    O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado istio-1.12.9-asm.3, que contém o seguinte:

    • Exemplos de aplicativos no diretório samples.
    • A ferramenta de linha de comando istioctl que você usa para instalar o Anthos Service Mesh está no diretório bin.
    • Os perfis de configuração do Anthos Service Mesh estão no diretório manifests/profiles.
  5. Verifique se você está no diretório raiz da instalação do Anthos Service Mesh:
    cd istio-1.12.9-asm.3
  6. Para facilitar, adicione as ferramentas que estão no diretório /bin ao seu PATH:
    export PATH=$PWD/bin:$PATH
  7. Mac OS

  8. Conceda a restrição de contexto de segurança anyuid (SCC) ao istio-system com o seguinte comando da CLI do OpenShift (oc):
    oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
  9. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-osx.tar.gz
  10. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.12.9-asm.3-osx.tar.gz.1.sig istio-1.12.9-asm.3.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
    
  11. Extraia o conteúdo do arquivo em qualquer local no sistema. Por exemplo, para extrair o conteúdo para o diretório de trabalho atual:
    tar xzf istio-1.12.9-asm.3-osx.tar.gz

    O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado istio-1.12.9-asm.3, que contém o seguinte:

    • Exemplos de aplicativos no diretório samples.
    • A ferramenta de linha de comando istioctl que você usa para instalar o Anthos Service Mesh está no diretório bin.
    • Os perfis de configuração do Anthos Service Mesh estão no diretório manifests/profiles.
  12. Verifique se você está no diretório raiz da instalação do Anthos Service Mesh:
    cd istio-1.12.9-asm.3
  13. Para facilitar, adicione as ferramentas que estão no diretório /bin ao seu PATH:
    export PATH=$PWD/bin:$PATH
  14. Windows

  15. Conceda a restrição de contexto de segurança anyuid (SCC) ao istio-system com o seguinte comando da CLI do OpenShift (oc):
    oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system
  16. Faça o download do arquivo de instalação do Anthos Service Mesh no diretório de trabalho atual:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-win.zip
  17. Faça o download do arquivo de assinatura e use openssl para verificar a assinatura:
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.12.9-asm.3-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.12.9-asm.3-win.zip.1.sig istio-1.12.9-asm.3.win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF
    
  18. Extraia o conteúdo do arquivo em qualquer local no sistema. Por exemplo, para extrair o conteúdo para o diretório de trabalho atual:
    tar xzf istio-1.12.9-asm.3-win.zip

    O comando cria um diretório de instalação no seu diretório de trabalho atual, chamado istio-1.12.9-asm.3, que contém o seguinte:

    • Exemplos de aplicativos no diretório samples.
    • A ferramenta de linha de comando istioctl que você usa para instalar o Anthos Service Mesh está no diretório bin.
    • Os perfis de configuração do Anthos Service Mesh estão no diretório manifests\profiles.
  19. Verifique se você está no diretório raiz da instalação do Anthos Service Mesh:
    cd istio-1.12.9-asm.3
  20. Para facilitar, adicione as ferramentas que estão no diretório \bin ao seu PATH:
    set PATH=%CD%\bin:%PATH%
  21. Agora que o ASM Istio está instalado, verifique a versão de istioctl:
    istioctl version
  22. Crie um namespace chamado istio-system para os componentes do plano de controle:
    kubectl create namespace istio-system

Configurar o webhook de validação

Ao instalar o Anthos Service Mesh, você define um rótulo de revisão em istiod. Você precisa definir a mesma revisão no webhook de validação.

  1. Crie um arquivo chamado istiod-service.yaml com o conteúdo a seguir.
    apiVersion: v1
    kind: Service
    metadata:
      name: istiod
      namespace: istio-system
      labels:
        istio.io/rev: asm-1129-3
        app: istiod
        istio: pilot
        release: istio
    spec:
      ports:
        - port: 15010
          name: grpc-xds # plaintext
          protocol: TCP
        - port: 15012
          name: https-dns # mTLS with k8s-signed cert
          protocol: TCP
        - port: 443
          name: https-webhook # validation and injection
          targetPort: 15017
          protocol: TCP
        - port: 15014
          name: http-monitoring # prometheus stats
          protocol: TCP
      selector:
        app: istiod
        istio.io/rev: asm-1129-3
      meshConfig:
        accessLogFormat:
          '{"start_time":"%START_TIME%","remote_address":"%DOWNSTREAM_DIRECT_REMOTE_ADDRESS%","user_agent":"%REQ(USER-AGENT)%","host":"%REQ(:AUTHORITY)%","request":"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%","request_time":"%DURATION%","status":"%RESPONSE_CODE%","status_details":"%RESPONSE_CODE_DETAILS%","bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","upstream_address":"%UPSTREAM_HOST%","upstream_response_flags":"%RESPONSE_FLAGS%","upstream_response_time":"%RESPONSE_DURATION%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_cluster":"%UPSTREAM_CLUSTER%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","request_method":"%REQ(:METHOD)%","request_path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","request_protocol":"%PROTOCOL%","tls_protocol":"%DOWNSTREAM_TLS_VERSION%","request_id":"%REQ(X-REQUEST-ID)%","sni_host":"%REQUESTED_SERVER_NAME%","apigee_dynamic_data":"%DYNAMIC_METADATA(envoy.lua)%"}'
    
  2. Use kubectl para aplicar a configuração de validação do webhook:
    kubectl apply -f istiod-service.yaml
  3. Verifique se a configuração foi aplicada:
    kubectl get svc -n istio-system

    A resposta será semelhante a:

    NAME     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                 AGE
    istiod   ClusterIP   172.200.18.133   <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP   22s
    

Como instalar o Anthos Service Mesh

  1. Instale o Anthos Service Mesh com istioctl usando o perfil asm-multicloud:
    istioctl install \
        --set profile=asm-multicloud \
        --set revision=istio-1.12.9-asm.3

    A saída será semelhante a esta:

    kubectl get pods -n istio-system
    NAME                                   READY   STATUS    RESTARTS   AGE
    istio-ingressgateway-88b6fd976-flgp2   1/1     Running   0          3m13s
    istio-ingressgateway-88b6fd976-p5dl9   1/1     Running   0          2m57s
    istiod-asm-1129-3-798ffb964-2ls88       1/1     Running   0          3m21s
    istiod-asm-1129-3-798ffb964-fnj8c       1/1     Running   1          3m21s
    

    O argumento --set revision adiciona um rótulo de revisão no formato istio.io/rev=1.8.6-asm.1 a istiod. O rótulo de revisão é usado pelo webhook do injetor automático de sidecar para associar os sidecars injetados a uma revisão istiod específica. Para ativar a injeção automática de sidecar para um namespace, você precisa rotulá-lo com uma revisão que corresponda ao rótulo em istiod.

  2. Verifique se a instalação foi concluída:
    kubectl get svc -n istio-system

    A saída será semelhante a esta:

    NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                                                      AGE
    istio-ingressgateway   LoadBalancer   172.200.48.52    34.74.177.168   15021:30479/TCP,80:30030/TCP,443:32200/TCP,15012:32297/TCP,15443:30244/TCP   3m35s
    istiod                 ClusterIP      172.200.18.133   <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        4m46s
    istiod-asm-1129-3       ClusterIP      172.200.63.220   <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        3m43s
    

Instalar o ambiente de execução híbrido 1.5.10

  1. Faça o download do pacote de lançamento para seu sistema operacional:

    Mac 64 bits:

    curl -LO \
        https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.5.10/apigeectl_mac_64.tar.gz

    Linux de 64 bits:

    curl -LO \
        https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.5.10/apigeectl_linux_64.tar.gz

    Mac 32 bits:

    curl -LO \
        https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.5.10/apigeectl_mac_32.tar.gz

    Linux de 32 bits:

    curl -LO \
        https://storage.googleapis.com/apigee-release/hybrid/apigee-hybrid-setup/1.5.10/apigeectl_linux_32.tar.gz
  2. Renomeie o diretório apigeectl/ atual para um nome de diretório de backup. Exemplo:
    mv $APIGEECTL_HOME/ $APIGEECTL_HOME-v1.2/ 
  3. Extraia o conteúdo do arquivo gzip baixado para seu diretório base híbrido. Exemplo:

    tar xvzf FILENAME.tar.gz -C HYBRID_BASE_DIRECTORY
  4. cd ao diretório base.
  5. O conteúdo de tar é, por padrão, expandido em um diretório com a versão e a plataforma no nome. Por exemplo, ./apigeectl_1.5.0-d591b23_linux_64. Renomeie esse diretório para apigeectl:

    mv apigeectl_1.5.0-d591b23_linux_64 apigeectl
  6. No novo diretório apigeectl/, execute apigeectl init, apigeectl apply e apigeectl check-ready:
    1. Inicialize a Apigee híbrida 1.5.10:
      apigeectl init -f OVERRIDES.yaml

      Em que OVERRIDES.yaml é o arquivo overrides.yaml editado.

    2. Verifique se ele foi inicializado corretamente com os seguintes comandos:
      apigeectl check-ready -f OVERRIDES.yaml
      kubectl describe apigeeds -n apigee

      A saída será semelhante a esta:

      Status:
        Cassandra Data Replication:
        Cassandra Pod Ips:
          10.8.2.204
        Cassandra Ready Replicas:  1
        Components:
          Cassandra:
            Last Successfully Released Version:
              Revision:  v1-f8aa9a82b9f69613
              Version:   v1
            Replicas:
              Available:  1
              Ready:      1
              Total:      1
              Updated:    1
            State:        running
        Scaling:
          In Progress:         false
          Operation:
          Requested Replicas:  0
        State:                 running
      
    3. A sintaxe da sinalização apigeectl --dry-run depende da versão de kubectl que você está executando. Verifique a versão de kubectl:
      gcloud version
    4. Verifique se há erros com uma simulação usando o comando apropriado para a versão do kubectl:

      kubectl versão 1.17 e anteriores:

      apigeectl apply -f OVERRIDES.yaml --dry-run=true

      kubectl versão 1.18 e mais recentes:

      apigeectl apply -f OVERRIDES.yaml --dry-run=client
    5. Aplique as substituições. Selecione e siga as instruções para ambientes de produção ou ambientes de demonstração/experimental, dependendo da sua instalação.

      Produção

      Para ambientes de produção, você precisa fazer upgrade de cada componente híbrido individualmente e verificar o status do componente atualizado para o processo de confirmação do próximo componente.

      1. Aplique as modificações para fazer upgrade do Cassandra:
        apigeectl apply -f OVERRIDES.yaml --datastore
      2. Verifique a conclusão:
        apigeectl check-ready -f OVERRIDES.yaml

        Passe para a próxima etapa somente quando os pods estiverem prontos.

      3. Aplique as modificações para fazer upgrade dos componentes de telemetria e verificar a conclusão:
        apigeectl apply -f OVERRIDES.yaml --telemetry
        apigeectl check-ready -f OVERRIDES.yaml
      4. Traga os componentes do Redis:
        apigeectl apply -f OVERRIDES.yaml --redis
      5. Aplique as modificações para fazer upgrade dos componentes no nível da organização (MART, Watcher e Apigee Connect) e verifique a conclusão:
        apigeectl apply -f OVERRIDES.yaml --org
        apigeectl check-ready -f OVERRIDES.yaml
      6. Aplique as modificações para fazer upgrade dos seus ambientes. Você tem duas opções:
        • Ambiente por ambiente: aplique suas modificações em um ambiente por vez e verifique a conclusão. Repita esta etapa para cada ambiente:
          apigeectl apply -f OVERRIDES.yaml --env ENV_NAME
          apigeectl check-ready -f OVERRIDES.yaml

          Em que ENV_NAME é o nome do ambiente que você está atualizando.

        • Todos os ambientes de uma só vez: aplique suas modificações a todos os ambientes de uma só vez e verifique a conclusão:
          apigeectl apply -f OVERRIDES.yaml --all-envs
          apigeectl check-ready -f OVERRIDES.yaml

      Demonstração/Experimental

      Na maioria dos ambientes experimentais ou de demonstração, é possível aplicar as modificações a todos os componentes de uma só vez. Se o ambiente de demonstração/experimental for grande e complexo ou for muito semelhante a um ambiente de produção, use as instruções para fazer upgrade de ambientes de produção.

      1. apigeectl apply -f OVERRIDES.yaml
      2. Verifique o status:
        apigeectl check-ready -f OVERRIDES.yaml

Como reverter um upgrade

Siga estas etapas para reverter um upgrade anterior:

  1. Limpe os jobs concluídos do namespace do ambiente de execução híbrido, em que NAMESPACE é o namespace especificado no arquivo de modificações, se você especificou um namespace. Caso contrário, o namespace padrão é apigee:
    kubectl delete job -n NAMESPACE \
      $(kubectl get job -n NAMESPACE \
      -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
  2. Limpe jobs concluídos do namespace apigee-system:
    kubectl delete job -n apigee-system \
      $(kubectl get job -n apigee-system \
      -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}')
  3. Altere a variável APIGEECTL_HOME para apontar para o diretório que contém a versão original de apigeectl. Exemplo:
    export APIGEECTL_HOME=PATH_TO_PREVIOUS_APIGEECTL_DIRECTORY
  4. No diretório raiz da instalação para a qual você quer reverter, execute apigeectl apply, verifique o status dos seus pods, exclua o componente Redis (novo na versão híbrida v1.5.0) e execute apigeectl init. Use o arquivo de modificações original da versão para a qual você quer reverter:
    • Execute apigeectl apply:
      $APIGEECTL_HOME/apigeectl apply -f overrides/ORIGINAL_OVERRIDES.yaml
    • Verifique o status dos seus pods.
      kubectl -n NAMESPACE get pods

      Em que NAMESPACE é seu namespace da Apigee híbrida.

      Siga para a próxima etapa somente quando o pod apigeeds estiver em execução.

    • Como o Redis é um novo componente da versão híbrida v1.5, execute o comando a seguir para excluí-lo:

      apigeectl_1.5.0 delete --redis -f ORIGINAL_OVERRIDES.yaml
    • Execute apigeectl init:
      $APIGEECTL_HOME/apigeectl init -f overrides/ORIGINAL_OVERRIDES.yaml