Security/리눅스

정보보안 스터디 - 11주차 5일 - 쿠버네티스 Ingress

wonder12 2022. 12. 26. 21:59

 

☞ docker와 kubernetes를 사용하는이유에 대해서 명확하게 차이점을 알고 있어야합니다.

도커는 서버1에 이미지를 가져와서 컨테이너 여러곳에 만드는 것입니다.

만들어진 개발환경을 이미지로 만들어서 복제다운받을 수있는 것이 큰 장점입니다.

 

kubernetes는 이미지를 가져오는 것은 동일하지만

컨테이너가 아닌 실제 물리(가상)서버를 만들고 싶다면

master - slave nodes 형태로 연결시키고 전달해주어야합니다.

각각 네트워크 설정하고, 설치하기가 귀찮으니 그 부분에 대해서 장점입니다.

 

웹서버를 만들더라도 디플로이먼트로 복제3개를 만들고

한곳에 연결을 몰아놓지 않고 분산접속을 합니다.

 

파드에는 컨테이너 여러개를 만들 수 있습니다.

스케줄러가 노드당 하나씩 파드를 붙입니다.

 

외부에서 서버에 접속할 때 서비스IP주소로 접속을하고 각파드로 분산접속을 시켜줍니다.

해당 로드밸런서는 물리적으로 스위치L4가 그 역할을 하고 있습니다.

 

 

 서비스

 

노드 포트

외부에서 접속가능한 포트(30000~32767번대)를 열어두는 서비스입니다.

포트는 80: 30000~ 로 구성됩니다.

 

 

 

LoadBalancer

외부에서 접속하기위해서 실제로 로드밸런서 서버를 만들고 haproxy를 설치해서 로드밸런서 서비스로 접속해야합니다.

실제 pc환경에서는 설정할 필요가 없지만 VMware에서는 외부 사용자들이 접속하기 위해서는 NAT, 포트 포워딩을 해야합니다.

 

 

 

Externalname은 호스트부분과 도메인부분을 합친 FQDN에 CNAME을 매핑하여 접근시킵니다.

alias하여 

'externalname-svc.default.svc.cluster.local' <<>>www.google.con

ExternalName의 클러스트 내부 도메인입니다.

 

 

 

headless는 DNS와 같은 역할을 합니다.

노드분산이 필요없거나, clusterIP가 필요없을 때 사용합니다. 

내부 코어 DSN사용합니다.

 

 

 

 

 

 Ingress

ingress를 사용하는 이유는

원래같았으면 서비스를 통해서 분할 전송으로 파드에게 도달했을 것입니다.

하지만 그럴 경우에는 서비스가 많아질 경우에는

 포트번호가 9000, 9001, 9002 이렇게 같이 많아집니다.

포트를 따로 생성해야한다는 단점과, 접속할 때도 헷갈린다는 단점입니다.

그래서 ingress는 쉽게 말해 서비스를 통하지않고 자기 만의 규칙으로 네트워크를 관리하겠다는 겁니다. 엔드포인트에 도달하는 루트가 다릅니다.

 

각각 웹서버, 게스트응답메세지서버, 어드민응답메세지서버 입니다.

 

 

장점은

1. 포트는 30000번대 하나로 접속하고 /,/guest,/admin처럼 각 네트워크에 나눠서 접근이 가능합니다.(URL제공)
2. http를 통하여 내부서비스를 외부로 노출시킵니다. 
3. 로드밸런싱 분할전송
4. SSL 인증서 처리

 

꼭 사용해야된다는 아니지만 서비스가 많아지고 규모가 커질 경우에 사용할 수 있겠죠. 

 

 

 

외부에서 인그레스 컨트롤러를 설치하여 사용합니다.

네임스페이스 ingress-ns 사용 >

kubectl get pods -n ingress-test 

 

 

 

레이블은 표식과 같습니다.

예를들어 rel: 버전 name: 이름이 있습니다.

kubectl label nodes node1 disk="true", gpu=sdd  --overwrite
레이블 추가
kubectl label nodes node2 run-
빼기
kubectl get pods -o wide --show-label
kubectl get pods -o wide -l disk=true
검색

yml파일에서 nodeselector를 통해 label이 있는 파드를 

고를 수 있습니다. 만약에 label이 정확하지 않다면 실행되지 않습니다.

 

 

 

annotation

주석의 역할을 합니다.

작동에 영향을 끼치지 않고

저자나, 설명을 남깁니다.

 

 

 

카나리 배포

신규버전으로 배포 후 문제점, 버그들을 수집하기위한 베타버전입니다.

문제가 없다면 deploy replicas의 갯수를 올리고, 기존버전은 점점 줄여갑니다.

 

 

 

configmap

변수를 한곳에 모아서 관리합니다.

키 - 키값 쌍으로 구성됩니다.

암호화가 지원되지 않기 때문에 암호화가 필요없는 일반적인 데이터를 다룹니다.

 

--from-liberate=DB-USERNAME=wonder
--from-liberate=DB-PASSWORD=wonder
--DEBUG_INFO
..

 

만약 dig | boxes 의 환경변수인

INTERVAL = 5

OPTION = STONE 를 

2, DOG로 바꾸고 싶다면

configmap을 통해 환경변수를 정하여 변경이 가능합니다.