[쿠버네티스 기초다지기] 03장 - 네트워킹, 로드밸런서, 인그레스
03장 네트워킹, 로드밸런서, 인그레스
쿠버네티스 네트워킹
- 쿠버네티스 컨테이너에서 컨테이너 또는 컨테이너에서 노드로의 트래픽에 대해 NAT(Network Address Translation) 사용을 허용하지 않는다.
- 내부 컨테이너 IP 주소는 통신을 위해 사용되는 IP 주소와 일치해야 한다.
- pause 컨테이너
- 파드 인프라 컨테이너
- 네트워크 리소스를 점유하는 역할
고급 서비스
- 각 요청을 처리하는 파드 IP주소와 포트를 결정하기 위해 kube-proxy 사용
- kube-proxy
- 가상 IP 와 iptables 사용
- 쿠버네티스 마스터의 API를 모니터링
- 서비스에 변경 사항이 생기면 iptables를 업데이트하도록 트리거 한다.
외부 서비스
- 모든 서비스가 외부에서 접근 가능하도록 LoadBalancer 사용
내부 서비스
- 기본적으로 서비스는 내부로만 열려 있다.
- 타입이 지정 되지 않으면 clusterIP 타입이 지정된 것으로 간주한다.
- 백엔드 서비스에 유용
커스텀 로드밸런싱
- NodePort 타입의 서비스
- 호스트 또는 노드의 특정 포트를 통해 서비스를 노출
- 모든 IP 주소 사용 가능하며 할당된 노드포트로 서비스에 접근 할 수 있다.
커스텀 포트
- 서비스는 트래픽을 다른 포트로도 매핑 가능
- 서비스 정의에 targerPort 로 정의
- 따로 정의 안하면 서비스 포트를 사용
다중 포트
- 커스텀 포트 형태로 다중 포트(ex: 80, 8888) 사용 가능
- containerPort 사용
인그레스
- 커스텀 프록싱과 뒷단 서비스의 부하 분산 수행
- 고급 라우팅 시나리오
- 인그레스 리소스
- 인그레스 엔트리 포인트
- 라우트 정의
- 인그레스 컨트롤러
- 라우트 실제 처리
- 인그레스 엔트리 포인트
마이그레이션, 멀티 클러스터, 그 외
- 클러스터 외부의 것을 쿠버네티스와 컨테이너로 마이그레이션 하기 위한 전략
- Endpoints 생성 해서 ip 지정
커스텀 주소 지정
- clusterIP 엘리먼트 사용
- 서비스 내부 주소를 사용
- DNS 사용 시
- clusterIP : None
멀티테넌시
- 멀티테넌시 커뮤니티를 실행하거나 클러스터 리소스의 분리 및 격리를 원할 경우 네임스페이스 사용
기존 리소스 정리
kubectl delete pod <파드 이름>
kubectl delete svc <서비스 이름>
kubectl delete rc <복제 컨트롤러 이름>
kubectl delete rs <레플리카 셋 이름>
제한
- 네임스페이스 세부 정보로 사용되는 리소스 확인 가능
kubectl describe namespace/test
-
네임스페이스의 공간을 제한하려면 쿼타를 설정
- ResourceQuota
apiVersion: v1
kind: ResourceQuota
metadata:
name: test-quotas
namespace: test
spec:
hard:
pods: 3
services: 1
replicationcontrollers: 1
- 조회 시 네임스페이스 지정해서 조회 해야 함
kubectl describe rc busybox-ns --namespace=test
- 컨텍스트 설정을 통해 현재 네임스페이스 설정
- 현재 컨텍스트 알아내기
kubectl config view | grep current-context
-
- 컨텍스트 취득 후, 네임스페이스 설정
kubectl config set-context <현재 컨텍스트> --namespace=test