Kubelet Authentication & Authorization
Autenticação do Kubelet
Por padrão, solicitações ao endpoint HTTPS do kubelet que não são rejeitadas por outros métodos de autenticação configurados são tratadas como solicitações anônimas e recebem um nome de usuário system:anonymous
e um grupo system:unauthenticated
.
Os 3 métodos de autenticação são:
Anônimo (padrão): Use a configuração definindo o parâmetro
--anonymous-auth=true
ou no arquivo de configuração:
Webhook: Isso irá habilitar os tokens de portador da API kubectl como autorização (qualquer token válido será válido). Permita com:
garantir que o grupo de API
authentication.k8s.io/v1beta1
esteja habilitado no servidor de APIiniciar o kubelet com as flags
--authentication-token-webhook
e--kubeconfig
ou usar a seguinte configuração:
O kubelet chama a API TokenReview
no servidor API configurado para determinar informações do usuário a partir de tokens de portador
Certificados de cliente X509: Permitem autenticar via certificados de cliente X509
consulte a documentação de autenticação do apiserver para mais detalhes
inicie o kubelet com a flag
--client-ca-file
, fornecendo um pacote CA para verificar os certificados de cliente. Ou com a configuração:
Autorização do Kubelet
Qualquer solicitação que seja autenticada com sucesso (incluindo uma solicitação anônima) é então autorizada. O modo de autorização padrão é AlwaysAllow
, que permite todas as solicitações.
No entanto, o outro valor possível é webhook
(que é o que você mais encontrará por aí). Este modo irá verificar as permissões do usuário autenticado para permitir ou negar uma ação.
Observe que mesmo que a autenticação anônima esteja habilitada, o acesso anônimo pode não ter permissões para realizar qualquer ação.
A autorização via webhook pode ser configurada usando o parâmetro --authorization-mode=Webhook
ou via o arquivo de configuração com:
O kubelet chama a API SubjectAccessReview
no servidor API configurado para determinar se cada solicitação é autorizada.
O kubelet autoriza solicitações de API usando a mesma abordagem de atributos de solicitação que o apiserver:
Ação
Verbo HTTP | verbo de solicitação |
---|---|
POST | create |
GET, HEAD | get (para recursos individuais), list (para coleções, incluindo conteúdo completo do objeto), watch (para observar um recurso individual ou coleção de recursos) |
PUT | update |
PATCH | patch |
DELETE | delete (para recursos individuais), deletecollection (para coleções) |
O recurso que se comunica com a API do Kubelet é sempre nodes e o subrecurso é determinado a partir do caminho da solicitação recebida:
API do Kubelet | recurso | subrecurso |
---|---|---|
/stats/* | nodes | stats |
/metrics/* | nodes | metrics |
/logs/* | nodes | log |
/spec/* | nodes | spec |
todos os outros | nodes | proxy |
Por exemplo, a seguinte solicitação tentou acessar as informações dos pods do kubelet sem permissão:
Recebemos um Proibido, então a solicitação passou na verificação de Autenticação. Caso contrário, teríamos recebido apenas uma mensagem
Não autorizado
.Podemos ver o nome de usuário (neste caso, do token)
Verifique como o recurso era nodes e o subrecurso proxy (o que faz sentido com as informações anteriores)
Referências
Last updated