정보통신공학과 노선변경기
Kubernetes 6일차 어플리케이션 사용자화, 이미지 사용자화, ConfigMap, Secret, ingress(인그레스) 이용 TLS종료 Proxy 구현 본문
Kubernetes 6일차 어플리케이션 사용자화, 이미지 사용자화, ConfigMap, Secret, ingress(인그레스) 이용 TLS종료 Proxy 구현
HEONPOLI 2021. 7. 19. 22:567. 어플리케이션 사용자화
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에 들어가면 잘 가져온 것이다.