Esta página explica como configurar clusters e objetos com âmbito de cluster. Também pode ler sobre a configuração de espaços de nomes e objetos com âmbito de espaço de nomes.
Configure clusters e objetos com âmbito de cluster
Nos repositórios não estruturados, pode organizar as configurações para clusters e objetos com âmbito de cluster da forma mais conveniente para si. Todas as configurações organizadas desta forma aplicam-se a todos os clusters inscritos no Config Sync.
Nos repositórios hierárquicos, todas as configurações dos clusters e dos objetos com âmbito de cluster estão localizadas no diretório cluster/
. Todas as configurações em cluster/
aplicam-se a todos os clusters
inscritos no Config Sync.
Configure CustomResourceDefinitions
A sincronização de configuração permite-lhe sincronizar CustomResourceDefinitions (CRDs) da mesma forma que sincronizaria qualquer outro recurso. Existem alguns aspetos a ter em conta ao sincronizar CRDs:
Os CRDs em repositórios hierárquicos, mesmo quando declaram um recurso personalizado com espaço de nomes, têm de ser colocados no diretório
cluster/
.As atualizações aos CRDs e aos respetivos CustomResources não ocorrem por nenhuma ordem previsível. Se modificar CRDs e os CustomResources correspondentes no mesmo commit, não se espera que as atualizações de CRDs ocorram antes das atualizações de recursos personalizados. Isto pode fazer com que o
nomos status
comunique um erro transitório durante um breve período, até que o CustomResource e o CRD estejam presentes no cluster.O Config Sync não permite a remoção de um CRD se algum CustomResource no repositório depender dele. Para remover um CRD, também tem de remover o respetivo CustomResource. Recomendamos que os remova ambos na mesma confirmação para o repositório.
Pode sincronizar um CustomResource sem sincronizar o respetivo CRD, desde que possa garantir que o CRD já existe no cluster.
Limite os clusters que uma configuração afeta
Por predefinição, o Config Sync aplica uma configuração a todos os clusters inscritos. No entanto, se precisar de aplicar uma configuração apenas a um subconjunto de clusters, pode adicionar uma anotação cluster-name-selector ou uma configuração ClusterSelector ao seu repositório.
A anotação cluster-name-selector
oferece uma forma simples de especificar um subconjunto de clusters ao qual aplicar uma configuração. Esta opção só suporta a seleção de clusters por nomes.
O objeto ClusterSelector
suporta a seleção de clusters por etiquetas, mas requer configurações mais complexas.
Configure com a anotação cluster-name-selector
Pode aplicar uma configuração a um subconjunto de clusters com a anotação configsync.gke.io/cluster-name-selector
. Pode usar esta anotação para aplicar uma configuração a um conjunto de clusters, indicados pelos nomes dos clusters.
O valor da anotação é uma lista separada por vírgulas de nomes de clusters de destino.
Pode aplicar a anotação a objetos com âmbito de cluster e objetos com âmbito de espaço de nomes. Os objetos de espaço de nomes são selecionados quando a anotação corresponde ao nome do cluster e quando o espaço de nomes ao qual os clusters pertencem também está selecionado.
Selecione um único cluster
A configuração seguinte cria uma função denominada namespace-reader
que define um conjunto de autorizações para ler espaços de nomes. Esta função só é aplicada no cluster que tem o nome cluster-1
.
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: my-namespace
name: namespace-reader
annotations:
configsync.gke.io/cluster-name-selector: cluster-1
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "watch", "list"]
Selecione uma lista de clusters
A configuração seguinte cria a mesma função que no exemplo anterior, mas esta função só é aplicada nos clusters com o nome cluster-1
, cluster-2
ou cluster-3
.
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: my-namespace
name: namespace-reader
annotations:
configsync.gke.io/cluster-name-selector: cluster-1,cluster-2,cluster-3
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get", "watch", "list"]
Configure através do objeto ClusterSelector
Um ClusterSelector é um tipo especial de configuração que usa labelSelectors do Kubernetes. Pode usar um ClusterSelector para limitar os clusters aos quais uma determinada configuração se aplica, com base nas etiquetas do cluster. Também pode usar ClusterSelectors para limitar os clusters que instanciam um objeto com âmbito de espaço de nomes.
Tal como outros labelSelectors, os ClusterSelectors funcionam com a lógica E. Uma vez que os ClusterSelectors usam a lógica AND, os objetos só são selecionados quando correspondem a todas as etiquetas que definir.
Uma configuração ClusterSelector não persiste num cluster. Em vez disso, faz referência à mesma noutra configuração através de uma anotação, e essa configuração aplica-se apenas aos clusters que correspondem ao ClusterSelector.
Antes de poder usar ClusterSelectors, cada cluster tem de ter um nome exclusivo e um conjunto de etiquetas que podem ser selecionadas. Os metadados do cluster são especificados numa configuração do cluster na sua fonte de informações verdadeiras.
Em seguida, adiciona etiquetas a um cluster, cria o ClusterSelector e, depois, faz referência ao mesmo noutra configuração.
Adicione etiquetas a um cluster
Para usar ClusterSelectors, cada cluster tem de ter um conjunto de etiquetas que podem ser selecionadas. Em repositórios não estruturados, as configurações de clusters podem ser armazenadas arbitrariamente no diretório de configuração ou nos respetivos diretórios descendentes.
Em repositórios hierárquicos, as configurações de clusters são armazenadas no diretório clusterregistry/
.
Para aplicar configurações a um cluster, o campo metadata.name
do Cluster config
tem de corresponder ao campo
clusterName
do seu objeto ConfigManagement.
A configuração do cluster de exemplo seguinte declara que cluster-2
tem as etiquetas environment: prod
e location: central
.
kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
name: cluster-2
labels:
environment: prod
location: central
Também pode aplicar anotações através de uma configuração de cluster.
Crie um ClusterSelector
Um ClusterSelector seleciona apenas clusters com uma determinada etiqueta ou combinação de etiquetas. Em repositórios não estruturados, os ClusterSelectors podem ser armazenados
arbitrariamente no diretório de sincronização ou nos respetivos diretórios descendentes. Nos repositórios hierárquicos, os ClusterSelectors são armazenados no diretório clusterregistry/
de nível superior no repositório.
O ClusterSelector seguinte seleciona apenas clusters com a etiqueta environment: prod
.
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-env-prod
spec:
selector:
matchLabels:
environment: prod
O ClusterSelector seguinte seleciona todos os clusters com as etiquetas location: central
ou location: west
.
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-central-or-west
spec:
selector:
matchExpressions:
- key: location
operator: In
values:
- central
- west
Um ClusterSelector não tem efeito até o referenciar noutra configuração.
Faça referência a um ClusterSelector
Para fazer referência a um ClusterSelector noutra configuração, defina a anotação
configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME
.
A configuração seguinte cria um ClusterRole denominado namespace-reader
que
define um conjunto de autorizações para ler espaços de nomes. Este ClusterRole só é
instanciado em clusters que correspondem ao selector-env-prod
ClusterSelector.
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"]
Limite os clusters que uma configuração com âmbito de espaço de nomes afeta
Por predefinição, o Config Sync aplica as configurações herdadas por um espaço de nomes a esse espaço de nomes em cada cluster onde existe. Pode usar um ClusterSelector para aplicar a configuração apenas a um subconjunto desses clusters.
Por exemplo, pode configurar os clusters de forma diferente com base na respetiva localização geográfica ou na localização geográfica dos respetivos clientes. Esta configuração pode ser útil para a localização ou para a conformidade legal. Os exemplos nesta secção aplicam configurações específicas da região apenas a clusters com a etiqueta location: france
.
A configuração do cluster seguinte adiciona uma etiqueta location: france
a um cluster denominado cluster-1
:
kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
name: cluster-1
labels:
location: france
Crie uma configuração ClusterSelector que faça referência às etiquetas que quer selecionar. A ClusterConfig seguinte seleciona a etiqueta location: france
:
kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
name: selector-location-france
spec:
selector:
matchLabels:
location: france
Um ClusterSelector não tem efeito até que faça referência ao mesmo noutra configuração.
A configuração RoleBinding seguinte seleciona apenas clusters que correspondem ao
selector-location-france
ClusterSelector. Esta configuração pode ser útil, por exemplo, se uma diretriz de conformidade apenas permitir que uma conta de serviço específica veja informações sobre clusters na respetiva 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:foo
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: view
apiGroup: rbac.authorization.k8s.io
Se colocar esta configuração num espaço de nomes abstrato ou num diretório de espaços de nomes, como namespaces/eng
, é aplicada aos espaços de nomes que a herdam, mas apenas em clusters com a etiqueta location: france
.
O que se segue?
- Saiba mais sobre a configuração de espaços de nomes e objetos com âmbito de espaço de nomes