파드는 컨트롤러가 관리하므로 클러스터 안을 옮겨 다닌다. 이 과정에서 노드를 옮기면서 실행되기도 하고 클러스터 안 파드의 IP 가 변경되기도 한다. 동적으로 변하는 파드들에 고정적으로 접근할 때 사용하는 방법이 Service이다.
- 서비스는 여러 개 파드에 접근할 수 있는 IP 하나를 제공. 로드밸런서 역할.
서비스 타입
- ClusterIP
- 기본 서비스 타입
- 쿠버네티스 클러스터 안에서만 사용. 클러스터 외부에서 이용 X
- 클러스터 안 노드나 파드에서 ClusterIP를 이용해서 서비스에 연결된 파드에 접근
- NodePort
- 서비스 하나에 모든 노드의 지정된 포트를 할당.
- Node의 Port를 사용하므로 클러스터 안 뿐만 아니라 클러스터 외부에서도 접근 가능.
- 파드가 노드1에만 실행되어 있고 노드2에 실행되지 않더라도 노드2로 접근했을 때 노드1에 실행된 파드로 연결
- 클러스터 외부에서 클러스터 안 파드로 접근할 때 사용할 수 있는 가장 간단한 방법
- LoadBalancer
- 클라우드에서 제공하는 로드밸런서와 파드를 연결한 후 해당 로드밸런서의 IP를 이용해 클러스터 외부에서 파드에 접근할 수 있도록 한다.
- External-IP 항목에 로드밸런서 IP를 표시. 이 IP 를 이용해 외부에서 접근
- ExternalName
- 서비스를 spec.externalName 필드에 설정한 값과 연결. 클러스터 안에서 외부에 접근할 때 주로 사용.
- 서비스를 만들었을 때 ClusterIP나 NodePort로 접근할 수 있게 만들어 실제 조작 하는 컴포넌트
- 노드마다 실행되면서 클러스터 내부 IP로 연결하려는 요청을 적절한 파드로 전달.
- 네트워크를 관리하는 방법: userspace, iptables, IPVS
- 인그레스는 주로 클러스터 외부에서 파드에 접근할 때 사용
- L7 영역의 통신을 담당
- 역할: 클러스터 외부에서 접근해야 할 URL을 사용할 수 있도록 하고, 트래픽 로드밸런싱, SSL 인증서 처리, 도메인 기반 가상 호스팅 제공 등
- 인그레스: 클러스터 외부에서 안으로 접근하는 요청들을 어떻게 처리할지 정의해둔 규칙 모음
- 인그레스 컨트롤러: 실제로 동작시키는 것
- 클라우드 사용시: 별다른 설정 없이 자체 로드밸런서 서비스와 연동해서 사용
- 클라우드 사용 X: 인그레스 컨트롤러를 직접 인그레스와 연동. ingress-nginx를 가장 ㅏㅁㄶ이 사용.
- 서비스는 주로 L4 영역에서 통신. 인그레스는 L7 영역에서 통신.
Reference