0224

6democratickim9·2021년 2월 24일
0

namespace

쿠버네티스는 클러스터 안에 가상 클러스터를 또 다시 만들 수 있다

  • 클러스터 안의 가상 클러스터

  • 쿠버네티스 클러스터내의 논리적인 분리단위

  • 하나의 클러스터 내에, 개발/운영/테스트 환경이 있을때, 클러스터를 개발/운영/테스트 3개의 네임 스페이스로 나눠서 운영 가능

  • 쿠버네티스 클러스터는 컨테이너화된 애플리케이션을 실행하기 위한 노드 머신

프로덕션 ip 안에 있는 걸로 접속

==> 여기서 프로덕션 ip란 실제 서비스를 위한 운영용 ip(겠지?)

  • 동일한 네임스페이스 안에 있는 파드로 연결된 것

  • 다른 네임스페이스 내의 서비스에 접근

    kubectl run -it --rm debug --image=alicek106/ubuntu:curl --restart=Never -- bash

    네임스페이스를 지정하지 않고(디폴트 네임스페이스인 상태) 포드를 생성

    • ip로 접근할 때--> 가능

    • 네임스페이스(서비스 이름)로 접근할 때--> 찾을 수 없다

    • 네임스페이스가 달라도 접근은 할 수 있다.

    • 직접적인 서비스 명을 안쓰고 어떤 방법을 통하면 ip로 접근이 가능하니 어떤 규칙을 사용하면 접근 가능할듯!

      • 다른 네임스페이스에 존재라는 서비스로 접근하기 위해서는

         [서비스 이름].[네임스페이스 이름].svc

        형태로 사용해야 함

image-20210224114058168

네임스페이스에 속하는 오브젝트 종류 확인 코드

kubectl api-resources --namespaced=tr

네임스페이스에 속하지 않는 오브젝트 종류 확인 코드

kubectl api-resources --namespaced=false
  • 클러스터 전반에 사용되는 경우가 많은 객체들

configmap, secret- pod에 설정값을 전달

  • configmap은 설정값
  • secret은 노출되면 안 되는 비밀값을 저장

네임스페이스 별로 존재한다

컨피그맵 생성

YAML파일과 kubectl create configmap 명령어로 생성가능

kubectl get configmap

설정된 키=벨류 이름들이 나오게 되는 것. 안에 설정된 내용은 describe 하면 데이터 부분에 나와있는 것을 볼 수 있다.

from literal--> key=value 형태의 설정정보를 저장할 수 있도록

kubectl describe configmap <configmap 이름>

kubectl get configmap <configmap 이름> -o yaml

설정정보들을 필요에 따라 여러개 나누는 경우가 있음--> 파일의저장정보/db의 저장정보를 따로 가져가는 등의 경우

그루핑해서 따로 가져갈 수 있다

컨피그맵을 만들고 위의 명령어로 확인 가능하다

pod에서 필요로 하는 값을 제공받기 위해 컨피그 맵을 사용하는 방법

컨피그맵의 값을 컨테이너의 환경변수로 사용하는 방법 1

  • YAML파일 작성
apiVersion: v1

kind: Pod

metadata:

 name: container-env-example

spec:

 containers:

  \- name: my-container

   image: busybox

   args: ['tail', '-f', '/dev/null']

   envFrom:      			<= 컨피그맵에 정의되어 있는 모든 키=값 쌍을 가져와서 환경변수로 설정

   \- configMapRef:

​     name: log-level-configmap

   \- configMapRef:

​     name: start-k8s

  • pod 실행

  • 컨테이너 내부에 있는 환경변수 확인

  • kubectl exec container-env-example -- env
  • image-20210224134640151
LOG_LEVEL=DEBUG
container=docker
k8s=kubernetes

이 부분에 주목!

지금은 전체 컨피그 사용 --> envFrom: 컨피그맵에 정의된 모든 vey=value 값을 가져와서 환경변수로 설정

valueFrom,configMapKeyRef=> 컨피그맵에 존재하는 키=값 쌍중에서 원하는 데이터만 선택해서 환경변수로 설정

  1. YAML 파일 작성
  2. 포드 생성 및 환경변수 확인
  • envFrom/valueFrom의 차이점:image-20210224140221465
  • image-20210224140231626

  • 컨피그맵의 모든 변수가 설정된 이름 변수가 설정된 환경의 이름 변수에 다 잡힌다

  • valueFrom 위의 name은 새롭게 정의될 환경변수의 이름

  • 참조할 컨피그맵의 이름이 된다

  • 컨피그맵에서 정의된 변수의 키가 된다

컨피그맵의 값을 컨테이너의 환경변수로 사용하는 방법 2

컨피그맵의 값을 포드 내부의 파일로 마운트해 사용

  • VolumeMounts => 모든 키-값 쌍 데이터를 포드에 마운트

      1. YAML 파일 생성

        ''' apiVersion: v1

        kind: Pod

        metadata:

        name: configmap-volume-pod

        spec:

        containers:

        - name: my-container

        image: busybox

        args: ["tail","-f","/dev/null"]

        volumeMounts:

        - name: configmap-volume

        ​ mountPath: /etc/config

        volumes:

        - name: configmap-volume

        configMap:

        ​ name: start-k8s'''

파일로부터 컨피그맵을 생성

주로 아주 많은 내용들을 담고있는 nginx.conf (nginx서버의 설정파일 ) 또는 mysql.conf (Mysql 설정 파일) 등의 내용 전체를 컨피그맵에 저장할 때 사용

  1. 설정 파일 생성
  2. index.html 파일의 내용을 컨피그맵으로 설정
  3. 내용 확인
  4. image-20210224150938155
    • 파일 명이 컨피그맵의 키로 사용
    • 파일 내용이 컨피그맵의 값으로 사용
  5. 키 이름을 직접 지정해서 컨피그맵을 생성
    • kubectl create configmap index-file-customkey --from-file myindex=index.html
    • myindex= 컨피그맵 생성시 사용한 키 값

image-20210224151211378

여러 개의 키-값 형식의 내용으로 구성된 설정 파일을 한꺼번에 컨피그맵으로 가져오기

  1. 여러 개의 키-값 형식의 내용을 구성된 설정 파일을 생성

configmap은 포드로 설정값을 전달

일부/전체를 주는 방법으로 나뉜다.

환경변수로 전달/ 볼륨마운트-> 파일로 전달하는 방법도 있음

일부 데이터를 보내줄 환경변수명을 새롭게 정의해야 된다

컨피그맵으로 정의될 값이 새로 변경될 값으로 변경된다.

키값:파일명

파일 내용: 해당 컨피그의 값

일부를 보낼 때는 파일을 정의할 수 있다.

"--from -file" vs "--from -env -file"

--run-dry -o yaml 옵션으로 configmap 을 생성하지 않고 YAML 파일로 생성

컨피그를 설정하지 않고 yaml 파일 형식으로 출력 가능

yaml파일을 저장해두면 동일한 내용의 컨피그를 만들면 다음에 yaml이용 가능

리눅스 할 때 특정 출력결과를 파일로 보내기--> 리다이렉트로 만들기!

kubectl get configmap my-configmap -o yaml > my-configmap.yaml

cat my-configmap.yaml

image-20210224155222708

파일을 삭제하지않고

 kubectl create configmap my-configmap --from-literal mykey=myvalue --dry-run

컨피그 파일이 만들어진 것 처럼 출력하라!

image-20210224155510582

yaml 파일의 형태로 출력하려면

-o yaml 을 추가한다

image-20210224155553016

실제 컨피그맵에는 추가되어있지 않음

kubectl create configmap my-configmap --from-literal mykey=myvalue --dry-run -o yaml > my-configmap.yaml

: yaml형식의 출력을 파일로 저장(리다이렉트)

">": 덮어쓰기

">>": 엎어쓰기

Secret

SSH 키, 비밀번호 등과 같이 민감한 정보를 저장하는 용도로 사용

시크릿 타입

  • Opaque 타입

    • 기본 타입
    • 사용자가 정의하는 데이터를 저장하는 일반적인 목적의 시크릿
    • generic 혹은 명시하지 않을 시 opaque 타입이 지정된다
  • 비공개 레지스트리(private registry)에 접근할 때 사용하는 인증 설정 시크릿

    • ex)도커 로그인 시 다음부터는 인증정보를 더 이상 물어보지 않음--> AWS나 구글과 같은 외부 레지스트리 사용 시 접근을 위한 인증 정보들을 담고 있는 것
시크릿 생성 방법
kubectl create secret generic my-password --from-literal password=p@ssw0rd
  • generic: Opaque 타입의 시크릿 생성을 명시

--from-literal

--from-file

configmap vs secret: secret은 내용 공개X

시크릿 내용 확인
kubectl describe secret my-password
kubectl get secrets my-password -o yaml

image-20210224162124024

패스워드는 BASE64로 인코딩

  • BASE64: 가시영역의 문자로 데이터를 표현하는 방식
    • 가시화시켜 관리를 효율적으로
    • 이메일 첨부파일에 사용(이진 데이터를 텍스트로 바꿔 출력/암호화된 데이터 출력)
    • 총 64개의 글자로 데이터를 표현

6비트 단위로 자르고 매핑해서 데이터를 만든다

image-20210224162608013

인코딩

echo p@ssw0rd | base64	

디코딩

echo cEBzc3cwcmQ= | base64 -d

시크릿에 저장된 값을 포드의 환경변수로 참조

시크릿에 저장된 모든 값을 가져오기

 vi env-from-secret.yaml
apiVersion: v1

kind: Pod

metadata:

 name: secret-env-example

spec:

 containers:

  \- name: my-container

   image: busybox

   args: ["tail", "-f", "/dev/null"]

   envFrom: 								

​    \- secretRef:							<= my-password 시크릿에 저장된 모든-키-밸류 값을 환경변수로 설정

​      name: my-password

시크릿에 저장된 일부 값을 가져오기

vi selective-env-from-secret.yaml

시크릿에 저장된 값 전체를 포드에 볼륨 마운트

 vi volume-mount-secret.yaml

시크릿에 저장된 값 일부를 포드에 볼륨 마운트

vi selective-volume-mount-secret.yaml
  • 포드 생성 후 시크릿 확인
profile
인생은 그렇게 호락호락하지 않다..

0개의 댓글

관련 채용 정보