쿠버네티스 애플리케이션 노출법

CHAN LIM·2022년 8월 29일
0

K8S

목록 보기
6/11

즉, Service (서비스)

  • 파드에 접근하기

간단 노출법 3가지

Port-forward

  • 명령어
  • 노드가 재시작하면 다시 설정해야한다.
  • 테스트용, 확인용 / 계속되는 서비스용으로는 사용하기 어렵다.

HostPort

HostNetwork

HostPort와 HostNetwork는
개념적으로만 남아있는 노출법이다.


NodePort

  • type 필드를 NodePort로 설정하면, 쿠버네티스 컨트롤 플레인은 --service-node-port-range 플래그로 지정된 범위에서 포트를 할당한다.

  • NodePort를 사용하면 자유롭게 자체 로드 밸런싱 솔루션을 설정하거나, 쿠버네티스가 완벽하게 지원하지 않는 환경을 구성하거나, 하나 이상의 노드 IP를 간단히 외부로 노출시킬 수 있다.

  • 이름selector template가 서로 같습니다.

  • ---

    • 두 개의 오브젝트를 배포할 때 사용한다.
    • yaml문법에서는 문서의 시작을 의미하지만

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
  labels:
    app: deploy-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: deploy-nginx
  template:
    metadata:
      labels:
        app: deploy-nginx 
    spec:
      containers:
      - name: nginx
        image: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: np-nginx 
spec:
  selector:
    app: deploy-nginx  
  ports:
    - name: http
      port: 80
      targetPort: 80
      nodePort: 30000 #option 
  type: NodePort

LoadBalancer

  • NodePort의 접근 범위뿐만 아니라 쿠버네티스 클러스터 외부에서 대표 IP주소로 접근할 수 있다.

  • 하나 배포

  • 하나 더 배포

  • 전체 그림

    • lb-nginx 서비스는 외부 IP : 192.168.1.11이 연결되어 내부에 있는 디플로이먼트로 연결
    • lb-chk-ip 서비스는 외부 IP : 192.168.1.12이 연결되어 내부에 있는 디플로이먼트로 연결

ExternalName

  • 서비스인가? 글쎄?
  • 쿠버네티스 클러스터 내의 파드에서 외부 IP 주소에 서비스의 이름으로 접근 할 수 있다.

spec 주목

apiVersion: v1
kind: Service
metadata:
  name: ex-url-1 
  # name: ex-url-2 
  namespace: default
spec:
  type: ExternalName
  externalName: sysnet4admin.github.io # 이용자가 원하는 것으로 수정
  # externalName: k8s-edu.github.io
  • 전체 그림
    • 외부의 도메인을 서비스화해서 그것을 추상화 객체 즉, 별명으로 만든 것

ClusterIP, Headless

ClusterIP

  • 타입을 지정하지 않으면 기본으로 설정되며, 클러스터 내부의 파드에서 서비스의 이름으로 접근할 수 있다.

  • 그림과 같이 클러스터 내부에서 내부 DNS에 등록한 이름으로 특정 파드 집합에 요청 전송할 수 있게 해준다.

  • type을 ClusterIP로 설정
  • 파드와 파드의 연결을 위한 내부의 IP

Headless

  • clusterIP를 None으로 설정
  • clusterIP와 동일한 기능 즉, 내부에서 쓰이는 서비스이지만 IP가 없는 상태
    • 어디에 쓰이나?
    • StatefulSet

Endpoints

  • 서비스가 아니다.
  • 엔드포인트는 항상 복수이다.

loadbalancer의 엔드포인트

  • 엔드포인트가 3개가 만들어진다.
    • 로드밸런서를 통해 도달하는 IP 3개

엔드포인트를 임의로 만들기

  1. 서비스를 하나 생성한다.
    • clusterIP로 일단 선언
  2. 오른쪽 코드는 기존의 로드밸런서로 만들어진 부분으로 엔드포인트도 만들어져 있다.
  3. kind: Endpoints인 엔드포인트인 오브젝트를 선언하고 이름을 클러스터IP와 동일하게 준다.
  4. 엔드포인트의 IP를 로드밸런서에서 이미 쓰고 있는 192.168.1.11 엔드포인트화 해서 만들고 external-data 연결한다.

Ingress

  • 인그레스서비스가 없다면 존재할 수 없다.

  • 인그레스경로에 대한 라우팅 정보를 제공하고, 실제 경로를 운용하는 것은 서비스이다.

  • 노드 포트 서비스

  • 로드밸런서 서비스

labels과 annotations

  • Labels는 사람이 사용
  • Annotations는 시스템이 사용

코드 설정 차이


From.

lectures
kubernetes Docs

profile
클라우드, 데이터, DevOps 엔지니어 지향 || 글보단 사진 지향

0개의 댓글