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 emgkeconnect.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
estorage.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:
- Identidade da carga de trabalho da frota (recomendado quando disponível). Saiba mais sobre as vantagens de ativar a Identidade da carga de trabalho da frota em Usar a Identidade da carga de trabalho da frota.
- Uma conta de serviço do Google Cloud
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.