Notice
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

정보통신공학과 노선변경기

Kubernetes 6일차 어플리케이션 사용자화, 이미지 사용자화, ConfigMap, Secret, ingress(인그레스) 이용 TLS종료 Proxy 구현 본문

Sub7_Kubernetes

Kubernetes 6일차 어플리케이션 사용자화, 이미지 사용자화, ConfigMap, Secret, ingress(인그레스) 이용 TLS종료 Proxy 구현

HEONPOLI 2021. 7. 19. 22:56

7. 어플리케이션 사용자화

1) 이미지 사용자화

강사님이 만든 어플 이미지는 -port 로 포트지정이 가능함

kubectl port-forward myapp-pod-arg 8080:8088

curl http://localhost:8080 으로 접근하여 확인가능하다.

2) 환경변수 사용자화

 

3) 컨피그맵 이용 사용자화

kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl # kubectl 자동완성 해준다.

exec bash # 배쉬 다시접속해서 확인

kubectl create cm my-config1 --from-literal=key1=value1

kubectl create configmap <name> < --from-file=[key]=[value] > 의 형식

 

echo value2 > key2

kubectl create cm my-config2 --from-file=key2

파일 이름(key2) 이 키, 파일 내용(value2)이 밸류

 

echo value3 > key3.conf

key3.conf 가 키 이름이 아니라 key3 를 키이름으로 해보고 싶다면

kubectl create cm my-config3 –from-file=key3=key3.conf

 

echo "Hello World by ConfigMap" > configmap/message

kubectl create configmap myapp-message --from-file=configmap/message

파일 이름인 message 가 키이름이되고, 그 안의 내용인 helloworld 머시기가 밸류

**컨피그맵 참조 파드생성

env를 지정, valuefrom myapp-message 라는 밸류를 참조, 그중에 message key 를 참조

**컨피그 맵의 볼륨 사용

~/conf/nginx-gzip.conf 파일을 작성하여 볼륨으로 제공한다.

kubectl create cm nginx-gzip-config –from-file=conf/nginx-gzip.conf

nginx-gzip-config 라는 이름으로 컨피그맵 생성

configMap 부분에서 이름으로 지정하여 제공해준다.

nginx의 설정파일을 제공하는 것

 

kubectl port-forward nginx-pod-compress 8080:80 으로 포트 열어주고

curl -H “Accept-Encoding: gzip” -I http://localhost:8080 으로 확인가능

HAPROXY 도 이와 같은 방법으로 파일을 제공할 수 있다.

 

4) 시크릿 이용한 사용자화

키/값 저장소

컨피그맵과 다르게 BASE64로 인코딩하여 데이터를 저장한다.

개별 오브젝트당 1MiV로 제한되어 있다.

시크릿 저장 데이터 종류:

generic 키-값 형식의 임의 데이터 Opaque

docker-registry 도커 저장소 인증 정보(프라이빗 저장소 접근) kubernetes.io/dockerconfigjson

tls 인증서와 키 저장 kubernetes.io/tls

 

키는 인코딩 되지 않는다 밸류만 인코딩됨

kubectl create secret generic my-secret1 --from-literal=key1=value1

장고로 만든 어플리케이션을 프라이빗 저장소에 이미지로 올리고, 그것을 파드든 레플리카셋으로 정의해서 올릴 때 반드시 인증을 해야함 docker username, password

kubectl create secret docker-registry 머시기머시기

kubectl explain pod.spec.imagePullSecrets 여기에 뭘 지정해서 pod 생성하래

 

**key 생성, cert 파일 생성, nginx 설정파일을 cm으로 제공, nginx 파드 생성

openssl genrsa -out nginx-tls/nginx-tls.key 2048

openssl req -new -x509 -key nginx-tls/nginx-tls.key -out nginx-tls/nginx-tls.crt -days 3650 -subj /CN=myapp.example.com

kubectl create secret tls nginx-tls-secret --cert=nginx-tls/nginx-tls.crt --key=nginx-tls/nginx-tls.key

nginx 설정파일 작성하여 컨피그맵으로 제공

kubectl create cm nginx-tls-config --from-file=conf/nginx-tls.conf

시크릿, 컨피그맵을 사용하는 파드생성 <nginx-pod-https.yaml>

인증서와 키가 있는 시크릿을 볼륨, 설정파일이 있는 컨피그맵을 볼륨으로 지정

 

**인그레스를 이용한 TLS 종료 프록시 구현

TLS를 클라이언트에서 LB까지만 HTTPS를 사용하고

LB에 속한 서버들에 부하분산 할 때는 HTTP를 사용하는 것

중간에 TLS가 끊기는 것이므로 TLS termiation(TLS 종료)

 

gcp 쿠버네티스 클러스터 만들기

표준구성, asia northeast3-a,

출시채널(일반채널) 1.1909

다른거 모두 기본값으로 하고 만들기..

클라우드 쉘 활성화

 

1. GKE 실행 지금까지 학습 적용

2. Django App -> Private (Secret)

docker vm에 들어가서

docker tag [내 장고 퍼블릭 이미지] ssp04046/privat:[tag]

docker tag ssp04046/django-compose-final:v2 ssp04046/private:django

요런식으로 tagging 해주고 그냥 push하면 프라이빗에 올라감(현재 ssp04046/private 이라는 프라이빗 레포를 미리 도커허브에서 만들어놓은 상태)

 

kubectl create secret docker-registry regcred --docker-server=https://index.docker.io/v2/ --docker-username="ssp04046" --docker-password="jh14031403" --docker-email=”ssp04046@naver.com”

# secret 파일을 커맨드라인 형식으로 만들어준다. –docer-server는 공식문서를 참고한다.

https://kubernetes.io/ko/docs/tasks/configure-pod-container/pull-image-private-registry/

<my-private-reg-pod.yaml 파일을 작성하여 프라이빗 저장소의 이미지를 가져올 수 있는지 확인한다> pod가 RUNNING state에 들어가면 잘 가져온 것이다.