2020년 3월 25일 보안정보 스크래핑

2020년 3월 25일 보안정보 스크래핑 3월 25일 보안정보 스크래핑 ==================================================================== + 주요 취약점 - 메일전송 프로토콜을 이용한 원격 명령어 실행 주의 권고 외 1건 1. 메일전송 프로토콜을 이용한 원격 명령어 실행 주의 권고 최근 OpenSMTPD* 취약점이 발견되는 등 메일전송 프로토콜에서 원격 명령어 실행이 가능하여 주의를 권고함 공격자는 취약점을 악용하여 피해를 발생시킬 수 있으므로, 해결방안을 참고하여 조치 필요 - https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=35302 2. Django 제품 SQL Injection 취약점 보안 업데이트 권고 최근 Django*에서 SQL Injection취약점(CVE-2020-9402)을 악용할 수 있는 개념증명코드(Proof of concept, PoC)가 인터넷상에 공개되어 사용자의 보안 업데이트 필요 - https://www.krcert.or.kr/data/secNoticeView.do?bulletin_writing_sequence=35301 ==================================================================== + 취약점 - Apple Safari 취약점 1. Apple Safari 취약점 Apple Safari security bypass CVE-2020-3885 - https://exchange.xforce.ibmcloud.com/vulnerabilities/178339 Apple Safari security bypass CVE-2020-3887 - https://exchange.xforce.ibmcloud.com/vulnerabilities/178338 Apple Safari inform

쿠버네티스(kubernetes) example - Python Django 웹 페이지 배포하기

쿠버네티스(kubernetes) example - Python Django 웹 페이지 배포하기

꿈 많은 사람의 이야기

이수진의 블로그 이수진의 블로그 2020. 3. 22. 19:53

포스팅 개요

이번 포스팅은 쿠버네티스(kubernetes)를 활용하는 방법인 예시(example)를 보여주는 글입니다.

특히, 쿠버네티스(kubernetes)를 활용하여 Python Django를 deploy(배포)하는 example입니다.

본 글은 아래와 같은 글들을 참고하여 작성하였습니다.

쿠버네티스에 대해서 굉장히 자세히 설명된 포스팅

https://subicura.com/2019/05/19/kubernetes-basic-1.html

포스팅 본문

쿠버네티스(kubernetes)에 대한 설명은 처음에 개요에서 소개한 맨 처음 블로그에서 굉장히 자세히 설명되어 있습니다. 쿠버네티스에 대해 자세히 궁금하시다면 해당 글을 꼭 참고하시길 바랍니다.

본 글에서는 기본적인 개념만 정리하고 넘어갈게요

쿠버네티스( kubernetes) 개요

쿠버네티스는 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼이다

K8S로 줄여서 부르기도 한다

컨테이너 오케스트레이션(Container Orchestraion) 기능을 제공한다 컨테이너들 사이의 배포, 접속 등을 관리 서비스간 연결을 쉽게 제공(다수의 서버를 하나로 묶거 적당한 서버를 선택해 APP을 배포하거나 등)

하나의 클러스터를 논리적으로 구분하여 사용 가능 (Namespace)

Pod 쿠버네티스에서 배포할 수 있는 가장 작은 단위 한 개 이상의 컨테이너와 스토리지 등의 속성을 가짐 Pod에 속한 컨테이너는 스토리지와 네트워크를 공유 : 서로 localhost로 접근할 수 있음

ReplicaSet Pod를 여러 개 복제하여 관리하는 오브젝트

master-node 구조 master 전체 클러스터 관리 API Server, etcd 등을 가지고 있음 node 컨테이너가 배포되는 곳 마스터 서버와 통신하면서 필요한 Pod를 생성하고 네트워크, 볼륨을 생성 kubelet : 노드에 할당된 Pod의 생명주기 관리. Pod를 생성하고 Pod 안의 컨테이너에 이상이 없는지 확인

kubectl : 명령행 도구

즉, 이러한 쿠버네티스(kubernetes)를 활용하면 기존에 Docker 등을 활용해 만든 Container들을 쉽고 빠르게 관리할 수 있고 배포할 수 있다는 의미입니다.

kubernetes를 이용해서 Django 배포하기

그러면 이제 Kubernets를 이용해서 Python 웹 프레임워크인 Django 웹 서버를 배포해 보겠습니다.

먼저, 로컬에 django 프로젝트를 하나 테스트용으로 만들어보겠습니다.

django-admin startproject kubeDjango 명령어로 kubeDjango 프로젝트를 시작합니다.

이렇게 만들어진 Django를 python manage.py runserver 명령어를 활용해 실행시켜줍니다.

그러면 http://127.0.0.1:8000/ 이곳에 starting development server가 되었다고 나옵니다. 그럼 웹 브라우저를 열어서 해당 주소를 입력해서 들어가면 아래와 같은 화면이 나올 것입니다.

이렇게 나오는 Django 서버를 kubernetes를 활용해서 배포해보려고 합니다.

Dockerfile 만들기

먼저, kubernetes에서 활용될 Container를 만들어야 합니다. Container는 Docker를 활용해서 만들겠습니다.

아래와 같이 Dockerfile을 하나 만든 후 내용을 삽입합니다.

Python3을 활용하며 /code라는 디렉토리를 만들고 거기서 진행한다고 표시합니다. 이후 requirements.txt를 실행하고 python manage.py runserver를 실행하도록 합니다.

그러면 requirements.txt에는 어떤 내용이 들어가있을까요? 아래와 같이 되어있습니다.

우리는 Django를 띄어야 하니까, Django를 설치하도록 합니다.

이렇게 만들어진 환경을 docker build 명령어로 build 해주고 image를 생성합니다.

위와 같은 명령어를 입력하고 조금 시간이 지나면

아래와 같은 사진처럼 결과가 나오게 될 것입니다.

이제 Docker image가 만들어졌는지 확인해봅니다.

제대로 잘 되었다면 docker image라는 명령어를 입력했을 때 build 당시 지정했던 이름의 image가 있을겁니다.

kubernetes yml 파일 생성

이제 Docker image를 하나 생성했습니다. 다음으로는 kubernetes에서 사용할 yml 파일을 명시해주면 됩니다.

저는 쿠버네티스(kubernetes) 환경에 Django를 배포할 예정입니다. 그래서 아래 사진과 같은 내용을 작성했습니다.

kubernetes 이름과 image에 대한 정보를 아래 형식에 맞추어서 넣어주면 됩니다.

kubernetes에 yml 파일 적용

위와 같이 yml 파일을 만들었으면 이제 kubernetes에 적용하면 됩니다.

쿠버네티스(kubernetes)에 적용하는 방법은 kubectl을 활용하면 됩니다. kubectl은 kubernetes와 통신할 수 있도록 지원해주는 명령행 도구입니다.

kubectl apply -f deployment.yml 을 통해 kubernetes에 해당 yml 파일을 적용한다고 명령어를 입력해줍니다.

이상이 없으면 created 되었다고 나옵니다.

이 상태에서 kubectl get pods를 입력하게 되면 아래 사진과 같이 pods 정보가 나오게 됩니다.

이 상태로 진행하게 되면, 해당 kubernetes에 적용된 Django 페이지를 확인할 수 없습니다. 왜냐하면, 외부 서비스와 연동이 되어 있지 않기 때문입니다.

따라서 kubectl expose 명령어로 deploy 해주면서 동시에 type을 설정해줘야합니다.

저는 deploy로 expose해주고 NodePort로 노출하려고 합니다. (로컬에서만 되도록)

위 명령어를 실행하고 나서 kubectl get service 명령어를 입력하면 아래와 같이 나오는 것을 확인할 수 있을겁니다.

kubernetes 연동 확인

자! 이제 웹 페이지를 열어보면

위와 같은 화면을 볼 수 있을겁니다.

번외. 만약, docker hub 이미지를 쿠버네티스(kubernetes)에서 활용하고 싶다면?

Docker image는 항상 local에 있는 것이 아닙니다. AWS를 사용한 Container Registry(컨테이너 레지스트리) 공간이나, Docker hub, GCP에서 제공해주는 공간 등에 Docker image가 있을 수도 있습니다. 그러면 이런 것은 kubernetes에서 어떻게 활용할 수 있을까요?

아래와 같이 docker image를 하나 생성하고 docker hub에 push 했다고 가정해봅니다.

그럼 이제 Docker hub에 lsjsj92/kubernetes-django-soojin:latest 라는 이름으로 올라가져 있는 상태입니다.

이 Docker image를 쿠버네티스(kubernetes)에서 사용하고 싶으면 아래와 같이 yml 파일에서 image 부분에

올라간 주소를 넣어주면 됩니다. 간단하죠?

from http://lsjsj92.tistory.com/578 by ccl(A) rewrite - 2020-03-22 19:54:14

댓글

이 블로그의 인기 게시물

Django Rest Api 참고

Elasticsearch-dsl 삽질 복기(1)

django 설치 방법