Identificando Problemas de Permissão de Volume
Nesta etapa, criaremos um cenário que demonstra problemas comuns de permissão de volume no Kubernetes. Esses problemas normalmente ocorrem ao usar volumes HostPath ou volumes persistentes, onde as permissões do sistema de arquivos não correspondem ao ID do usuário em execução no contêiner.
Compreendendo o Problema
Quando um contêiner é executado como um usuário não-root, mas tenta acessar um volume pertencente ao root (ou outro usuário), erros de permissão negada podem ocorrer. Este é um problema comum em ambientes de produção, onde a execução de contêineres como usuários não-root é uma prática recomendada de segurança.
Criando um Volume HostPath com Problemas de Permissão
Vamos criar um pod que tenta acessar um volume HostPath com propriedade root:
- Crie um arquivo YAML para a configuração do nosso pod:
cd ~/project/k8s-volume-demo
nano hostpath-pod.yaml
- Copie o seguinte conteúdo para o arquivo:
apiVersion: v1
kind: Pod
metadata:
name: hostpath-pod
spec:
containers:
- name: container-1
image: ubuntu:22.04
command:
[
"/bin/bash",
"-c",
"while true; do echo 'Trying to write' >> /data/output.txt; sleep 10; done"
]
volumeMounts:
- name: host-data
mountPath: /data
securityContext:
runAsUser: 1000 ## Run as non-root user
volumes:
- name: host-data
hostPath:
path: /home/labex/project/k8s-volume-demo/data
type: Directory
-
Salve o arquivo (pressione Ctrl+X, depois Y, depois Enter).
-
Crie o pod em seu cluster Kubernetes:
kubectl apply -f hostpath-pod.yaml
- Aguarde um momento e, em seguida, verifique o status do pod:
kubectl get pods
- Você deve ver que o pod está em execução, mas se verificarmos os logs, podemos ver erros:
kubectl logs hostpath-pod
Você pode ver erros de permissão negada como:
bash: /data/output.txt: Permission denied
- Vamos confirmar o problema verificando as permissões em nosso diretório host:
ls -la ~/project/k8s-volume-demo/data
Você deve ver uma saída como:
total 12
drwxr-xr-x 2 root root 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw-r--r-- 1 root root 19 Jan 1 12:00 test.txt
O diretório e os arquivos pertencem ao root, mas nosso contêiner está sendo executado como ID de usuário 1000. Essa incompatibilidade causa os erros de permissão negada.
Compreendendo os IDs de Usuário e Grupo em Contêineres
No Kubernetes, os contêineres podem ser executados como IDs de usuário específicos através da configuração securityContext. Em nosso exemplo:
securityContext:
runAsUser: 1000 ## Run as non-root user
Isso informa ao Kubernetes para executar o processo do contêiner como ID de usuário 1000, que não tem permissão para escrever nos arquivos pertencentes ao root.
Limpeza
Antes de passarmos para a próxima etapa, vamos excluir o pod:
kubectl delete pod hostpath-pod
Na próxima etapa, exploraremos soluções para esses problemas de permissão.