[쿠버네티스 기초다지기] 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