엔드포인트는 외부 로드 밸런서가 할당하는 가상 IP 주소(Virtual IP 주소)나 클러스터 내부에서만 사용할 수 있는 가상 IP 주소(Cluster IP) 등 여러 가지 종류를 제공한다.
Deployment 예제
kubectl get pods -l app=sample-app -o custom-columns="NAME:{metadata.name},IP:{status.podIP}"
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-deployment
spec:
replicas: 3
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: amsy810/echo-nginx:v2.0
ClusterIP 서비스 예제
생성 후 서비스 상세 정보 확인 : kubectl describe service sample-clusterip
apiVersion: v1
kind: Service
metadata:
name: sample-clusterip
spec:
type: ClusterIP
ports:
- name: "http-port"
protocol: "TCP"
port: 8080
targetPort: 80
selector:
app: sample-app
테스트 코드
kubectl run --image=amsy810/tools:v2.0 --restart=Never --rm -i testpod --command -- curl -s http://ClusterIP:8080
ClusterIP의 8080/TCP 포트로의 요청은 파드 80/TCP 포트로 로드 밸런싱
ClusterIP의 8443/TCP 포트로의 요청은 파드 443/TCP 포트로 로드 밸런싱
여러 포트를 가진 ClusterIP 서비스 예제(sample-clusterip-multi.yaml)
apiVersion: v1
kind: Service
metadata:
name: sample-clusterip-multi
spec:
type: ClusterIP
ports:
- name: "http-port"
protocol: "TCP"
port: 8080
targetPort: 80
- name: "https-port"
protocol: "TCP"
port: 8443
targetPort: 443
selector:
app: sample-app
이름이 붙여진 포트를 가진 두 개의 파드 예제(sample-named-port-pods.yaml)
---
apiVersion: v1
kind: Pod
metadata:
name: sample-named-port-pod-80
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: amsy810/echo-nginx:v2.0
ports:
- name: http #포트에 이름 지정
containerPort: 80
---
apiVersion: v1
kind: Pod
metadata:
name: sample-named-port-pod-81
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: amsy810/echo-nginx:v2.0
env:
- name: NGINX_PORT
value: "81"
ports:
- name: http
containerPort: 81
이름이 붙여진 포트를 참조하는 서비스 예제(sample-named-port-service.yaml)
apiVersion: v1
kind: Service
metadata:
name: sample-named-port-service
spec:
type: ClusterIP
ports:
- name: "http-port"
protocol: "TCP"
port: 8080
targetPort: http # 이름으로 포트 참조
selector:
app: sample-app