Registrando um cluster Kubernetes fora Google Cloud requer as seguintes etapas, além de concluir os pré-requisitos gerais .
Garantir a conectividade da rede
Para registrar seu cluster com sucesso, você precisa garantir que os domínios abaixo possam ser acessados a partir do seu cluster Kubernetes.
-
cloudresourcemanager.googleapis.com
resolve metadados referentes a Google Cloud projeto ao qual o cluster está sendo conectado. -
oauth2.googleapis.com
para obter 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 de Google Cloud e emite respostas. -
gkehub.googleapis.com
para criar Google Cloud- recursos de associação de frota do lado que correspondem ao cluster ao qual você está se conectando Google Cloud. -
www.googleapis.com
para autenticar tokens de serviço de entrada Google Cloud solicitações de serviço. -
gcr.io
estorage.googleapis.com
para extrair a imagem do agente do GKE Connect.
Se você quiser registrar o cluster usando a Identidade de Carga de Trabalho da frota , os seguintes domínios também deverão estar acessíveis:
-
securetoken.googleapis.com
-
iamcredentials.googleapis.com
-
sts.googleapis.com
Se estiver usando um proxy para o Connect, você também deverá atualizar a lista de permissões do proxy com os domínios relevantes.
Se você usar o gcloud para registrar seu cluster Kubernetes, esses domínios também precisarão estar acessíveis no ambiente onde você executa os comandos do gcloud.
Usando controles de serviço VPC
Se você quiser usar o VPC Service Controls para segurança de dados adicional em seu aplicativo, precisará garantir que os seguintes serviços estejam em seu perímetro de serviço:
- API do Gerenciador de Recursos (
cloudresourcemanager.googleapis.com
) - API do GKE Connect (
gkeconnect.googleapis.com
) - API de frota (
gkehub.googleapis.com
)
Se você quiser registrar seu cluster com a Identidade de Carga de Trabalho da frota habilitada, também precisará dos seguintes serviços:
- API de credenciais de conta de serviço do IAM (
iamcredentials.googleapis.com
) - API do serviço de token de segurança (
sts.googleapis.com
)
Você também precisa configurar a conectividade privada para acessar as APIs relevantes. Você pode descobrir como fazer isso em Configurando a conectividade privada .
Configurar identidade
Todas as opções de registro de cluster manual fora Google Cloud exigem que você configure a autenticação no Google. Isso pode ser:
- Identidade de Carga de Trabalho da Frota (recomendado quando disponível). Você pode descobrir mais sobre as vantagens de habilitar a Identidade de Carga de Trabalho da Frota em Usar a Identidade de Carga de Trabalho da Frota .
- UM Google Cloud conta de serviço
Os clusters anexados podem ser registrados com a Identidade de Carga de Trabalho da frota habilitada se o cluster atender aos nossos pré-requisitos de cluster anexado , conforme descrito abaixo. Caso contrário, registre os clusters anexados com uma Google Cloud Conta de serviço para autenticação. A próxima seção mostra como criar uma conta de serviço.
Criar um Google Cloud conta de serviço usando gcloud
Para registrar manualmente um cluster usando um Google Cloud Para uma conta de serviço, você precisa de um arquivo JSON contendo as credenciais da conta de serviço. Para seguir o princípio do privilégio mínimo , recomendamos criar uma conta de serviço distinta para cada cluster Kubernetes registrado e vincular a ela apenas funções do IAM para o cluster correspondente.
Para criar este arquivo, execute as seguintes etapas:
gcloud
Crie uma conta de serviço executando o seguinte comando:
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 a função do IAM gkehub.connect à conta de serviço do cluster correspondente com uma Condição do IAM no nome de associação 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 a função à 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"
Baixe o arquivo JSON da chave privada da conta de serviço. Use este 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 Google Cloud ID do projeto no qual você deseja registrar clusters. Saiba como encontrar este valor .
- SERVICE_ACCOUNT_NAME é o nome de exibição que você escolhe para a [Conta de serviço].
- MEMBERSHIP_NAME é o nome da associação que você escolhe para representar exclusivamente o cluster ao registrá-lo .
- LOCAL_KEY_PATH é um caminho de arquivo local onde você deseja 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 seu projeto, como
/tmp/creds/[SERVICE_ACCOUNT_NAME]-[FLEET_HOST_PROJECT_ID].json
.
Pré-requisitos do cluster anexado
Dependendo do tipo de cluster Kubernetes de terceiros que você deseja registrar como um cluster anexado , pode ser necessário atender a alguns requisitos adicionais para instalar o Connect Agent e/ou usar o Fleet Workload Identity.
Configurar restrições de contexto de segurança (SCC) (clusters OpenShift)
Em clusters OpenShift OKE e OKD , os administradores podem usar SCCs para controlar permissões para pods. Para permitir a instalação do Connect Agent no seu cluster, você precisa criar um SCC personalizado.
A definição de SCC de exemplo a seguir especifica o conjunto de condições com as quais o Connect Agent deve ser executado 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 sua definição de SCC como gke-connect-scc.yaml
, use a ferramenta de linha de comando OpenShift oc
para criar o SCC gke-connect-scc
para seu cluster, da seguinte maneira:
$ oc create -f gke-connect-scc.yaml
Para verificar se o SCC personalizado foi criado, execute o seguinte comando oc
:
$ oc get scc | grep gke-connect-scc
Requisitos de identidade da carga de trabalho da frota
Você pode registrar clusters anexados com a Identidade de Carga de Trabalho da frota habilitada se a sua plataforma criar um endpoint OIDC público para o seu cluster (ou permitir que você crie um) ou se você tiver a descoberta de emissor de conta de serviço do Kubernetes habilitada para o cluster. Se você não conseguir atender a esses requisitos, deverá registrar os clusters anexados com uma Google Cloud conta de serviço para autenticação.
Para tipos específicos de cluster, consulte o seguinte:
- Clusters OpenShift : podem ser registrados com a Identidade de Carga de Trabalho da frota habilitada após você ter configurado seu SCC personalizado , conforme descrito acima.
- Kind Clusters : exigem que a descoberta do emissor da conta de serviço esteja habilitada para usar a Identidade da Carga de Trabalho da frota. Isso é habilitado por padrão a partir da versão 1.20 do Kubernetes. Se precisar habilitar esse recurso, siga as instruções em Projeção de volume do token da conta de serviço . A descoberta do emissor da conta de serviço é habilitada automaticamente quando o projeto de volume do token da conta de serviço é habilitado.
O que vem a seguir?
Siga as instruções para registrar um cluster .