클라우드 컴퓨팅 & NoSQL/도커 & 쿠버네티스 78

API 게이트 웨이 & Google Cloud Endpoints

API 게이트 웨이What is API 게이트웨이API 게이트웨이는 API 클라이언트와 서비스 사이에 프록시 처럼 위치하여, 클라이언트로 부터 온, API 요청을 받아서, 서비스로 라우팅 하는 역할을 한다. 각각의 서비스에서 구현해야 하는 기능을 API 게이트웨이단으로 통합함으로써, 서비스 개발을 간편하게 할 수 있고, 메세지 포맷 변경이나, 플로우 컨트롤과 같은 고급 기능을 사용하여, 기존 API 호출에 추가적인 기능을 더할 수 있는 유연성을 더할 수 있게 된다. 여러가지 기능이 있겠지만, 크게 아래와 같이 5가지로 나눠볼 수 있다.인증모니터링,로깅플로우 컨트롤메시지 변경오케스트레이션(매쉬업) 인증API를 호출할때, API 호출에 대한 인증을 수행한다. 서버간의 API 통신일 경우에는 간단하게 API ..

Kong API gateway #3 - Kong on Kubernetes

오픈소스 API 게이트웨이 Kong#3 쿠버네티스 Kong조대협 (http://bcho.tistory.com) Kong KubernetesAPI 게이트웨이가 마이크로서비스의 중요 컴포넌트이다 보니, Kong이 마이크로 서비스에 적합한 K8S (aka. 쿠버네티스)에 어떻게 적용될 수 있는지가 궁금해서 아키텍쳐 관련 설명 내용을 찾아보았다. https://konghq.com/blog/kong-kubernetes-ingress-controller/ (아래 그림은, 이 동영상에서 캡춰하여 사용하였다.) 에 보면 Kong summit에서 발표된 영상이 있는데, 정리가 매우 잘되어 있다. 기본 컨셉을 먼저 요약해보자면, Kong의 리소스들은 K8S의 리소스로 등록되어 사용되게 된다. API 게이트 웨이는 Ingr..

Kong API gateway #2 - 간단한 아키텍쳐와 API 테스트

오픈소스 API 게이트웨이 Kong#2 아키텍쳐와 간단한 테스트조대협 (http://bcho.tistory.com)Kong 아키텍쳐Kong API 서버의 배포 아키텍쳐는 다음과 같다. 출처 : stackoverflow.comKong API 게이트웨이 각각 nginx 로 되어 있고, DB 모드의 경우에는 별도의 데이타 베이스 인스턴스를 사용한다. 지원되는 데이타 베이스로는 카산드라나 postgres를 사용할 수 있다. 데이타 베이스를 사용하더라도 변경된 설정은 인스턴스에 바로 반영되지 않는다. 각 인스턴스가 설정 내용을 캐슁하기 때문인데, 캐쉬가 리프레쉬되어야 설정 내용이 반영된다. 클러스터에서 Kong API 게이트웨이 인스턴스간의 로드 밸런싱을 하기 위해서는 각 인스턴스 앞에 로드밸런서를 배치 시킨다...

도커 볼륨

도커 볼륨에 대한 메모 도커 컨테이너에서 파일을 저장하게 되면 디폴트로는 도커 컨테이너 Writable 레이어에 저장된다. 컨테이너 레이어에 저장이 되기 때문에, 영속적이지 못하고 컨테이너가 내려가게 되면 지워지는 임시 저장소 이다. 컨테이너의 디스크를 컨테이너가 내려가더라도 영속적으로 저장하고 관리할 수 있는데, 이를 볼륨(Volume)이라고 한다. %docker create volume {볼륨 이름} 명령어를 이용해서 생성이 가능하다.생성된 볼륨들은 % docker volume ls 명령으로 확인이 가능하다볼륨에 대한 상세 설정을 보려면 %docker volume inspect {볼륨 이름}을 사용하면 된다. docker volume inspect myvol[ { "CreatedAt": "2019-1..

KNative Auto scaling

KNative 를 보던중에, Autoscaling 처리를 어떻게 하는지 확인해보니, 기본은 Knative instance (한 Pod 겠지) 당 처리할 수 있는 concurrent request 수를 정해놓고, 이를 넘을 경우에 auto scaling 하는 방식이다. CPU가 아니라 connection 수를 통해서 한다. containerConcurrency limits the amount of concurrent requests are allowed into the application at a given time (hard limit), and is configured in the revision template.스케일링 설정은 spec: template: metadata: autoscaling.kn..

구글 GKE 네트워크 기본 보안

1. 클러스터는 Private IP 모드로 생성이렇게 되면, Node는 External IP를 가지지 못한다. 즉 외부 접근을 막을 수 있다.In bound : Pod로 들어오는 트래픽은 Node에 External IP가 없더라도, Service를 통해서 들어올 수 있다.out bound : Cloud NAT를 설정하면 된다.2. Master Node에 대한 접근 제안Master authorized network 를 설정한후, authorized network에 master node를 사용할 (kubectl) 대역을 지정한다.

효율적인 도커 이미지 만들기 #2 - 도커 레이어 캐슁을 통한 빌드/배포 속도 높이기

효율적인 도커 이미지 만들기#2 도커 레이어 캐슁을 통한 빌드/배포 속도 높이기조대협 (http://bcho.tistory.com) 도커는 이미지 단위로 빌드를 하고 배포를 하지만, 도커의 이미지는 여러개의 레이어로 되어 있다. 아래와 같은 자바 애플리케이셔을 패키징한 도커 컨테이너 이미지가 있다고 하자FROM openjdk:8-jre-alpineARG ./target/hellospring-0.0.1-SNAPSHOT.jarCOPY ${JAR_FILE} app.jarENTRYPOINT ["java","-jar","/app.jar"] 이 이미지가 어떤 레이어로 구성되어 있는지를 보려면 %docker history {컨테이너 이미지명} 을 실행하면 이미지의 레이어를 볼 수 있는데, 각각의 명령항에 따라서 레이..

효율적인 도커 이미지 만들기 #1 - 작은 도커 이미지

효율적인 도커 이미지 만들기#1 작은 도커 이미지 만들기조대협 (http://bcho.tistory.com) 일반적으로 도커를 이용해서 자바 애플리케이션 컨테이너를 빌드하면 보통 사이즈가 500~700M 로 배우 큰 이미지가 생성된다. 이는 Ubuntu와 같은 일반 OS 이미지 위에, JDK/JRE를 설치하기 때문인데, 실제로 자바 애플리케이션만을 실행할때는 기타 툴들 (ftp,telnet, 기타 시스템 데몬)이 필요하지 않다. 도커 이미지 사이즈는 빌드와 배포 시간에 많은 영향을 주고, 쿠버네티스와 같은 컨테이너 스케쥴링 솔루션의 경우 도커 이미지가 디스크 공간을 잡아 먹기 때문에, 작은 컨테이너가 여러모로 이점이 많다. 작은 도커 이미지 만들기alpine linux는 경량화를 추구하면서 보안을 강화한..

VM 수준의 보안을 제공하는 gVisor 컨테이너 런타임

VM 수준의 보안을 제공하는 gVisor조대협 (http://bcho.tistory.com) Docker와 같은 일반적인 컨테이너 모델의 문제점은 Host Kernel을 공유하기 때문에, privilege escalation을 통해서 Host Kernel 을 접근해서 전체 시스템을 장악할 수 있다는 문제점이 있다. privilege escalation을 SeLinux나 컨테이너 정책으로 막는다고 하더라도, 버그등으로 인해서 Host Kernel 로의 접근을 허용할 수 있는 잠재적인 보안 위협이 있다.컨테이너에 비해서 VM은 하드웨어 계층 부터 가상화를 해서, 전체를 Isolation 시키기 때문에, 보안적으로는 상대적으로 우세하지만, 전체적으로 무겁다는 단점을 가지고 있다.이런 문제를 해결하기 위해서 V..