SlideShare a Scribd company logo
Ch7. Configmaps and
Secrets
Hongmin Park
Configure apps
1. Passing command-line args to containers
2. Setting custom env variables for each containers
3. Mounting conf files by a special type of volume
Passing command-line args
- 차이 : command is invoked inside a shell or not
- shell : 사용자와 커널 사이의 인터페이스를 감싸는 층. sh. GUI/CLI 형태.
- shell 을 타고 안타고 큰 차이가 있나?
- -> 큰 차이는 없으나 shell 을 굳이 탈필요 없으므로 exec form 권고.
ENTRYPOINT ["node", "app.js"] ENTRYPOINT node app.js
Setting environment var
- .yaml 내에 container level의 env절 추가
- Don’t forget that in each container, Kubernetes also automatically exposes environment variables for each
service in the same namespace. These environment variables are basically auto-injected configuration.
- 하드코딩의 단점 : 운영/개발 따로 작성해야함. 환경마다 pod def를 따로 작성
해야됨.
Configmap
- 변수를 따로 object로 관리.
- key:value 형식.
- 필요에 따라 container 의 환경변수로 등록하거나 volume 붙일수도.
- namespace 분리를 통해 아래처럼 같은 ConfigMap/pod 에서 환경구성 다르게
가능.
Configmap
- 변수를 따로 object로 관리.
- key:value 형식.
- 필요에 따라 container 의 환경변수로 등록하거나 volume 붙일수도.
- namespace 분리를 통해 동일 ConfigMap 이름, pod 에서 환경구성 다르게 가
능.
configmap 생성 방식의 조합
- multiple source 에서 생성 가능
Configmap - map to container
1. 컨테이너의 환경 변수로 등록
- valueFrom: / envFrom: 으로 변수 일부 or 변수 전체 container 에 매핑 가능.
Configmap - map to container
2. command-line argument 로 넘기기
- ConfigMap의 변수를 바로 불러 쓰는 것은 불가능
- yaml에서 변수 정의 후 사용
Configmap - map to container
3. 전체 파일을 configMap volume 으로 붙이기
- ConfigMap 의 각 요소를 각 파일로 생성함
- 컨테이너 내의 프로세스에서는 파일을 읽어 변수 가져옴.
컨테이너 내 설정파일이 mount 되어있는 것 확인 가능.
- 주의: 기존에 /etc/nginx/conf.d 경로에 있던 파일은 hide됨.
- subpath 로 mount 가능.
Configmap - update config
- Configmap resource 를 수정하면 연결된 container들도 자동 업데이트됨.
- 컨테이너에 mount된 Volume은 실제로 symbolic link 로 되어있고, Configmap
이 업데이트되면 symbolic link가 바뀜.
- Configmap 을 수정할 때: 수정 후 pod이 reload되지 않으면 수정본이 먹히지
않기 때문에, 수정 전에 생성된 pod과 수정 후에 생성된 pod 사이에 차이 발생
가능.
Secrets
- Secrets: Configmap 같은 resource
- key:value 구조
- container에 environment var 로 줄 수 있음.
- volume 으로 줄 수 있음
- Secret을 필요로 하는 pod을 띄우는 node에만 공개됨.
- memory에만 저장. 물리 disk에는 No.
- k8s v1.7에서부터는 master node(etcd)에도 encrypted.
- 사실 모든 pod 에는 Secret 볼륨이 있고, 모든 container 에 마운트 되어있음.
Secrets
- 1) ca.certs + 2) namespace + 3) token 으로 구성되어 있음.
- pod 과 k8s API 와의 secure 보장.
- 각 pod의 각 container 에 모두 mount 되어있
음.
Secrets
- Secrets의 값들은 base64 encoding 되어있다.
- plain-text 뿐만 아니라 binary value 들을 포함하기 위해 base64 encoding함.
- base64 encoding 은 binary data를 YAML/JSON으로 옮길 수 있도록 함. (?)
- stringData 라는 field 는 plain-text 가능(No base64)
- 실제로 컨테이너에 mount된 파일은 암호화 안되어있음.
암호화(YAML) vs 비암호화(container)
Configmap vs Secrets
- pod에 volume 으로 configmap, secret 생성 후
- 각 container에 volumeMounts 로 붙임.
Configmap vs Secrets
- 기억: Secret 은 in-memory 다!
- in-memory filesystem인 tmpfs 사용.
- -> 근데 무슨 의미? 어차피 컨테이너 죽으면 in-memory던 disk에 쓰던 어차피
결국 날아가는 것 아닌가?
- secret 도 configmap 처럼 환경변수로 노출시킬 수 있으나.. 안전해 보이진 않
는다
Ch8. Accessing pod metadata and
other resources from applications
Hongmin Park
What to learn ?
● Using the Downward API to pass information into containers
● Exploring the Kubernetes REST API
● Leaving authentication and server verification to kubectl proxy
● Accessing the API server from within a container
● Understanding the ambassador container pattern
● Using Kubernetes client libraries
k8s Downward API
- pod의 이름, IP, label, CPU 등
- pod 의 정보를 container안의 프로세스에서 사용해야 할 때에.
- 환경변수 or downwardAPI volume
- configMap/secret 은 넘길 정보를
- 알 때.
- downwardAPI는 동적 정보가 필요할때
실습(을 따라해보려 하였으나..)
- 에러와 마주하고 마는데 ..
- downward pod를 생성하려고하는데
k8s API server
- downwardAPI 는 자기 pod에 대한 정보만 줌.
- API server 에 다이렉트로는 안되고, kubectl proxy 를 통해 날려야됨.
k8s API server
- pod 안에서 k8s API server 와의 통신?
- 1) pod 에서 통신할 API 서버의 주소 IP:port
*컨테이너 밖에서
*컨테이너 안에서
Q. 모든 컨테이너에 k8s 가 자동으로 env 뿌려줬었나?
-> each Service 에 env 설정됨.
Q. 방금은 pod 을 만든거였는데..
-> kubernetes 라는 Service 는 모든 pod에 뿌려지나
봄..
k8s API server
fail..-> DNS문제.. ?
Q. 모든 컨테이너에 k8s 가 자동으로 env 뿌려줬었나?
-> each Service 에 env 설정됨.
Q. 방금은 pod 을 만든거였는데..
-> kubernetes 라는 Service 는 모든 pod에 뿌려지나
봄..
k8s API server
- account 조치 취한 후 TOKEN/CURL_CA_BUNDLE 변수 다시 확인 후 성공
- API 서버는 https 와는 별개로 token 도 인증에 필요로 함.
Ambassador container
- container ---(https)---> API server (X)
- container ---(http)---> Ambassador container ---(https)---> API server (O)
-> 동일 pod 에 존재
- pod에 main, ambassador컨테이너 띄움
- main 컨테이너에 접속헤 localhost:8001 로 ambassador
container 호출
*동일 pod의 container -> 동일 namespace 이므로
localhost로 날림
- ambassador가 API 호출
Ambassador container
- Ambassador 컨테이너에 접속해보니 ..
- 아래와 같이 kubectl proxy 를 실행중
- pod에 main, ambassador컨테이너 띄움
- main 컨테이너에 접속헤 localhost:8001 로 ambassador
container 호출
*동일 pod의 container -> 동일 namespace 이므로
localhost로 날림
- ambassador container 같은 것 대신에
- https지원, 인증 처리해주는 클라이언트 라이브러리로 대체 가능
- Golang, python, java 등 다양한 언어에서 라이브러리 지원.
- 코드에서 바로 k8s API server를 call할 일이 있을 때에, 해당 언어에 맞는 라이
브러리를 선택해서 API call 가능.
- -> ambassador container 보다 편해보임. 관리 포인트가 주니까.
Client libraries to API server
- pod에 main, ambassador컨테이너 띄움
- main 컨테이너에 접속헤 localhost:8001 로 ambassador
container 호출
*동일 pod의 container -> 동일 namespace 이므로
localhost로 날림
[Java Client Library example]

More Related Content

PDF
1.intro to k8s
PDF
도커없이컨테이너 만들기 8편 - pid namespace
PDF
도커없이 컨테이너 만들기 1편
ODP
Docker설치
PDF
도커 없이 컨테이너 만들기 2편
PDF
Dockerfile과 Bash
PDF
도커 없이 컨테이너 만들기 3편
PDF
Open stack의 vm개념을 통한 docker의 활용
1.intro to k8s
도커없이컨테이너 만들기 8편 - pid namespace
도커없이 컨테이너 만들기 1편
Docker설치
도커 없이 컨테이너 만들기 2편
Dockerfile과 Bash
도커 없이 컨테이너 만들기 3편
Open stack의 vm개념을 통한 docker의 활용

What's hot (20)

PDF
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
PDF
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
PDF
Docker로 서버 개발 편하게 하기
PPTX
Docker 사용가이드 public v0.1
PPTX
Introduce Docker
PDF
manage inhouse openstack the hard way(kakao case study about 10,000 vms)
PDF
What is chef - korean
PDF
Docker Casual Talk #2 - Dockerizing newrelic-sysmond
PDF
도커(Docker) 메트릭스 & 로그 수집
PDF
도커 학습과 Boot2Docker
PDF
Docker.소개.30 m
PDF
[Nomad connection]docker seminar 15.10.08
PPTX
랩탑으로 tensorflow 도전하기 - tensorflow 설치
PPTX
이것이 리눅스다 - 김종욱
PDF
docker-based remote desktop
PPTX
[세미나] Vagrant 이지원
PDF
RancherOS Introduction
PPTX
Vagrant를 이용한 개발환경 구축과 NetBeans를 이용한 C/C++개발과 리모트 디버깅
PDF
Docker introduction
PDF
CoreOS를 이용한 Docker 관리툴 소개
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Docker로 서버 개발 편하게 하기
Docker 사용가이드 public v0.1
Introduce Docker
manage inhouse openstack the hard way(kakao case study about 10,000 vms)
What is chef - korean
Docker Casual Talk #2 - Dockerizing newrelic-sysmond
도커(Docker) 메트릭스 & 로그 수집
도커 학습과 Boot2Docker
Docker.소개.30 m
[Nomad connection]docker seminar 15.10.08
랩탑으로 tensorflow 도전하기 - tensorflow 설치
이것이 리눅스다 - 김종욱
docker-based remote desktop
[세미나] Vagrant 이지원
RancherOS Introduction
Vagrant를 이용한 개발환경 구축과 NetBeans를 이용한 C/C++개발과 리모트 디버깅
Docker introduction
CoreOS를 이용한 Docker 관리툴 소개
Ad

Similar to Ch7,8. Configmaps, Secrets and API (20)

PDF
Kubernetes in action
PDF
Kubernetes & helm 활용
PDF
Open infradays 2019_msa_k8s
PPTX
Introduce Google Kubernetes
PDF
Kubernetes on Premise Practical Guide
PDF
Kubernetes on GCP
PDF
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
PPTX
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
PDF
K8s in action02
PPT
Kubernetes
PDF
[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner
PDF
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
PDF
Kubernetes를 통한 laravel 개발프로세스 개선하기
PDF
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
PPTX
쿠버네티스의 이해 #1
PDF
Bon voyage Docker_Kubernetes
PPTX
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
PPTX
Source To URL Without Dockerfile
PDF
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
PDF
Kubernetes on Premise
Kubernetes in action
Kubernetes & helm 활용
Open infradays 2019_msa_k8s
Introduce Google Kubernetes
Kubernetes on Premise Practical Guide
Kubernetes on GCP
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
K8s in action02
Kubernetes
[OpenInfra Days Korea 2018] K8s workshop: Kubernetes for Beginner
[OpenInfra Days Korea 2018] K8s workshop: with containers & K8s on OpenStack ...
Kubernetes를 통한 laravel 개발프로세스 개선하기
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
쿠버네티스의 이해 #1
Bon voyage Docker_Kubernetes
[2019.04] 쿠버네티스 기반 하이퍼레저 패브릭 네트워크 구축하기
Source To URL Without Dockerfile
제2회 난공불락 오픈소스 인프라 세미나 Kubernetes
Kubernetes on Premise
Ad

Ch7,8. Configmaps, Secrets and API

  • 2. Configure apps 1. Passing command-line args to containers 2. Setting custom env variables for each containers 3. Mounting conf files by a special type of volume
  • 3. Passing command-line args - 차이 : command is invoked inside a shell or not - shell : 사용자와 커널 사이의 인터페이스를 감싸는 층. sh. GUI/CLI 형태. - shell 을 타고 안타고 큰 차이가 있나? - -> 큰 차이는 없으나 shell 을 굳이 탈필요 없으므로 exec form 권고. ENTRYPOINT ["node", "app.js"] ENTRYPOINT node app.js
  • 4. Setting environment var - .yaml 내에 container level의 env절 추가 - Don’t forget that in each container, Kubernetes also automatically exposes environment variables for each service in the same namespace. These environment variables are basically auto-injected configuration. - 하드코딩의 단점 : 운영/개발 따로 작성해야함. 환경마다 pod def를 따로 작성 해야됨.
  • 5. Configmap - 변수를 따로 object로 관리. - key:value 형식. - 필요에 따라 container 의 환경변수로 등록하거나 volume 붙일수도. - namespace 분리를 통해 아래처럼 같은 ConfigMap/pod 에서 환경구성 다르게 가능.
  • 6. Configmap - 변수를 따로 object로 관리. - key:value 형식. - 필요에 따라 container 의 환경변수로 등록하거나 volume 붙일수도. - namespace 분리를 통해 동일 ConfigMap 이름, pod 에서 환경구성 다르게 가 능. configmap 생성 방식의 조합 - multiple source 에서 생성 가능
  • 7. Configmap - map to container 1. 컨테이너의 환경 변수로 등록 - valueFrom: / envFrom: 으로 변수 일부 or 변수 전체 container 에 매핑 가능.
  • 8. Configmap - map to container 2. command-line argument 로 넘기기 - ConfigMap의 변수를 바로 불러 쓰는 것은 불가능 - yaml에서 변수 정의 후 사용
  • 9. Configmap - map to container 3. 전체 파일을 configMap volume 으로 붙이기 - ConfigMap 의 각 요소를 각 파일로 생성함 - 컨테이너 내의 프로세스에서는 파일을 읽어 변수 가져옴. 컨테이너 내 설정파일이 mount 되어있는 것 확인 가능. - 주의: 기존에 /etc/nginx/conf.d 경로에 있던 파일은 hide됨. - subpath 로 mount 가능.
  • 10. Configmap - update config - Configmap resource 를 수정하면 연결된 container들도 자동 업데이트됨. - 컨테이너에 mount된 Volume은 실제로 symbolic link 로 되어있고, Configmap 이 업데이트되면 symbolic link가 바뀜. - Configmap 을 수정할 때: 수정 후 pod이 reload되지 않으면 수정본이 먹히지 않기 때문에, 수정 전에 생성된 pod과 수정 후에 생성된 pod 사이에 차이 발생 가능.
  • 11. Secrets - Secrets: Configmap 같은 resource - key:value 구조 - container에 environment var 로 줄 수 있음. - volume 으로 줄 수 있음 - Secret을 필요로 하는 pod을 띄우는 node에만 공개됨. - memory에만 저장. 물리 disk에는 No. - k8s v1.7에서부터는 master node(etcd)에도 encrypted. - 사실 모든 pod 에는 Secret 볼륨이 있고, 모든 container 에 마운트 되어있음.
  • 12. Secrets - 1) ca.certs + 2) namespace + 3) token 으로 구성되어 있음. - pod 과 k8s API 와의 secure 보장. - 각 pod의 각 container 에 모두 mount 되어있 음.
  • 13. Secrets - Secrets의 값들은 base64 encoding 되어있다. - plain-text 뿐만 아니라 binary value 들을 포함하기 위해 base64 encoding함. - base64 encoding 은 binary data를 YAML/JSON으로 옮길 수 있도록 함. (?) - stringData 라는 field 는 plain-text 가능(No base64) - 실제로 컨테이너에 mount된 파일은 암호화 안되어있음. 암호화(YAML) vs 비암호화(container)
  • 14. Configmap vs Secrets - pod에 volume 으로 configmap, secret 생성 후 - 각 container에 volumeMounts 로 붙임.
  • 15. Configmap vs Secrets - 기억: Secret 은 in-memory 다! - in-memory filesystem인 tmpfs 사용. - -> 근데 무슨 의미? 어차피 컨테이너 죽으면 in-memory던 disk에 쓰던 어차피 결국 날아가는 것 아닌가? - secret 도 configmap 처럼 환경변수로 노출시킬 수 있으나.. 안전해 보이진 않 는다
  • 16. Ch8. Accessing pod metadata and other resources from applications Hongmin Park
  • 17. What to learn ? ● Using the Downward API to pass information into containers ● Exploring the Kubernetes REST API ● Leaving authentication and server verification to kubectl proxy ● Accessing the API server from within a container ● Understanding the ambassador container pattern ● Using Kubernetes client libraries
  • 18. k8s Downward API - pod의 이름, IP, label, CPU 등 - pod 의 정보를 container안의 프로세스에서 사용해야 할 때에. - 환경변수 or downwardAPI volume - configMap/secret 은 넘길 정보를 - 알 때. - downwardAPI는 동적 정보가 필요할때
  • 19. 실습(을 따라해보려 하였으나..) - 에러와 마주하고 마는데 .. - downward pod를 생성하려고하는데
  • 20. k8s API server - downwardAPI 는 자기 pod에 대한 정보만 줌. - API server 에 다이렉트로는 안되고, kubectl proxy 를 통해 날려야됨.
  • 21. k8s API server - pod 안에서 k8s API server 와의 통신? - 1) pod 에서 통신할 API 서버의 주소 IP:port *컨테이너 밖에서 *컨테이너 안에서 Q. 모든 컨테이너에 k8s 가 자동으로 env 뿌려줬었나? -> each Service 에 env 설정됨. Q. 방금은 pod 을 만든거였는데.. -> kubernetes 라는 Service 는 모든 pod에 뿌려지나 봄..
  • 22. k8s API server fail..-> DNS문제.. ? Q. 모든 컨테이너에 k8s 가 자동으로 env 뿌려줬었나? -> each Service 에 env 설정됨. Q. 방금은 pod 을 만든거였는데.. -> kubernetes 라는 Service 는 모든 pod에 뿌려지나 봄..
  • 23. k8s API server - account 조치 취한 후 TOKEN/CURL_CA_BUNDLE 변수 다시 확인 후 성공 - API 서버는 https 와는 별개로 token 도 인증에 필요로 함.
  • 24. Ambassador container - container ---(https)---> API server (X) - container ---(http)---> Ambassador container ---(https)---> API server (O) -> 동일 pod 에 존재 - pod에 main, ambassador컨테이너 띄움 - main 컨테이너에 접속헤 localhost:8001 로 ambassador container 호출 *동일 pod의 container -> 동일 namespace 이므로 localhost로 날림 - ambassador가 API 호출
  • 25. Ambassador container - Ambassador 컨테이너에 접속해보니 .. - 아래와 같이 kubectl proxy 를 실행중 - pod에 main, ambassador컨테이너 띄움 - main 컨테이너에 접속헤 localhost:8001 로 ambassador container 호출 *동일 pod의 container -> 동일 namespace 이므로 localhost로 날림
  • 26. - ambassador container 같은 것 대신에 - https지원, 인증 처리해주는 클라이언트 라이브러리로 대체 가능 - Golang, python, java 등 다양한 언어에서 라이브러리 지원. - 코드에서 바로 k8s API server를 call할 일이 있을 때에, 해당 언어에 맞는 라이 브러리를 선택해서 API call 가능. - -> ambassador container 보다 편해보임. 관리 포인트가 주니까. Client libraries to API server - pod에 main, ambassador컨테이너 띄움 - main 컨테이너에 접속헤 localhost:8001 로 ambassador container 호출 *동일 pod의 container -> 동일 namespace 이므로 localhost로 날림 [Java Client Library example]