Antes de começar

Registrar um cluster do Kubernetes fora do Google Cloud requer as etapas a seguir, além de concluir os pré-requisitos gerais.

Garantir conectividade de rede

Para registrar seu cluster, verifique se os domínios abaixo estão acessíveis com seu cluster do Kubernetes.

  • cloudresourcemanager.googleapis.com resolve os metadados referentes ao projeto do Google Cloud a que o cluster está sendo conectado.
  • oauth2.googleapis.com para receber tokens OAuth de curta duração para operações de agente em gkeconnect.googleapis.com.
  • gkeconnect.googleapis.com para estabelecer o canal usado para receber solicitações do Google Cloud e enviar respostas.
  • gkehub.googleapis.com para criar recursos de assinatura da frota do Google Cloud que correspondam ao cluster que você está conectando ao Google Cloud.
  • www.googleapis.com para autenticar tokens de serviço das solicitações de serviço recebidas do Google Cloud.
  • gcr.io e storage.googleapis.com para extrair a imagem do agente do GKE Connect.

Para registrar o cluster usando a identidade da carga de trabalho, os seguintes domínios também precisam ser acessíveis:

  • securetoken.googleapis.com
  • iamcredentials.googleapis.com
  • sts.googleapis.com

Se você estiver usando um proxy para o Connect, também será necessário atualizar a lista de permissões do proxy com esses domínios.

Se você usa o gcloud para registrar o cluster do Kubernetes, esses domínios também precisam ser acessados no ambiente em que você executa os comandos do gcloud.

Como usar VPC Service Controls

Se você quiser usar o VPC Service Controls para aumentar a segurança dos dados no aplicativo, será preciso garantir que os seguintes serviços estejam no perímetro do serviço:

  • API Resource Manager (cloudresourcemanager.googleapis.com)
  • API GKE Connect (gkeconnect.googleapis.com)
  • API Fleet (gkehub.googleapis.com)

Se você quiser registrar o cluster com a identidade da carga de trabalho da frota ativada, também precisará dos seguintes serviços:

  • API IAM Service Account Credentials (iamcredentials.googleapis.com)
  • API Security Token Service (sts.googleapis.com)

Também é necessário configurar a conectividade particular para acessar as APIs relevantes. Saiba como fazer isso em Configurar a conectividade particular.

Configurar identidade

Todas as opções manuais de registro de cluster fora do Google Cloud exigem que você configure a autenticação no Google. Pode ser:

Os clusters anexados poderão ser registrados com a Identidade da carga de trabalho da frota ativada se o cluster atender aos nossos pré-requisitos de clusters anexados, conforme descrito abaixo. Caso contrário, registre os clusters anexados com uma conta de serviço do Google Cloud para autenticação. A próxima seção mostra como criar uma conta de serviço.

Criar uma conta de serviço do Google Cloud usando gcloud

Para registrar manualmente um cluster usando uma conta de serviço do Google Cloud, você precisa de um arquivo JSON contendo as credenciais da conta de serviço. Para seguir o princípio do menor privilégio, recomendamos que você crie uma conta de serviço distinta para cada cluster do Kubernetes registrado e vincule os papéis do IAM a ela no cluster correspondente.

Para criar esse arquivo, execute as seguintes etapas:

gcloud

Execute o seguinte comando para criar uma conta de serviço:

gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID

Liste todas as contas de serviço de um projeto executando o seguinte comando:

gcloud iam service-accounts list --project=FLEET_HOST_PROJECT_ID

Se você estiver criando uma conta de serviço distinta para cada cluster do Kubernetes registrado, vincule o papel do GKE gkehub.connect à conta de serviço do cluster correspondente a uma Condição do IAM no nome da assinatura do cluster:

MEMBERSHIP_NAME=MEMBERSHIP_NAME
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
   --member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
   --role="roles/gkehub.connect" \
   --condition "expression=resource.name == \
'projects/${FLEET_HOST_PROJECT_ID}/locations/global/memberships/${MEMBERSHIP_NAME}',\
title=bind-${SERVICE_ACCOUNT_NAME}-to-${MEMBERSHIP_NAME}"

Caso contrário, vincule o papel à conta de serviço para todos os clusters no projeto sem a condição.

FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
   --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
   --role="roles/gkehub.connect"

Faça o download do arquivo JSON da chave privada da conta de serviço. Você usa esse arquivo ao registrar um cluster:

FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
gcloud iam service-accounts keys create LOCAL_KEY_PATH \
   --iam-account=SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com \
   --project=${FLEET_HOST_PROJECT_ID}

onde:

  • FLEET_HOST_PROJECT_ID é o ID do projeto do Google Cloud em que você quer registrar clusters. Saiba como encontrar esse valor.
  • SERVICE_ACCOUNT_NAME é o nome de exibição escolhido para a [conta de serviço].
  • MEMBERSHIP_NAME é o nome da assinatura que você escolhe para representar o cluster de maneira exclusiva enquanto o registra.
  • LOCAL_KEY_PATH é um caminho de arquivo local onde você quer salvar a chave privada da conta de serviço, um arquivo JSON. Recomendamos que você nomeie o arquivo usando o nome da conta de serviço e o ID do projeto, como: /tmp/creds/[SERVICE_ACCOUNT_NAME]-[FLEET_HOST_PROJECT_ID].json

Pré-requisitos do cluster anexado

Dependendo do tipo de cluster externo que você quer registrar como cluster anexado, talvez seja necessário atender a alguns requisitos adicionais para instalar o agente do Connect e/ou usar a Identidade da carga de trabalho da frota.

Configurar restrições de contexto de segurança (SCC, na sigla em inglês) (clusters do OpenShift)

Nos clusters OpenShift OKE e OKD, os administradores podem usar SCCs para controlar as permissões dos pods. Para permitir a instalação do agente do Connect no cluster, você precisa criar uma SCC personalizada.

A amostra de definição de SCC a seguir especifica o conjunto de condições que o agente do Connect precisa executar para ser aceito no cluster:

# Connect Agent SCC
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
  name: gke-connect-scc
allowPrivilegeEscalation: false
# This is redundant with non-root + disallow privilege escalation,
# but we provide it for defense in depth.
requiredDropCapabilities:
- ALL
runAsUser:
  type: MustRunAsNonRoot
seLinuxContext:
  type: RunAsAny
supplementalGroups:
  type: MustRunAs
  ranges:
  - min: 1
    max: 65535
fsGroup:
  type: MustRunAs
  ranges:
  - min: 1
    max: 65535
volumes:
- secret
- projected
readOnlyRootFilesystem: true
seccompProfiles:
- docker/default
users:
groups:
  # Grants all service accounts in the gke-connect namespace access to this SCC
  - system:serviceaccounts:gke-connect

Supondo que você salvou a definição de SCC como gke-connect-scc.yaml, use a ferramenta de linha de comando oc do OpenShift para criar a SCC gke-connect-scc para o cluster da seguinte maneira:

$ oc create -f gke-connect-scc.yaml

Para verificar se a SCC personalizada foi criada, execute o seguinte comando oc:

$ oc get scc | grep gke-connect-scc

Requisitos de identidade da carga de trabalho da frota

É possível registrar clusters anexados com a Identidade da carga de trabalho da frota ativada se a plataforma criar um endpoint OIDC público para o cluster (ou permitir a criação de um) ou se você tiver a descoberta do emissor da conta de serviço do Kubernetes ativada para o cluster. Se você não atender a esses requisitos, precisará registrar clusters anexados com uma conta de serviço do Google Cloud para autenticação.

Para tipos de cluster específicos, consulte:

  • Clusters do OpenShift: podem ser registrados com a Identidade da carga de trabalho da frota ativada depois que você tiver configurado a SCC personalizada, conforme descrito acima.
  • Clusters de tipo: exigem que a descoberta do emissor da conta de serviço esteja ativada para usar a identidade da carga de trabalho da frota. Essa opção é ativada por padrão na versão 1.20 do Kubernetes. Se você precisar ativar esse recurso, siga as instruções em Projeção de volume do token da conta de serviço. A descoberta de emissor da conta de serviço é ativada automaticamente quando o projeto de volume do token da conta de serviço está ativado.

A seguir

Siga as instruções para registrar um cluster.