동일한 서비스를 제공하는 Pod 그룹의 단일 진입점을 제공
deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: <deploy_name>
spec:
replicas: <배포 갯수>
selector:
matchLabels:
key: value
template:
<컨테이너 템플릿>
service
apiVersion: v1
kind: Service
metadata:
name: <service_name>
spec:
clusterIP: <IP 주소>
selector:
key: value
ports:
- protocol: TCP
port: <외부 포트>
targetPort: <내부 포트>
selector의 label이 동일한 파드들의 그룹으로 묶어 단일 진입점(Virtual IP) 생성
클러스터 내부에서만 사용 가능
type 생략 시 default로 10.96.0.0/12 버무이에서 할당
apiVersion: v1
kind: Service
metadata:
name: <service_name>
spec:
type: ClusterIP
clusterIP: <IP 주소>
selector:
key: value
ports:
- protocol: TCP
port: <외부 포트>
targetPort: <내부 포트>
모든 노드를 대상으로 외부 접속 가능한 포트를 예약
Default NodePort 범위: 30000 ~ 32767
ClusterIP가 생성된 후 모든 Worker Node에 외부에서 접속가능한 포트가 예약
apiVersion: v1
kind: Service
metadata:
name: <service_name>
spec:
type: NodePort
clusterIP: <IP 주소>
selector:
key: value
ports:
- protocol: TCP
port: <외부 포트>
targetPort: <내부 포트>
nodePort: <노드 포트>
클라우드 Infra Structure(AWS, Azure, GCP 등)나 오픈스택 클라우드에 적용
LoadBalancer를 자동으로 프로 비전하는 기능 지원
NodePort를 예약 후 해당 nodeport로 외부 접근을 허용
apiVersion: v1
kind: Service
metadata:
name: <service_name>
spec:
type: LoadBalancer
clusterIP: <IP 주소>
selector:
key: value
ports:
- protocol: TCP
port: <외부 포트>
targetPort: <내부 포트>
클러스터 안에서 외부에 접속 시 사용할 도메인을 등록해서 사용
클러스터 도메인이 실제 외부 도메인으로 치환되어 동작
apiVersion: v1
kind: Service
metadata:
name: <service_name>
spec:
type: ExternalName
externalName: <외부 도메인>
ClusterIP가 없는 서비스로 단일 진입점이 필요 없을 때 사용
Service와 여결된 Pod의 endpoint로 DNS 레코드가 생성됨
Pod의 DNS주소 :
pod-ip-addr.namespace.pod.cluster.local
apiVersion: v1
kind: Service
metadata:
name: <service_name>
spec:
type: ClusterIP
clusterIP: None
selector:
key: value
ports:
- protocol: TCP
port: <외부 포트>
targetPort: <내부 포트>
Kubernetes Service의 Backend 국현
endpoint 연결을 위한 iptable 구성
nodePort로의 접근과 Pod 연결을 구현(iptable 구성)
userspace
클라이언트의 서비스 요청을 iptables를 거쳐 kube-proxy가 받아서 연결
kubernetes 초기버전에 잠깐 사용
iptables
kube-proxy는 service aPI 요청 시 iptables rule이 생성
클라이언트 연결은 kube-proxy가 받아서 iptables 룰을 통해 연결
IPVS
리눅스 커널이 지원하는 L4 로드밸런싱 기술을 이용
별도의 ipvs 지원 모듈을 설정한 후 적용 가능
지원 알고리즘
HTTP나 HTTPS를 통해 클러스터 내부의 서비스를 외부로 노출하고 L7 로드밸런싱 기능을 제공하는 컴포넌트입니다.
Ingress Controller에 url의 path로 서비스를 연결시킨 Rule을 만들어 줍니다.
클라우드 서비스에서는 각 클라우드 서비스에서 자사의 로드밸런서와 연동해서 Ingress를 사용할 수 있습니다.
하지만 클라우드를 사용하지 않고 클러스터를 구축해서 사용하는 경우는 Ingress Controller를 직접 Ingress와 연동시켜줘야 하며, 이때 가장 많이 사용되는 것이 바로 Ingress-nginx입니다.
출처
https://www.youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c