파드에 접근하도록 정책을 정의
- ClusterIP
- 쿠버네티스가 지원하는 기본적인 형태의 서비스
- POD 들이 클러스터 내부의 다른 리소스들과 통신할 수 있도록 해주는 가상의 클러스터 전용 IP다.
- <ClusterIP>로 들어온 클러스터 내부 트래픽을 해당 파드의 <파드IP>:<targetPort>로 넘겨주도록 동작하므로,
오직 클러스터 내부에서만 접근 가능하게 된다.
형식
root@k8s-master-00:~# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d4h
--service 생성 후 접근 테스트
--서비스 실행후 cluster 에서만 접근하도록 구성
root@k8s-master-00:~# vim nodejs-app.yml
apiVersion: v1
kind: Pod
metadata:
name: nodejs-app
labels:
app: nodejs-app
spec:
containers:
- name: nodejs-app
image: yakir32/nodejs-hello-world
ports:
- containerPort: 3000
imagePullSecrets:
- name: jarrod-secret-test
--실행
root@k8s-master-00:~# kubectl apply -f nodejs-app.yml
pod/nodejs-app created
root@k8s-master-00:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nodejs-app 1/1 Running 0 47s 192.168.118.106 k8s-worker-02 <none> <none>
web-7j4zq 1/1 Running 0 17m 192.168.36.209 k8s-worker-01 <none> <none>
web-8njhp 1/1 Running 0 17m 192.168.118.105 k8s-worker-02 <none> <none>
web-lb5s8 1/1 Running 0 17m 192.168.118.104 k8s-worker-02 <none> <none>
--만들어지긴했는데 비어있음
root@k8s-master-00:~# curl -s 192.168.118.106
root@k8s-master-00:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nodejs-app 1/1 Running 0 15m 192.168.118.106 k8s-worker-02 <none> <none>
root@k8s-master-00:~# kubectl expose pod nodejs-app
service/nodejs-app exposed
root@k8s-master-00:~# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d5h
nodejs-app ClusterIP 10.108.107.255 <none> 3000/TCP 19s
--192.168.118.106:3000과 ClusterIP인 10.108.107.255:3000으로 접근
--pod 삭제
root@k8s-master-00:~# kubectl delete pod nodejs-app
pod "nodejs-app" deleted
root@k8s-master-00:~# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d5h
nodejs-app ClusterIP 10.108.107.255 <none> 3000/TCP 8m6s
root@k8s-master-00:~# kubectl get pod -o wide
No resources found in default namespace.
root@k8s-master-00:~# kubectl apply -f nodejs-app.yml
pod/nodejs-app created
root@k8s-master-00:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nodejs-app 1/1 Running 0 10s 192.168.118.107 k8s-worker-02 <none> <none>
--clusterip로 접근하면 해당 웹페이지가 나온다
--pod주소가 일정하지 않기때문에 service로 웹페이지를 찾는다
--service만 지우기
root@k8s-master-00:~# kubectl delete svc nodejs-app
service "nodejs-app" deleted
root@k8s-master-00:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nodejs-app 1/1 Running 0 3m42s 192.168.118.107 k8s-worker-02 <none> <none>
--노드포트
root@k8s-master-00:~# kubectl expose pod nodejs-app --type=NodePort
service/nodejs-app exposed
root@k8s-master-00:~# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d5h
nodejs-app NodePort 10.103.143.89 <none> 3000:31391/TCP 6s
--선언형으로 해보기
root@k8s-master-00:~# vi nodejs-service.yml
apiVersion: v1
kind: Service
metadata:
name: nodejs-app
spec:
selector:
app: nodejs-app
ports:
- protocol: TCP
port: 30000
targetPort: 3000
nodePort: 55555
type: NodePort
--오류발생
root@k8s-master-00:~# kubectl apply -f nodejs-service.yml
The Service "nodejs-app" is invalid: spec.ports[0].nodePort: Invalid value: 55555: provided port is not in the valid range. The range of valid ports is 30000-32767
--매니페스트 nodePort 부분 수정
apiVersion: v1
kind: Service
metadata:
name: nodejs-app
spec:
selector:
app: nodejs-app
ports:
- protocol: TCP
port: 30000
targetPort: 3000
nodePort: 32222
type: NodePort
--재실행
root@k8s-master-00:~# kubectl apply -f nodejs-service.yml
service/nodejs-app created
--확인
root@k8s-master-00:~# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3d5h
nodejs-app NodePort 10.96.112.55 <none> 30000:32222/TCP 21s
--pod 실행
root@k8s-master-00:~# kubectl apply -f nodejs-app.yml
pod/nodejs-app created
root@k8s-master-00:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nodejs-app 1/1 Running 0 23s 192.168.118.108 k8s-worker-02 <none> <none>
기본 포트번호는 2의 16승개로 65536번까지 사용이 가능 하나 노드포트는 30000~32767로 제한되어있다
두개의 포트를 잘 구분하자