본문 바로가기

클라우드/Kubernetes(쿠버네티스)

[kubernetes] endpoints

참고 블로그 

 

Endpoints

쿠버네티스 클러스터를 쓰고 있는사람들은 Endpoints가 뭔지 어떻게 동작하는지 몰라도 그걸 뒤에서 쓰고 있습니다. 이 포스트에선 Endpoints를 직접사용하거나 문제가 발생할때 필요한 경우에 대비

ozt88.tistory.com

 

 

Kubernetes - Endpoints - The IT Hollow

It’s quite possible that you could have a Kubernetes cluster but never have to know what an endpoint is or…

theithollow.com

개념

  • 쿠버네티스 뒷단의 pod의 label을 사용해서 selector가 자동적으로 앞단의 service에 매칭한다
  • 만약 새로운 pod들이 해당하는 label을 달게 됐다면, service 는 트래픽을 그 pod로 보내는 방법을 알게된다.
  • 이러한 매핑을 endpoint에 추가하는 것으로 service가 이러한 일들을 할 수 있는 것이다.
  • endpoints는 service가 트래픽을 보낼 오브젝트의 ip 주소를 추적한다.
  • service의 selector가 pod의 라벨을 매칭시켰다면, 그 ip 주소가 당신의 endpoints 들에 추가된다.
  • 클러스터의 바깥이나 다른 namespace에 service를 연결해야 하는 경우도 있다.

 

실전

apiVersion: apps/v1 #사용할 API 버젼
kind: Deployment #우리가 배포할 오브젝트의 종류
metadata: #배포할 오브젝트의 정보
  name: nginx-deployment #deployment의 이름
  labels: #deployment의 태ㄱㄱ
    app: nginx
spec: #배포할 오브젝트의 명세
  replicas: 2 #항상 떠있을 팟의 개수
  selector: #어떤 팟을 항상 떠 있게 할 것인지
    matchLabels:
      app: nginx #이것과 매칭되는 라벨을 소유한 팟을 책임진다
  template: #배포할 팟의 템플릿
    metadata:
      labels: #팟의 라벨
        app: nginx
    spec:
      containers:
      - name: nginx-container #팟에 들어갈 컨테이너의 이름
        image: nginx #컨테이너로 받아올 이미지
        ports:
        - containerPort: 80 #팟에서 이 컨테이너가 사용할 포트번호
---
apiVersion: v1 #사용할 API 버젼
kind: Service #우리가 배포할 오브젝트의 종류
metadata: #배포할 오브젝트의 정보
  name: ingress-nginx #service의 이름
spec: #배포할 오브젝트의 명세
  type: NodePort #나중에 다룰예정 무시할 것
  ports: #나중에 다룰예정 무시할 것
  - name: http
    port: 80
    targetPort: 80
    nodePort: 30001 
    protocol: TCP
  selector: #팟을 구분할 셀렉터
    app: nginx


출처: https://ozt88.tistory.com/65 [공부 모음]
❯ kubectl apply -f nginx-deployments.yaml
deployment.apps/nginx-deployment created
service/ingress-nginx created

해당 매니패스트를 배포한다.

❯ kubectl get endpoints
NAME            ENDPOINTS                     AGE
ingress-nginx   172.17.0.6:80,172.17.0.7:80   2m42s
kubernetes      192.168.49.2:8443             37d

ingress-nginx endpoints를 확인하면 된다.

두 개의 endpoints를 가지고 있으며 모두 80 포트라는 것을 확인할 수 있다.

이 endpoints들은 매니페스트로 배포한 pod들의 ip 주소여야 한다.

❯ kubectl get pods -o wide
NAME                                READY   STATUS    RESTARTS   AGE     IP           NODE       NOMINATED NODE   READINESS GATES
first-deployment-5db7596fb5-wrz22   0/1     Error     14         36d     172.17.0.5   minikube   <none>           <none>
nginx-deployment-8cf88777f-hp6bf    1/1     Running   0          3m20s   172.17.0.6   minikube   <none>           <none>
nginx-deployment-8cf88777f-jv4gq    1/1     Running   0          3m20s   172.17.0.7   minikube   <none>           <none>

pod ip 주소들이 endpoints 주소들과 매칭된다는 것을 확인할 수 있다.

보이지 않는 곳에서 endpoints가 매칭된다는 사실을 확인했다.

 

결론

쿠버네티스 클러스터를 쓰고 있는 사람들은 endpoints가 뭔지 어떻게 동작하는지 몰라도 그걸 뒤에서 쓰고 있다.

만약 데이터베이스 등의 외부 서비스에 접근해야 되는 경우 수동으로 자체 endpoint를 추가할 수 있다.

하지만 당장은 endpoints가 존재하고 필요한 경우 수정할 수 있다는 사실만 알고 있어도 충분하다.

'클라우드 > Kubernetes(쿠버네티스)' 카테고리의 다른 글

[kubernetes] IPv4/IPv6 이중 스택  (0) 2021.09.11
[kubernetes] host aliases  (0) 2021.09.11
[kubernetes] endpoints  (0) 2021.09.11
[kubernetes] dnsutils, nslookup  (0) 2021.09.08
[kubernetes] Volume  (0) 2021.08.25
[kubernetes] 파드 스케줄링  (0) 2021.08.23