Infra/Kubernetes
Kubernetes - Service와 이를 통한 Ingress
wave35
2023. 6. 7. 21:19
yaml파일을 통하거나 deploy를 통해 파드를 생성하거나 pod는 service를 통해 외부에 접근이 가능하다.
쿠버네티스에서 서비스는 파드의 논리적 집합과 그것들에 접근할 수 있는 정책을 정의하는 추상적 개념이다.
Service.yaml에서 어떤 방식으로 외부에 노출시킬지에 대한 type에는 여러 종류가 있다.
- ClusterIP (default) - 클러스터 내부에서만 접근 가능한 IP
- NodePort - Port번호를 통해 외부에서 접근 (NAT 컨샙)
- Load Balancer - 외부의 Load Balancer를 사용하는 방법
- ExternalName - kube-dns 컴포넌트로 DNS를 이용하는 방법
서비스는 추상적이지만 service와 pods는 내부에서 각기 다른 IP를 갖는다.
따라서 port를 가지며 각 포트를 아래의 3가지를 통해 타겟팅이 가능하다.
- NodePort
- Port
- TargetPort
예를 들어 리눅스 서버의 IP가 192.87.12.2라면 192.87.12.2:30005 주소를 통해 pod에 접근할 수 있다.
해당 범위, 30000 ~ 32767 포트를 주로 사용한다.
예제
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app.kubernetes.io/name: proxy
spec:
containers:
- name: nginx
image: nginx:stable
ports:
- containerPort: 80
name: http-web-svc
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app.kubernetes.io/name: proxy
ports:
- name: name-of-service-port
protocol: TCP
port: 80
targetPort: http-web-svc
참조 : https://kubernetes.io/ko/docs/concepts/services-networking/service/