본문 바로가기

분류 전체보기

(132)
AWS SSM(Session Manager)을 이용하여 Pem key 필요 없이 AWS EC2에 접속하는 방법 AWS EC2를 생성하여 이용하다 보면, ssh 접속을 위해 pem key를 발급받아야 한다. 아니면 기존에 사용하던 pem key를 그대로 사용하기도 한다. 이런 방식은 pem key가 탈취될 경우 누구든지 AWS EC2에 접속하게 될 수 있기 때문에 보안상 굉장히 위험할 수 있다. 이런 보안 위험상황을 방지하기 위해서 AWS에서는 Session Manager(이하 SSM)라는 서비스를 제공한다. 이 서비스를 이용하면 pem key 없이도 ssh 접속이 가능하며, ssh 접속을 수행하는 클라이언트 PC와 EC2 인스턴스 사이의 모든 통신은 TLS 1.2 방식으로 패킷이 암호화되어 주고받게 된다. 게다가 Private subnet에 존재하는 EC2 인스턴스, 즉 Public ip를 할당받지 않은 EC2 ..
외부에서 Docker 컨테이너로 명령어 날리는 방법 간혹 Docker를 사용하다보면, 컨테이너 내부에서 리눅스 명령어를 실행해야 하는 일이 있다. 이 때, 직접 Docker 컨테이너에 docker exec 명령어로 접속하여 명령어를 실행할 수도 있지만, 컨테이너 내부에 설치되어 있지 않은 라이브러리를 이용해야 할 수도 있고, 컨테이너로 직접 들어가는 작업이 번거로울 수 있다. 따라서 컨테이너를 띄우는 주체인 워커 노드에서 직접 Docker 컨테이너로 명령을 실행(주입) 시킬 수 있는 방법을 알아보자. 먼저 Docker 컨테이너의 ID가 필요하다. Docker 컨테이너의 ID는 아래와 같이 찾을 수 있다. $ sudo docker ps -a | grep {내가 찾으려는 컨테이너 명} # 예) $ sudo docker ps -a | grep nginx 41e..
SELinux에서 Nginx 사용시 proxy_pass 안될 때 해결법 SELinux 계열 OS를 사용하면서, Nginx를 프록시로 세팅해서 사용할 때 proxy_pass가 안될 수도 있다. 이에 대한 에러 코드는 /var/log/nginx/error.log를 확인해보면 자세하게 원인을 파악해 볼 수 있다. 2020/07/18 04:08:04 [crit] 312089#312089: *5 connect() to 127.0.0.1:8080 failed (13: Permission denied) while connecting to upstream, client: 123.123.123.12, server: localhost, request: "POST /hello HTTP/1.1", upstream: "http://127.0.0.1:8080/hello", host: "test.he..
AWS에서 사용하고 있는 IP CIDR 확인하는 법 json 파일로 확인 : linux shell에서 명령어로 확인 : $ curl https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.region=="ap-northeast-2") | select(.service=="AMAZON") | .ip_prefix' json 파싱을 위해서 jq 라이브러리가 필요함. → jq 라이브러리가 없다면 아래 명령어로 설치 $ sudo yum install jq 혹은 $ sudo apt-get install jq 참고 AWS IP address ranges [1] AWS IP address ranges notifications - https://docs.aws.amazon.com/gener..
Argo CD Webhook(with Bitbucket) Argo CD에서는 기본적으로 3분 뒤 Git Repository를 폴링하여 새로운 manifest의 업데이트를 감지한다. 이런 지연 시간이 맘에 안든다면, Argo CD API 서버가 Git Repository의 Webhook 이벤트를 수신하도록 구성할 수 있다. Argo CD는 Github, GitLab, Bitbucket, Bitbucket Server 및 Gogs의 git webhook 알림을 지원한다. 이번 글에서는 Bitbucket Webhook 이벤트를 트리거하여 Argo CD Sync를 자동으로 하는 방법을 알아본다. 사전 준비사항은 아래와 같다. kubectl이 설치되어 있어야 한다. Argo CD 대시보드가 있어야 한다.(Argo CD가 설치되어 있어야 한다.) Argo CD에 Webh..
쿠버네티스 Pod의 우아한 셧다운(Graceful shutdown of Pod with Kubernetes) 쿠버네티스에서 새로운 버전의 Pod를 배포할 때, blue-green 방식으로 Rolling update된다. 따라서 기존 Pod를 삭제하고 새로운 Pod로 트래픽을 절체하게 된다. 이 때, 기존 Pod 내부에서 돌아가고 있는 어플리케이션(예를 들어 백엔드 어플리케이션)의 Task가 모두 완료되지 않은 상태에서 기존 Pod를 삭제하게 된다면, 해당 Task 혹은 세션이 만료되지 않은 상태이기 때문에 애플리케이션 레이어의 네트워크 에러 및 장애가 발생할 수 있다. 이는 굉장히 위험할 수 있기 때문에(결제와 관련된 Task의 경우) 반드시 기존 Task를 모두 완료한 상태에서 기존 Pod를 삭제하도록 해야 한다. 일단 Pod의 종료 이벤트에 대해서 알아보자. 참고 Pod의 종료 이벤트 순서는 Pod를 시작하..
Mysql 특정 요일의 날짜 값 구하는 쿼리 작성법 (예: 저번주 토요일, 이번주 월요일) 만약에 저번주 금요일 오후 17:30분을 구하고자 한다면 Mysql의 WEEKDAY()라는 함수를 사용하여 구할 수 있다. WEEKDAY()의 특징은 아래와 같다. 0 : 월요일 1 : 화요일 2 : 수요일 3 : 목요일 4 : 금요일 5 : 토요일 6 : 일요일 비슷한 함수로 DAYOFWEEK()라는 함수가 있다. 이 함수는 WEEKDAY()와 다르게 아래와 같이 요일 값이 계산된다. 1 : 일요일 2 : 월요일 3 : 화요일 4 : 수요일 5 : 목요일 6 : 금요일 7 : 토요일 특정 요일의 날짜 값을 가져오기 위해서는 DAYOFWEEK()가 아닌 WEEKDAY()를 사용해야 한다. 왜냐하면 특정 요일의 날짜를 가져오기 위해서 한 주가 지나갈 때 월요일 부터 새롭게 계산이 되어야 하는데 DAYOFW..
kubernetes Pod의 진단을 담당하는 리소스 : probe 프로브(Probe)는 컨테이너에서 kubelet에 의해 주기적으로 수행되는 진단(diagnostic)이다. 진단을 수행하기 위해서, kubelet은 컨테이너에 의해서 구현된 핸들러를 호출한다. 핸들러에는 다음과 같이 세 가지 타입이 있다. ExecAction : 컨테이너 내에서 지정된 명령어를 실행한다. 명령어 상태 코드 0으로 종료되면 진단이 성공한 것으로 간주한다. TCPSocketAction : 지정된 포트에서 컨테이너의 IP 주소에 대해 TCP 검사를 수행한다. 포트가 활성화되어 있다면 진단이 성공한 것으로 간주한다. HTTPGetAction : 지정된 포트 및 경로에서 컨테이너의 IP 주소에 대한 HTTP Get 요청을 수행한다. 응답의 상태코드가 200 보다 크고 400 보다 작으면 진단이 성..