1. 탬플릿 작성
- 서비스에 연결 할 파드 생성을 위해 deployment 탬플릿 작성
- app-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-for-svc
labels:
app: nginx-for-svc
spec:
replicas: 2
selector:
matchLabels:
app: nginx-for-svc
template:
metadata:
labels:
app: nginx-for-svc
spec:
containers:
- name: nginx-for-service
image: nginx
ports:
- containerPort: 80
- ClusterIP 유형의 서비스 생성을 위한 탬플릿 작성
- clusterip.yaml
apiVersion: v1
kind: Service
metadata:
name: clusterip-service
spec:
type: ClusterIP ------- 1. 서비스 타입 지정
selector:
app: nginx-for-svc ------- 2. 서비스와 연결할 파드 .labels 필드 값
ports:
- protocol: TCP
port: 80 ------- 3. 파드 접근 포트
targetPort: 80 ------- 4. 파드 내부 포트
2. 서비스 구조
- 탬플릿을 통해 ClusterIP 타입의 서비스를 생성하면 서비스는 nginx-for-svc 라는 .labels 속성값을 갖는 파드에 연결
- 쿠버네티스 클러스터 내부에 있는 파드에서 서비스를 통해 파드와 통신
3. 파드 생성
- app-nginx.yml로 파드 생성
kubectl apply -f app-nginx.yaml
deployment.apps/nginx-for-svc created
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-for-svc-7487c987cf-j6kwm 1/1 Running 0 22s 10.233.117.20 instance-2 <none> <none>
nginx-for-svc-7487c987cf-x5srj 1/1 Running 0 22s 10.233.66.17 instance-3 <none> <none>
4. 서비스 생성
- 템플릿에 작성한 내용으로 서비스 생성
kubectl apply -f clusterip.yaml
service/clusterip-service created
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
clusterip-service ClusterIP 10.233.59.116 <none> 80/TCP 5s
4. 정보 확인
- 서비스에 대한 자세한 정보 확인
kubectl describe service clusterip-service
- 현재 실행 중인 파드들의 IP 확인
kubectl get pods -o wide
5. 접근 테스트
- 서비스에 접근할 파드 생성
kubectl run -it --image nicolaka/netshoot testnet bash
- 생성된 파드 내부에서 curl 명령어로 서비스 접속
bash# curl http://10.233.59.116
- 실습 후 exit 명령어로 컨테이너에서 나옴
6. 전체 프로세스
7. 이슈사항
- testnet pod에서 clusterIP 타입의 서비스 통신 테스트 결과 Instance-2에 생성된 pod와 통신이 가능하지만 Instance-3에 생성된 pod로 통신이 안 됨
- 해결책은 오버레이 네트워크 방식을 활용해야 하고 해당 내용은 나중에 다룰 예정
댓글남기기