Ao registrar um cluster Kubernetes externo no Container Service for Kubernetes (ACK), o componente ack-cluster-agent é executado no cluster e o conecta ao plano de controle do ACK. Todas as operações do console do ACK direcionadas ao cluster registrado passam pelo ack-cluster-agent, que roda sob uma ServiceAccount chamada ack no namespace kube-system. As permissões dessa ServiceAccount determinam quais ações o console do ACK pode executar no cluster.
Dois modos básicos de permissão estão disponíveis:
|
Modo |
Capacidades do console |
Quando usar |
|
Modo restrito |
A visibilidade de cargas de trabalho não está disponível. O gerenciamento de componentes e serviços como Managed Service for Prometheus e Simple Log Service (SLS) ocorre via onectl. |
Ambientes com privilégio mínimo |
|
Modo administrador |
Todos os recursos do console estão disponíveis |
Necessário acesso completo ao console |
Operações específicas exigem permissões adicionais: instalação de componentes, criação de pools de nós, habilitação de consultas de log ou visualização de recursos no modo somente leitura.
Pré-requisitos
Antes de começar, verifique se você tem:
A versão 1.13.1.105-g8ee9abb-aliyun ou posterior do ack-cluster-agent instalada. Para mais informações, consulte Gerenciar componentes.
Conceder permissões do modo restrito
O modo restrito exige acesso de leitura a um conjunto específico de ConfigMaps nos namespaces kube-system e kube-public. Aplique as seguintes Roles e RoleBindings ao cluster:
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: ack-agent-create-cm-role
namespace: kube-system
labels:
ack/creator: "ack"
rules:
- apiGroups:
- ""
resources:
- configmaps
verbs:
- create
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: ack-agent-update-cm-role
namespace: kube-system
labels:
ack/creator: "ack"
rules:
- apiGroups:
- ""
resources:
- configmaps
resourceNames:
- ack-agent-config
- provider
verbs:
- update
- get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: ack-agent-read-cm-role
namespace: kube-public
labels:
ack/creator: "ack"
rules:
- apiGroups:
- ""
resources:
- configmaps
resourceNames:
- kube-root-ca.crt
verbs:
- get
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: ack-agent-create-cm-rolebinding
namespace: kube-system
labels:
ack/creator: "ack"
subjects:
- kind: ServiceAccount
name: ack
namespace: kube-system
roleRef:
kind: Role
name: ack-agent-create-cm-role
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: ack-agent-update-cm-rolebinding
namespace: kube-system
labels:
ack/creator: "ack"
subjects:
- kind: ServiceAccount
name: ack
namespace: kube-system
roleRef:
kind: Role
name: ack-agent-update-cm-role
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: ack-agent-read-cm-rolebinding
namespace: kube-public
labels:
ack/creator: "ack"
subjects:
- kind: ServiceAccount
name: ack
namespace: kube-system
roleRef:
kind: Role
name: ack-agent-read-cm-role
apiGroup: rbac.authorization.k8s.io
---
No modo restrito, a visibilidade de cargas de trabalho no console do ACK não está disponível. Para gerenciar componentes e usar serviços como Managed Service for Prometheus e SLS, utilize o onectl. Ao gerenciar componentes, o onectl eleva temporariamente as permissões do cluster para administrador e as revoga quando a operação termina ou é interrompida. Para mais informações, consulte Usar onectl para gerenciar clusters registrados .
Conceder permissões do modo administrador
O modo administrador concede acesso total a todos os recursos do cluster. Aplique a seguinte ClusterRole à ServiceAccount ack:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ack-admin
labels:
ack/creator: "ack"
rules:
- apiGroups: ["*"]
resources: ["*"]
verbs: ["*"]
Conceder permissões para gerenciamento de componentes
A instalação ou atualização de componentes como terway-eniip ou logtail-ds requer permissões temporárias de administrador, pois essas operações gravam em recursos com escopo de cluster. Siga este fluxo de trabalho:
Etapa 1: Elevar para permissões de administrador
Aplique a ClusterRole de administrador mostrada em Conceder permissões do modo administrador antes de instalar ou atualizar componentes.
Etapa 2: Instalar ou atualizar o componente
Prossiga com a instalação ou atualização do componente.
Etapa 3: Restaurar permissões mínimas
Após instalar ou atualizar componentes, restaure a ClusterRole para as permissões mínimas:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ack-admin
labels:
ack/creator: "ack"
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get","list","watch"]
- apiGroups: [""]
resources: ["configmaps"]
resourceNames: ["ack-agent-config","provider"]
verbs: ["get","list","watch","update"]
- apiGroups: [""]
resources: ["configmaps"]
resourceNames: ["autoscaler-meta"]
verbs: ["get","list","watch","update"]
- apiGroups: ["*"]
resources: ["daemonsets", "deployments"]
resourceNames: ["terway-eniip","security-inspector","ack-cluster-agent","gatekeeper","ack-virtual-node","metrics-server","logtail-ds","resource-controller","aliyun-acr-credential-helper","migrate-controller","ack-kubernetes-cronhpa-controller","tiller-deploy"]
verbs: ["get", "list", "watch"]
- apiGroups: ["*"]
resources: ["daemonsets", "deployments"]
resourceNames: ["cluster-autoscaler"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: [""]
resources: ["pods","secrets"]
verbs: ["list"]
Conceder permissões para criação de pool de nós
Instalar o Terway ou criar pools de nós também exige permissões temporárias de administrador. Siga o mesmo fluxo de trabalho de elevação e restauração:
Etapa 1: Elevar para permissões de administrador
Aplique a ClusterRole de administrador mostrada em Conceder permissões do modo administrador antes de instalar o Terway ou criar pools de nós.
Etapa 2: Criar o pool de nós ou instalar o Terway
Execute a operação.
Etapa 3: Restaurar permissões mínimas
Depois de instalar o Terway ou criar pools de nós, restaure a ClusterRole para as permissões mínimas:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ack-admin
labels:
ack/creator: "ack"
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get","list","watch"]
- apiGroups: [""]
resources: ["configmaps"]
resourceNames: ["ack-agent-config","provider","autoscaler-meta","eni-config"]
verbs: ["get","list","watch","update"]
- apiGroups: ["*"]
resources: ["daemonsets", "deployments"]
resourceNames: ["terway-eniip", "cluster-autoscaler"]
verbs: ["get", "list", "watch", "update"]
Conceder permissões para consultas de log do Simple Log Service
Após habilitar o Simple Log Service (SLS) no cluster registrado, aplique a seguinte ClusterRole e ClusterRoleBinding para consultar logs no console do ACK:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ack-agent-role-log
labels:
ack/creator: "ack"
rules:
- apiGroups: [""]
resources: ["namespaces"]
verbs: ["get","list","watch"]
- apiGroups: ["apps"]
resources: ["daemonsets", "deployments"]
resourceNames: ["alibaba-log-controller", "logtail-ds", "kube-proxy-master"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["configmaps"]
resourceNames: ["alibaba-log-configuration"]
verbs: ["get","list","watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: ack-agent-binding-log
labels:
ack/creator: "ack"
subjects:
- kind: ServiceAccount
name: ack
namespace: kube-system
roleRef:
kind: ClusterRole
name: ack-agent-role-log
apiGroup: rbac.authorization.k8s.io
Conceder permissões de somente leitura
As permissões de somente leitura permitem visualizar recursos do Kubernetes no console do ACK sem fazer alterações. Aplique a seguinte ClusterRole e ClusterRoleBinding:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: ack-readonly-clusterrole
rules:
- apiGroups:
- ""
resources:
- nodes
- namespaces
- pods
- pods/log
- pods/exec
- configmaps
- endpoints
- events
- limitranges
- persistentvolumeclaims
- podtemplates
- replicationcontrollers
- resourcequotas
- serviceaccounts
- services
verbs:
- get
- list
- apiGroups:
- apps
resources:
- deployments
- daemonsets
- statefulsets
- replicasets
verbs:
- get
- list
- apiGroups:
- batch
resources:
- jobs
- cronjobs
verbs:
- get
- list
- apiGroups:
- coordination.k8s.io
resources:
- leases
verbs:
- get
- list
- apiGroups:
- discovery.k8s.io
resources:
- endpointslices
verbs:
- get
- list
- apiGroups:
- events.k8s.io
resources:
- events
verbs:
- get
- list
- apiGroups:
- extensions
resources:
- daemonsets
- deployments
- ingresses
- networkpolicies
- replicasets
verbs:
- get
- list
- apiGroups:
- networking.k8s.io
resources:
- ingresses
- networkpolicies
verbs:
- get
- list
- apiGroups:
- policy
resources:
- poddisruptionbudgets
verbs:
- get
- list
- apiGroups:
- rbac.authorization.k8s.io
resources:
- rolebindings
- roles
verbs:
- get
- list
- apiGroups:
- storage.k8s.io
resources:
- csistoragecapacities
verbs:
- get
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: ack-readonly-clusterrolebinding
labels:
ack/creator: "ack"
subjects:
- kind: ServiceAccount
name: ack
namespace: kube-system
roleRef:
kind: ClusterRole
name: ack-readonly-clusterrole
apiGroup: rbac.authorization.k8s.io