Linux 쿠버네티스(4)
Linux 쿠버네티스(4)
인그레스
인그레스는 하나의 IP or Domain으로 다수의 서비스 제공
- 서비스(LB) = L4
- 인그레스 = L7
ALB(L7) == WEB 부하분산
Network Load Balancer(L4) == 일반 서비스 부하분산
인그레스
- 트래픽 부하분산 경로 기반 라우팅(ex. /, /home, /pay, /login)
- 도메인 기반 라우팅
- SSL/TLS 인증서 처리
인그래스 아키텍쳐
- Ingress Controller
- Ingress RUles
- Input: {Ingress service}:80 (kubectl get ingress -w, kubectl get svc -n ingress-nginx)
- Output: {Service NAme}:80 (kubectl describe ingress homepay-ingress)
- service(Cluster IP)
- Input: {service name}:80 (kbuectl describe svc pay-service)
- Output: {pod’s label}:80 (kubectl describe svc pay-service)
- Deployment(RepplicaSet, Pod)
인그레스 설치
- kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/baremetal/deploy.yaml
인그레스 작업
- vi deploy.yaml
- vi svc.yaml
- vi ingress.yaml
- kubectl apply -f deploy.yaml -f svc.yaml -f ingress.yaml
- kubectl get ingress -w
- kubectl get svc -n ingress-nginx
- curl IP:PORT
쿠버네티스 io 사이트 보기
레이블 & 에너테이션
- 레이블(label)
- [참고]label과 selector
- [참고]label과 namespace
- label
- 레이블은 3개 이상 정의할 것을 권장한다
- 예) environment=prod, tier=fronted, release=stable, team=devops1
- 레이블 관리
- kubectl label pods POD key1=value1 key2=value2 [–overwrite]
- kbuectl get pods POD –show-labels
- kubectl label pods POD key-
- 노드 레이블(Node label)
- 노드 레이블(Node Label)
- kubectl label nodes NOD key1=value1 key2=value2 [–overwrite]
- kubectl get nodes –show-labels
- kubectl label nodes NODE key-
- 노드 셀렉터
- vi nodeselector.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13
apiVersion: v1 kind: Pod metadata: name: pod-nodeselector spec: nodeSelector: gpu: "true" disk: ssd containers: - name: nginx image: nginx:1.14 ports: - containerPort: 80
pod에 라벨 설정하기
- yaml 파일 변경 적용
- kubectl edit 명령을 사용하여 변경
- kubectl -l(–label) 명령 사용하여 변경
- 노드 레이블(Node Label)
- 애너테이션(Annotation)
- Annotation
- 애너테이션은 key, value 쌍으로 정의한다
- 쿠버네티스에게 특정 정보 전달할 용도록 사용
- ex. annotations: kubenernetes.io/change-cause: nginx:1.14 - 관리를 위해 필요한 정보를 기록할 용도로 사용
- ex. annotations:
- builderL BSC
- builddata: “2024-0403”
- imgageregistry: “hub.docker.com”
- [참고] 레이블 vs 애너테이션
- 레이블: 클러스터를 관리할때 관리하는 값을 입력한다.
- 애너테이션: 클러스터 필요한 정보를 표시하는데 사용한다.
- Annotation
배포 전략의 종류
- Blue-Green update : 새로운 거를 아예 새로 만들어서 옮김
- Cannary Update : 전체 노드에서 10~20%만 새로 만들어서 배포. 후에 문제가 생기면 수정해서 나중에 새로운 것으로 점진적으로 바꿈
→ 상위 두개는 레이블로 구현 가능 - Rolling Update : 순차적으로 새로운 것을 지웠다가 다시 깖(기본기능 버전이 아닌 레이블을 보기 때문에 괜찮음.
컨피그맵(config map)
[참고] variable vs configmap
- 변수(variable) : 특정 파드에 변수값을 설정할 때 사용
- 컨피그맵(configMap): 네임스페이스안에 파드에 대한 전역 변수값을 설정할 때 사용
[참고] configmap vs secret
- 컨피그맵(configmap): 일반 설정(전역 인증서)
- 시크릿(secret): 민감한 설정/데이터(예: 아이디/비밀번호, 인증서, 토큰 …)
- 컨피그맵
- 키-값 쌍으로 정의한다
- 네임스페이스안에 실행되는 파드에서 공통적으로 사용한다.(파드 밖에서는 안됨)
- 주로 설정하는 것
- 변수(interval=2)
- 설정 파일(nginx.conf)
- 전역 인증서(rootCA)
- 컨피그맵 정의 방법
- 명령어 사용
1 2 3 4 5 6 7 8 9
# 정의 kubectl create cm cmname --from-literal key=value \ # 글자로 설정 --from-file nginx.conf \ # 파일안에 있는 것이 변수와 값 --from-file myconf=ngix.conf \ #변수=파일안의 값 --from-file confdir/ # 디렉토리 안의 파일이름=변수 파일내용=값 # 확인 kubectl get cm #cm 목록 kubectl describe cm cmname # cmname 안에 있는 내용
- 파일 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14
$ vi cm.yaml ---- kind: ConfigMap apiVersion: v1 metadata: name: cmname data: key: value nginx.conf: | server config 1 server config 2 mydata: | server config 1 server config 2
- 컨피그맵 사용 방법
- 컨피그맵 일부 참조하기
- 환경 변수
1 2 3
env: - name: INTERVAL value: 2
- 컨피그맵에서 일부 참조하기
1 2 3 4 5 6
env: - name: INTERVAL valueFrom: - configMakeKeyRef: name: test-config key: INTERVAR
- 컨피그맵 전체 참조하기
- 컨피그맵에서 전체 참조하기
1 2 3 4 5
env: - name: INTERVAL envFrom: - configMapRef: name: test-config
- 컨피그맵 일부 참조하기
시크릿(Secret)
[참고] configmap vs secret
- 컨피그맵(configmap): 일반 설정(전역 인증서)
- 시크릿(secret): 민감한 설정/데이터(예: 아이디/비밀번호, 인증서, 토큰 …)
- 시크릿
- 키-값 쌍으로 정의
- 네임스페이스에 영향을 받음
- 주로 설정하는 것
- docker-registry 인증 정보
- TLS 인증서
- 시크릿 정의 방법
- 명령어 사용
1 2 3 4 5 6 7 8 9
# 정의 kubectl create secrets secname --from-literal key=value \ # 글자로 설정 --from-file nginx.conf \ # 파일안에 있는 것이 변수와 값 --from-file myconf=ngix.conf \ #변수=파일안의 값 --from-file confdir/ # 디렉토리 안의 파일이름=변수 파일내용=값 # 확인 kubectl get secrets #시크릿 목록 kubectl describe secrets secname # secname 안에 있는 내용
- 파일 사용
1 2 3 4 5 6 7 8 9 10 11
$ vi secrets.yaml ---- kind: Secret apiVersion: v1 metadata: name: secname data: key: $(echo 2 | tr -d "\n" | base64) nginx.conf: $(cat nginx.conf | base64) mydata: $(cat nginx.conf | base64) # 한 칸이라도 더 들어가거나 덜 들어가면 틀린 것이 됨!
- secret 사용 방법
- 시크릿 일부 참조하기
- 환경 변수
1 2 3
env: - name: INTERVAL value: 2
- 시크릿에서 일부 참조하기
1 2 3 4 5 6
env: - name: INTERVAL valueFrom: - configMakeKeyRef: name: test-config key: INTERVAR
- 시크릿 전체 참조하기
- 시크릿에서 전체 참조하기
1 2 3 4 5
env: - name: INTERVAL envFrom: - configMapRef: name: test-config
- 시크릿 일부 참조하기
This post is licensed under CC BY 4.0 by the author.