Pod1이 작동 중이라면 Pod1을 죽이고 Pod2를 실행시켜 업데이트하는 방식. Pod1이 죽고 Pod2가 실행되는 시간(Downtime)만큼의 빈 공간이 생긴다
#2) Rolling Update
Pod1이 1개 실행중이라면 Pod1이 실행된 상태로 Pod2를 실행한다 총 2개를 사용하는 셈 (이때 누군가는 Pod1에, Pod2에 접근할 수 있는 상태) 이후 Pod1을 삭제(이제부터 Pod2에만 접근함) 추가적인 자원을 요구하지만 Downtime이 없음
#3) Blue/Green
서비스와 연결된 pod1(컨트롤러1)이 실행 중일 때 pod2(컨트롤러 2)를 만듦 이후 서비스에 연결된 pod1을 pod2로 바꿔주면 pod2로 바꿀 수 있음(추가적인 자원을 요구하고, 서비스의 downtime 없음) 만약 pod2에 문제가 생기면 서비스에 연결된 pod만 pod1으로 바꿔주면 됨 문제가 없으면 pod1과 컨트롤러 1을 삭제해주면 됨
#4) Canary
업데이트 예정
2. Rolling Update 실습
다음과 같은 구조로 이루어져있을때 Deployment의 pod v1을 v2로 수정하면 자동으로 Rolling Update가 된다(Rolling Update가 Default)
Auto Healing (Node, Pod가 사용 가능한지 불가한지를 판단하여 새로운 노드에 새로운 파드를 만들어주는 역할)
Auto Scaling (한 파드에 과도한 요청이 있을경우 파드를 복제하여 분산시켜주는 역할)
Software Update (버전 업데이트를 쉽게할 수 있고 롤백또한 가능)
Job (일시적인 작업을 해야할경우 사용)
2. Template, Selector란?
다음 그림과 같이 Template는 컨트롤러에 pod를 설정함, 만약 파드가 죽는다면 template에 있는 파드를 재 생성함
Selector는 컨트롤러와 파드가 서비스와 파드처럼 라벨로 연결하게 해주는데 어떤 라벨을 가진 pod를 관리할건지를 의미함
3. Replicas란?
Replicas를 설정한 개수만큼 Pod를 유지하려고 한다 만약 다음과 같은 YAML파일이 작성되어 있다고 하자. replicas에 3이 적혀있으므로 컨트롤러는 파드의 개수를 3개로 유지하려 할것이고 만약 파드가 죽는다면 재생성하여 3개를 유지할 것이다 이를 활용하여 버전 업데이트가 이루어진다.
다음과 같은 도커 파일을 작성한다. 이때 server.xml과 war파일은 도커 파일이 존재하는 디렉터리 내부에 존재해야 한다.
#어떤 이미지를 기반으로 빌드하는지에 대해서 지정 node 8 사용
FROM node:8
#Dockerfile을 생성/관리하는 사람 없어도 무방
LABEL MAINTAINER dilrong "본인 이메일"
#디렉토리 생성
RUN mkdir -p /usr/src/app
#WORKDIR 설정
WORKDIR /usr/src/app
#앱 의존성 설치를 위해서 package.json 복사
COPY package*.json ./
#npm install 실행 (package.json에 의한 패키지 설치)
RUN npm install
#앱 소스 추가
COPY . .
#컨테이너에서 실행할 명령어 지정 (실행하면 기존 express에서 실행하는 port로 서버가 실행)
CMD ["npm", "start"]
HTTP는 인터넷에서 웹 서버와 사용자 브라우저간 문서를 전송하기 위한 통신 규약이다. HTTP는 정보를 텍스트로 주고받기 때문에 누군가가 네트워크 이를 가로챈다면 정보를 확인할 수 있어서 보안에 취약하다 HTTPS는 이를 암호화하여 보안상의 문제를 해결해주는 프로토콜이다
HTTPS는 새로운 프로토콜이 아닌 HTTP와 통신을 하는 소켓 부분을 SSL이나 TSL로 대체하는 것 즉 사용자는 SSL과 통신하여 암호화된 정보를 주고받는다.
HTTPS는 공개키 암호화 방식을 사용한다. 공개키 암호화 방식에는 비밀키와 공개키가 존재하는데 비밀키는 서버 쪽에 가지고 있으며 공개되어서는 안 되고, 공개키는 누구에게나 공개되어도 괜찮은 키이다. 먼저 클라이언트는 공개키를 통해 텍스트를 암호화하고 이는 비밀키로만 복호화할 수 있다 따라서 다른 사람이 정보를 가로채더라도 비밀키만 안전하다면 괜찮은 방식이다.
2. SpringBoot에 HTTPS 적용하기
#1) 사전준비
스프링 부트 2.2.5 RELEASE, Dependency로 spring Web사용
Maven 사용 (Gradle사용 가능)
JAVA 1.8, 내장 톰캣 9 사용
#2) JAVA를 이용한 인증서 만들기
Intellij 터미널에서 다음과 같이 keystore.p12라는 키를 만든다 입력해야 할 이름, 도시 등 정보는 임의로 입력한다. 인증받은 키가 아니고 로컬에서 확인하는 용도 이므로 자유롭게 입력한다. 만약 인증된 키를 사용할 경우 값을 지불하고 이용해야 한다.