참고 블로그
개념
- 쿠버네티스 뒷단의 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] dnsutils, nslookup (0) | 2021.09.08 |
[kubernetes] Volume (0) | 2021.08.25 |
[kubernetes] 파드 스케줄링 (0) | 2021.08.23 |