Normalmente, o Config Sync aplica um config a cada cluster inscrito. Se ele
estiver no subdiretório namespaces/
, o Config Sync criará primeiro
o namespace em cada cluster. Depois, ele aplicará todos os configs herdados
a esse namespace.
Um ClusterSelector é um tipo especial de config que usa labelSelectors do Kubernetes. Use um ClusterSelector para limitar os clusters a que um config específico é aplicado com base nos rótulos do cluster. Também é possível usar os ClusterSelectors para limitar quais clusters instanciam um objeto com escopo de namespace.
Um config ClusterSelector não persiste em um cluster. Na verdade, você o menciona em outro config usando uma anotação, e esse config só é aplicado a clusters que correspondam ao ClusterSelector.
Antes de usar os ClusterSelectors, cada cluster precisa ter um nome exclusivo. Você nomeia o cluster ao configurar o Config Sync Operator. É possível aplicar rótulos a cada cluster manualmente, mas é recomendável usar um config Cluster.
Depois, crie o ClusterSelector e o mencione em outro config.
Como adicionar rótulos a um cluster
Para usar os ClusterSelectors, cada cluster precisa ter um conjunto de rótulos selecionável. É possível rotular cada cluster manualmente, mas é recomendável usar um config Cluster para isso. Esses configs são armazenados no diretório clusterregistry/
do repo.
No exemplo de config Cluster a seguir, é declarado que cluster-2
tem o rótulo environment: prod
.
kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
name: cluster-2
labels:
environment: prod
Também é possível usar um config Cluster para aplicar anotações.
Como criar um ClusterSelector
O ClusterSelector escolhe somente os clusters com um determinado rótulo ou uma combinação de rótulos. Os ClusterSelectors são armazenados no diretório de nível superior clusterregistry/
no repo.
O ClusterSelector a seguir escolhe apenas os clusters com o rótulo environment: prod
.
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-env-prod
spec:
selector:
matchLabels:
environment: prod
Um ClusterSelector não terá efeito até que você o mencione em outro config.
Como mencionar um ClusterSelector
Para mencionar um ClusterSelector em outro config, defina a anotação configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME
.
Com o config a seguir, você cria um ClusterRole chamado namespace-reader
que
define um conjunto de permissões para a leitura de namespaces. Ele é instanciado apenas nos clusters que correspondem ao ClusterSelector selector-env-prod
.
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: namespace-reader
annotations:
configmanagement.gke.io/cluster-selector: selector-env-prod
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "watch", "list"]
Como limitar os clusters impactados por um config com escopo de namespace
Por padrão, o Config Sync aplica configs herdados por um namespace a esse namespace em cada cluster em que ele está incluído. Use um ClusterSelector para aplicar o config a apenas um subconjunto desses clusters.
Por exemplo, defina diferentes configurações nos clusters com base na localização geográfica deles ou dos clientes. Isso é útil em termos de localidade ou conformidade jurídica. Nos exemplos desta seção, são aplicados configs específicos de localidade somente a clusters com o rótulo location: france
.
Com o config Cluster a seguir, você adiciona um rótulo location: france
a um cluster chamado cluster-1
:
kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
name: cluster-1
labels:
location: france
É possível rotular cada cluster relevante manualmente, mas isso pode gerar erros e não é recomendado.
Crie um config ClusterSelector que mencione os rótulos que você quer selecionar. Com o ClusterConfig a seguir, você seleciona o rótulo location: france
:
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-location-france
spec:
selector:
matchLabels:
location: france
Um ClusterSelector não terá efeito até que você o mencione em outro config.
Com o config RoleBinding a seguir, você seleciona apenas os clusters que correspondem ao ClusterSelector selector-location-france
. Isso é útil, por exemplo, se uma diretriz de conformidade só permitir que os auditores examinem informações sobre clusters na região geográfica designada.
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: viewers
annotations:
configmanagement.gke.io/cluster-selector: selector-location-france
subjects:
- kind: Group
name: system:serviceaccounts:audit
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: view
apiGroup: rbac.authorization.k8s.io
Se você colocar esse config em um namespace abstrato ou em um diretório de namespace, como
namespaces/online/shipping-app-backend/
, ele será aplicado aos namespaces que o
herdarem. No entanto, isso acontece somente nos clusters com o rótulo location: france
.
A seguir
- Saiba mais sobre como configurar objetos com escopo de cluster.
- Saiba mais sobre como configurar objetos com escopo de namespace.
- Veja o guia de início rápido.