Descobrir quem fez o quê nos recursos do cluster. Por exemplo: quem pausou um deploymentconfig
?
Caso de uso
Se alguém pausar um dc
, algo como oc rollout pause dc/app-master
com o nível de log padrão não é possível saber quem fez essa operação.
Vamos ver como é possível rastrear isso.
Níveis de log
O Openshift possui 4 níveis de log: Default
, WriteRequestBodies
, AllRequestBodies
e None
. O nível setado por padrão é o Default
.
Para listar alterações é suficiente definir para WriteRequestBodies
.
Para mais dealhes sobre cada nível de log ver aqui.
Alterando o nível de log
Basta ditar o APIServer
e alterar o valor do path spec.audit.profile
para WriteRequestBodies
.
oc edit apiserver cluster
Salvar e sair, em seguida a configuração começará a ser aplicada e isso pode levar um tempo. Para monitorar que nós do cluster já estão com a nova configuração, executar:
oc get kubeapiserver -o=jsonpath='{range .items[0].status.conditions[?(@.type=="NodeInstallerProgressing")]}{.reason}{"\n"}{.message}{"\n"}'
Pesquisando nos logs
São três tipos de log, OpenShift API server logs, Kubernetes API server logs e OpenShift OAuth API server logs.
O local deles pode ser cosultado assim, respectivamente:
# OpenShift API server logs
oc adm node-logs --role=master --path=openshift-apiserver/
# Kubernetes API server logs
oc adm node-logs --role=master --path=kube-apiserver/
# OpenShift OAuth API server logs
oc adm node-logs --role=master --path=oauth-apiserver/
Os arquivos de log podem ser visualizados assim, respectivamente:
# OpenShift API server logs
oc adm node-logs <node_name> --path=openshift-apiserver/<log_name>
# Kubernetes API server logs
oc adm node-logs <node_name> --path=kube-apiserver/<log_name>
# OpenShift OAuth API server logs
oc adm node-logs <node_name> --path=oauth-apiserver/<log_name>
Cenário de teste
Vamos pesquisar nos logs. Imagine que:
- Alguém pausou um
dc
, ex:oc rollout pause dc/app-master
- Existem 3 nós do Openshift de acordo com o comando executado anteriormente, esse:
oc adm node-logs --role=master --path=xxx
Basta pesquisar em todos os audit.log
. No caso vamos pesquisar pela palavra pause. Seria algo como:
oc adm node-logs control-plane-0 --path=openshift-apiserver/audit.log | grep -i pause; \
oc adm node-logs control-plane-1 --path=openshift-apiserver/audit.log | grep -i pause; \
oc adm node-logs control-plane-2 --path=openshift-apiserver/audit.log | grep -i pause; \
oc adm node-logs control-plane-0 --path=kube-apiserver/audit.log | grep -i pause; \
oc adm node-logs control-plane-1 --path=kube-apiserver/audit.log | grep -i pause; \
oc adm node-logs control-plane-2 --path=kube-apiserver/audit.log | grep -i pause; \
oc adm node-logs control-plane-0 --path=oauth-apiserver/audit.log | grep -i pause; \
oc adm node-logs control-plane-1 --path=oauth-apiserver/audit.log | grep -i pause; \
oc adm node-logs control-plane-2 --path=oauth-apiserver/audit.log | grep -i pause
E então teremos um json que represena a linha de log, com informações como:
- ip que fez a alteração
- que recurso foi alerado
- o que do recurso foi alterado
- quem alterou
- horário da alteração
- etc
Abaixo um exemplo de log:
Notas / Dicas 📋 ⚠️
- Aumentar a verbosidade do log também faz consumir mais largura de banda de rede, disco e CPU.
- Configure para que os logs de auditoria possam ser consumidos pelo Kibana, facilitando assim a consulta.