Recursos com escopo de projeto


O Config Connector pode gerenciar seus recursos no nível de projeto, pasta ou organização. Para que o Config Connector determine onde criar seus recursos, ele primeiro verifica se há um campo de definição de escopo na especificação do recurso. Se não for encontrado, ele verifica se há uma anotação de definição de escopo.

Especificar o campo projectRef

A maioria dos recursos do Config Connector com escopo de projeto é compatível com um campo chamado projectRef na especificação CRD. Use esse campo para especificar o projeto do Google Cloud em que você quer criar o recurso.

Se o projeto do Google Cloud também for gerenciado no mesmo cluster com a CRD do projeto, será possível especificar o projeto como uma referência de recurso do Kubernetes:

...
spec:
  projectRef:
    name: PROJECT_RESOURCE_NAME
    namespace: PROJECT_RESOURCE_NAMESPACE
...

Essa abordagem possibilita usar o Config Connector e criar um projeto do Google Cloud com recursos filhos em uma única operação de aplicação. O campo de namespace será opcional se o recurso do Kubernetes do projeto estiver no mesmo namespace do Kubernetes que o recurso com escopo de projeto.

Se o projeto do Google Cloud não for gerenciado como um recurso do Kubernetes no mesmo cluster, use o campo external para especificar diretamente o ID do projeto. O formato exato do valor pode variar dependendo do tipo de recurso. Os dois formatos mais comuns são "PROJECT_ID" e "projects/PROJECT_ID". Confira um exemplo de "projects/PROJECT_ID" abaixo:

...
spec:
  projectRef:
    external: "projects/PROJECT_ID"
...

Anotar a configuração de recursos

Se o recurso Config Connector tiver escopo no projeto, mas não for compatível com o campo projectRef, será possível definir o ID do projeto para a configuração do recurso usando a anotação project-id:

...
metadata:
  annotations:
    cnrm.cloud.google.com/project-id: PROJECT_ID
...

Veja um exemplo de YAML de um recurso FooBar com esta anotação:

apiVersion: foo.cnrm.cloud.google.com/v1beta1
kind: FooBar
metadata:
  annotations:
    cnrm.cloud.google.com/project-id: PROJECT_ID
  name: foobarname

Anotar configuração de namespace

Para definir um ID do projeto padrão para recursos recém-criados, anote o namespace do Kubernetes. Se algum dos recursos do namespace tiver essa anotação explicitamente definida na própria configuração, a anotação no nível do recurso substituirá a do namespace.

Para anotar o namespace usando a linha de comando, execute o seguinte comando:

kubectl annotate namespace NAMESPACE_NAME cnrm.cloud.google.com/project-id=PROJECT_ID

Substitua:

  • NAMESPACE_NAME: o nome do namespace
  • PROJECT_ID: o ID do projeto do Google Cloud

Também é possível aplicar um manifesto YAML contendo a anotação. Copie o YAML abaixo em um arquivo:

apiVersion: v1
kind: Namespace
metadata:
  annotations:
    cnrm.cloud.google.com/project-id: PROJECT_ID
  name: NAMESPACE_NAME

Substitua:

  • PROJECT_ID: o ID do projeto do Google Cloud
  • NAMESPACE_NAME: o nome do namespace

Depois de criar o arquivo, aplique-o ao cluster.

Usando o nome do namespace como o ID do projeto

Se nem o recurso nem o namespace especificarem um ID de projeto, o Config Connector usará o nome do namespace como ID do projeto. Esse comportamento padrão é compatível com o Config Connector, mas não o recomendamos, porque o padrão implícito do ID do projeto pode ser confuso.