SSH | kubectl exec | |
---|---|---|
git 인증 | o | x |
secret 환경 변수 | x | o |
git 인증
이유
SSH를 사용하면 로컬 컴퓨터의 SSH 키를 사용하여 Pod에 연결하고 해당 키는 Git 등의 서비스에 대한 인증을 처리 반면에 kubectl exec 명령을 사용하면 Pod 내부에서 명령을 실행하므로 Pod 내부의 환경 변수, 특히 git 관련 환경 변수가 필요
해결법
kubectl exec로 Pod에 접근하면 Pod 내부의 Git 설정에 대한 환경 변수를 따로 설정해줘야 함. 이를 위해서는 kubectl exec 명령을 실행할 때 "-e" 플래그를 사용하여 Git 관련 환경 변수를 전달
kubectl exec -it <pod-name> -c <container-name> -- bash -c "export GIT_COMMITTER_NAME='<git-username>'; export GIT_COMMITTER_EMAIL='<git-email>'; bash"
환경 변수
이유
SSH로 pod에 연결하는 경우, SSH 클라이언트가 로컬 머신에서 실행. 이 경우, SSH 클라이언트는 k8s pod에 직접 연결되는 것이 아니라 pod의 환경 변수를 직접 사용할 수 없음.
해결법
SSH 클라이언트에서 전달한 환경 변수를 수동으로 정의
sshd config 파일에서 PermitUserEnvironment
enable 해 놓고 ~/.ssh/environment
file 사용
echo "Foo=Bar" > sshenv
echo "Joe=37" >> sshenv
scp sshenv user@server:~/.ssh/environment
ssh user@server myscript