Passo 9: instale o tempo de execução híbrido

Aplique a configuração ao cluster

Siga os passos abaixo para instalar o Apigee hybrid no seu cluster:

  1. Certifique-se de que está no diretório hybrid-base-directory/hybrid-files.
    cd $HYBRID_FILES
  2. Verifique se kubectl está definido para o contexto correto através do seguinte comando. O contexto atual deve ser definido para o cluster no qual está a implementar o Apigee Hybrid.
    kubectl config current-context

    O resultado deve incluir o nome do cluster no qual está a implementar o Apigee hybrid. Por exemplo, no GKE, o nome do contexto está normalmente no formato gke_project-id_cluster-location_cluster-name, como em:

    gke_my-project_us-central1_my-cluster

    Se o nome do cluster no contexto não corresponder, o comando seguinte obtém as credenciais gcloud do cluster e define o contexto kubectl:

    Clusters regionais

    gcloud container clusters get-credentials $CLUSTER_NAME \
    --region $CLUSTER_LOCATION \
    --project $PROJECT_ID

    Clusters zonais

    gcloud container clusters get-credentials $CLUSTER_NAME \
    --zone $CLUSTER_LOCATION \
    --project $PROJECT_ID
  3. Apenas para as plataformas Anthos on bare metal, AWS on GKE, EKS e GKE on prem, verifique se a variável KUBECONFIG está definida através do seguinte comando:
    echo ${KUBECONFIG}
  4. Faça uma inicialização de execução de ensaio. A execução de um teste permite-lhe verificar a existência de erros antes de serem feitas alterações ao cluster. Execute o comando init com a flag --dry-run da seguinte forma:
    ${APIGEECTL_HOME}/apigeectl init -f overrides/overrides.yaml --dry-run=client
  5. Se não houver erros, execute o comando init da seguinte forma:
    ${APIGEECTL_HOME}/apigeectl init -f overrides/overrides.yaml

    O comando init instala os serviços de implementação do Apigee Apigee Deployment Controller e Apigee Admission Webhook.

  6. Para verificar o estado da implementação, pode usar os seguintes comandos:
    ${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yaml
    kubectl get pods -n apigee-system
    kubectl get pods -n apigee

    Quando os pods estiverem prontos, avance para o passo seguinte.

  7. Faça uma instalação de execução de ensaio. Execute o comando apply com a flag --dry-run.
    ${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml --dry-run=client
  8. Se não existirem erros, pode aplicar os componentes de tempo de execução específicos do Apigee ao cluster com o seguinte comando:
    ${APIGEECTL_HOME}/apigeectl apply -f overrides/overrides.yaml
  9. Para verificar o estado da implementação, execute o seguinte comando:
    ${APIGEECTL_HOME}/apigeectl check-ready -f overrides/overrides.yaml

    Repita este passo até que todos os pods estejam prontos. Os pods podem demorar vários minutos a iniciar.

GKE com Workload Identity

Para instalações híbridas do Apigee no GKE, o Google Cloud oferece uma opção denominada Workload Identity para autenticar componentes de runtime híbridos.

Contas de serviço do Google Cloud e contas de serviço do Kubernetes

Uma conta de serviço do Google Cloud é um tipo especial de conta que pode ser usada para fazer chamadas API autorizadas através da autenticação como a própria conta de serviço. As contas de serviço do Google Cloud podem receber funções e autorizações semelhantes às de um utilizador individual. Quando uma aplicação se autentica como uma conta de serviço, tem acesso a todos os recursos aos quais a conta de serviço tem autorização de acesso. Se quiser saber mais sobre as contas de serviço do Google Cloud, consulte o artigo Vista geral das contas de serviço.

Criou contas de serviço do Google Cloud para a sua instalação híbrida do Apigee no Passo 4: crie contas de serviço. O Apigee usa estas contas de serviço para autenticar os componentes híbridos.

As contas de serviço do Kubernetes são semelhantes às contas de serviço do Google Cloud. Uma conta de serviço do Kubernetes fornece uma identidade para processos executados num pod e permite a autenticação no servidor da API de forma semelhante a um utilizador. Se quiser saber mais sobre as contas de serviço do Kubernetes, consulte o artigo Configure Service Accounts for Pods (apenas em inglês).

A ferramenta apigeectl criou a maioria das contas de serviço do Kubernetes necessárias para o Apigee Hybrid quando executou apigeectl apply no procedimento anterior.

Quando configura o Workload Identity no GKE, associa as contas de serviço do Google Cloud às contas de serviço do Kubernetes no cluster do Kubernetes. Desta forma, as contas de serviço do Kubernetes podem roubar a identidade das contas de serviço do Google Cloud e usar as respetivas funções e autorizações atribuídas para fazer a autenticação nos componentes híbridos.

Siga estas instruções para configurar o Workload Identity para o seu projeto.

Prepare-se para configurar a identidade da carga de trabalho

Estes procedimentos usam as seguintes variáveis de ambiente. Verifique se estão definidos e defina os que não estão:

echo $APIGEECTL_HOME
echo $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME
  1. Verifique se a configuração gcloud atual está definida para o ID do projeto do Google Cloud com o seguinte comando:
    gcloud config get project
  2. Se necessário, defina a configuração gcloud atual:

    gcloud config set project $PROJECT_ID
  3. Crie a apigee-cassandra-restore conta de serviço do Kubernetes.

    Quando aplicou a configuração executando apigeectl apply, o comando criou a maioria das contas de serviço do Kubernetes necessárias para a identidade de carga de trabalho.

    Para criar a conta de serviço do Kubernetes, execute o comando apigeectl apply com a flag --restore:apigee-cassandra-restore

    $APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
  4. Verifique se o Workload Identity está ativado para o seu cluster do GKE. Quando criou o cluster no Passo 1: crie um cluster, o passo 11 consistia em ativar a identidade da carga de trabalho. Pode confirmar se o Workload Identity está ativado executando o seguinte comando:

    Clusters regionais

    gcloud container clusters describe $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    Clusters zonais

    gcloud container clusters describe $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    O resultado deve ter o seguinte aspeto:

      ---
      workloadPool: PROJECT_ID.svc.id.goog

    Se vir null nos resultados, execute o seguinte comando para ativar a identidade da carga de trabalho para o seu cluster:

    Clusters regionais

    gcloud container clusters update $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --project $PROJECT_ID \
      --region $CLUSTER_LOCATION

    Clusters zonais

    gcloud container clusters update  $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID
  5. Ative a identidade de carga de trabalho para cada grupo de nós com os seguintes comandos. Esta operação pode demorar até 30 minutos para cada nó:

    Clusters regionais

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Clusters zonais

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Onde NODE_POOL_NAME é o nome de cada conjunto de nós. Na maioria das instalações do Apigee Hybrid, os dois conjuntos de nós predefinidos têm os nomes apigee-data e apigee-runtime.

  6. Verifique se o Workload Identity está ativado nos seus node pools com os seguintes comandos:

    Clusters regionais

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    Clusters zonais

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    O resultado deve ter um aspeto semelhante ao seguinte:

    ---
    diskSizeGb: 100
    diskType: pd-standard
    ...
    workloadMetadataConfig:
      mode: GKE_METADATA
        
  7. Obtenha uma lista dos nomes das contas de serviço do Google Cloud para o seu projeto. Precisa destes nomes para associar as contas de serviço do Kubernetes para configurar o Workload Identity. Para instalações de não produção, deve existir apenas uma conta de serviço Google. Para instalações de produção, deve haver oito.

    Use o seguinte comando para obter a lista de nomes:

    gcloud iam service-accounts list --project $PROJECT_ID

    O resultado deve ter um aspeto semelhante ao seguinte:

    Não prod

    Para ambientes de não produção:

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-non-prod      apigee-non-prod@my_project_id.iam.gserviceaccount.com      False
    

    Produção

    Para ambientes de não produção:

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-cassandra     apigee-cassandra@my_project_id.iam.gserviceaccount.com     False
    apigee-logger        apigee-logger@my_project_id.iam.gserviceaccount.com        False
    apigee-mart          apigee-mart@my_project_id.iam.gserviceaccount.com          False
    apigee-metrics       apigee-metrics@my_project_id.iam.gserviceaccount.com       False
    apigee-runtime       apigee-runtime@my_project_id.iam.gserviceaccount.com       False
    apigee-synchronizer  apigee-synchronizer@my_project_id.iam.gserviceaccount.com  False
    apigee-udca          apigee-udca@my_project_id.iam.gserviceaccount.com          False
    apigee-watcher       apigee-watcher@my_project_id.iam.gserviceaccount.com       False
    
  8. Obtenha uma lista de nomes das contas de serviço do Kubernetes. Precisa desta lista de nomes para associar às suas contas de serviço do Google Cloud mais tarde neste procedimento. Use o seguinte comando:
    kubectl get sa -n $NAMESPACE

    O resultado deve ter um aspeto semelhante ao seguinte. As contas de serviço do Kubernetes em negrito são as que tem de associar às suas contas de serviço do Google Cloud:

    NAME                                                         SECRETS   AGE
    apigee-cassandra-backup                                      1         11m
    apigee-cassandra-restore                                     1         11m
    apigee-cassandra-schema-setup-my-project-id-123abcd-sa       1         11m
    apigee-cassandra-schema-val-my-project-id-123abcd            1         11m
    apigee-cassandra-user-setup-my-project-id-123abcd-sa         1         11m
    apigee-connect-agent-my-project-id-123abcd-sa                1         11m
    apigee-datastore-default-sa                                  1         11m
    apigee-ingressgateway                                        1         11m
    apigee-ingressgateway-my-project-id-123abcd                  1         11m
    apigee-ingressgateway-manager                                1         11m
    apigee-init                                                  1         11m
    apigee-mart-my-project-id-123abcd-sa                         1         11m
    apigee-metrics-sa                                            1         11m
    apigee-mint-task-scheduler-my-project-id-123abcd-sa          1         11m
    apigee-redis-default-sa                                      1         11m
    apigee-redis-envoy-default-sa                                1         11m
    apigee-runtime-my-project-id-env-name-234bcde-sa             1         11m
    apigee-synchronizer-my-project-id-env-name-234bcde-sa        1         11m
    apigee-udca-my-project-id-123abcd-sa                         1         11m
    apigee-udca-my-project-id-env-name-234bcde-sa                1         11m
    apigee-watcher-my-project-id-123abcd-sa                      1         11m
    default                                                      1         11m
        

Configure o Workload Identity

Use o procedimento seguinte para ativar o Workload Identity para a sua instalação híbrida:

  1. Para cada componente do Apigee, anote as contas de serviço do Kubernetes correspondentes com a conta de serviço Google para o componente.

    Os passos seguintes usam duas variáveis de ambiente. Repõe os valores destas variáveis antes de cada conjunto de comandos:

    • GSA_NAME: o nome de uma conta de serviço Google. Estas são as contas de serviço que criou com a ferramenta create-service-account no passo 4: crie contas de serviço.
    • KSA_NAME: O nome de uma conta de serviço do Kubernetes. Estas são as contas que indicou acima com o comando kubectl get sa -n $NAMESPACE, por exemplo: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
    • Cassandra

      Configure o Workload Identity para o componente Cassandra.

      O componente Cassandra tem seis contas de serviço do Kubernetes associadas:

      • apigee-cassandra-backup
      • apigee-cassandra-restore
      • apigee-cassandra-schema-setup
      • apigee-cassandra-schema-val (val = validação)
      • apigee-cassandra-user-setup
      • apigee-datastore-default

      Não prod

      Configure a apigee-cassandra-backupconta de serviço do Kubernetes

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:
        GSA_NAME="apigee-non-prod"
        KSA_NAME="apigee-cassandra-backup"
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

        A saída deve ter uma linha que descreva a anotação, semelhante a:

        Annotations:         iam.gke.io/gcp-service-account: apigee-non-prod@my-project-id.iam.gserviceaccount.com

      Configure a apigee-cassandra-restoreconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-cassandra-restore"
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-cassandra-schema-setupconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        por exemplo: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-cassandra-schema-valconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        por exemplo: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-cassandra-user-setupconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        por exemplo: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-datastore-default-saconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-datastore-default-sa"
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      Configure a apigee-cassandra-backupconta de serviço do Kubernetes

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:
        GSA_NAME="apigee-cassandra"
        KSA_NAME="apigee-cassandra-backup"
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
      5. A saída deve ter uma linha que descreva a anotação, semelhante a:

        Annotations:         iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
      6. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-cassandra-restoreconta de serviço do Kubernetes

      1. Redefina a variável de ambiente KSA_NAME:

        KSA_NAME="apigee-cassandra-restore"
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Configure a apigee-cassandra-schema-setupconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        por exemplo: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
      2. Associe a função de IAM:

        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-cassandra-schema-valconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        por exemplo: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-cassandra-user-setupconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        por exemplo: apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configure a apigee-datastore-default-saconta de serviço do Kubernetes

      1. Redefina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-datastore-default-sa"
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Connect

      Configure a identidade da carga de trabalho para o componente Apigee Connect.

      Não prod

      1. Defina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        por exemplo: apigee-connect-agent-hybrid-example-project-123abcd-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:
        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        por exemplo: apigee-connect-agent-hybrid-example-project-123abcd-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • MART

      Configure o Workload Identity para o componente MART.

      Não prod

      1. Defina a KSA_NAMEvariável de ambiente:

        KSA_NAME="apigee-mart-service-account-name-sa"
        por exemplo: apigee-mart-hybrid-example-project-123abcd-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-mart-service-account-name-sa"
        por exemplo: apigee-mart-hybrid-example-project-123abcd-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Métricas do Apigee

      Configure a identidade de carga de trabalho para o componente de métricas do Apigee.

      Não prod

      1. Defina as KSA_NAMEvariáveis de ambiente:

        KSA_NAME="apigee-metrics-sa"
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-metrics"
        KSA_NAME="apigee-metrics-sa"
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
        --role roles/iam.workloadIdentityUser \
        --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
        $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
        --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
        --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (org-level)

      Configure a identidade da carga de trabalho para o componente UDCA ao nível da organização.

      A UDCA é implementada nos âmbitos ao nível da organização e do ambiente. Por conseguinte, existem duas contas de serviço do Kubernetes separadas para o UDCA, uma para cada âmbito. Pode distinguir as contas pelo nome. A conta com âmbito de ambiente inclui o nome do ambiente no nome da conta de serviço. Por exemplo:

      • Nível da organização: apigee-udca-my-project-id-123abcd-sa onde my-project-id é o ID do projeto.
      • Env-level: apigee-udca-my-project-id-my-env-234bcde-sa em que my-env é o nome do ambiente.

      Não prod

      1. Defina as KSA_NAMEvariáveis de ambiente:

        KSA_NAME="apigee-udca-service-account-name-sa"
        por exemplo: apigee-udca-hybrid-example-project-123abcd-sa.
      2. Associe a função de IAM:
          gcloud iam service-accounts add-iam-policy-binding \
            --role roles/iam.workloadIdentityUser \
            --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
            $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
            --project $PROJECT_ID
      3. Anotar a conta de serviço:
          kubectl annotate serviceaccount \
            --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-service-account-name-sa"
        por exemplo: apigee-udca-hybrid-example-project-123abcd-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Watcher

      Configure a identidade de carga de trabalho para o componente Apigee Watcher.

      Não prod

      1. Defina as KSA_NAMEvariáveis de ambiente:

        KSA_NAME="apigee-watcher-service-account-name-sa"
        por exemplo: apigee-watcher-hybrid-example-project-123abcd-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-watcher"
        KSA_NAME="apigee-watcher-service-account-name-sa"
        por exemplo: apigee-watcher-hybrid-example-project-123abcd-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Runtime

      Configure a identidade da carga de trabalho para o componente Apigee Runtime.

      Não prod

      1. Defina as KSA_NAMEvariáveis de ambiente:

        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        por exemplo: apigee-runtime-hybrid-example-project-example-env-234bcde-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-runtime"
        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        por exemplo: apigee-runtime-hybrid-example-project-example-env-234bcde-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Sincronizador

      Configure o Workload Identity para o componente Synchronizer.

      Não prod

      1. Defina as KSA_NAMEvariáveis de ambiente:

        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        por exemplo: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-synchronizer"
        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        por exemplo: apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (env-level)

      Configure a identidade da carga de trabalho para o componente UDCA ao nível do ambiente.

      Não prod

      1. Defina as KSA_NAMEvariáveis de ambiente:

        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        por exemplo: apigee-udca-hybrid-example-project-example-env-234bcde-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produção

      1. Defina as variáveis de ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        por exemplo: apigee-udca-hybrid-example-project-example-env-234bcde-sa.
      2. Associe a função de IAM:
        gcloud iam service-accounts add-iam-policy-binding \
          --role roles/iam.workloadIdentityUser \
          --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \
          $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \
          --project $PROJECT_ID
      3. Anotar a conta de serviço:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Valide a anotação:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
  2. Opcional: elimine os ficheiros de chaves de contas de serviço transferidos.

    Se criou as contas de serviço Google com a ferramenta create-service-account, pode ter criado chaves de contas de serviço e transferido os ficheiros de chaves .json. Quando usa o Workload Identity no GKE, não precisa destes ficheiros de chaves.

    Pode eliminar os ficheiros de chaves com o seguinte comando:

    rm $HYBRID_FILES/service-accounts/*.json

Valide a identidade da carga de trabalho

  1. (Opcional) Pode ver o estado das suas contas de serviço do Kubernetes na página Kubernetes: Vista geral das cargas de trabalho no Google Cloud console.

    Aceda a Cargas de trabalho

  2. Para verificar novamente o estado da implementação com apigeectl check-ready:
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml
1 2 3 4 5 6 7 8 9 (NEXT) Passo 10: exponha a entrada do Apigee 11