Service란, Pod의 논리적 집합이며 어떻게 접근할지에 대한 정책은 정의해놓은 것을 말한다.
이 Service는 Label Selector 통해 어떤 Pod를 포함할지 정의가 가능하다.
각 Pod의 IP로는 외부에서 직접적인 접근이 불가능하지만, 서비스는 이를 가능하게 허용해 준다.
외부의 아이피가 192.168.1.1이면 31000번 Port를 통해 Node에 접근할 수 있다. (NodePort 서비스)
Node의 어느 Service를..? 어느 Pod로..?라는 의문이 생기는데, 이걸 yaml 파일에 미리 정의해두어 특정 Pod의 Application을 접근할 수 있게 되는 것이다.
즉 NodePort 서비스를 만든다는 것은 Service를 하나 만들어 외부의 어떤 Port 번호를 지정하여 붙게끔 하고, 내부의 어떤 Pod를 서비스할지를 Label Selector로 지정해주어 Target Port 번호를 정의하는 것이다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
다음과 같이 작성한 yml파일을
kubectl apply -f {yml파일}
명령어를 이용하여 deployment를 생성해줍니다.
deployment로 생성되었던 pod로 터널링하여 접속합니다.
curl을 설치한 뒤 curl 명령어를 이용하여 eginx에서 정상적으로 응답이 오는지 확인해줍니다.
kubectl expose deployment {deployment 이름} --port={pod에 해당하는 port} --type=NodePort
명령어로 service의 NodePort를 생성할 수 있습니다.
NodePort의 포트를 이용하면 정상적으로 nginx와 통신을 할 수 있는것을 확인할 수 있습니다.
kubectl apply -f {yml 파일}
reference : Jenkins를 이용한 CI/CD Pipeline 구축 - 이도원