• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

Headless 관련 질문

22.06.09 12:12 작성 조회수 491

1

4.6 강의에 관한 질문입니다.

 

여기서 LoadBalancer로 svc를 배포했을 때는 외부에서 접근하려면 해당 서비스의 ip를 입력하여 pod에 접근하였습니다.

제가 이해한 것은 headless는 ip를 사용하는 대신에, 도메인주소를 사용하여 외부에서 특정 pod에 접근할 수 있게 해주는 것으로 이해했는데, 그렇다면 외부에서 접근하려면 어떻게 해야하나요?

예를 들어, svssts-chk-hn-2 라는 특정 pod에 접속하기 위해서는 net에서 nslookup에서 확인 할 수 있는 

sts-chk-hn-2.sts-svc-domain.default.svc.cluster.local

이 부분이 도메인 주소인가요..? 이 부분을 브라우저 주소 창에 입력했을 때 접속이 안되서 질문 드립니다..

강좌에서도 headless를 사용했을 때 외부에서 접속하는 과정이 안나와 있는 것 같아 헷갈려서 질문드렸습니다!!

 

감사합니다.

답변 1

답변을 작성해보세요.

2

주도님의 프로필

주도

2022.06.11

안녕하세요, 김영진 님.

튜터 주도입니다.

 

질문 주신 부분은 다음과 같이 이해했습니다 :)

Q1. 외부에서 접근하려면 어떻게 해야하나요?

Q2. net에서 nslookup에서 확인 할 수 있는 

sts-chk-hn-2.sts-svc-domain.default.svc.cluster.local 이 도메인 주소인가요? 왜 이 도메인 주소를 브라우저에 입력하면 접속이 안되나요?

 

질문과 관련된 개념을 정리해드리면 다음과 같습니다. :)

<서비스>

Pod 내부로 접근하는 방법을 서비스(Service)라고 합니다.

서비스는 네가지로 분류할 수 있습니다.

  • 클러스터 내부에서만 사용 가능한 서비스 : Cluster IP
  • Cluster IP에서 IP부분만 뺀 서비스 : 헤드리스
  • 클러스터 외부에서 Pod로 접속 가능한 서비스 : NodePort, LoadBalancer 
  • 외부에 있는 이름을 내부의 리소스와 매핑해주는 서비스 : ExternalName

 

<헤드리스>

  • 클러스터 내부에서만 사용 가능한 서비스가 바로 Cluster IP 이며,  Cluster IP를 없는 상태(none)로 명시하면 헤드리스 서비스로 사용 가능합니다.
  • 헤드리스는 IP는 없지만 도메인 이름으로 통신 가능하도록 할 수 있는 기능입니다. 단, 클러스터 내부에서 말이죠. 또한 도메인이름으로 통신 가능하다는점에서 StatuefulSet과 같이 사용하기 좋은 서비스 입니다.(참고 : 4.6강의 4분 24초)

-------------헤드리스 yaml 예시------------

apiVersion: v1
kind: Service
metadata:
  name: nginx-headless
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx

---------------------------------------------------



<Ingress>

  • 인그레스는 사용 목적 별로 경로 정보를 제공하는 표지판 역할을 하는 오브젝트입니다.
  • 인그레스는 파드와 직접 통신할 수 없으며 노드포트 또는 로드밸런서같은 서비스의 도움을 받아야만 합니다. 다시 말해, 서비스가 없으면 인그레스도 없습니다.
    • 인그레스가 제공하는 경로 정보를 실제로 운용하는 역할을 서비스가 합니다.
  • 인그레스를 사용하려면 인그레스 컨트롤러를 배포해야 합니다. 
  • 인그레스는 고유한 주소를 제공해 목적에 따라 다른 경로 정보를 제공할 수 있습니다. 아래 yaml파일의  spec.rules 아래에서 경로 라우팅에 대한 정보를 설정할 수 있습니다.

 ---------------인그레스 yaml 예시------------------

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: ing-default
            port:
              number: 80
      - path: /hn
        pathType: Prefix
        backend:
          service:
            name: ing-hn
            port:
              number: 80
      - path: /ip 
        pathType: Prefix
        backend:
          service:
            name: ing-ip
            port:
              number: 80
---------------------------------------------------

 따라서 답변은 다음과 같습니다.  :D

Q1. 외부에서 접근하려면 어떻게 해야하나요?

A1. 클러스터 외부로부터 접근하려면 NodePort, LoadBalancer 서비스를 이용하여 가능하도록 할 수 있습니다. 도메인을 사용하여 외부로부터 접근하려면 '인그레스+인그레스 컨트롤러+서비스'조합으로 구성하여 접근할 수 있습니다. 

 

Q2. net에서 nslookup에서 확인 할 수 있는 

sts-chk-hn-2.sts-svc-domain.default.svc.cluster.local 이 도메인 주소인가요? 왜 이 도메인 주소를 브라우저에 입력하면 접속이 안되나요?

A2. sts-chk-hn-2.sts-svc-domain.default.svc.cluster.local 도메인은 클러스터 내부용 서비스인 ClusterIP, 헤드리스 서비스 이기때문입니다.

 

 

주신 질문과 관련된 강의는 4.6.클러스터주소(ClusterIP), 헤드리스(Headless)와 그 다음 진도인 4.8 인그레스(Ingress)에서 확인하실 수 있으며, 아래 리소스에서도 보실 수 있습니다.

 

혹시 추가로 궁금하신 점이 있으면 남겨주세요

감사합니다 :)

 

김영진님의 프로필

김영진

질문자

2022.06.11

한번에 궁금증이 해결 됐습니다!!

감사합니다!!

주도님의 프로필

주도

2022.06.13

안녕하세요, 영진님!

인그레스 부분을 더 명확하고 자세히 보완하여 답변을 수정했습니다. 

확인 부탁드립니다 :)

감사합니다!